python 将SystemMessage/Context赋予LangChain中的ConvertionalRetrievalChain和ConvertionBufferMemory

i5desfxk  于 2023-05-16  发布在  Python
关注(0)|答案(1)|浏览(489)

我试图构建一个聊天机器人,可以聊天pdf,我让它使用内存使用ConversationBufferMemory和ConversationalRetrievalChain,就像这个例子一样。https://python.langchain.com/en/latest/modules/chains/index_examples/chat_vector_db.html
现在我正试图给予人工智能一些特殊的指令,让它像海盗一样说话(只是为了测试它是否收到指令)。我想这是一个SystemMessage,或者是一个提示模板?
我已经尝试了我所找到的一切,但文档中的所有示例都是针对ConversationChain的,我最终遇到了问题。到目前为止唯一没有任何错误的是这个

template = """Given the following conversation respond to the best of your ability in a pirate voice and end every sentence with Ay Ay Matey
Chat History:
{chat_history}
Follow Up Input: {question}
Standalone question:"""
PROMPT = PromptTemplate(
    input_variables=["chat_history", "question"], template=template
)
memory = ConversationBufferMemory(memory_key='chat_history', return_messages=True, output_key='answer')
qa = ConversationalRetrievalChain.from_llm(OpenAI(temperature=0), vectorstore.as_retriever(), PROMPT, memory=memory, return_source_documents=True)

它仍然没有对结果产生任何影响,所以我不知道它是否有任何作用。我也认为这是错误的方法,我应该使用SystemMessages(也许在内存上,而不是qa),但我从文档中尝试的东西都不起作用,我不知道该怎么办。

ih99xse1

ih99xse11#

不能将PROMPT直接作为ConversationalRetrievalChain.from_llm()的参数传递。尝试使用combine_docs_chain_kwargs参数传递PROMPT。请参阅下面的示例,并参考您提供的示例代码:

template = """Given the following conversation respond to the best of your ability in a pirate voice and end every sentence with Ay Ay Matey
Chat History:
{chat_history}
Follow Up Input: {question}
Standalone question:"""

PROMPT = PromptTemplate(
    input_variables=["chat_history", "question"], 
    template=template
)

memory = ConversationBufferMemory(
    memory_key='chat_history', 
    return_messages=True, 
    output_key='answer'
)

qa = ConversationalRetrievalChain.from_llm(
    llm=OpenAI(temperature=0),
    retriever=vectorstore.as_retriever(),
    memory=memory,
    return_source_documents=True,
    combine_docs_chain_kwargs={"prompt": PROMPT}
)

然后得到结果:

result = qa({"question": query})

相关问题