增强聊天机器人记忆功能的实用方法

114 阅读2分钟

引言

在构建聊天机器人时,让机器人记住对话历史并使用它们来提供上下文响应极为重要。本文将探讨几种实现聊天机器人记忆功能的技术,包括简单的信息存储到复杂的对话总结。

主要内容

简单消息传递

最简单的记忆方法是将对话历史串联到模型的提示中。尽管简单,但这种方法需要手动管理对话的存储。

聊天记录管理

通过LangChain库,我们可以使用内置的消息历史类来存储和管理对话。它可以与多种提供商集成,支持持久存储和加载。

from langchain_community.chat_message_histories import ChatMessageHistory

chat_history = ChatMessageHistory()
chat_history.add_user_message("Translate this sentence from English to French: I love programming.")
chat_history.add_ai_message("J'adore la programmation.")

print(chat_history.messages)
# 输出 [HumanMessage(...), AIMessage(...)]

自动化历史管理

为了减少手动管理,可以使用RunnableWithMessageHistory类来自动处理消息的追加和管理。

from langchain_core.runnables.history import RunnableWithMessageHistory

chain_with_message_history = RunnableWithMessageHistory(
    chain,
    lambda session_id: chat_history,
    input_messages_key="input",
    history_messages_key="chat_history"
)

修剪和总结历史

修剪消息

通过修剪历史记录中的旧消息,可以保持上下文窗口的合理大小。

from operator import itemgetter
from langchain_core.messages import trim_messages
from langchain_core.runnables import RunnablePassthrough

trimmer = trim_messages(strategy="last", max_tokens=2, token_counter=len)

chain_with_trimming = (
    RunnablePassthrough.assign(chat_history=itemgetter("chat_history") | trimmer)
    | prompt
    | chat
)

总结历史

使用LLM生成对话的总结是一种有效的减少信息量的方法。

def summarize_messages(chain_input):
    stored_messages = chat_history.messages
    if not stored_messages:
        return False
    summarization_prompt = ChatPromptTemplate.from_messages([
        ("placeholder", "{chat_history}"),
        ("user", "Distill the above chat messages into a single summary message.")
    ])
    summarization_chain = summarization_prompt | chat
    summary_message = summarization_chain.invoke({"chat_history": stored_messages})
    chat_history.clear()
    chat_history.add_message(summary_message)
    return True

常见问题和解决方案

  1. 消息丢失:可通过设置较长的历史或改用总结功能来保持关键信息。
  2. 上下文窗口限制:修剪旧消息或利用摘要功能来减少信息量。

总结和进一步学习资源

通过本文的技术,开发者可以提高聊天机器人的记忆功能,从而改善用户体验。要进一步深入了解,可以参考以下资源:

参考资料

  • LangChain 官方文档
  • OpenAI 官方文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---