type
Post
status
Published
date
Nov 7, 2025
slug
summary
tags
人工智能
prompt
category
技术分享
icon
password

ConversationChain(已废弃)

ConversationChain 是 LangChain 早期用于简化对话管理的类,内部集成了内存(如 ConversationBufferMemory)和提示模板,适合快速构建简单对话应用。
然而,它存在以下问题:
  • 灵活性不足:提示模板和内存管理逻辑较为固定,难以支持复杂对话流程。
  • 与新 API 不兼容:未针对现代聊天模型(如支持工具调用的模型)优化。
  • 架构过时:LangChain 0.3.x 推崇基于 LangChain Expression Language(LCEL)和 Runnable 的模块化设计,ConversationChain 不符合这一理念。
RunnableWithMessageHistory 是 LangChain 推荐的替代方案,优势包括:
  • 模块化:允许自由组合提示模板、模型和内存管理逻辑。
  • 灵活性:支持自定义对话历史存储(如内存、数据库)和复杂对话流程。
  • 兼容性:与 LCEL 和现代聊天模型无缝集成。
  • 长期支持:在 LangChain 0.3.x 中稳定,且不会在 1.0 中移除。

RunnableWithMessageHistory:是 LangChain 推荐的conversationChain的替代方案

优势包括:
  • 模块化:允许自由组合提示模板、模型和内存管理逻辑。
  • 灵活性:支持自定义对话历史存储(如内存、数据库)和复杂对话流程。
  • 兼容性:与 LCEL 和现代聊天模型无缝集成。
  • 长期支持:在 LangChain 0.3.x 中稳定,且不会在 1.0 中移除。 举例RunnableWithMessageHistory:以promptTemplate为例
代码说明:
  • 提示模板:使用 ChatPromptTemplate 显式定义,包含系统消息、MessagesPlaceholder(对话历史)和用户输入。
  • Runnable:通过 LCEL(prompt | llm)创建核心对话逻辑。
  • ChatMessageHistory:替代 ConversationBufferMemory,存储对话历史。store 是一个简单的内存字典,key 为 session_id。
  • RunnableWithMessageHistory:包装 runnable,自动管理对话历史,input_messages_key 和 history_messages_key 对应提示模板中的变量名。
  • session_id:用于区分不同用户的会话,类似 LangGraph 的 thread_id。
报错:NotImplementedError: get_num_tokens_from_messages() is not presently implemented for model deepseek-chat. See https://platform.openai.com/docs/guides/text-generation/managing-tokens for information on how messages are converted to tokens.
 
原因:当 token_counter=llm 时,LangChain 会调用模型对象的 get_num_tokens_from_messages() 方法。由于你使用的是 ChatOpenAI 包装的 DeepSeek,LangChain 的底层代码会尝试用 OpenAI 的 tiktoken 库来计算 Token。但因为模型名称是 deepseek-chat 而不是 gpt-3.5-turbo 等标准名称,tiktoken 无法识别,从而抛出“未实现”的错误。
 
解决办法:使用tiktoken自定义token计算方法
langchain中调用deepseek模型使用trim_messages报错原因手动模拟实现记忆
Loading...