langchain的提示词工程以及使用提示词进行问答QA

参考官网

与聊天相关的提示模板 – LangChain中文网

检索问答# – LangChain中文网

参考资料

【LangChain】对话式问答(Conversational Retrieval QA)_conversationalretrievalchain-CSDN博客

第四天!玩转langchain!零基础做提示词模板+选择器!呆呆老板都学会了!4/10 - 知乎 (zhihu.com)

首先是提示词,第一种是提示词模板,固定不变的。(我用这种)

    '''
    根据检索出的结果,
    
    构建llm-prompt提示词模板
    '''
    template = """
    你是一个{job},我将给你一个知识文本context,以及一个与你的工作有关的问题question.
    如果你在context中无法搜寻到问题的答案,即使你本身知道答案但我也请你不要回答,只需要告诉我你不知道答案就行.
    知识文本为:{context},
    问题为:{question}.
    """
    prompt = PromptTemplate.from_template(template)
    prompt.format(job="美妆达人", context=doc,question=query)

我想让模型只在我从知识库检索出来的知识文本中进行回答, 如果不在文本中就回答不知道,这是我对模型的提示模板template。其中一些变量用{}表示,在prompt.format赋值变量。

其他模板想了解的可以看langchain中文网提示工程模块入门指南# – LangChain中文网

其次是有了提示词模板,进行问答QA

先用langchain自带的问答函数。具体看问答 – LangChain中文网

'''
        第一种代码:
        '''
        prompt_template = """你是一个{job},我将给你一个知识文本context,以及一个与你的工作有关的问题question.
        如果你在context中无法搜寻到问题的答案,即使你本身知道答案但我也请你不要回答,只需要告诉我你不知道答案就行.
        知识文本为:{context},
        问题为:{question}
        """
        PROMPT = PromptTemplate(
            template=prompt_template, input_variables=["context", "question"]
        )
        # 自定义 chain prompt
        chain_type_kwargs = {"prompt": PROMPT}
        qa = RetrievalQA.from_chain_type(llm=self.llm, chain_type="stuff", retriever=self.vectordb.as_retriever(),
                                         chain_type_kwargs=chain_type_kwargs)
        print(qa.run(query))

用vectordb.as_retriever()函数根据内容检索知识库,然后自动填充到context中。vectordb是向量知识库。

 第二种,用自己检索出的文档

'''
        第二种代码,传上了input_documents为检索知识库出的内容
        '''
        self.retrievers()
        chain = load_qa_chain(self.llm, chain_type="stuff", prompt=PROMPT)
        answer = chain({"input_documents": self.doc, "question": query}, return_only_outputs=True)
        print(answer)

retrievers()是自定义检索函数,检索出的内容是doc

 

第三种,能返回来源

        '''
        第三种代码,如果文档中有source元数据key,我们就能返回检索内容的来源source
        '''
        chain2 = RetrievalQAWithSourcesChain.from_chain_type(self.llm, chain_type="stuff",
                                                            retriever=self.vectordb.as_retriever())
        print(chain2({"question": "What did the president say about Justice Breyer"}, return_only_outputs=True))

 

最后是对话式问答 

        '''
        无提示词对话式问答QA,基于问答QA,有提示词的后面再写,
        第一种有自带的memory。
        '''
        memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
        qa = ConversationalRetrievalChain.from_llm(self.llm, self.vectordb.as_retriever(), memory=memory)
        result = qa({"question": self.query})
        print(result)
        print(qa({"question": "我上一个问题是什么"}))

其他看他的文章【LangChain】对话式问答(Conversational Retrieval QA)_conversationalretrievalchain-CSDN博客

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值