低调学安全

CyberStrikeAI 已支持多 Agent:说明与实现概要(后附群二维码)

1. 背景

CyberStrikeAI 之前以 单 Agent(ReAct)+ MCP 工具 为主。复杂任务里,一个 Agent 要同时承担理解需求、选工具、看结果、再规划下一步,上下文容易被工具输出占满,职责也容易混在一起。

现在增加 多 Agent 模式(可选):由 主代理 拆分任务,通过调度把子任务交给 子代理 执行。单 Agent 路径保留,可按配置和前端开关切换。

Image

2. 当前能力(用户侧)

  • 开关:config.yaml 里 multi_agent.enabled;可配默认模式、机器人/批量任务是否单独用多 Agent 等(详见仓库 docs/MULTI_AGENT_EINO.md)。
  • 定义子代理:在 agents/ 下放 *.md(front matter + 正文);主协调者用 orchestrator.md 或 kind: orchestrator 的 md。可与配置里的 sub_agents 合并,同名时 Markdown 可覆盖。
  • 接口:多 Agent 对话走 POST /api/multi-agent/stream(SSE);另有非流式 POST /api/multi-agent。流式事件尽量与原有主聊天流式一致(工具调用、增量回复、思考流等),方便现有前端复用。
  • 使用范围:主聊天、WebShell AI、钉钉/飞书机器人、批量任务队列均可按配置接入多 Agent(具体开关见文档)。

3. 实现概要(技术侧)

  • 编排:使用 CloudWeGo Eino 的 DeepAgent(adk/prebuilt/deep):主代理用 task 调子代理;adk.NewRunner 执行,开启流式。核心组装在 internal/multiagent/runner.go。
  • 工具:internal/einomcp 把现有 MCP 工具定义转成 Eino 可调用的 Tool,执行仍走 Agent.ExecuteMCPToolForConversation,并用会话 ID 关联,与单 Agent 同一套工具执行链。
  • 会话与工具白名单:internal/handler/multi_agent_prepare.go 里准备会话(含 WebShell),工具策略与单 Agent 对齐。
  • 长上下文:Eino Summarization 中间件挂在主/子代理上,触发阈值与 openai.max_total_tokens 等相关逻辑在 internal/multiagent/eino_summarize.go 一带,细节见 docs/EINO_INTEGRATION_DEEP_ANALYSIS.md。

4. 后续计划:

  1. 继续扩展多 Agent 形态:在统一 MCP 与审计前提下,尝试其他编排方式(不同协作结构、不同阶段拆分等),而不是绑死在一种拓扑上。
  2. 把现有实现做扎实:按文档优先级逐步修历史语义、工具链消息保真、观测与测试、配置与契约文档等,让行为可预期、可排障。

5. 小结

  • 多 Agent 已可用:配置 + Markdown 子代理 + Eino DeepAgent 编排 + MCP 复用 + 主聊天/WebShell/机器人/批量的可选接入。
  • 单 Agent 不删:适合简单对话与原有习惯。
  • 文档:docs/MULTI_AGENT_EINO.md(功能与文件索引)、docs/EINO_INTEGRATION_DEEP_ANALYSIS.md(问题与改进方向)。

项目地址:https://github.com/Ed1s0nZ/CyberStrikeAI

为方便 问题反馈 和 使用交流,故开通微信群,请小伙伴按需加入:

Image