662 字
约 2 分钟
1
ToolKind 提供默认只读语义
无标签

Grok Build · 工具分类 ToolKind 提供默认只读语义 is_read_only() 是工具种类层的默认分类。具体工具可以覆盖它,最终是否执行还要经过规则、沙箱、Hook 与交互批准等控制。 一句话速览 从枚举与 is_read_only() 追踪只读默认值和能力过滤边界

课程目标 准确识别真实 ToolKind 分支,记住 Task 返回 false、源码中没有 TaskOutput 这个 kind,并能解释只读分类与完整权限决策的边界。

核心视觉 · 教学化决策图

ToolKind 语义分类

is_read_only() 种类默认值

工具级覆盖 ToolMetadata 环境控制 规则 · 沙箱 · Hook 用户控制 交互批准

最终执行决策 允许 · 拒绝 · 询问

教学化决策图:表达多层控制关系,不代表单一函数调用链。

真实分类分支

is_read_only() == true Read Search Lsp ListDir List MemorySearch MemoryGet WebSearch WebFetch EnterPlan ExitPlan AskUser 这些 kind 的种类默认值为只读。具体工具仍可通过自己的元数据覆盖默认结果。

is_read_only() == false Edit Delete Write Move Execute Plan Task Skill SearchTool UseTool Monitor GoalUpdate 此处还包含后台任务、媒体生成、部署等种类。 Task 明确位于 false 分支。

边界提醒: is_read_only 描述默认副作用语义,不能单独推出「自动执行」或「必须弹窗」。命令规则、工作区权限、沙箱、Hook 与用户批准都会影响最终结果。显示层中 Execute 的标签是 Run Command 。

真实源码证据

crates/codegen/xai-grok-tools/src/tool_taxonomy.rs · 第 37 至 113 行节选

pub fn presentation_name(self) -> &'static str {
 match self {
 ToolKind::Execute => "Run Command",
 /* 其他 presentation_name 分支省略 */
 }
}

pub fn is_read_only(self) -> bool {
 match self {
 ToolKind::Read
 | ToolKind::Search
 | ToolKind::Lsp
 | ToolKind::ListDir
 | ToolKind::List
 | ToolKind::MemorySearch
 | ToolKind::MemoryGet
 | ToolKind::WebSearch
 | ToolKind::WebFetch
 | ToolKind::EnterPlan
 | ToolKind::ExitPlan
 | ToolKind::AskUser => true,
 ToolKind::Edit
 | ToolKind::Delete
 | ToolKind::Write
 | ToolKind::Move
 | ToolKind::Execute
 | ToolKind::Plan
 | ToolKind::BackgroundTaskAction
 | ToolKind::WaitTasksAction
 | ToolKind::KillTaskAction
 | ToolKind::Skill
 | ToolKind::Task
 | ToolKind::ImageGen
 | ToolKind::VideoGen
 | ToolKind::ImageToVideo
 | ToolKind::ReferenceToVideo
 | ToolKind::DeployApp
 | ToolKind::SearchTool
 | ToolKind::UseTool
 | ToolKind::Monitor
 | ToolKind::GoalUpdate
 | ToolKind::Other => false,
 }
}

源码快照说明: 依据本地仓库 grok-build-main 的 crates/codegen/xai-grok-tools/src/types/tool.rs 与 tool_taxonomy.rs ,核对日期 2026-07-17。节选中的注释明确标出了省略范围。

课堂练习

02 判断分类,再补齐权限上下文 分别分析 Task 、 Execute 、 WebFetch 。先写出 kind 默认只读值与显示标签,再列出最终执行前还需要检查的四类控制信号。

Takeaway: ToolKind::is_read_only() 给出可复用的种类默认值。 Task 为 false,源码没有 TaskOutput kind, Execute 的统一标签为 Run Command 。完整权限判断需要继续读取运行环境与用户控制信号。

ToolKind 提供默认只读语义
http://www.clxhxhhr.top/posts/3997/
作者
clxstart
发布于
2026-09-25
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。