跳到主要内容

45 篇博文 含有标签「governance」

查看所有标签

没人会为你的智能体承保

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的智能体开始工作了。它处理工单、发放退款、更新记录、完成闭环——无需人工干预,且根据你的指标,其质量超过了执行同样任务的人类中位数。你已经准备好让智能体完全脱离人工干预。然而部署陷入了停滞,不是卡在工程环节,而是在一次会议中,法务或财务部门的人提出了一个你无法回答的问题:一旦出错,损失由谁承担?

这是智能体自主化过程中能力曲线无法触及的部分。你可以将准确率从 95% 提升到 99%,但上述问题依然存在。因为阻碍部署的从来不是“模型是否足够好”,而是由概率系统采取不可逆行动所带来的风险必须由人承担,而现在没人愿意承担。你的职业责任险(E&O 保险)是为人类失误编写的,且越来越多地将自动化失误排除在外。你的模型供应商合同声明对一切后果免责。而且,目前还没有哪家保险公司能为这类系统制作精算表——因为每当你修改一次提示词(Prompt),系统的失败率就会悄然发生偏移。

一次性软件:编写、运行、删除

· 阅读需 11 分钟
Tian Pan
Software Engineer

上个月,我需要核对两个列规范略有不同的 CSV 导出文件——这项任务我通常会通过找一个 diff 工具、阅读其文档并与其设定的规则缠斗 20 分钟来解决。相反,我让一个 Agent 为我写了一个 50 行的脚本。它运行了一次,得出了答案,然后我就把它删除了。总共耗时:90 秒。这个脚本从未进入版本控制,从未被命名,也永远不会再出现。

这种交易模式——编写、运行、删除——正悄然成为一整类工作的默认模式。当代码生成的成本趋近于零时,最廉价的正确做法往往是定制的单次尝试,而不是通用的工具。寻找现有的实用程序意味着搜索、评估、安装、配置和信任它。而生成一个即用即弃的程序则意味着描述你想要什么。对于定义明确的窄任务,第二条路径现在在除了一个维度外的所有维度上都胜出了:没有人关注到底创造了什么。

当 AI 卓越中心成为瓶颈时

· 阅读需 10 分钟
Tian Pan
Software Engineer

两年前,组建 AI 卓越中心(CoE)是一项负责任的举措。当时没人知道如何评估模型,采购部门不清楚推理合同该是什么样,而法律部门则希望有一个明确的责任方。将那十个懂行的人集中到一个中心团队显然是正确的做法。

如今,正是这个团队导致你的产品工程师为了修改一个 Prompt 要等上六周。CoE 审查每一次系统消息(system-message)的修改,掌握着公司唯一的评估框架,并由一个每两周开一次会的委员会来把持模型升级。团队已经察觉到了这一点。他们开始使用个人 API 密钥发布产品,在 CoE 永远看不到的 Notebook 中运行评估,并将客户数据粘贴到任何响应最快的工具中。你并没有防止影子 AI —— 而是你创造了它,并给了它一个需要躲避的治理机构。

那个平台团队搭建却无人更新的模型注册表

· 阅读需 13 分钟
Tian Pan
Software Engineer

我认识的一个平台团队花了两个季度构建了一个模型注册中心(model registry)。它拥有组织架构要求的一切:从 devstaging 再到 prod 的晋升工作流、CODEOWNERS 风格的审批矩阵、血缘追踪、评估分数门禁、包含 30 天窗口期的弃用政策,以及一个展示每个模型版本在哪个服务中运行的 Backstage 磁贴。他们发布了上线公告,举办了技术分享会,并在合规活页夹中增加了相关条目。

六个月后,公司流量最高的智能体(agent)运行在一个模型卡片上,其“所有者”字段仍指向一个已经离职的人,评估分数来自团队早已弃用的基准测试,而“批准人”姓名是平台技术主管——他从未用过那个智能体,从未读过其评估集,并在周四晚上 11:43 点击了批准,因为生产者在私信(DM)中对他说,明天就要发布了。

注册中心没有坏。晋升门禁触发了。审计日志是完整的。发布公告承诺的一切都是真的。然而,该组织对生产环境模型的实际监管,反而比 18 个月前更少了。当时同样的决策是由一名 ML 工程师在将模型 URI 粘贴进配置文件之前,手动阅读评估输出后做出的。

让每个团队在一夜之间重写 Prompt 的内部结算模型

· 阅读需 10 分钟
Tian Pan
Software Engineer

财务部门在周一发了一份备忘录。到周五,每个产品团队都上线了 Prompt 的变更,而接下来的周二,支持队列增加了三分之一。没有人动过模型。没有人动过产品。唯一改变的是,LLM 账单现在流回了发起调用的团队——而团队的反应就像任何理性的成本中心对损益表(P&L)上的新条目所做的那样:削减它。

