我尝试使用 RetrievalQA 链为求职者构建一个聊天机器人,并从 csv 文件中检索信息。首选项是字符串,简历,try语句下的文本都是字符串。我不知道为什么会出现错误
ValueError: Missing some input keys: {'query'}
。
system_template="""You are a job applying assistance, an automated service to help applicats to apply to listed jobs. \
You are given a resume and a job preference. \
{context}
Human: {resume}
Ai:"""
prompt = PromptTemplate(
input_variables = ['context', 'resume'],
template = system_template
)
llm = ChatOpenAI(model_name='gpt-3.5-turbo', openai_api_key=st.session_state.get("OPENAI_API_KEY"), temperature=0)
memory = ConversationBufferMemory(llm=llm, input_key='resume')
chain_type_kwargs = {"prompt": prompt, "memory": memory}
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", verbose=True, retriever=retriever, chain_type_kwargs=chain_type_kwargs)
try:
if resume:
query = "job_preference:" + preference + "\n The resume is as following:"+ resume
else:
query = "job_preference:" + preference + "\n The resume is as following:"+ text
llm_response = qa({"resume":query})
answer = llm_response["result"]
except OpenAIError as e:
st.error(e._message)
我还尝试使用
qa.run(query)
和 'qa({"resume":resume, "query":preference})' 运行链,并且错误 '缺少输入键' 错误不断出现。
我是否设置了 PromptTemplate/chain_type_kwargs 错误?还有其他人遇到这个问题吗?谢谢!
对我有用的解决方案是:
在模板中,将您的问题 (HumanPrompt) 包含为 {question}
例如:
template = """ you are an information extractor. Answer the question.
Context: {context}
Question: {question}
Answer:"""
然后在问答中,将您的问题作为键“query”的值 例如
result = qa({"query": "Tell me about water sector?"})
我相信这是因为变量名称是硬编码在 RetrievalQA 源代码中
class BaseRetrievalQA(Chain):
"""Base class for question-answering chains."""
combine_documents_chain: BaseCombineDocumentsChain
"""Chain to use to combine the documents."""
input_key: str = "query" #: :meta private:
output_key: str = "result" #: :meta private:
=> input_key = "query" 似乎是默认键。
我还没有找到代码似乎如何连接我的 {question} var 和 {query} var,但上面的代码生成了正确的结果
尝试:
qa.run(query=query)
为我工作