ConversationalRetrievalChain.from_llm中chat_history上下文问题

ConversationalRetrievalChain.from_llm中针对本地知识库的问答中,如果在后面的提问中问“我的第一个问题是什么”,就会回答不知道。如果想实现回答出来我提问的第一个问题,是否能做到,能做到的话该怎么做呢?
代码如下:

QA_PROMP_ALL_KNOWLEDGE = """使用以下上下文来回答最后的问题。如果你不知道答案,就回复[抱歉,我不知道这个问题的答案],不要试图编造答案

{context}

问题: {question}
有用的回答:"""



qa = ConversationalRetrievalChain.from_llm(llm, rds.as_retriever(),
                                           return_source_documents=True, verbose=True,
                                           combine_docs_chain_kwargs = {"prompt": PromptTemplate(input_variables=["context", "question"], template=QA_PROMP_ALL_KNOWLEDGE)})



chat_history = []
query = "出师表的作者是谁?"
result = qa({"question": query, "chat_history": chat_history})
chat_history.append((query, result["answer"]))
print('答案:', result["answer"])
print('视频:', row_map[result["source_documents"][0].metadata["row"]])

query = "什么是导数?"
result = qa({"question": query, "chat_history": chat_history})
chat_history.append((query, result["answer"]))
print('答案:', result["answer"])
print('视频:', row_map[result["source_documents"][0].metadata["row"]])

query = "今天是几号?"
result = qa({"question": query, "chat_history": chat_history})
chat_history.append((query, result["answer"]))
print('答案:', result["answer"])
print('视频:', row_map[result["source_documents"][0].metadata["row"]])

query = "张杰是谁?"
result = qa({"question": query, "chat_history": chat_history})
chat_history.append((query, result["answer"]))
print('答案:', result["answer"])
print('视频:', row_map[result["source_documents"][0].metadata["row"]])

query = "我的第二个问题是什么?"
result = qa({"question": query, "chat_history": chat_history})
chat_history.append((query, result["answer"]))
print('答案:', result["answer"])
print('视频:', row_map[result["source_documents"][0].metadata["row"]])

print(chat_history)

chat_history如下:

[('出师表的作者是谁?', '出师表的作者是诸葛亮。'), ('什么是导数?', '导数是函数在某一点处的瞬时变化率,表示函数在这一点处的变化趋势。它可以帮助我们研究函数的各种性质。'), ('今天是几号?', '抱歉,我不知道这个问题的答案。'), ('张杰是谁?', '抱歉,我不知道这个问题的答案。'), ('我的第二个问题是什么?', '抱歉,我不知道这个问题的答案。')]

ConversationalRetrievalChain.from_llm函数中,chat_history参数用于传递聊天历史。聊天历史是一个列表,其中包含用户查询和LLM(语言模型)生成的回答。通过传递聊天历史,您可以在后续的问题中保持对话的连续性和上下文感知。在使用from_llm方法创建ConversationalRetrievalChain时,您可以通过将chat_history参数设置为一个聊天历史列表来传递聊天历史。这样,您就可以在后续的查询中使用上一个回答来提供上下文感知的答案。