Skip to content

Pi 工具系统

工具定义

Pi 的工具接口非常简明:

typescript
interface Tool {
  name: string;
  description: string;
  parameters: JSONSchema;
  execute(args: Record<string, unknown>): Promise<ToolResult>;
  canExecute?(context: ToolContext): boolean;
}

内置工具

Pi 的 coding agent 核心工具:

工具作用
bash执行 shell 命令
read_file读取文件(带行号)
write_file写入文件
edit_file精确字符串替换编辑
grep搜索文件内容
glob按 glob 查找文件
ls列出目录
task子任务(delegate)
web_search网络搜索
web_fetch获取网页
memory读写记忆

工具注册

工具在 coding-agent/src/core/tools/index.ts 集中注册:

typescript
export function getTools(): Tool[] {
  return [
    bashTool,
    readFileTool,
    writeFileTool,
    editFileTool,
    grepTool,
    globTool,
    lsTool,
    taskTool,
    webSearchTool,
    webFetchTool,
    memoryTool,
  ];
}

比 Hermes 简单很多:没有 toolset 概念,没有 registry 单例,没有 check_fn 守卫——就是纯数组。

Extension 扩展

Pi 的工具扩展通过 Extension API 实现,不是插件系统:

typescript
interface Extension {
  name: string;
  tools?: Tool[];
  resources?: Resource[];
  hooks?: {
    preToolCall?: (call: ToolCall) => Promise<void>;
    postToolCall?: (result: ToolResult) => Promise<ToolResult>;
    onUserMessage?: (msg: string) => Promise<string>;
  };
}

Extension 在 AgentSessionRuntime 创建时注入,比 Hermes 的 plugin hooks 更轻量。

与 Hermes 对比

维度PiHermes
Tool 定义interface Toolregistry + schema + handler + check_fn
注册方式集中数组 + 硬编码分散文件 + import 时自注册
分组toolsets(web/file/terminal/...)
守卫canExecutecheck_fn(服务门控)
扩展Extension APIPlugin hooks(pre/post_tool_call 等)
并发执行顺序并发/顺序可选

Powered by VitePress