[Question]: How to make multi_agents have separate Memoreis while share the same Context?

用户参考 LlamaIndex 官方文档 中 Pattern 1 – AgentWorkflow 实现多代理系统时,发现所有代理共享相同的 Memory 与 Context。用户期望每个代理能拥有独立的对话记忆,同时在同一个 Workflow 内共享全局上下文(例如任务状态、共享变量)。

[Question]: How to make multi_agents have separate Memoreis while share the same Context?

[Question]: How to make multi_agents have separate Memoreis while share the same Context?

快速结论: 在 LlamaIndex 的 AgentWorkflow 中,所有代理默认共享同一个 Memory 实例,无法直接实现“每个代理各自独立的 Memory + 共享全局 Context”。如果确实需要这一模式,推荐改用“代理作为工具(Agents as Tools)”或者自定义 Workflow。

问题场景

用户参考 LlamaIndex 官方文档Pattern 1 – AgentWorkflow 实现多代理系统时,发现所有代理共享相同的 Memory 与 Context。用户期望每个代理能拥有独立的对话记忆,同时在同一个 Workflow 内共享全局上下文(例如任务状态、共享变量)。

报错原文

在 AgentWorkflow 中这不是一个报错,而是设计限制。核心设计逻辑:
 — Memory 配置在 Workflow 层级,而非代理层级
 — 单个 ChatMemoryBuffer 存储在共享的 Context Store 中
 — FunctionAgent 通过 scratchpad_key 维护自己的中间状态
 — ReActAgent 通过 reasoning_key 维护自己的推理过程

原因分析

这是 AgentWorkflow 的现有设计,不是一个 Bug。在 llama-index-core/llama_index/core/agent/workflow/multi_agent_workflow.py 第 235–242 行可以看到,Memory (ChatMemoryBuffer) 在整个 Workflow 中是单例的,所有代理的上下文共享同一个缓冲区。每个 FunctionAgentReActAgent 虽然有自己的内部状态键(例如 scratchpad_key/reasoning_key),但它们仅用于存放该代理执行过程中的中间思考结果,而不实现隔离的对话历史。

环境排查

  • LlamaIndex 版本:确认是否使用了包含 AgentWorkflow 的版本(约 0.12+)。
  • Workflow 模式:确认当前使用的是 AgentWorkflow(Pattern 1),而非其他多代理模式(如 Agents as Tools)。
  • Memory 配置位置:检查代码中是否将 ChatMemoryBuffer 传递给了 Workflow 整体,而非每个 Agent 单独设置。

解决步骤

  1. 确认需求是否真的需要:如果只是想让每个代理拥有不同的 中间推理过程(例如各自的 scratchpad 或 reasoning),那么 AgentWorkflow 已经可以满足——每个代理的内部状态键是隔离的。
  2. 如果需要真正隔离的对话历史(例如 Agent A 的记忆不应被 Agent B 看到),官方推荐以下两种替代方案:
    a. Agents as Tools:将独立的 Agent 封装成一个工具,由另一个主 Agent 调用。这样每个子 Agent 可以有自己的 Memory 配置。
    b. 自定义 Workflow:继承或自定义一个 Workflow,在 Context Store 中为每个 Agent 创建独立的 ChatMemoryBuffer(例如 ctx.store.set("memory_agent_a", ChatMemoryBuffer())),然后在代理执行前手动切换当前使用的 Memory,同时保留共享状态键(如 ctx.store.set("state", ...))。
  3. 对于自定义 Workflow 的简易实现思路(可优先尝试):
    1. __init__ 中定义多个 ChatMemoryBuffer
    2. 在 Workflow 主循环中,根据当前执行的代理 key,从 Context Store 中取出对应的 Memory 并注入到该代理。
    3. 确保每个代理的步骤间可以读写同一份共享 Context(例如任务列表、全局变量)。

验证方法

执行一个简单的多轮对话测试:Agent A 说出一个秘密(例如“我的密码是 123”),Agent B 在后续对话中是否能看到该秘密。如果 Agent B 无法读取 Agent A 的历史消息,则说明 Memory 隔离生效。同时检查共享 Context 中的全局状态(如任务进度)是否在所有代理间保持一致。

参考来源

run-llama/llama_index #21888

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 7417

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注