You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让LangChain代理同时支持系统消息与对话记忆?

解决LangChain里OpenAI Functions Agent同时用系统消息和对话记忆的问题

为啥会出现这个矛盾

AgentType.OPENAI_FUNCTIONS用的是OpenAI原生的函数调用prompt格式,你原来的ConversationBufferMemory配置没把对话历史正确塞进这个格式里;而ZERO_SHOT_REACT_DESCRIPTION的prompt模板压根不支持直接传系统消息,所以才会顾此失彼。

两种可行的解决办法

办法1:调整内存配置适配OpenAI Functions Agent

改一下内存的参数,让对话历史能被Agent正确识别:

# 调整内存配置,明确输出键,匹配Agent的格式要求
conversational_memory = ConversationBufferMemory(
    memory_key="chat_history",
    return_messages=True,
    output_key="output"
)

# 初始化Agent时,把对话历史加到prompt的额外消息里
executor = initialize_agent(
    agent=AgentType.OPENAI_FUNCTIONS,
    tools=tools,
    llm=llm,
    memory=conversational_memory,
    agent_kwargs={
        "system_message": system_message,
        "extra_prompt_messages": [conversational_memory.load_memory_variables({})["chat_history"]]
    },
    verbose=False,
    handle_parsing_errors=True
)

办法2:自定义Prompt模板(更灵活可控)

直接自己写兼容系统消息和对话历史的prompt,替换Agent默认的模板:

from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.agents import create_openai_functions_agent, AgentExecutor

# 构建自定义prompt,把系统消息、对话历史、用户输入、Agent草稿区按顺序排好
prompt = ChatPromptTemplate.from_messages([
    ("system", system_message),
    MessagesPlaceholder(variable_name="chat_history"),
    ("user", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad")
])

# 用自定义prompt创建OpenAI Functions Agent
agent = create_openai_functions_agent(llm, tools, prompt)

# 包装成执行器,加入内存
executor = AgentExecutor(
    agent=agent,
    tools=tools,
    memory=conversational_memory,
    verbose=False,
    handle_parsing_errors=True
)

注意点

  • 用OPENAI_FUNCTIONS Agent时,对话历史必须是消息列表格式,不能是纯文本,所以return_messages=True必须保留
  • create_openai_functions_agent比initialize_agent自由度更高,能完全掌控prompt结构,完美解决系统消息和记忆共存的问题
  • 调试时可以开verbose=True,看看最终的prompt内容,确认系统消息和之前的对话都被加进去了

内容的提问来源于stack exchange,提问作者Zaid Allawanseh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 20:35:27