**记忆系统的优劣取决于其遗忘能力**——OpenWiki通过将知识主张与代码证据链接,检测证据变化并标记过时,在更新中验证或修正,实现自我纠正。

COLIN FRANCIS(@COLIFRAN_)随笔 · 已翻译 · 约 7 分钟
阅览室 · AI 最佳实践#OpenWiki#声明#记忆#过时#遗忘#运行#纠正#修正原文

记忆的遗忘问题

记忆系统的优劣,取决于其遗忘的能力。

关于智能体记忆的多数讨论,聚焦于如何创建记忆并使其日后可检索。长期记忆则引入了另一个常被忽视的有趣问题。当事实源头发生变化时,曾经正确的信息可能变得过时,而记忆系统却缺乏可靠的方式察觉这一点。随着时间推移,这会导致记忆系统因记忆漂移和记忆污染等问题而退化。

这一问题在像OpenWiki这样的记忆系统中尤为突出,因为其事实源头是随时代演进的代码。起初,维基可能准确描述了API行为或存在的各种特性,但随着代码变更,这些行为和特性也可能随之改变。如果关于它们的文档知识未能与代码保持同步,那么维基的相应部分就会变得陈旧。

为使OpenWiki具备遗忘和自我修正的能力,我们不仅需要保留维基所相信的内容,还需保留这些信念背后的证据。这为OpenWiki提供了一种途径,使其能察觉支持某项主张的证据是否已发生变化,并识别维基中可能需要重新审视的部分。

锚定维基所信之事

首要步骤是赋予OpenWiki对其所做出的实质性事实主张的持久记录。这意味着,当代理撰写维基页面时,它还必须识别该页面中的主张以及支持这些主张的代码证据。

例如,如果维基声称失败的任务默认重试三次,OpenWiki会将该主张连同支持它的代码一同记录。

随后,运行时为支持性证据记录一个版本,以便日后能再次验证该主张。这样做在维基中的每项主张与其支持代码之间建立了联系。OpenWiki不再将维基视为文本集合,而是能够追踪个别主张及其所依赖的证据。

洞察知识何时过时

一旦主张与证据相链接,OpenWiki便能通过比较最初支持该主张的源版本与当前存在的版本,来检测证据何时发生变化。若两者不同,该主张即被标记为过时。

过时的主张并不必然意味着其错误。它表示OpenWiki在未重新核查来源的情况下,不能再安全地假设该主张依然成立。许多代码变更并不会立即令所依赖的主张失效,但它们确实构成了重新审视的理由。

OpenWiki无需为此持久化一个单独的状态标志。存储的证据版本足以在每次更新时再次验证主张的新鲜度,因此不确定性会一直持续,直到证据被重新核查。

修正过时断言

检测过时知识仅在系统具备修正能力时才有价值。

当OpenWiki判定某条断言已过时时,它会检查当前的支持证据,并确定该断言的真伪。若断言仍为真,OpenWiki会刷新证据版本。若断言现已为假,则维基内容及其支持证据将一同更新。

关键行为在于,过时断言在验证实际发生前始终保持过时状态。随着时间推移,这形成了一个自我修正的反馈循环。源数据的变更使先前可信的断言变得过时,这种不确定性持续存在,直到每条断言再次得到验证。维基更新使文档与当前事实重新同步。

这与从头重新生成维基不同。OpenWiki保留已知信息,追踪哪些断言已过时,并在源数据持续演进时修正这些断言。

将断言关联至OKF v0.2

断言为OpenWiki提供了每页所持信念的内部记录及其支持的版本化证据。开放知识格式(OKF)v0.2使页面级结果在OpenWiki之外可移植且可检查。

OpenWiki项目将断言证据注入每页的OKF源元数据中,记录最后修改页面正文的生产者并标记为generated,仅在页面完整断言集经过核对、复查并持久化后添加verified。维基根索引声明okf_version: "0.2",使Markdown包能被其他消费OKF的工具识别。

这实现了职责的有效分离。断言决定个体信念是否仍然可信。OKF传达包含这些信念的文档的来源、证据来源及验证历史。详细的断言和精确的证据版本保留在OpenWiki的侧车文件中,而可移植的Markdown则通过OKF前置元数据展示标准信任摘要。

实际运行方式

每次维基更新开始时,都会先进行陈旧性检测,然后代理才会执行任何操作。运行时遍历完整的声明集,将每条声明持久化的证据版本与当前来源进行比较。这是一个确定性检查,不涉及模型调用,因此即使维基积累了数千条声明,也能保持快速运行。

代理从不自行扫描声明集。当它在更新期间读取页面时,该页面上任何陈旧的声明都会与内容一同呈现,它会在已进行的工作中一并解决这些问题:重新验证声明并刷新其证据,或同时修正声明和维基文本。任何未解决的问题都会保留标记,供未来更新处理,而不会静默丢弃。

实际效果是,更新成本随代码变更量增长,而非维基所持有的声明数量。

评估遗忘能力

为衡量这一点,我们构建了一个评估系统,通过一系列预定义检查点的git提交重放代码仓库,在这些检查点更新维基。各种提交引入新功能、修改现有行为、修复缺陷及回滚变更。

每次更新后,我们评估维基中的事实性声明,并将其分类为以下之一:

  • 受支持:声明在当前检查点的代码中得到支持。
  • 陈旧:声明在早期检查点准确,但代码此后已变更,不再成立。
  • 幻觉:声明在仓库历史中从未真实存在。
  • 未验证:无法根据代码确认或反驳声明。

我们分别在有和没有OpenWiki声明运行时的情况下运行了相同序列。

在每次更新中,我们看到陈旧声明从基线的80条降至使用声明运行时的9条,而幻觉声明从15条降至0条。

我们还直接在单次运行中观察到了自我纠正行为。在一个例子中,一次代码更改导致首次检查点时维基中17%的声明已过时。到了下一次检查点,过时声明已回落至0%,受支持的声明也从77%恢复到了98%。

这是我们最为关心的行为。声明运行时为OpenWiki提供了一种方式,用以识别现有知识何时可能不再可信,在更新过程中持续保留这种不确定性,并随着代码的持续演进,在后续进行纠正。

记忆为何能自我纠正

记忆系统必须能够表达其所相信的内容及其依据。更重要的是,当曾经有效的信息变得过时,系统必须有能力遗忘并自我纠正。

声明运行时赋予了OpenWiki这种能力。声明将维基知识与源证据持久地连接起来,使得证据的变化能将受影响的声明标记为过时。未来的维基更新便能够验证或自我纠正这些过时声明,而无需从头重建维基。

在这种模式下,遗忘并非仅仅是删除旧记忆,而是关乎知晓何时某个信念不应再被信任。这使OpenWiki能够主动遗忘,并与其所代表的源代码一同演进,而不是逐渐偏离。

尝试 OpenWiki 0.4.0

如果您已经在使用 OpenWiki,升级到 0.4.0 将在下次更新时自动开始为您的 wiki 生成声明,并迁移至 OKF v0.2。查看仓库或通过我们的官方文档了解更多关于 OpenWiki 的信息:

立即尝试:

npm install -g openwiki@latest

openwiki --init

已读完 · 本文由熊猫易读翻译重排