跳到主要内容

2 篇博文 含有标签「release-engineering」

查看所有标签

你的智能体有两条发布流水线,而非一条

· 阅读需 12 分钟
Tian Pan
Software Engineer

我合作过的一个团队在周三下午发布了一个“微小的提示词调整”。同一个 PR 还向智能体注册中心添加了一个新工具——一个对内部管理 API 的便利封装,提示词现在偶尔会调用它。评估套件通过了。金丝雀发布看起来也很正常。到周四早上,由于智能体处理了一个包含提示词注入攻击的支持工单,一名客户的计费记录被修改了。审计追踪显示,管理工具完全按照设计运行。值班工程师的第一反应——回滚提示词——毫无用处,因为凭证已经使用,数据行已经写入。

复盘报告将其定性为安全审查失败。其实不是。这是发布流水线的失败。团队通过相同的审查、相同的关卡和相同的回滚逻辑,发布了两个完全不同的资产类别——对模型的行为引导和授予智能体的新权限,就好像它们是同一种变更一样。它们并不是。一旦你将它们视为两个流水线,大多数关于“智能体治理”的争论就会变得清晰得多。

提示词契约测试:防止一个团队的修改破坏另一个团队的智能体

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个平台团队修改了意图分类器的 Prompt,旨在“更好地处理复合问题”。只改动了一个句子。他们自己的评估套件(eval suite)变绿了——复合问题的准确率提升了 6 个百分点。他们在下午 3 点合并了代码。到下午 5 点,三个下游 Agent 团队开始收到告警:路由 Agent 将退款请求发送到了物流队列,摘要 Agent 在不同的边界处截断,而工单打标 Agent 开始输出一个没有任何 Schema 能识别的类别。那些下游团队中没有一个参与了评审。也没有人负责“意图 Prompt”的轮值。

这不是假设。当 Prompt 变成共享依赖却未成为共享 API 时,这就是必然发生的情况。提升一个团队指标的 Prompt 修改,可能会悄悄破坏另一个团队建立在其之上的假设。与破坏性的 API 变更不同,这里没有反序列化错误,没有 Schema 不匹配,没有 500 错误——下游只是开始做出微妙的、更糟糕的决策。

传统的 API 工程在几十年前就通过契约测试(contract tests)解决了这个问题。消费者发布它所期望的形状;提供者有义务保持该形状正常工作。Pact、消费者驱动的契约、共享 Schema——这是 HTTP 服务发布工程的正统做法。Prompt 也应该遵循同样的纪律,而大多数组织仍然像处理团队间传递的贴纸一样对待它们。