RetrievalQA ValueError:缺少一些输入键:{'query'}

问题描述 投票:0回答:2

我尝试使用 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 错误?还有其他人遇到这个问题吗?谢谢!

python prompt openai-api langchain
2个回答
0
投票

对我有用的解决方案是:

在模板中,将您的问题 (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,但上面的代码生成了正确的结果


-2
投票

尝试:

qa.run(query=query)

为我工作

© www.soinside.com 2019 - 2024. All rights reserved.