首页 > 其他分享 >基于GPT搭建私有知识库聊天机器人(四)问答实现

基于GPT搭建私有知识库聊天机器人(四)问答实现

时间:2023-08-03 19:37:38浏览次数:47  
标签:chain 私有 知识库 question langchain GPT import type retriever


前文链接:

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

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

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


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

1、使用langchain框架

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

from langchain import PromptTemplate
from langchain.chains import RetrievalQA
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Milvus

2、向量处理和检索

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

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

3、定义prompt模板

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

prompt_template = """基于以下已知信息,简洁和专业的来回答用户的问题。
        如果无法从中得到答案,请说 "根据已知信息无法回答该问题",不允许在答案中添加编造成分,答案请使用中文。
        已知内容:
        {context}
        问题:
        {question}"""

promptA = PromptTemplate(template=prompt_template, input_variables=["context", "question"])

4、调用OpenAI接口进行问答

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

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

5、全部代码

from langchain import PromptTemplate
from langchain.chains import RetrievalQA
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Milvus

@llm_blue.route("/ans/<question>")
def ans(question: str) -> str:
    embeddings = OpenAIEmbeddings()
    vector_store = Milvus(
        embedding_function=embeddings,
        connection_args={"host": MILVUS_HOST, "port": MILVUS_PORT}
    )
    retriever = vector_store.as_retriever(search_kwargs={"k": target_source_chunks})

    prompt_template = """基于以下已知信息,简洁和专业的来回答用户的问题。
        如果无法从中得到答案,请说 "根据已知信息无法回答该问题",不允许在答案中添加编造成分,答案请使用中文。
        已知内容:
        {context}
        问题:
        {question}"""

    promptA = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
    chain_type_kwargs = {"prompt": promptA}
    qa = RetrievalQA.from_chain_type(llm=openaiLlm, retriever=retriever, chain_type="stuff",
                                     chain_type_kwargs=chain_type_kwargs, return_source_documents=True)

    res = qa(question)
    answer, docs = res['result'], res['source_documents']
    print("question:[%s], answer:[%s]" % (question, answer))
    return answer

6、总结

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


标签:chain,私有,知识库,question,langchain,GPT,import,type,retriever
From: https://blog.51cto.com/u_13693015/6952277

相关文章

  • 基于GPT搭建私有知识库聊天机器人(五)函数调用
    文章链接:基于GPT搭建私有知识库聊天机器人(一)实现原理基于GPT搭建私有知识库聊天机器人(二)环境安装基于GPT搭建私有知识库聊天机器人(三)向量数据训练基于GPT搭建私有知识库聊天机器人(四)问答实现OpenAI在6月13日发布了几个重磅更新,其中包括:开放了16k上下文的GPT-3.5-Turbo模型gpt-3.5-t......
  • 基于GPT搭建私有知识库聊天机器人(六)仿chatGPT打字机效果
    文章链接:基于GPT搭建私有知识库聊天机器人(一)实现原理基于GPT搭建私有知识库聊天机器人(二)环境安装基于GPT搭建私有知识库聊天机器人(三)向量数据训练基于GPT搭建私有知识库聊天机器人(四)问答实现基于GPT搭建私有知识库聊天机器人(五)函数调用在前几篇文章中,我们已经了解了如何使用GPT模......
  • 基于GPT搭建私有知识库聊天机器人(三)向量数据训练
    前文链接:基于GPT搭建私有知识库聊天机器人(一)实现原理基于GPT搭建私有知识库聊天机器人(二)环境安装基于GPT搭建私有知识库聊天机器人(四)问答实现在前面的文章中,我们介绍了实现原理和基本环境安装。本文将重点介绍数据训练的流程,以及如何加载、切割、训练数据,并使用向量数据库Milvus进......
  • 基于GPT搭建私有知识库聊天机器人(二)环境安装
    文章链接:基于GPT搭建私有知识库聊天机器人(一)实现原理基于GPT搭建私有知识库聊天机器人(三)向量数据训练基于GPT搭建私有知识库聊天机器人(四)问答实现1、需要安装的包pip3installflask//python开发web框架pip3installlangchain//LLM开发框架pip3installopenai......
  • 基于GPT搭建私有知识库聊天机器人(一)实现原理
    文章链接:基于GPT搭建私有知识库聊天机器人(二)环境安装基于GPT搭建私有知识库聊天机器人(三)向量数据训练基于GPT搭建私有知识库聊天机器人(四)问答实现1、成品演示支持微信聊天支持网页聊天支持微信语音对话支持私有知识文件训练,并针对文件提问步骤1:准备本地文件a.txt,支持pdf、txt、mark......
  • Chat GPT是什么,初学者使用Chat GPT,需要注意些什么
    ChatGPT是什么ChatGPT是由OpenAI开发的一种大型语言模型,它基于GPT(GenerativePre-trainedTransformer)架构。GPT是一种基于深度学习的预训练模型,通过在大规模文本数据上进行训练,学习了语言的统计规律和语义信息。ChatGPT专注于对话式交互,它可以接收用户的输入,并生成相应的回复......
  • 文心一言 VS 讯飞星火 VS chatgpt (70)-- 算法导论6.5 9题
    九、请设计一个时间复杂度为(nlgk)的算法,它能够将k个有序链表合并为一个有序链表,这里n是所有输入链表包含的总的元素个数。(提示:使用最小堆来完成k路归并。文心一言:要设计一个时间复杂度为O(nlogk)的算法,将k个有序链表合并为一个有序链表,可以使用最小堆来实现k路......
  • 基于YonGPT 的智能招聘,全新的数智化招聘体验!
    7月27日,用友发布业界首个企业服务大模型YonGPT,它的发布标志着中国企业软件的创新迈入以人工智能为中心的新阶段。目前,YonGPT已经创新研发了包括企业经营洞察、智能订单生成、供应商风控、动态库存优化、智能人才发现、智能招聘、智能预算分析、智能商旅费控、代码生成等在内的数十......
  • 我用 GPT-4 生成了性能全网第一的 Golang Worker Pool,轻松打败 GitHub 万星项目
    目录1.我写了一个超牛的开源项目1.1你看看这性能1.2你看看这功能1.3你猜我这一百天都经历了啥2.你有多久没写并发程序了?3.问:一个WorkerPool程序需要包含哪些功能?4.让GPT-4写第一行代码!4.1我对GPT-4说4.2GPT-4回答4.3我又对GPT-4说4.4GPT-4......
  • 问chatgpt:java或者三方jar包,bean属性复制的,但是两个字段的名称不一致,有没有这样的方
    是的,Java中有一些库和框架可以实现对象属性的复制和映射,而无需手动编写getter和setter方法。其中比较常用的是ApacheCommonsBeanUtils和SpringFramework的BeanUtils。使用ApacheCommonsBeanUtils,你可以使用copyProperties方法来复制对象属性。示例代码如下:点击查......