跳到正文
Tessl Blog· Ran Aroussi·· 32 分钟前精选AI 评分60

Tessl 博客:AI 并不笨,只是看不见

Your AI isn't stupid. It's blind.

AI 导读

VarOps 的 Ran Aroussi 在 Tessl 博客撰文,认为智能体在企业内表现不佳的根源是组织知识从未被记录成可用形式,而非模型能力不足。

推荐理由

作者基于自建跨组织记忆系统的公开基准与失败案例,给出三条可迁移的设计取舍。

正文 · AI 翻译

我们为跨整个公司协作的智能体构建记忆系统时学到了什么

一个能读取 wiki、任务追踪器、CRM 以及三年 Slack 记录的智能体,仍然不知道一项决策由谁负责。它不知道四份文档中哪一份是当前版本,不知道团队上季度尝试过什么又放弃了什么,也不知道它可以向谁重复哪些内容。

于是它开始猜。而且信心十足。

我们通常把问题归咎于模型。这是错误的诊断。模型对一个它从未真正见过的公司推理得很好。真正重要的决策发生在某个讨论串、某场会议或某条私信里,而没有任何东西以智能体可用的形式把它记录下来。

AI 并不愚蠢。它是盲的。而我们构建的所谓“智能体记忆”,大多并没有解决这个问题。它只是给这种盲区配了一个更大的文件柜。

为什么智能体记忆现在很重要

我写软件已经 35 年了,并且维护着 yfinance,它每月约有 3000 万次下载。过去一年在 VarOps,我一直在为跨整个组织协作的智能体构建一套记忆系统。上个月我们公布了结果:三个公开基准、一个测试框架,以及保留在其中的负面结果。

今年有两件事发生了变化。

智能体离开了单个开发者的终端。一旦团队共享记忆,它就会继承个人聊天历史从未有过的问题。事实会变化。人们会有分歧。有些人无权看到别人说过的话。

而开放权重模型已经足够好,可以在我们掌控的硬件上完成严肃的工作。这比听起来更重要,因为这意味着公司的知识不必存在于别人的模型里。

常见的错误是把记忆当作存储。把所有东西都保留下来,做嵌入,把最接近的片段拉进提示词,然后要求模型好好表现。我称之为“检索、塞入、祈祷”。演示效果很好。在生产环境中,它会以四种方式出问题。模型会填补片段之间的空白,而没有人察觉。旧片段会因为排名更高而压过新片段。证据会随着上下文窗口一起消失。访问控制由模型来执行,而模型恰恰是我们试图约束的对象。

在 AI DevCon 上,我会完整讲解这套设计。现在,先说说最重要的三个决策。

1. 存储断言,而不是片段

传统观点认为记忆越多越安全。保留对话记录,你总能在之后找到答案。

但对话记录不是知识。你我都不会记住这篇文章的每一个字。我们会记住它确立了什么。所以我们用同样的方式构建系统。每一条传入的观察都会被提炼成断言。每条断言说明谁陈述了什么、何时陈述、在什么时间段内为真,以及源文本的哪一段可以证明它。其他一切都被有意丢弃。

这听起来有风险。数字却给出了相反的答案。这种提炼是有意有损的,但在 LongMemEval(一个包含 500 个问题、基于长聊天历史的公开基准)中,99.8% 的问题里正确的证据仍然能进入前十结果。摄取约 3500 万 token 花费了 8.24 美元,使用两块 CPU、没有 GPU,以及一个免费的本地嵌入模型。

执行提炼的模型也不需要是前沿模型。我们用 Gemma 4——一个 310 亿参数的开放权重模型——在一台租用的 GPU 上重建了整份记录。它写下的断言数量与前沿提取器大致相当。答案质量只变动了一到两个点。

蒸馏还为记忆提供了唯一的入口,而这个入口可以拒绝。在一次基准测试运行中,一个转换 bug 开始输出人类可读的日期,而不是机器可读的时间戳。这个入口隔离了 5,732 份提交,接受了零份。而一个普通存储会把它们全部索引。

