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


    前文链接:

    基于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/")
    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接口进行拟人化回答,我们可以构建一个具备垂直领域知识的问答系统。

  • 相关阅读:
    mysql操作 sql语句中的完整性约束有哪些,主键约束、外键约束、引用完整性约束,主键外键、唯一性
    FMC子卡设计方案:FMC177-基于AD9361的双收双发射频FMC子卡
    logback--基础--04--配置--appender
    Schillace 定律 背后的 Sam Schillace
    josef约瑟 时间继电器 ST3PA-A AC220V 带插座PF085A
    2022年12月编程语言排行榜公布!
    Vue中的插槽v-slot
    亚马逊加湿器UL998测试报告,测试项目
    python毕业设计作品基于django框架 电影院购票选座系统毕设成品(7)中期检查报告
    MySQL数据库技术
  • 原文地址:https://www.cnblogs.com/myshare/p/17549835.html