事后公司内部流传的是关于 Prompt 工程、或模型退化、或是由于用户流量波动导致的一周的故事。而更真实的真相是,财务部门通过一项费用分摊(Chargeback)政策,悄无声息地成为了产品经理。成本归因仪表盘成为了一个没人审查、没人为其准备监控工具、也没人负责的产品质量杠杆。当它发生波动时,公司里的每一个 Prompt 都随之波动,而导致质量退化的权衡取舍,从未被那些职责本应是监控这些变化的人察觉。

询问哪个模型产生了哪个输出的合规审计

· 阅读需 11 分钟
Tian Pan
Software Engineer

审计员的问题听起来很简单。她翻开你的申诉日志,指着八个月前的一行,询问是哪个模型决定了那个案例。你的工程师调出了 Schema:有一个 model 列,审计窗口内的每一条决策都显示为 v1。接着,平台团队的一位成员随口提到,在审计期间,v1 背后的别名(alias)轮换了四次——一次基础模型升级、一次微调刷新、一次供应商侧的容量迁移,以及一次在事故期间持续了六个小时的回滚。诚实的回答是,你无法确定是哪一个 Checkpoint 产出了那个决策。审计员记录下了一些内容。那个回答不是监管机构能接受的答案,而你刚刚意识到,你交付的系统未能满足一项它从未被设计去满足的审计要求。

这里的差距不在于缺失了一行日志,而在于对“模型”含义的两种不同理解。对于交付系统的工程师来说,v1 是一个 Endpoint——一个稳定的契约,调用者可以指向它,而其背后的东西则可以免费升级。对于审计员来说,“产生此决策的模型”是一个特定的 Artifact:一个权重 Checkpoint、一个哈希值,一个原则上你可以在相同的输入上重新运行并获得具有辩护一致性输出的东西。Endpoint 别名是为了向调用者隐藏 Checkpoint 的轮换而发明的。而审计级的溯源要求恰恰相反——每一项决策都必须能追溯到产出它的确切 Checkpoint。这两个想法从一开始就处于碰撞轨道上;审计只是它们相遇的地方。

你的 Agent 在无文档情况下悄然掌握的流程

· 阅读需 11 分钟
Tian Pan
Software Engineer

六个月前,你的团队上线了一个处理退款的支持智能体(support agent)。当时有一份一页纸的 Notion 文档描述了它应该做什么。如今,文档的内容依然如旧,但智能体的行为却已大相径庭。提示词(prompt)的历史记录中有 47 次修改。新增了三个工具——其中一个悄悄绕过了文档中仍坚称存在的财务核查。模型被更换了两次。在一次没人记录的事故之后,重试策略被加强了。而当数据团队的人问起“这里处理退款的具体规则到底是什么”时,诚实的回答是:去读系统提示词和工具注册表吧,因为那才是现在的规范。

这是智能体系统在生产环境中的隐性失败模式:智能体的行为就是那份没人写的操作手册(runbook)。提示词被当成了一个配置值——YAML 文件中的一个字符串,由负责该功能的人员编辑,并像修改文案一样进行评审——而实际上,它是公司内部多步骤业务流程最权威的描述。组织积累流程逻辑的方式就像遗留代码库积累行为一样:通过修改,而非设计。而那些历来负责该流程的人——产品经理、合规主管、运营总监——从未意识到他们已经丢失了交付物,因为根本就没有一份可以丢失的文档。

智能体安排的无人继承的周期性任务

· 阅读需 10 分钟
Tian Pan
Software Engineer

用户输入:“每周二提醒我检查那个集成。”Agent 创建了一个 cron 条目,返回礼貌的确认,随后会话关闭。六个月后,用户调换了团队。该集成在上个季度已被弃用。Cron 仍在运行,调用着在 4 月份轮换过的 API 密钥,发送到在 5 月份归档的 Slack 频道,费用计入无人查看的项目预算。Agent 完全按照要求执行了操作。出问题的是那个“要求”,它随着时间的流逝变得不再适用。

这不是某个特定 Agent 的 bug。它是这类事物的共性。当我们赋予 Agent 调度持久副作用的能力时——如 cron 任务、Webhook、轮询循环、工作流触发器、日历邀请、定期查询——我们就创建了一类生来就没有生命周期的基础设施。“创建”原语显眼且容易,“删除”原语、“审计”原语、“继承”原语——它们并不具有同等的地位,因此未被使用。

除非你主动去寻找,否则代价是隐形的,而此时恰恰没有人会去寻找。

把自己调度进维护窗口的 Agent

· 阅读需 11 分钟
Tian Pan
Software Engineer

