Skip to main content

概述

本指南概述了自定义 Shannon 的可扩展模式,同时保持升级兼容性和关注点的清晰分离。

模板

System 1 - 低开销的预构建工作流

工具

通过 MCP、OpenAPI 或 Python 添加功能

供应商适配器

特定领域集成,无需更改核心

综合模板

自定义研究输出格式

扩展方法比较

对于大多数用例,模板供应商适配器提供了功能和简单性的最佳平衡。

扩展分解(System 2)

用于自定义规划和推理逻辑 编排器调用 LLM 服务端点 /agent/decompose 进行规划。

何时使用

  • 自定义任务分解策略
  • 特定领域的规划启发式
  • LLM 请求的前/后处理
  • 与外部规划系统集成

实现选项

最适合:LLM 请求的前/后处理go/orchestrator/internal/activities/decompose.go 中添加启发式:
保持响应架构与 DecompositionResponse 兼容,以避免破坏编排器工作流。

添加/自定义模板(System 1)

用于低开销的可重复工作流

何时使用

  • 预定义工作流(数据分析、代码审查等)
  • 无需 AI 规划即可快速执行任务
  • 常用模式
  • 性能关键路径

创建模板

1

创建模板文件

将模板放在自己的目录中:
2

注册模板

使用模板目录初始化注册表:
3

使用模板

通过 gRPC API:
通过 HTTP 网关:
4

列出可用模板

注意:HTTP 网关的模板列表端点可能尚未实现。请使用 gRPC 进行模板发现。

模板最佳实践

安全添加工具

用于扩展 Shannon 的功能 Shannon 支持三种工具集成方法:

MCP 工具

零代码更改的外部 HTTP API

OpenAPI 工具

从 OpenAPI 规范自动生成

内置工具

用于复杂逻辑的 Python 工具

安全考虑

始终在模板中使用 tools_allowlist 来限制可使用的工具。
好:
坏:

在标志后保持实验性工具

完整工具指南

查看添加 MCP、OpenAPI 和内置 Python 工具的完整指南

供应商扩展

用于特定领域的代理和 API 集成 供应商适配器模式允许您集成专有 API 和专门的代理,而无需修改 Shannon 的核心代码。

架构

何时使用供应商扩展

使用场景:
  • 特定领域的 API 集成(分析、CRM、电子商务)
  • 自定义字段名称转换
  • 具有领域知识的专门代理角色
  • 会话上下文注入(账户 ID、租户 ID)
  • 私有/专有工具配置

快速开始

1

创建供应商适配器

2

注册适配器

3

创建配置覆盖

4

(可选)创建专门的代理

使用优雅降级注册:
5

通过环境使用

优势

  • 零 Shannon 核心更改 - 所有供应商逻辑隔离
  • 清晰分离 - 通用基础设施与供应商特定
  • 条件加载 - 如果供应商模块不可用,优雅降级
  • 易于维护 - 供应商代码在单独的目录中
  • 可隔离测试 - 独立进行单元测试适配器

完整供应商适配器指南

包含示例、测试策略和最佳实践的综合指南

人工批准

用于控制敏感操作 通过 SubmitTask 请求传递 require_approval 以实现人工参与控制。

配置

API 使用

批准流程

  1. 任务提交时设置 require_approval: true
  2. 编排器在执行前暂停
  3. 通过 webhook/UI 发送批准请求
  4. 用户通过 API 批准/拒绝
  5. 工作流继续或终止
网关端点(推荐):
位于 http://localhost:8081/approvals/decision 的旧版管理端点已弃用。请改用网关端点。
批准门在执行前在路由器中强制执行。

特性标志与配置

无需代码更改的运行时配置 许多行为通过 config/features.yaml 和环境变量控制,通过 GetWorkflowConfig 加载。

常见特性标志

环境变量覆盖

动态配置加载

综合模板(输出自定义)

用于自定义 Shannon 格式化最终研究答案的方式 综合模板控制多智能体研究结果的格式化和呈现方式。它们对于深度研究工作流特别有用。

何时使用

  • 为特定领域自定义输出格式(市场研究、学术、执行摘要)
  • 强制引用样式
  • 控制答案结构和长度
  • 注入特定领域的格式规则

模板方法

使用命名模板

config/templates/synthesis/ 中创建模板:
通过 API 使用:

逐字覆盖

用于无需创建模板文件的一次性自定义格式:
使用 synthesis_template_override 时,您会绕过基础模板的引用约定。您必须在覆盖文本中包含引用规则([n] 格式)。

最小长度控制

强制最小输出长度:

模板选择逻辑

模板选择基于上下文和工作流信号:
  1. 如果设置了 context.synthesis_template → 使用对应命名模板。
  2. 否则,如果满足以下任一条件:
    • context.workflow_type == "research"
    • context.force_research == true
    • context.synthesis_style == "comprehensive"
    • context.research_areas 非空 → 使用 research_comprehensive.tmpl
  3. 否则,如果 context.synthesis_style == "concise" → 使用 research_concise.tmpl
  4. 否则 → 使用 normal_default.tmpl

可用模板

最佳实践

  1. 始终扩展 _base.tmpl - 确保引用约定得到维护
  2. 使用命名模板 用于重复格式
  3. 使用覆盖 用于一次性自定义
  4. 测试模板 在生产使用前使用示例查询

模板目录

模板位于 config/templates/synthesis/。请参阅该目录中的 README.md 了解模板编写指南。

最佳实践总结

  • 通用基础设施:提交到开源
  • 供应商特定代码:在单独的目录中保持私有
  • 配置覆盖:隔离特定领域的设置
  • 条件导入:可选模块的优雅降级
  • 使用稳定接口(ToolRegistry、TemplateRegistry 等)
  • 避免派生核心子系统
  • 将自定义保留在单独的目录中
  • 对实验性更改使用特性标志
  • 在模板中白名单工具
  • 为危险操作启用批准
  • 对外部 API 使用域白名单
  • 将密钥保存在环境变量中
  • 隔离单元测试供应商适配器
  • 与 Shannon 服务进行集成测试
  • 使用重放测试确保工作流确定性
  • 使用 registry.Finalize() 验证模板

扩展决策树

扩展决策树

下一步

自定义工具

添加 MCP、OpenAPI 和内置工具

供应商适配器

构建特定领域的集成

配置

完整配置参考

架构

了解 Shannon 的架构