Building Reliable Agentic AI Systems
你正在用人工智能助手帮忙写一封邮件,它写得很流畅,但突然在称呼里写错了客户的名字。你发现后改了,心里却犯嘀咕:如果这是一份发给全公司的通知呢?如果是一个自动处理订单的系统呢?这种“大部分时候对,偶尔离谱”的特性,正是今天使用大语言模型(LLM)构建可靠系统时最棘手的难题。Martin Fowler 的这篇文章,没有从理论出发,而是通过一个真实案例来展开:一家名为 Bayer 的公司,如何把大语言模型嵌入到他们的核心业务流程中,并且保证它不出错。
Bayer 是一家农业科技公司,他们有一个叫 Climate FieldView 的平台,帮助农民管理农田。农民会拍照上传田里的杂草或病虫害,系统需要识别出问题并推荐合适的农药。过去这个任务靠人工专家完成,但专家数量有限,响应慢。他们想用大语言模型来自动化这个流程。但问题很明显:如果模型推荐错了农药,农民可能用了无效的药,造成经济损失甚至环境污染。所以系统必须极其可靠。
文章详细描述了 Bayer 团队如何设计这套系统。他们没有让模型直接输出答案,而是把任务拆解成多个步骤。第一步,模型先识别图片中的作物和杂草种类;第二步,根据识别结果去查询一个经过验证的农药数据库;第三步,再结合当地的气候和土壤数据,生成最终推荐。每一步的输出都经过格式校验和逻辑检查。比如如果模型识别出的杂草不在数据库中,系统会直接拒绝推荐,转而请求人工介入。这种设计思路叫做“人机回环”(human-in-the-loop),但更关键的是,他们把模型当成了一个不完美的组件,通过外围的校验逻辑来兜底。
文章还提到了一个重要的概念:可靠性不是模型自己的事,而是整个系统的属性。就像你不能只靠一个超级精准的传感器就让自动驾驶汽车安全,你需要冗余、校验、降级策略。Bayer 的案例里,他们甚至对模型的置信度做了量化:如果模型对某个识别结果信心不足,系统会主动降低自动化程度,把决策权交还给人类专家。这种“知道什么时候该认怂”的能力,反而比模型本身的准确性更重要。
读这篇文章时,最值得留意的是他们如何把抽象原则变成了具体代码。比如他们定义了一套“合约”(contract),规定模型输出的格式和取值范围,违反合约的输出会被直接丢弃。这听起来像是软件工程里常见的防御式编程,但应用到 AI 系统时,你需要想清楚:模型可能犯哪些错?哪些错是可接受的,哪些是不可接受的?Bayer 的答案是:宁可因为过于保守而频繁请求人工,也不让一个错误推荐流出。这种取舍背后,是对业务后果的深刻理解。
你可能会想,这样会不会太慢、太贵?文章给出了数据:在 Bayer 的系统中,大约 80% 的请求可以全自动处理,剩下的 20% 转向人工。这 20% 里,有一部分是模型确实不确定的,也有一部分是校验逻辑认为风险太高的。但正因为有了这 20% 的人工兜底,整个系统的可靠性才达到了生产环境的要求。这其实揭示了一个常常被忽视的事实:可靠的 AI 系统,不是靠把模型做到完美,而是靠设计一个能容纳不完美模型的架构。
最后,文章留下了一个值得反复琢磨的判断:在构建可靠 AI 系统时,最稀缺的资源不是更好的模型,而是对失败模式的想象力。你需要提前想清楚所有可能出错的地方,并针对每一种情况设计响应策略。Bayer 的团队花了大量时间模拟各种边界情况,比如用户上传了模糊的照片、照片里有多种杂草、或者当地法规禁止使用某种农药。这些场景在测试集里可能永远不会出现,但在真实世界里一定会发生。读完这篇文章,你带走的不应该是对某个技术细节的记忆,而是一种思维方式:把 AI 当做一个需要被管理的风险,而不是一个万能的答案机器。