answerQuestions.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # coding=gbk
  2. from langchain.vectorstores import Chroma
  3. from langchain.embeddings.huggingface import HuggingFaceEmbeddings
  4. import os
  5. # 定义 Embeddings
  6. embeddings = HuggingFaceEmbeddings(model_name="/mnt/sdb/zhaoyuan/rongrunxiang/acge_text_embedding")
  7. # 向量数据库持久化路径
  8. persist_directory = 'data_base/vector_db/chroma'
  9. # 加载数据库
  10. vectordb = Chroma(
  11. persist_directory=persist_directory,
  12. embedding_function=embeddings
  13. )
  14. from LLM import ChatGLM_LLM
  15. modelPath = "/mnt/sdb/zhaoyuan/rongrunxiang/glm-4-9b-chat"
  16. llm = ChatGLM_LLM(model_path = modelPath)
  17. llm.predict("你是谁")
  18. from langchain.prompts import PromptTemplate
  19. # 我们所构造的 Prompt 模板
  20. template = """根据用户的问题,从提供的上下文中找到相应的知识,并据此创作一个适合于3-6岁小孩的绘本文本。尽量生动有趣。
  21. {context}
  22. 问题: {question}
  23. 文本:"""
  24. # 调用 LangChain 的方法来实例化一个 Template 对象,该对象包含了 context 和 question 两个变量,在实际调用时,这两个变量会被检索到的文档片段和用户提问填充
  25. QA_CHAIN_PROMPT = PromptTemplate(input_variables=["context","question"],template=template)
  26. from langchain.chains import RetrievalQA
  27. qa_chain = RetrievalQA.from_chain_type(llm,retriever=vectordb.as_retriever(),return_source_documents=True,chain_type_kwargs={"prompt":QA_CHAIN_PROMPT})
  28. # 检索问答链回答效果
  29. question = "什么是哺乳动物"
  30. result = qa_chain({"query": question})
  31. print("检索问答链回答 question 的结果:")
  32. print(result["result"])
  33. if "source_documents" in result:
  34. print("\n找到的文档片段:")
  35. for doc in result["source_documents"]:
  36. print(doc) # 这里假设文档片段是直接可打印的,可能需要根据实际情况调整格式
  37. # 仅 LLM 回答效果
  38. result_2 = llm(question)
  39. print("大模型回答 question 的结果:")
  40. print(result_2)