经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
基于GPT搭建私有知识库聊天机器人(四)问答实现
来源:cnblogs  作者:伊力编程  时间:2023/7/14 10:22:52  对本文有异议

前文链接:

基于GPT搭建私有知识库聊天机器人(一)实现原理

基于GPT搭建私有知识库聊天机器人(二)环境安装

基于GPT搭建私有知识库聊天机器人(三)向量数据训练


在前面的文章中,我们介绍了如何使用GPT模型搭建私有知识库聊天机器人的基本原理、环境安装、数据向量化。本文将进一步介绍如何使用langchain框架实现问答功能。

1、使用langchain框架

langchain是一个强大的框架,可以帮助我们构建基于GPT的问答系统。首先,我们需要导入所需的库和模块:

  1. from langchain import PromptTemplate
  2. from langchain.chains import RetrievalQA
  3. from langchain.embeddings.openai import OpenAIEmbeddings
  4. from langchain.vectorstores import Milvus

2、向量处理和检索

在实现问答功能之前,我们需要将问题进行向量处理,并从向量数据库中检索最相似的数据。首先,我们与Milvus向量数据库建立连接,并设置检索前N条最相似数据:

  1. embeddings = OpenAIEmbeddings()
  2. vector_store = Milvus(
  3. embedding_function=embeddings,
  4. connection_args={"host": MILVUS_HOST, "port": MILVUS_PORT}
  5. )
  6. retriever = vector_store.as_retriever(search_kwargs={"k": target_source_chunks})

3、定义prompt模板

接下来,我们定义一个prompt模板,用于生成回答。这个模板包含了已知的信息和用户的问题:

  1. prompt_template = """基于以下已知信息,简洁和专业的来回答用户的问题。
  2. 如果无法从中得到答案,请说 "根据已知信息无法回答该问题",不允许在答案中添加编造成分,答案请使用中文。
  3. 已知内容:
  4. {context}
  5. 问题:
  6. {question}"""
  7. promptA = PromptTemplate(template=prompt_template, input_variables=["context", "question"])

4、调用OpenAI接口进行问答

现在,我们可以调用OpenAI接口进行问答了。我们使用RetrievalQA类,并将之前定义的retriever和promptA传入,获取答案:

  1. qa = RetrievalQA.from_chain_type(llm=openaiLlm, retriever=retriever, chain_type="stuff",
  2. chain_type_kwargs={"prompt": promptA}, return_source_documents=True)
  3. res = qa(question)
  4. answer, docs = res['result'], res['source_documents']
  5. print("question:[%s], answer:[%s]" % (question, answer))

5、全部代码

  1. from langchain import PromptTemplate
  2. from langchain.chains import RetrievalQA
  3. from langchain.embeddings.openai import OpenAIEmbeddings
  4. from langchain.vectorstores import Milvus
  5. @llm_blue.route("/ans/<question>")
  6. def ans(question: str) -> str:
  7. embeddings = OpenAIEmbeddings()
  8. vector_store = Milvus(
  9. embedding_function=embeddings,
  10. connection_args={"host": MILVUS_HOST, "port": MILVUS_PORT}
  11. )
  12. retriever = vector_store.as_retriever(search_kwargs={"k": target_source_chunks})
  13. prompt_template = """基于以下已知信息,简洁和专业的来回答用户的问题。
  14. 如果无法从中得到答案,请说 "根据已知信息无法回答该问题",不允许在答案中添加编造成分,答案请使用中文。
  15. 已知内容:
  16. {context}
  17. 问题:
  18. {question}"""
  19. promptA = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
  20. chain_type_kwargs = {"prompt": promptA}
  21. qa = RetrievalQA.from_chain_type(llm=openaiLlm, retriever=retriever, chain_type="stuff",
  22. chain_type_kwargs=chain_type_kwargs, return_source_documents=True)
  23. res = qa(question)
  24. answer, docs = res['result'], res['source_documents']
  25. print("question:[%s], answer:[%s]" % (question, answer))
  26. return answer

6、总结

本文介绍了如何使用langchain框架实现基于GPT的私有知识库聊天机器人的问答功能。通过将问题进行向量处理并从向量数据库中检索相似数据,再结合OpenAI接口进行拟人化回答,我们可以构建一个具备垂直领域知识的问答系统。

原文链接:https://www.cnblogs.com/myshare/p/17549835.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号