Skip to main content

概述

Shannon 的模板系统支持为常见模式创建确定性、零Token消耗的工作流。模板在 YAML 中定义结构化工作流,无需 AI 分解即可执行,为可重复任务提供显著的成本节省。

零Token成本

模板绕过 LLM 调用进行工作流路由

确定性执行

可预测、可重复的工作流行为

预算控制

每节点Token限制与自动降级

DAG 支持

带依赖管理的并行执行

何时使用模板

使用模板的场景:
  • 工作流可重复且结构已知
  • 希望消除分解Token成本
  • 需要可预测的执行顺序
  • 需要按工作流阶段进行预算控制
使用 AI 分解的场景:
  • 任务结构未知或可变
  • 需要对工作流设计进行复杂推理
  • 一次性或高度动态的任务

模板结构

模板是具有以下结构的 YAML 文件:

核心字段

默认设置

节点类型

Shannon 支持四种节点类型以适应不同的执行模式:

Simple 节点

单任务执行,直接调用工具。
适用于: 数据获取、简单转换、基于工具的操作。

Cognitive 节点

复杂推理,多步骤分析。
适用于: 分析、推理、综合任务。

DAG 节点

带内部任务依赖的并行执行。
适用于: 并行处理、扇出/扇入模式。

Supervisor 节点

分层任务分解和协调。
适用于: 结果聚合、质量控制、综合。

执行策略

策略定义节点如何处理任务:

自动降级

当达到预算限制时,策略会自动降级:
配置显式降级:

创建模板

1

创建模板文件

config/workflows/examples/ 或自定义目录中创建 YAML 文件:
2

注册模板目录

模板在启动时通过 InitTemplateRegistry 加载:
3

重启服务

4

列出可用模板

通过 gRPC:

使用模板

通过 HTTP Gateway

通过 gRPC

设置 disable_ai: true 可强制仅使用模板执行,不进行 AI 回退。

通过 Python SDK

模板示例

简单分析工作流

用于快速摘要的两阶段管道:

研究摘要工作流

带渐进推理的四阶段研究管道:

并行 DAG 工作流

带并行执行分支的复杂工作流:

模板继承

模板可以使用 extends 从父模板继承:
多个父模板按顺序应用,派生模板的值优先。

验证

模板在加载时会进行以下验证:
  • YAML 语法正确性
  • 必需字段存在
  • DAG 无环(无循环依赖)
  • 预算层级(节点预算 ≤ 代理预算)
  • 工具注册表存在
  • 变量引用解析

最佳实践

每个节点应只做好一件事:
限制每个节点的工具以提高安全性和可预测性:
配置回退策略以控制成本:
将共享默认值提取到基础模板中:
使用语义版本控制并在请求中指定版本:

故障排除

症状: template 'my_workflow' not found解决方案:
  1. 检查模板文件是否存在于已注册的目录中
  2. 验证 YAML 语法:yamllint config/workflows/examples/my_workflow.yaml
  3. 重启 orchestrator 以重新加载模板
  4. 检查 orchestrator 日志中的加载错误
症状: Template validation failed: circular dependency解决方案:
  1. 检查 depends_on 字段是否有循环
  2. 确保 DAG 节点具有无环任务依赖
  3. 检查 edges 是否创建了循环
症状: 节点执行提前停止或意外降级解决方案:
  1. 增加受影响节点的 budget_max
  2. 配置 degrade_to 以实现优雅回退
  3. 检查总预算与节点预算之和
症状: tool 'my_tool' not registered解决方案:
  1. 验证工具已在工具注册表中注册
  2. 检查 tools_allowlist 中的工具名称拼写
  3. 确保 LLM 服务已加载该工具

合成模板

合成模板控制 Shannon 在所有 agent 完成工作后如何格式化最终输出。这些 Go 模板位于 config/templates/synthesis/ 目录中,由 Orchestrator 在返回结果前进行渲染。

可用模板

基础契约

所有合成模板都从 _base.tmpl 继承行为规则:
  • CitationAgent 启用时:合成内容中不添加内联 [n] 引用 — Citation Agent 会单独添加
  • CitationAgent 禁用时:使用与 AvailableCitations 列表匹配的内联 [n] 引用
CurrentDate 字段会注入到每个模板中,支持在时效性内容中使用”截至”表述。
模板必须保留结构化产物(表格、代码块、JSON)— 不得将其扁平化为纯文本。
模板不应包含”来源”章节。系统会自动追加来源引用。

模板数据

每个合成模板都会接收一个 SynthesisTemplateData 结构体,包含以下字段:

选择合成模板

Orchestrator 根据任务类型和配置选择合成模板:
如果未指定 synthesis_style,Shannon 会自动为研究任务选择 research_comprehensive,为其他任务选择 normal_default

示例工作流

Shannon 在 config/workflows/examples/ 目录中附带了 8 个示例工作流模板。这些模板可作为即用型起点和参考实现。

工作流目录

YAML 结构参考

所有示例工作流遵循以下结构:

模式降级

示例工作流展示了 Shannon 在资源受限时的自动降级行为:
降级是自动进行的,并会记录日志。检查 Orchestrator 日志中的 strategy_degraded 事件以监控回退何时激活。

学习路由器

启用后,Learning Router 会根据查询与过去成功执行的相似度自动选择工作流模板。这消除了调用方显式指定模板的需要。
Learning Router 会随时间不断改进。对于新部署,建议在积累足够的执行历史(通常 50+ 次成功任务)之前显式指定模板。

下一步

自定义工具

为您的模板添加工具

扩展 Shannon

其他扩展方法

配置

环境和 YAML 配置

架构

了解 Shannon 的设计