当前位置:   article > 正文

langchain的提示词工程以及使用提示词进行问答QA_langchain chatchat知识库问答的提示词

langchain chatchat知识库问答的提示词

参考官网

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

检索问答# – LangChain中文网

参考资料

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

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

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

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

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

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

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

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

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

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

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

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

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

 

第三种,能返回来源

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

 

最后是对话式问答 

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/425221
推荐阅读
相关标签
  

闽ICP备14008679号