文件操作工具
文件操作是 AI 编程 Agent 的基本功。Read、Write、Edit——三个工具撑起了代码修改的全部能力。
Read
读文件。看似简单,实际有不少细节:
- 行号前缀:输出带行号(
cat -n格式),方便 AI 精确定位 - 范围读取:支持 offset + limit,大文件不用全读
- 二进制检测:识别二进制文件并拒绝读取
- 图片支持:多模态 LLM 可以直接"看"图片
- PDF 支持:可读取 PDF,大文件需指定页码范围
- 大小限制:单次最多 500KB
typescript
Read({
file_path: "/src/main.tsx",
offset: 100, // 从第 100 行开始
limit: 50 // 读 50 行
})Write
整文件写入,覆盖已有内容:
- 写入前必须先 Read 过该文件(防止盲写)
- 新文件可以直接创建
- 大小限制 1MB
- 写入后自动格式化(如果项目配了 formatter)
Edit
精确替换——找到 old_string,替换为 new_string:
typescript
Edit({
file_path: "/src/app.ts",
old_string: "const x = 1",
new_string: "const x = 2"
})关键约束:old_string 必须在文件中唯一。如果有多处匹配,需要提供更多上下文让它唯一,或使用 replace_all 参数。
这个设计很聪明——强制唯一匹配,避免了 AI 误改错位置的问题。
MultiEdit
批量编辑,一次调用完成多处修改。减少 API 来回次数。
安全机制
- Write 必须先 Read(防止覆盖未知内容)
- Edit 的 old_string 必须唯一匹配
- 敏感文件(.env、credentials)写入需要额外确认
- 所有文件操作都受权限系统管控