ToolAct工具行动

文本对比工具

原始文本OLD
1
新文本NEW
1
0 行新增0 行删除
UTF-8

什么是文本对比?

文本差异工具用于比较两段文本,标出哪些行或片段被新增、删除、修改或保持不变。它适合检查代码片段、配置文件、翻译文案、合同草稿、Markdown 文档、提示词版本、发布说明和日志内容,不必人工逐行对照两份文本。尤其当长内容中只改了很小一处,或空格、标点、顺序、格式可能被意外影响时,差异视图能快速定位问题。需要注意的是,Diff 不会判断新版本是否正确,它只负责清楚展示哪里不同,方便你把审查精力放在真正需要判断的地方。

使用说明

使用说明

  1. 在左侧输入框粘贴原始文本
  2. 在右侧输入框粘贴修改后的文本
  3. 系统会自动计算并高亮差异,状态栏显示新增和删除的行数

审查提示

  • 若实际改动是内容而非格式,比较前请先统一行尾和空白字符。
  • 代码或法律文本请人工复核高亮处的修改;自动 diff 仅展示差异,不评判意图或正确性。

使用场景

逐行对比两个文本版本将原始文本和修改后的文本分别粘贴到左右编辑器中,工具会使用动态规划编辑距离算法计算行级差异。新增行在右侧高亮,删除行在左侧高亮。状态栏显示新增和删除的行数,让审查者一眼就能看出变更规模。
无需完整 Git 流程即可审查小幅修改左右面板包含行号、清空和粘贴操作,以及新增和删除行数的统计。这在仓库之外比较翻译文案、配置片段、生成文本或复制的笔记时非常方便。浏览器中的快速差异对比让审查者专注于内容本身而非提交历史。
快速发现结构性变更由于对比在行级别进行,它更强调插入和删除的行,而非字符级别的拼写错误。因此最适合段落、列表、JSON 片段、文档章节和多行输出的对比。如需字符级别的校对,建议搭配单独的字符级 diff 或拼写检查工具使用。
合并前审查提示词和配置变更将上一版提示词和新版提示词分别粘贴到两个面板中,精确查看哪些行被新增、删除或重新排列。当版本之间只改了温度参数、系统消息或指令块时,这比重新通读全文更快。行级视图能捕捉到字数比较可能遗漏的意外章节位移。
审查基于 Myers 算法和 LCS 的差异结果底层的 diff 引擎在最长公共子序列上运行 Myers O(ND) 算法生成编辑脚本,然后进行语义清理,使词边界偏移(例如一个句子跨两行)折叠为单个变更行,而非两个相邻的红/绿块。结果仍然以普通行级 diff 的形式呈现,但基于 LCS 意味着并排视图中显示的是最小可能的编辑集。

技术原理

行级差异对比建立在最长公共子序列(LCS)问题之上:给定两个行序列 A 和 B,找到在两者中以相同相对顺序出现的最长序列。不在 LCS 中的内容要么是插入(存在于 B 但不在 A 中),要么是删除(存在于 A 但不在 B 中),这正是并排视图中红色和绿色行所显示的内容。朴素的 LCS 动态规划表的时间和空间复杂度为 O(M * N),其中 M 和 N 分别是两个输入的行数。 实际的 diff 引擎使用 Myers 差异算法(Eugene Myers,1986),以 O((M + N) * D) 的时间解决同一问题,其中 D 是两个文件之间的编辑距离。对于大部分内容相同的文件,D 较小,Myers 算法比完整 DP 表快得多;Git 的默认 diff 后端、GitHub 的 Web diff 视图和大多数 IDE 的 diff 面板都使用 Myers 或其衍生算法(patience diff、histogram diff),原因正在于此。Patience diff 会优先对齐唯一出现的行,当代码块被移动时能产生更易读的差异块。 输出是一系列相等/插入/删除操作,在 CLI 工具中渲染为 unified diff 格式(带 @@ -m,n +p,q @@ 块头和每行一个 +/- 前缀),在 Web UI 中渲染为并排着色行。字符级或单词级差异在更细粒度的序列上使用相同算法,当需要将替换计为单个操作时通常搭配 Levenshtein 距离(插入 + 删除 + 替换代价)。Neil Fraser 的 diff-match-patch 库是 Web 端字符级差异的常用参考实现。

  • LCS 基础:两个行数组的最长公共子序列定义了未变更的行;其余均为插入或删除。
  • Myers 差异算法(1986):时间复杂度 O((M + N) * D),D 为编辑距离;Git、GitHub 和大多数 IDE diff 视图的默认后端。
  • 朴素 DP:时间和空间复杂度 O(M * N)——小规模输入可用,但二次方内存使其不适合大文件。
  • Patience diff:优先对齐唯一出现的行;对移动或重排的代码块产生更清晰的差异块。
  • 输出格式:CLI 使用带 @@ -m,n +p,q @@ 块头的 unified diff;Web UI 使用并排着色行。
  • 粒度:行级 / 单词级 / 字符级差异对输入的不同分段应用相同算法。
  • Levenshtein 距离:计算插入 + 删除 + 替换;diff-match-patch 是 Web 端的参考实现库。

示例

一眼看出段落里改了一个词

原文:
  The server starts on port 3000 by default.

修改后:
  The server starts on port 8080 by default.

结果:1 行变化(3000 -> 8080)

对比两个版本的配置块

原文:                          修改后:
  timeout: 30                     timeout: 60
  retries: 3                      retries: 3
  debug: false                    debug: true
                                  log_level: info

结果:新增 2 行,删除 2 行

对比发版前后的 release notes

删除(红色):
  - Fixed login redirect on Safari 16

新增(绿色):
  - Fixed login redirect on Safari 16 and 17
  - Added dark mode preference sync

结果:新增 2 行,删除 1 行

检测 JSON 键顺序变化

原文:                          修改后:
  { "name": "alice",              { "id": 1,
    "id": 1,                        "name": "alice",
    "role": "admin" }               "role": "admin" }

结果:2 行变化(键顺序不同,值相同)

常见问题

工具展示的是哪种类型的差异?

行级差异。页面以左右双栏并排展示:左侧用红色高亮显示删除行,右侧用绿色高亮显示新增行。行号便于定位变更。状态栏会显示新增和删除的行数。

使用了什么差异算法?

页面采用最长公共子序列(LCS)算法在行级别上计算编辑脚本。对于常见文档大小,可在你输入时实时运行。该算法会找出把左侧文本变换为右侧文本所需的最短插入与删除序列。

为什么差异结果和 git diff 不一样?

Git 使用自有的 diff 实现,并支持配置算法。本页面使用基于 JavaScript 的 LCS 差异算法,完全在浏览器中运行。输出格式和差异块边界可能与 git diff 略有不同,但行级文本比较的编辑检测结果是正确的。

可以只对比段落或句子内的差异吗?

可以——把两个版本分别粘贴到左右两侧。本工具还会在变更行内进行字符级高亮,这就是为什么「foo 改为 bar」能显示为内联替换,而不是两条互不相关的变更。

会忽略空白吗?

不会。比较默认对空白敏感。空白差异(行尾空格、多余空行、不同的换行符)都会被视为变更显示。

可以按结构对比 JSON 或 XML 吗?

纯文本比较是按行进行的。如要按键比较 JSON(键 'a' 从位置 1 移到位置 3 但值相同时视为无变化),请使用支持 JSON 的差异工具(jsondiffpatch、json-diff)。本页面只用于文本比较。

我的文本会被上传吗?

不会。差异比较在浏览器中运行,两侧输入都在本地处理,不会被传输。