antirez: Alternatives for the EDIT tool of LLM agents — LLM Agent 的 EDIT 工具设计探索

来源: https://antirez.com/news/166

日期: 2026-05-19

评分: ⭐⭐⭐⭐ (4/5)

一句话版本

Redis 创始人 antirez 在为自己的本地推理引擎 DS4 写 Agent 时,发现主流 EDIT 工具的设计太浪费 token——他设计了一套基于行级校验标签的 EDIT 系统,让 LLM 不用重复写出旧文本,节省大量 token。

核心内容

背景

antirez 正在为他的 DS4 项目(我们在 5月15日 做过报告的 DwarfStar 4——用纯 C 手写的本地推理引擎)编写 Agent。由于本地推理的 token 预算非常紧张("token-poor, a battlefield where optimizations count"),他需要极致优化每个工具调用的 token 开销。

问题:CAS 模式的浪费

当前所有 Agent 使用的 EDIT 工具都采用 CAS (Check And Set) 模式:


EDIT old="旧的文本内容" new="新的文本内容"

这让 LLM 必须重复输出完整的旧文本,问题在于:

1. 浪费 token——每次编辑都要把旧文本重复一遍

2. 特殊字符出错——旧文本中的特殊字符和空格,LLM 可能复述不准

3. 失败重试——复述错了,工具调用失败,又得重来

单纯用行号("改第 22 行")也不行——同时编辑、切换分支时行号内容可能已经变了。

antirez 的方案:行级校验标签(Tag-based EDIT)

他的设计:READ 和 SEARCH 工具返回带标签的行


 10:Q8fA int count = 10;
 11:rA3_ if (count > limit) {
 12:Kq9z count = limit;
 13:PX0b }

每个标签是 4 个字符(~2.5 LLM tokens),代表该行内容的校验和。

单行编辑


{
  "tool": "edit",
  "path": "/tmp/example.c",
  "line": 10,
  "tag": "Q8fA",
  "new": "int count = 11;"
}

多行编辑


{
  "tool": "edit",
  "path": "/tmp/example.c",
  "lines": "11:rA3_\n12:Kq9z\n13:PX0b",
  "new": "if (count > limit)\n    return limit;"
}

另一种思路:全文件 CRC32

antirez 还在考虑另一种方案——不用每行的 tag,而是用整个文件的 CRC32 校验和。好处是节省更多 token(行号 + CRC 即可),但坏处是文件内任何不相关的改动都会导致编辑失败。

他认为需要通过实际使用来评判哪种更好,目前先加一个命令行开关切换编辑模式。

DeepSeek V4 Flash 的表现

antirez 特别提到:DeepSeek V4 Flash 能非常有效地使用这套工具("apparently it is natural for it")。他认为编辑更快更可靠了,但没有给出精确的测量数据。

分析

为什么重要?

虽然这只是 antirez 的一个小实验(他自己也说 "of course this was already done in the past"),但它触及了一个被忽视的核心问题:

当前 LLM Agent 工具的设计几乎都是为「token 丰富」的场景设计的(云端 API 模型),但本地推理场景完全不同。

antirez 的设计哲学

这篇短文体现了 antirez 一贯的工程风格:

与我们项目的关联

评分表

维度评分说明
深度⭐⭐⭐⭐短小精悍,一个具体问题的完整思路
实用性⭐⭐⭐⭐tag-based edit 方案可复制到任何 Agent 框架
创新性⭐⭐⭐作者自己也说以前有人做过,但 CRC32 tradeoff 讨论有价值
与我们关联⭐⭐⭐⭐⭐直接关系 OpenClaw/Agent 工具链的 token 优化

关键链接