跳转到内容
EN

运行模式

运行模式的做法类似 A/B 测试。HALO 在固定输入上运行一个系统公开发布的代码,一次不做修改,一次切断选定的通路或证据步骤,然后比较两次的输出。代码中只替换模型客户端,让系统改为调用同一个基座模型,这个模型在两次运行中保持不变。最后由盲评比较输出,也就是评判模型不知道哪份输出来自哪次运行。

资料可以说明一条通路已经实现,却说明不了它是否起作用。在论文中,AiGet 通过两条路径把用户画像传给行动模块。只切断其中任意一条时,评判模型没有明显偏好。两条都切断后,评判模型更偏好原始的建议。要在不依赖系统自我描述的前提下看到这类效果,唯一的办法是把通路逐条切断,也一起切断。

每个案例(为一个系统准备的一套运行配置)都会声明每条通路或每个证据步骤在系统代码中经过的位置,并在接收端切断它:

  • 切断通路,就是扣下经过这条通路的内容,例如把送到行动模块的检索记忆清空(M→A)。
  • 切断证据步骤的做法沿用 EAIA 案例:修订步骤看不到行动(记录),收不到反馈(结果),收到的反馈被对应到错误的行动上(归因),或者照常运行但不写入结果(修订,这一切断也覆盖后续使用)。
终端窗口
uv venv cases/aiget/.venv -p 3.11
uv pip install -p cases/aiget/.venv/bin/python -r cases/aiget/requirements.txt
halo run cases/aiget --workers 4

测试框架把每次运行的输出、评判模型的判定和一份汇总写入 runs/<case>/<name>/。开发者页面说明了如何添加案例。

论文的运行模式测试针对研究系统 AiGet,以及公开了代码的产品 EAIA。

闭源产品:不影响日常使用的测试

Section titled “闭源产品:不影响日常使用的测试”

没有公开代码的产品无法在内部切断,所以测试要移到产品的边界上进行。做法是用同一组预先写好的输入运行两次,一次打开产品提供的某个开关,一次关掉它,再让评判模型比较。这类开关包括记忆、已连接的插件或反馈等。

这样的测试必须和用户自己的智能体分开,因为测试发出的每一条输入,都会成为智能体关于这个用户的记忆的一部分。所以边界测试要在单独的测试身份下进行:

  • 单独的账号或智能体。 用一个测试账号,或者在产品允许的情况下另开一个 bot 或 dot。它只承载预先写好的测试用户,不含真实用户的任何内容。
  • 能关记忆就关掉。 不读也不写记忆的对话模式,可以作为关闭记忆的那一组。
  • 测完清理。 如果产品能列出它记住了什么,就在测试结束时删掉测试产生的记忆。
  • 轨迹分开。 测试用的会话在 HALO 里使用单独的会话标签,关于日常使用的报告就不会混进测试。

测试身份和真实用户没有任何共同的历史,所以它测的是机制,测不到智能体对这个用户学到了什么。这部分由插件在日常使用中观察。HALO 目前还不能自动完成边界测试,本节说明的是手动操作的做法。