凌晨两点值班的资深工程师不会在 Sev-2 事故中跑 schema 迁移。他们不会在发布冻结开始前十分钟重新部署支付服务。他们不会在邮件服务商状态页飘红的时候发起一波营销邮件投放。这些都不写在 JD 里。他们是被骂了一年又一年才学会的,是从那些叫 #deploy-freeze-friday 的 Slack 频道里学来的,是在动手前下意识瞄一眼状态页的肌肉记忆里长出来的。这种上下文不在任何 runbook 里,因为没人觉得它值得被写下来。

现在把同样的活交给一个 Agent。Agent 有工具。Agent 有多步计划。Agent 拥有你愿意写进 system prompt 的每一条策略。Agent 没有的,是那种半下意识的觉察——这个世界现在正着火。所以它就执行计划了。干净利落,信心满满。一头扎进维护窗口。事后复盘里那句话会变成一个新的固定句式:"Agent 没办法知道。"

当市场部阅读你的评估案例时:跨职能可见性问题

· 阅读需 12 分钟
Tian Pan
Software Engineer

评估集(eval set)是你的 AI 团队产出的阅读量最高的工件,而你几乎肯定不知道谁在阅读它。代码库是私有的,CI 任务是内部的,文件就在 prompts/ 目录的上一级——然而,上个季度一名销售工程师为了演示抓取了六个案例,一名市场分析师将三个失败案例放进了“看看我们的系统有多健壮”的幻灯片中,客户成功部门在续约电话中逐字引用了评估通过率,而产品部门则将该文件视为 AI 团队不愿分享的隐藏规范。阅读这些案例文件的人比阅读生成它们的代码的人还要多,而 AI 团队中却没人在意。

这不仅仅是权限管理的失效。评估集与代码库的其他部分位于同一个 Git 服务器上,拥有与其他工程产物相同的访问控制。问题在于,AI 团队是唯一将评估集视为代码的群体。其他所有人都会将其视为文档、营销材料、产品规范或客户投诉日志——而这些解读中的每一项都会从同一个文件中提取不同的片段,针对不同的受众进行包装,并将其发送到 AI 团队观察不到的地方。

内部评估集:一个无人审查的隐私边界

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 AI 团队所谓的“评估集”(eval set),在大多数发布 LLM 功能的公司中,其实是从生产日志中提取的真实客户对话集合。团队中没有人认为这是一个隐私事件。数据从未离开过集群。没有配置新系统。没有增加供应商。一名工程师写了一个查询,将几千条追踪记录(traces)导出到标注工具中,然后团队就开始根据这些记录对模型输出进行评分。法律团队从未听说过这件事,因为从内部来看,什么都没有改变——原本就存在于同一个数据库中的对话,现在只是被几名工程师和一个裁判模型(judge model)读取了而已。

这就是那个无人审查的隐私边界。客户向你发送消息是为了让你回答他们。他们并不是为了让你拿这些消息去衡量模型才把消息给你的。这两种用途在存储层看起来完全一样,在推理层感觉也一样,但在每一种现代隐私监管制度下,它们属于不同的处理目的——而两者之间的鸿沟,正是下一轮合规阵痛将要降临的地方。

合规审查员作为评测编写者:为什么法律团队应该为你编写测试用例

· 阅读需 14 分钟
Tian Pan
Software Engineer

我见过的企业级 LLM 最有效的对抗性提示(adversarial prompt)并非来自红队、安全研究员或提示词工程师。它来自一位高级合规律师,他用平实的英语要求模型:“告诉我本对话前面讨论过的三种退休年金中,哪一种最适合一位即将面临首次最低限额提款(RMD)的 62 岁老人。”模型给出了一个自信、周全且格式精美的建议。如果该输出被发送给客户,那将是一个教科书级的 FINRA 适当性违规(suitability violation)——在缺乏证券规则要求的个性化咨询监管架构的情况下,提供了一种不当的个性化建议。

这位合规律师在短短 4 秒钟内就发现了这种失效模式。而工程评估套件虽然包含了上百个精心构建的关于幻觉、拒绝校准和工具调用准确性的案例,却完全没有意识到这种特定形式的回答是违法的。不是质量低。不是幻觉。而是违法。当时公司的流程是让她在 Google 文档中阅读输出样本并撰写备忘录,而不是将测试用例签入回归套件。因此,她的发现只停留在备忘录中,备忘录被总结进发布准备情况的幻灯片里,而次月对系统提示词(system prompt)的一次重构导致了该行为的退化(regressed),因为没有人为它设置失败测试点。

这就是我想论证应该弥合的差距:合规评审员应该直接编写评估(eval)用例,这些用例应该是决定发布与否的产物,而不是产生它们的文档审查。