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

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

时间:2023-07-13 11:11:56浏览次数:44  
标签:chain 私有 知识库 question langchain GPT import 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,retriever
From: https://www.cnblogs.com/myshare/p/17549835.html

相关文章

  • Error response from daemon:connect: no route to host——客户端远程登录私有仓库报
    报错:[root@client~]#dockerlogin-uadmin-pHarbor12345http://192.168.11.131WARNING!Using--passwordviatheCLIisinsecure.Use--password-stdin.Errorresponsefromdaemon:Gethttps://192.168.11.131/v2/:dialtcp192.168.11.131:443:connect:norout......
  • 关于ChatGPT与机器伦理学
    关于ChatGPT与机器伦理学机器人这一概念,最初不是出自计算机科学家或工程师之手,而是来自于捷克的戏剧家卡雷尔·恰佩克(KarlCapek)在1920年编排的一出名为“罗森的全能机器人”的舞台剧中。直到了1960年,随着美国的约瑟夫·恩格伯格(JosephEngelberger)创办了人类历史上的第一......
  • GPT-4镜像来了,体验核心能力
    1月份开始,chatgpt开始火上天了。但其实很多人都不知道它真正的能力和魅力在哪里。甚至有人不停的问他是男的女的,多大岁数,叫啥名字,然后问了几个无聊的闲聊问题后,觉得这个AI好像也没什么厉害的。正所谓是,提问者有多厉害,这个模型就会有多厉害。我把ChatGPT的核心能力归结为三点:......
  • gpt4和chatGPT的区别
    ​ 一觉醒来,万众期待的GPT-4,它来了! OpenAI老板SamAltman直接开门见山地介绍说:这是我们迄今为止功能最强大的模型!​有多强?根据OpenAI官方的介绍,GPT-4是一个超大的多模态模型,也就是说,它的输入可以是文字(上限2.5万字),还可以是图像。(看图)手套掉下去会怎样?它会掉到木板......
  • IDAE 知识库
    DEA安装教程IDEA的简单介绍IDEA全称lntelliJIDEA,是java语言对的集成开发环境,IDEA在业界被认为是公认最好的Java开发工具IDEA的主要优势功能强大强大的整合能力,:比如:GitMavenSpring等开箱即用的体验(集成版本控制系统,多语言支持的框架随时可用,无需额外安装插件)*......
  • GPT优化后效果
    #......
  • 松鼠智能AI:为您量身定制的chatgpt智能聊天机器人
    在当今的智能化时代,人工智能技术在各个领域都有着广泛的应用,其中聊天机器人更是得到了大家的热烈欢迎。然而,许多人在与AI聊天时却经常出现一种状况:聊天机器人明明有着强大的智能,却不能真正理解用户的需求,无法解答专业问题,经常给人一种“对牛弹琴”的感觉。为了解决这一问题,你可以尝......
  • GPT生产前端代码
    我让GPT生成一段前端代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Document</title><linkhref="https://cdn.quilljs.com/1.3.6/quill.snow.css"rel="......
  • 报错知识库
    1.python项目部署报错pthread_createfailedforthread13of48:Resourcetemporarilyunavailable报错说明:线程数不够1)排错过程:ulimit-a查看docker基础镜像其中openfiles为一个任务打开的最大进程数maxuserprocesses为当前用户同时打开的最大进程数,(-u)unlimited为......
  • 跟着 GPT-4 从0到1学习 Golang 并发机制(二)
    btw:我的个人博客网站目录一、前言二、开聊2.1Golang中的sync包-Mutex,RWMutex和WaitGroup2.2条件变量sync.Cond2.3sync.Cond的Broadcast()方法2.4原子操作Atomic2.5context包三、总结一、前言话接上回《跟着GPT-4从0到1学习Golang并发机制(一)》,我想......