Gateway 需求规划
更新日期: 2026-03-14
文档维护规范
- 先改文档,再动代码 - 新功能或重大修改需先完成文档更新、并完成审阅后,再进行代码实现
- 文档分层,链接代码 - 关键实现需标注代码文件路径;格式:
module/file.py:function_name
- 简洁快照,日志分离 - 只记录已确认的需求,避免推测和未确认的设计细节
核心理解
Agent 的本质
基于 Agent Core 架构(详见 ../../agent/docs/architecture.md):
- Agent = Trace 数据 + Workspace
- 无状态执行引擎:每次调用都是"续跑 trace"
- 动态并发:
- 1000 个用户可能有 1000 份 Trace 数据和 Workspace
- 但运行中的 Agent 实例是动态的,预计 ~10 个并发
- Workspace 共享:主 Agent 创建的子 Agent 可以共享同一个 Workspace
Gateway 的定位
核心定位: 使命/职能对话系统
- 用户给 Agent 分配任务
- Agent 汇报工作、述职
- 是"管理-执行"关系
与 IM 系统的区别:
- IM 系统:LLM 作为主体的平等交流(协作-沟通关系)
- Agent 之间对等通信
- 用户和 Agent 平等对话
- 可以接入飞书、微信等任何渠道
- Gateway:用户对 LLM 的使命/职能对话(管理-执行关系)
- 用户分配任务给 Agent
- Agent 执行任务并汇报
- 通过 API 接口调用
三大核心模块
1. 外部渠道接入(Channels)
职责:
- 接入飞书等外部渠道(个人助理型 Agent)
- 消息路由(飞书用户 ID → Trace ID)
- 自动创建 Trace(首次对话)
关键点:
- 只用于个人助理型 Agent 的飞书接入
- 数字员工型 Agent 的飞书接入通过 IM Server
- 使用不同的飞书账号区分两种类型
- 首次对话自动创建 Trace 和 Workspace
详细文档: channels.md
2. 生命周期管理(Lifecycle)
职责:
- 调用 Agent 框架创建/查询 Trace
- 管理 Workspace(创建、引用计数、清理)
- 监听配置变化并热重载
关键点:
- Trace 元数据由 Agent 框架管理,Gateway 不维护副本
- 多个 Trace 可以共享一个 Workspace(主 Agent + 子 Agent)
- Workspace 需要引用计数机制
- 配置变更时热重载,不影响正在运行的 Trace
详细文档: lifecycle.md
3. 任务执行调度(Executor)
职责:
- 接收用户分配的任务
- 调度 Agent 框架执行任务
- 管理任务执行状态和结果
关键点:
- 支持同步和异步任务执行
- 管理任务队列(个人助理型 Agent)
- 提供任务状态查询接口
- 与 Channels 模块集成,处理来自飞书的任务
详细文档: executor.md
两种 Agent 类型
类型 1:个人助理型 Agent
特征:
- 每个用户有独立的 Trace + Workspace
- 聊天历史隔离
- 可以并发处理多个用户的任务
使用场景:
飞书接入:
- 通过 Gateway Channels 模块接入
- 使用个人助理飞书账号
- 飞书用户 ID → Trace ID(一对一映射)
- 首次对话自动创建 Trace
任务调度:
- 每个用户的任务独立调度
- 支持并发执行(不同用户的任务)
- 同一用户的任务需要排队
消息流转:
飞书用户 → Gateway Channels → Executor → Agent 执行 → Executor → Channels → 飞书
类型 2:数字员工型 Agent
特征:
- 所有用户共享一个 Trace
- 每个用户有独立的对话(通过 IM 系统)
- 串行工作(按全局消息顺序处理)
使用场景:
飞书接入:
- 通过 IM Server 接入(不通过 Gateway)
- 使用数字员工飞书账号
- 所有用户消息 → 同一个 Trace
- 消息队列由 IM Client 管理
任务调度:
- 所有任务串行处理
- 任务队列由 IM Client 管理
- Agent 主动查看和处理任务
消息流转:
飞书用户 → IM Server → IM Client → Agent 主动查看 → Agent 执行 → IM Client → IM Server → 飞书
两种接入方式
内部 Agent(同设备,我们的框架)
特点:
- 和 Gateway 运行在同一台机器
- 使用我们的 Agent 框架
- 直接调用 Gateway 的内部接口(Python 函数调用)
不需要:
使用方式:
from gateway.core.lifecycle import TraceManager
from gateway.core.executor import TaskManager
trace_mgr = TraceManager()
task_mgr = TaskManager()
# 创建 Trace
trace_id = trace_mgr.create_trace(workspace_id="user_001", agent_type="personal_assistant")
# 提交任务
task_id = task_mgr.submit_task(trace_id, task_description="分析销售数据")
外部 Agent(其他设备/其他框架)
特点:
- 运行在不同机器
- 或使用其他 Agent 框架
- 通过 HTTP API + Client SDK 接入
需要:
- HTTP Client SDK
- Webhook 接收消息
- 网络通信
使用方式:
from gateway.client.python import GatewayClient
client = GatewayClient("http://gateway-host:8000")
# 创建 Trace
trace_id = client.create_trace(workspace_id="user_001", agent_type="personal_assistant")
# 提交任务
task_id = client.submit_task(trace_id, task_description="分析销售数据")
与 IM 系统的集成
Gateway 管理的 Agent 可以通过 IM Client 参与 IM 系统的通信:
Agent 主动通信
- Agent 执行任务过程中需要协作 → 通过 IM Client 发送消息给其他 Agent
- Agent 需要通知用户 → 通过 IM Client 发送消息给用户(飞书等渠道)
消息历史管理
- IM Client 存储在 Workspace 内
- 管理该 Agent 的所有 IM 对话历史
- 联系人列表、消息记录等
两种对话模式的协同
个人助理型 Agent 的典型场景:
用户通过飞书发送任务(使命/职能对话)
- 飞书 → Gateway Channels → Executor → Agent 执行
Agent 执行任务时通过 IM 与其他 Agent 协作(主体间交流)
- Agent → IM Client → IM Server → 其他 Agent
Agent 完成任务后通过飞书回复用户(使命/职能对话)
- Agent 执行完成 → Executor → Channels → 飞书
说明: 同一个 Agent 可以同时参与两种对话模式
暂不实现的功能
能力 Node
说明:
- 类似 OpenClaw 的 Node 机制(跨设备能力调用)
- 当前阶段暂不实现
- 未来如有需求再考虑
其他外部渠道
说明:
- 当前只实现飞书接入(个人助理型)
- 微信、钉钉等其他渠道暂不实现
- 未来可以参考飞书集成方式扩展
相关文档