跳到正文
Hacker News· alansaber·· 7 天前AI 评分34

合同文档的“黑匣子记录仪”:Rewind 回放与 Who wrote this 溯源

A black box recorder for contracts

AI 导读

文档协作工具 Lexifina 推出 Rewind 回放功能,可按时间轴逐条重放合同起草过程,并在面板中按协作者(人或 AI 智能体)分行显示其工作时间、改动量,AI 部分还标注 token 用量与费用。配套的 Who wrote this 可选中文本定位每段文字的作者、修改时间与版本,并区分多个具名 type agent。回放基于 Yjs 共享编辑更新重建,历史缺失处标记为 gap。

正文 · AI 翻译

回放文档

它的作用

回放是编辑器中的重放按钮,它从头开始逐条回放文档的起草过程,一次一个更改,并显示每个更改是谁做的。本次更新在回放下方增加了一个面板,每位协作者(人或智能体)一行。每一行显示他们何时处理该文档以及改动了多少。对于 AI 工作,它还显示使用了多少 token 以及花费多少。关键在于,这不是像 git 那样需要主动选择加入的溯源,也不会改变非技术用户的工作方式,它兼具协作快照和详细版本控制系统的特点。

为什么

大多数公司把 AI 支出看作月度总额。总额无法告诉监督律师哪个智能体运行写入了某条款、那次运行是否物有所值,或者一名初级律师在文档上花的一小时与智能体的两分钟相比如何。因为时间和 token 与编辑位于同一时间线上,你可以拖动到任意时刻,查看文档当时的样子、谁在处理它,以及他们的工作花费多少。

回放是如何构建的

当人们一起编辑文档时,每个更改都会作为一个小更新发送到服务器,并与用户和时间一起保存。我们为此使用 Yjs,一个用于共享编辑的库。回放会下载这些更新并在浏览器中按顺序应用,逐步重建文档。

保留完整历史

历史记录是尽力而为的。服务器会定期保留文档的完整副本,并删除此前的更新。从 Word 保存新版本、恢复旧版本或导入文件会开启一段新历史,并记录它所替换的那一段,因此回放可以跨过它继续。历史记录中缺失的部分会标记为空白,而在开启共享编辑之前保存的版本会显示为章节标记。

区分人和智能体

在浏览器中输入的编辑会带有输入它的用户。由服务器进行的编辑则没有,例如智能体提议的更改或某人批量接受的更改,因此它们都显示为一个通用的“AI”。现在,每一次这样的写入都会记录它是为谁进行的。

一个文档可以有多个类型智能体,每个都有自己的名称和职责,例如一个删除多余词语,一个收紧模糊标准。每个智能体在开始工作时记录自己的名称,因此每个都有自己的行。

时间和 token 来自哪里

行时间数量
一个人他们主动处理文档的时间:窗口处于聚焦状态,并且他们最近输入或点击过。由 Lexifina 的时间捕获以最长 30 秒的片段记录。他们添加和删除的字符。
一个人的 AI 助手在文档上的每次运行,从开始到结束。该次运行中每次模型调用的 token 和成本。
一个类型智能体同上,外加每次有人给它指令。同上,外加它提议的修订。

成本是每次调用时模型的价格。如果一次运行启动子运行,它们的 token 计入启动它们的那次运行。

谁写了这个

它显示什么

  • 谁写了这个。 在编辑器中选择文本。所选内容的每一部分都会列出其作者、编辑的时间和版本,以及它替换掉的文字。对于智能体写的文本,它还会显示谁接受了它以及智能体给出的理由。
  • 条款历史。 对某一条款的每一次已记录更改,按顺序排列,当前文本按作者加下划线。
  • 搜索。 搜索文档的所有更改,包括被拒绝的 agent 建议。
  • 文档中的作者归属。 每个段落旁边可选显示一个条,按编辑者着色。

Agent 编辑

当一次保存应用了 agent 建议时,只有被保存的建议所涵盖的段落才归功于该 agent。同一次保存中的其他更改被记录为未知。在一个人打字的实时编辑会话中,更改归于该人。如果多人在同一会话中打字,更改被记录为混合并列出他们。

每个字符的作者

为了找出段落当前文本中每个字符是谁写的,索引器按顺序重放该段落的记录,为每个字符保留一个作者:

def _apply(attr, before_len, after_len, ranges, who):
    out, i = [], 0
    for a, b, c, d in sorted(ranges):
        out += attr[i:a] + [who] * (d - c)   # changed characters get this change's author
        i = b
    out += attr[i:]
    if len(out) != after_len:                # ranges don't match the texts: credit the whole paragraph
        return [who] * after_len
    return out

第二个列表以相同方式更新,保留写入每个字符的记录。这正是“这是谁写的”能够指出选区中每一部分背后确切编辑的原因。

Agent 的使用

在 agent 编辑某一条款之前,会告知它是否有律师重写了其早先的措辞,或拒绝了其早先的建议。它可以在提出类似建议之前用工具读取该条款的历史。

两者如何配合

这两个功能读取不同的记录。Rewind 由共享编辑更新构建,这些更新仅存在于开启共享编辑的文档中。这是谁写的由自动保存修订构建,每个文档都有,因此它也适用于从未被共同编辑过的文档。

Agent 以修订形式提出编辑,两个功能都读取修订标记而非可见文本。一项提议归属于提出它的人,接受或拒绝它被记录为执行该操作的人的决定。

局限性

  • 所有能打开文档的人都能看到每个人在其上投入的时间。这里可以有额外的隐私控制。
  • Rewind 面板应连接到事项的时间记录策略或工时表生成,至少作为一项校验,以保持一切同步。
  • 段落历史对剪切、更改和重新定位并不完全稳健,谱系重建是多层的最佳尝试。

来源:Hacker News · lexifina.com