Tools Block
声明当前上下文中可用的工具集合,控制后续 Generation Block 能够调用哪些工具。
功能说明
Tools Block 是一个声明式节点(isDeclarative = true),它本身不执行具体操作,而是配置后续 AI 生成步骤可以使用的工具列表。执行到 Tools Block 时,它会替换当前工具注册表中的活跃工具集,并设置工具调用策略(auto 或 required)。
当你需要让 AI 在生成过程中调用外部工具(如调用其他 workflow、skill 或 MCP 服务)时,在 Generation Block 之前放置 Tools Block 来声明可用工具。
使用场景
- AI Agent 工具配置:为 AI 提供一组可调用的 workflow 或 skill 工具,让 AI 根据上下文自动选择使用
- MCP 集成:声明外部 MCP 服务提供的工具,让 AI 能够调用第三方 API
- 工具约束:通过 toolChoice 参数控制 AI 是否必须使用工具(required)或自行判断(auto)
配置参数
| 属性名 | 类型 | 说明 | 默认值 |
|---|---|---|---|
tools | string | 工具列表(JSON 序列化的 ToolItem[]) | '[]' |
toolChoice | 'auto' | 'required' | 工具调用策略:auto=AI 自行决定, required=必须调用工具 | 'auto' |
ToolItem 结构
每个工具项包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
type | 'workflow' | 'skill' | 'mcp' | 工具来源类型 |
id | string | 工具的唯一标识 |
label | string | 工具显示名称 |
server | string | MCP 类型时的服务器标识(可选) |
toolChoice 说明
| 值 | 行为 |
|---|---|
auto | AI 根据上下文自行决定是否调用工具 |
required | AI 必须至少调用一个工具 |
输出变量
Tools Block 的输出变量是动态生成的,根据配置的工具列表自动产生:
| 变量名 | 类型 | 说明 |
|---|---|---|
__default__ | object | 包含所有工具调用结果的对象 |
{tool_label} | any | 每个工具按其 label 名称生成对应的输出变量 |
引用语法
{{tools_0}} -- 所有工具结果的对象
{{tools_0.my_tool}} -- 名为 my_tool 的工具调用结果注意:变量名称来自每个 ToolItem 的
label字段。如果工具没有设置 label,则使用tool_N格式(N 从 1 开始)。
使用示例
示例 1:AI Agent 调用 workflow 工具
配置一组 workflow 工具,让 AI 根据用户请求自动选择调用:
[Tools Block: agent_tools] — toolChoice: auto
工具列表:
- type: workflow, label: "search_docs", id: "doc-xxx"
- type: workflow, label: "send_email", id: "doc-yyy"
|
[Generation Block] — "根据用户的请求选择合适的工具执行: {{input}}"
(AI 会根据 prompt 内容决定是否调用 search_docs 或 send_email)示例 2:强制使用 MCP 工具
配置 MCP 服务工具,并要求 AI 必须调用:
[Tools Block] — toolChoice: required
工具列表:
- type: mcp, label: "web_search", server: "search-server"
|
[Generation Block] — "搜索关于量子计算的最新论文"
(AI 必须调用 web_search 工具)运行时约束
- 适用文档类型:workflow(Slash 菜单中排除了 skill 类型文档)
- 可插入上下文:顶层文档、Condition 分支、Loop 内、Promise 分支
- 不可嵌套场景:无特殊限制
注意事项
- 覆盖而非叠加:每次执行 Tools Block 时,会全量替换当前活跃的工具集。如果文档中有多个 Tools Block,后声明的会覆盖前面的
- 空工具列表:如果配置的工具列表为空,会清除所有活跃工具并将 toolChoice 设为
none - 工具解析:运行时会自动解析工具定义,将 workflow/skill 的 ID 转换为实际可调用的工具。如果解析失败(如目标文档不存在),该工具会被静默跳过
- 声明式节点:Tools Block 本身不消耗积分,不产生内容输出。它只是配置工具环境,真正的工具调用发生在后续的 Generation Block 中
- 兼容旧格式:Tools Block 向后兼容旧版
allowToolsBlock 的数据格式