赞
踩
参考官网
参考资料
【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中文网
先用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博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。