2. 让时间和缺失显式化

传统做法是追加和检索,让模型自己去理清其余部分。

问题就在这里。一条来自三月、一条来自六月,讲的是同一个事实,但它们只是两条片段。哪条排名更高,哪条就胜出。而当检索返回空结果时,模型无法区分“我们什么都没找到”和“我们根本不追踪这个”,于是它就自己填补空白。

我们改了两件事。任何内容都不会被覆盖。新事实取代旧事实,但两者都连同日期保留在记录中。而且每个问题都会归结为一个明确状态:已回答、已搜索但未找到,或超出系统所知范围。

我们通过移除拒绝来测量它的价值。同一系统、同一数据,指示它绝不能说信息缺失。总体得分几乎没变,从 88.0 到 87.2。但 30 次诚实的拒绝变成了 30 个编造的答案。如果只按可回答问题评分——也就是从不拒绝的系统所采用的报告方式——同样的答案读作 92.8。下次某个记忆产品发布头条数字却使用不拒绝协议时,值得记住这一点。

3. 在模型运行之前决定权限

大多数团队用两种方式之一处理权限。要么所有人共享一个上下文,要么提示词告诉模型它不能说什么。

第一种意味着系统永远不能持有任何敏感内容。第二种意味着由模型来执行策略。而蒸馏无论如何都会破坏文档级访问控制。一条断言可能由四个来源构建,而它们有四种不同的权限级别。

所以我们先解析身份,在该人员的授权下检索,然后才调用模型。模型永远不会收到提问者无权查看的内容。披露级别在事实写入时就已确定,而不是在读取时才做脱敏。

报告中有一个具体测试。一位财务读者询问一个收入数字,得到 2,140,000。一位销售读者询问同一主题,得到 2.0M 到 2.5M 的区间和一个趋势:“上升”。他们的证据中没有一个字节的精确值。而权限范围以下的人无法区分“被隐瞒”和“为空”,所以没人能通过缺失内容来探测秘密。在五对隔离记忆存储上的对抗性探测中,全部 45 次攻击都被拒绝或遏制。

记忆在软件工厂中的位置

软件工厂是智能体、人、工具和上下文作为一条生产线协同工作。大多数工厂设计把上下文当作输入,每次运行都重新喂入。工厂在两次运行之间遗忘,并付出代价重新发现同样的事情。

同样的缺口存在于每个编码智能体之下。它读过仓库的每一行,却不知道任何决策。为什么那个抽象很奇怪。哪条评审意见被推翻了。团队六月在一个讨论串里达成了什么共识。

记忆是工厂中唯一应该比其中每个模型都活得更久的部分。当记忆是一份受治理的记录,而不是一堆文本时,模型就变成了我们可以随时更换的座位。把记录保存在我们拥有的硬件上,只租用前沿模型来回答,并让它一次只看到一个问题的证据。在三个基准测试中,这达到了全前沿结果的 96-99%。完全本地、不租用任何东西时,得分为 84-96%。

而一个会记忆的工厂开始注意到重复出现的形状。我们现在正把这些转化为标准流程,并由此进一步转化为窄范围、专用目的的智能体或普通代码。这就是它接下来的走向。

TL;DR

  • 把记忆提炼为带有证据和时间的断言。把原始记录丢掉。
  • 绝不覆盖,并标注缺失。诚实的拒绝胜过自信的猜测。
  • 在模型运行之前就决定谁能看到什么,而不是在提示词里决定。

模型是我们租来的座位。记忆是我们拥有的资产,所以我们应该像对待资产一样构建它。

完整报告、测试框架以及每个问题的结果均已公开:Own the Knowledge, Rent the Thinking(doi.org/10.5281/zenodo.22775192)。我将在纽约 AI DevCon 上详细讲解这一设计。

来源:Tessl Blog · tessl.io