跳到主要内容

16 篇博文 含有标签「testing」

查看所有标签

代理系统的非确定性 CI:为什么二进制的通过/失败模式会失效,以及取而代之的是什么

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的 CI 流水线假设了一件自你加入 LLM 调用以来就不再成立的事情:运行相同的代码两次会产生相同的结果。传统的 CI 是为确定性软件构建的 —— 编译、运行测试、获得绿灯或红灯。传统的 ML 评估是为固定的输入输出映射构建的 —— 对测试集进行推理、计算准确率。Agent AI 同时打破了这两个假设,其结果是一个要么对你撒谎,要么因误报而阻塞每次合并的 CI 系统。

核心问题不在于 Agent 难以测试,而在于你现有的测试基础设施是为一个“非确定性是 Bug 而非特性”的世界设计的。当你的 Agent 在连续运行中通过不同的工具调用路径得到相同的正确答案时,确定性断言就会失败。当它产生语义等效但词汇不同的响应时,字符串比较会将其标记为回归。测试框架本身变成了噪音的来源。

LLM 应用的测试驱动开发:类比成立与失效之处

· 阅读需 12 分钟
Tian Pan
Software Engineer

一个团队使用 Claude 构建了一个 AI 研究助手。他们对 Prompt 进行了三周的迭代,向利益相关者演示了该助手,并满怀信心肠发布了它。两个月后,他们发现该助手在大约 30% 的输出中悄悄地产生虚假引用(幻觉)—— 这种失败模式之前没有人测试过,因为评估套件是在 Prompt 在演示中“感觉对了”之后才建立的。

这种模式是常态,而非例外。LLM 开发行业在很大程度上采用了测试驱动开发(TDD)的词汇 —— 评估(Evals)、回归套件、黄金数据集、LLM-as-judge —— 却忽略了 TDD 建立的最重要规则:在实现之前编写测试,而不是在实现之后。

以下是如何正确执行此操作的方法,以及 TDD 类比在哪些地方失效得非常严重,以至于字面上照搬它会让你的系统变得更糟。

评估 AI Agent:为什么只看结果会误导你

· 阅读需 12 分钟
Tian Pan
Software Engineer

你构建的一个智能体在最终输出评估中获得了 82% 的分数。你发布了它。两周后,你的支持队列里塞满了用户的投诉,抱怨智能体获取了错误的数据,使用了错误的参数调用 API,并且在错误的中期工作基础上生成了听起来很自信的回复。你回头查看追踪记录(traces)—— 发现智能体在 40% 的查询中路由都是错误的。最终输出评估从未捕捉到这一点,因为智能体往往还是误打误撞地得到了正确答案。

这是智能体评估中的核心陷阱:仅衡量最后输出的结果,无法告诉你智能体是如何到达那里的,而“到达那里”的过程正是大多数失败发生的地方。

你的 AI 产品需要评估系统

· 阅读需 9 分钟
Tian Pan
Software Engineer

每次 AI 产品演示看起来都很棒。模型生成了一些貌似合理的内容,利益相关者频频点头,每个人都带着乐观的情绪离开会议。然后产品发布了,真实用户出现了,事情开始以没人预料到的方式走向下坡路。团队手忙脚乱地修复一个故障模式,却无意中制造了另一个,经过数周的“打地鼠”后,提示词已经变成了一个 2000 个 token 的庞然大物,没人再能完全理解它了。

根本原因几乎总是相同的:没有评估系统。那些发布可靠 AI 产品的团队很早就构建了评估系统,并将其视为基础设施,而不是事后才考虑的事情。那些停滞不前的团队则将评估视为“等产品更成熟了”才需要担心的事情。到那时,他们已经陷入困境。