前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于GPT搭建私有知识库聊天机器人(四)问答实现

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

作者头像
夕阳也是醉了
发布2023-10-16 09:25:27
7280
发布2023-10-16 09:25:27
举报
文章被收录于专栏:夕阳醉了

前文链接:

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

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

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


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

1、使用langchain框架

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

代码语言:javascript
复制
from langchain import PromptTemplate
from langchain.chains import RetrievalQA
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Milvus

2、向量处理和检索

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

代码语言:javascript
复制
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模板,用于生成回答。这个模板包含了已知的信息和用户的问题:

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

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

4、调用OpenAI接口进行问答

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

代码语言:javascript
复制
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、全部代码

代码语言:javascript
复制
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接口进行拟人化回答,我们可以构建一个具备垂直领域知识的问答系统。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、使用langchain框架
  • 2、向量处理和检索
  • 3、定义prompt模板
  • 4、调用OpenAI接口进行问答
  • 5、全部代码
  • 6、总结
相关产品与服务
向量数据库
腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,单索引支持千亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。腾讯云向量数据库不仅能为大模型提供外部知识库,提高大模型回答的准确性,还可广泛应用于推荐系统、自然语言处理等 AI 领域。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档