概述
本指南概述了自定义 Shannon 的可扩展模式,同时保持升级兼容性和关注点的清晰分离。模板
System 1 - 低开销的预构建工作流
工具
通过 MCP、OpenAPI 或 Python 添加功能
供应商适配器
特定领域集成,无需更改核心
综合模板
自定义研究输出格式
扩展方法比较
扩展分解(System 2)
用于自定义规划和推理逻辑 编排器调用 LLM 服务端点/agent/decompose 进行规划。
何时使用
- 自定义任务分解策略
- 特定领域的规划启发式
- LLM 请求的前/后处理
- 与外部规划系统集成
实现选项
- 轻量级 (Go)
- 完全自定义 (Python)
最适合:LLM 请求的前/后处理在
go/orchestrator/internal/activities/decompose.go 中添加启发式:添加/自定义模板(System 1)
用于低开销的可重复工作流何时使用
- 预定义工作流(数据分析、代码审查等)
- 无需 AI 规划即可快速执行任务
- 常用模式
- 性能关键路径
创建模板
1
创建模板文件
将模板放在自己的目录中:
2
注册模板
使用模板目录初始化注册表:
3
使用模板
通过 gRPC API:通过 HTTP 网关:
4
列出可用模板
模板最佳实践
使用 extends 获取通用默认值
使用 extends 获取通用默认值
使用 registry.Finalize() 验证
使用 registry.Finalize() 验证
保持工具白名单
保持工具白名单
安全添加工具
用于扩展 Shannon 的功能 Shannon 支持三种工具集成方法:MCP 工具
零代码更改的外部 HTTP API
OpenAPI 工具
从 OpenAPI 规范自动生成
内置工具
用于复杂逻辑的 Python 工具
安全考虑
好:在标志后保持实验性工具
完整工具指南
查看添加 MCP、OpenAPI 和内置 Python 工具的完整指南
供应商扩展
用于特定领域的代理和 API 集成 供应商适配器模式允许您集成专有 API 和专门的代理,而无需修改 Shannon 的核心代码。架构
何时使用供应商扩展
使用场景:- 特定领域的 API 集成(分析、CRM、电子商务)
- 自定义字段名称转换
- 具有领域知识的专门代理角色
- 会话上下文注入(账户 ID、租户 ID)
- 私有/专有工具配置
快速开始
1
创建供应商适配器
2
注册适配器
3
创建配置覆盖
4
(可选)创建专门的代理
5
通过环境使用
优势
- ✅ 零 Shannon 核心更改 - 所有供应商逻辑隔离
- ✅ 清晰分离 - 通用基础设施与供应商特定
- ✅ 条件加载 - 如果供应商模块不可用,优雅降级
- ✅ 易于维护 - 供应商代码在单独的目录中
- ✅ 可隔离测试 - 独立进行单元测试适配器
完整供应商适配器指南
包含示例、测试策略和最佳实践的综合指南
人工批准
用于控制敏感操作 通过 SubmitTask 请求传递require_approval 以实现人工参与控制。
配置
API 使用
批准流程
- 任务提交时设置
require_approval: true - 编排器在执行前暂停
- 通过 webhook/UI 发送批准请求
- 用户通过 API 批准/拒绝
- 工作流继续或终止
位于
http://localhost:8081/approvals/decision 的旧版管理端点已弃用。请改用网关端点。特性标志与配置
无需代码更改的运行时配置 许多行为通过config/features.yaml 和环境变量控制,通过 GetWorkflowConfig 加载。
常见特性标志
环境变量覆盖
动态配置加载
综合模板(输出自定义)
用于自定义 Shannon 格式化最终研究答案的方式 综合模板控制多智能体研究结果的格式化和呈现方式。它们对于深度研究工作流特别有用。何时使用
- 为特定领域自定义输出格式(市场研究、学术、执行摘要)
- 强制引用样式
- 控制答案结构和长度
- 注入特定领域的格式规则
模板方法
使用命名模板
在config/templates/synthesis/ 中创建模板:
逐字覆盖
用于无需创建模板文件的一次性自定义格式:最小长度控制
强制最小输出长度:模板选择逻辑
模板选择基于上下文和工作流信号:- 如果设置了
context.synthesis_template→ 使用对应命名模板。 - 否则,如果满足以下任一条件:
context.workflow_type == "research"context.force_research == truecontext.synthesis_style == "comprehensive"context.research_areas非空 → 使用research_comprehensive.tmpl。
- 否则,如果
context.synthesis_style == "concise"→ 使用research_concise.tmpl。 - 否则 → 使用
normal_default.tmpl。
可用模板
最佳实践
- 始终扩展
_base.tmpl- 确保引用约定得到维护 - 使用命名模板 用于重复格式
- 使用覆盖 用于一次性自定义
- 测试模板 在生产使用前使用示例查询
模板目录
模板位于
config/templates/synthesis/。请参阅该目录中的 README.md 了解模板编写指南。最佳实践总结
关注点分离
关注点分离
- 通用基础设施:提交到开源
- 供应商特定代码:在单独的目录中保持私有
- 配置覆盖:隔离特定领域的设置
- 条件导入:可选模块的优雅降级
升级兼容性
升级兼容性
- 使用稳定接口(ToolRegistry、TemplateRegistry 等)
- 避免派生核心子系统
- 将自定义保留在单独的目录中
- 对实验性更改使用特性标志
安全第一
安全第一
- 在模板中白名单工具
- 为危险操作启用批准
- 对外部 API 使用域白名单
- 将密钥保存在环境变量中
测试
测试
- 隔离单元测试供应商适配器
- 与 Shannon 服务进行集成测试
- 使用重放测试确保工作流确定性
- 使用
registry.Finalize()验证模板
扩展决策树
下一步
自定义工具
添加 MCP、OpenAPI 和内置工具
供应商适配器
构建特定领域的集成
配置
完整配置参考
架构
了解 Shannon 的架构