# Agent 与角色指南 CyberStrikeAI 的 Agent 行为由三类资源共同决定:角色、子代理和 Skills。角色决定当前任务身份和可用工具;子代理决定多代理分工;Skills 提供可按需加载的专题知识与流程。 ## 角色 角色文件位于 `roles/`,格式为 YAML。角色通常包含: - 名称。 - 描述。 - 系统提示词。 - 可用工具列表。 设计原则: - 专用角色只绑定必要工具。 - 提示词明确授权边界。 - 对高风险操作要求先说明影响并等待审批。 - 输出格式尽量稳定,便于报告和复盘。 示例方向: - 信息收集。 - Web 应用扫描。 - API 安全测试。 - 云安全审计。 - 数字取证。 - 二进制分析。 - CTF。 ## 单代理 单代理接口: - `POST /api/eino-agent` - `POST /api/eino-agent/stream` 适合: - 快速问答。 - 单目标测试。 - 工具链较短的任务。 - 需要稳定上下文的交互式分析。 ## 多代理模式 多代理接口: - `POST /api/multi-agent` - `POST /api/multi-agent/stream` 编排模式: - `deep`:主代理拆解任务,按需调用子代理。 - `plan_execute`:先规划,再执行,必要时重规划。 - `supervisor`:主管代理根据进展转交不同子代理。 适合: - 多阶段渗透测试。 - 大范围信息收集。 - 需要并行角色分工的分析。 - 长任务和批量任务。 ## 子代理 Markdown 子代理位于 `agents/*.md`。Front matter 示例: ```yaml --- name: Attack Surface Enumeration id: attack-surface-enumeration description: 枚举目标暴露面并整理可验证线索 tools: - subfinder - nmap - http-framework-test bind_role: 信息收集 max_iterations: 300 --- ``` 正文写系统提示词。建议包含: - 职责边界。 - 输入期望。 - 使用工具顺序。 - 输出格式。 - 禁止事项。 ## 主代理 主代理可用: - `agents/orchestrator.md` - `agents/orchestrator-plan-execute.md` - `agents/orchestrator-supervisor.md` 或在 front matter 中设置 `kind: orchestrator`。每种编排只应有一个主代理定义。 ## 工具选择 工具选择顺序建议: 1. 角色绑定最小工具集。 2. 子代理按任务补充专用工具。 3. `tool_search` 动态解锁大量工具。 4. 高风险工具由 HITL 审批。 不要给所有角色默认绑定全部工具,否则上下文成本和误调用风险都会上升。 ## 提示词建议 好的角色提示词应说明: - 只在授权范围内行动。 - 先确认目标和约束。 - 对写入、删除、爆破、持久化、C2、WebShell 等操作请求审批。 - 输出可复核证据。 - 不确定时标注假设,不编造结果。 ## 调试 如果 Agent 选错工具: - 缩小角色工具列表。 - 增强工具 `short_description`。 - 开启或调整 `tool_search_always_visible_tools`。 - 在角色提示词中明确工具使用顺序。 如果多代理跑偏: - 检查子代理描述是否过宽。 - 降低 `sub_agent_user_context_max_runes` 或明确任务输入。 - 优化 orchestrator 提示词。 - 查看过程详情和工具执行监控。 ## 角色、子代理、Skill 的职责边界 三者经常混用,建议这样分工: | 资源 | 解决的问题 | 不适合承载 | | --- | --- | --- | | Role | 当前对话的身份、语气、工具边界和授权规则 | 大量参考资料 | | Agent Markdown | 多代理中的专业分工、交接格式和局部策略 | 一次性任务事实 | | Skill | 可复用方法论、检查清单、模板和长参考资料 | 权限控制 | 如果把授权边界写进 Skill,而角色没有限制工具,Agent 仍可能在未加载 Skill 前选错工具。权限边界应优先放在 Role 和 HITL 中。 ## 编排模式选择 | 模式 | 适合 | 不适合 | | --- | --- | --- | | `eino_single` | 短任务、交互式分析、需要稳定上下文 | 多阶段大任务 | | `deep` | 主代理动态拆分任务,子代理按需深入 | 需要严格步骤顺序的流程 | | `plan_execute` | 有明确阶段、需要执行后复盘和重规划 | 用户频繁打断的即兴对话 | | `supervisor` | 专家分工明确,需要主管路由 | 子代理定义含糊或过多 | 经验上,普通安全测试先用 `eino_single`;复杂项目用 `plan_execute`;需要多个专业角色时用 `deep` 或 `supervisor`。 ## 工具可见性如何影响行为 多代理里 `tool_search` 会让模型一开始只看见部分常驻工具。结果是: - 工具页面显示可用,不代表模型当前上下文可见。 - `tool_search_always_visible_tools` 里的工具更容易被模型调用。 - 工具描述越清晰,越容易被搜索命中。 - 子代理自己的 `tools` 限制仍然很重要。 调试“Agent 为什么不用某工具”时,要同时检查角色工具、子代理工具、tool_search 配置和工具描述。 ## 好的子代理输出格式 子代理不要只返回“已完成”。建议固定格式: ```markdown ## 结论 ## 证据 - 命令/工具: - 关键输出: - 置信度: ## 风险 ## 建议下一步 ``` 这样主代理才能继续编排,也方便攻击链和项目事实沉淀。 ## 源码锚点 - Markdown Agent 解析:`internal/agents/markdown.go` - 多代理准备:`internal/handler/multi_agent_prepare.go` - 编排实现:`internal/multiagent/eino_orchestration.go` - 工具搜索中间件:`internal/multiagent/eino_middleware.go` - 子代理上下文:`internal/multiagent/sub_agent_context_test.go`