搜索文章

输入关键词开始搜索

从 Demo 到生产:AI Agent 工程真正难在哪里

AI程序设计#Agent#AI Coding

今天参加了一位同事的转正答辩。

答辩里介绍了不少 AI 与数据可视化结合的实践。有些能力已经能够稳定生成内容,也开始进入实际使用阶段。

一开始我以为后面的讨论会围绕项目成果、完成情况和下一阶段计划展开。后来话题逐渐从具体项目转向了几个更大的问题:AI 能力怎样从 Demo 进入生产环境,Agent 的稳定性应该由谁保证,大量生成候选方案以后怎么判断结果好不好。讨论还延伸到了个人成长:经常使用 AI 是否代表能力真的提高了,以及 AI 可以承担越来越多工作以后,个人还需不需要专业主线。

这些已经不只是对某个项目的评价了。它们都在追问同一件事:当 AI 已经能够完成任务后,工程师下一步还要补什么?

这里记录一下我的理解。

能够生成结果,只是第一步

目前很多 AI 项目先解决的是“能不能做出来”。

输入一段内容,模型完成理解和规划,再调用多个工具生成最终结果。如果效果不错,这套流程很容易让人兴奋,因为过去需要人工完成的工作,现在似乎可以自动执行了。

但答辩中的一个反馈让我印象很深:

Demo 能跑,与生产系统可以交付,中间还有很长一段距离。

模型具备完成任务的能力,不代表系统具备稳定完成任务的能力。

进入生产环境后,需要继续回答这些问题:

  • 必须执行的检查会不会偶尔被跳过?
  • 生成失败后应该修改参数,还是完全重新生成?
  • 连续失败时,系统什么时候停止?
  • 中途发生异常,任务能不能恢复?
  • 出现一个低概率错误,能不能还原当时的执行过程?
  • 更换模型后,原来的流程是否仍然可靠?

继续优化 Prompt,解决不了上面所有问题。

以前做传统系统时,我们很自然地会考虑异常处理、日志、监控和状态恢复。到了 AI Agent 里,因为模型“多数时候都能正确处理”,反而容易降低这方面的要求。这一点需要特别警惕。

必须执行的规则,不能只写在 Prompt 里

答辩里讨论了一个很具体的架构问题:哪些约束应该写进 Prompt,哪些必须由程序强制执行。

例如:

  • 每次生成后必须进行质量检查;
  • 检查未通过时禁止输出;
  • 重试次数不能超过上限;
  • 关键操作必须经过权限验证;
  • 输出必须满足规定的数据结构。

这些规则如果只写在 Prompt 中,执行权仍然在模型手里。

模型可能连续很多次都正确执行,让开发者误以为流程已经稳定。但 Prompt 驱动的行为依然存在概率。模型能力变化、上下文变长或者输入出现特殊情况,都可能导致某个步骤被跳过。

顺着这个问题,我现在会把规则分成两类。

允许模型判断的部分,可以放在 Prompt 和 Agent Planning 中。例如分析失败原因、选择修改策略、比较不同候选方案。

必须执行的部分,则应该放进 Hook、状态机或确定性代码中。无论模型是否记得,系统都会强制执行。

以后设计 Agent,只要需求里出现“必须”“每次”“绝不能跳过”,我觉得就应该先问一句:

这条规则为什么还在 Prompt 里?

Prompt 可以引导模型怎么做,但每次都必须执行的检查,还是要由程序控制。这个边界没有划清楚,后面大概率会走弯路。

Agent Loop 需要完整的工程结构

讨论中还有一个问题:怎样让模型在失败后自动修正。

常见做法是先让模型生成结果,再执行质量检查。如果检查失败,就把原因返回给模型,让模型修改参数或重新生成。

看起来只是一个简单循环,真正做起来还要补上不少工程约束。

首先,失败原因需要结构化。

只告诉模型“结果不合格”,模型只能重新猜测。更有用的信息应该包括错误类型、错误位置、预期结果和实际结果。这样模型才能判断是局部修改,还是重新执行整个任务。

其次,需要设置退出条件。

模型不能无限尝试。每个任务都应该有重试次数、执行时间和资源消耗限制。达到上限后,系统需要保留现场并返回明确的失败状态。

然后还要考虑重复执行是否安全。如果一个工具调用会写文件、创建数据或请求外部服务,直接重试可能产生重复结果。工具最好具备幂等能力,或者可以检测当前步骤是否已经完成。

把这些问题放在一起,一个准备进入生产环境的 Agent Loop 至少需要:

  • 结构化的失败原因;
  • 明确的重试上限;
  • 可恢复的任务状态;
  • 幂等或可检测的工具调用;
  • 完整的执行 Trace;
  • 必要时由人接管的入口。

缺少这些约束,所谓 Agent Loop 就只是让模型多试几次,还不能算稳定的工程能力。

没有 Trace,Agent 很难调试

答辩中还提到了 AI 系统的可观测性问题。

传统程序出现故障,可以查看日志、调用栈和监控数据。Agent 系统中还包含模型推理、工具选择和多轮重试,如果只保存最终结果,很多问题几乎无法还原。

一条完整 Trace 至少应该记录:

  • 每轮模型收到的上下文;
  • 模型输出的结构化结果;
  • 模型选择了什么工具;
  • 工具返回了什么;
  • 哪一道 Gate 没有通过;
  • 系统为什么发起重试;
  • 重试时修改了哪些参数;
  • 最终结果来自哪一次尝试;
  • 整个任务消耗了多少资源。

这些记录不只是为了线上排查。

当 Trace 积累到一定数量后,还可以反过来分析系统:哪些失败反复出现,哪些检查应该改成确定性程序,哪些 Prompt 已经过于复杂,哪些任务需要重新拆分。

如果 Agent 总是在同一个地方失败,继续要求模型“再试一次”没有太大意义。需要修改的是系统。

让 AI 大量探索之前,先定义 Eval

答辩中的另一个方向,是让 AI 从辅助执行者进一步变成方案探索者。

过去受时间限制,一个人可能只能设计几个方案。现在可以让 AI 快速生成更多候选结果,再从中筛选。

但这条路有一个前提:必须先知道如何评价结果。

如果没有 Eval,大规模生成只会产生更多需要人工检查的内容。人的工作从亲自制作,变成逐个挑选,工作量不一定会减少。

Eval 可以分成几层:

  • 用程序检查格式、结构、尺寸和完整性;
  • 用量化指标判断结果是否达到最低要求;
  • 用模型辅助评价难以程序化判断的质量;
  • 对少量最终候选结果进行人工判断。

这也提醒了我:AI 越擅长生成,越需要人提前说清楚什么样的结果才算好。

只有自己真正理解什么是好结果,才能把判断写成规则、案例和 Eval。否则模型生成得再多,也只能凭感觉选择。

使用 AI 的次数不等于 AI 能力

转正答辩通常需要评价一个人的成长。过去容易参考完成了多少项目、写了多少代码。现在加入 AI 后,又出现了 Session 数量、Token 消耗、工具调用次数等指标。

但答辩中也提到,这些只能证明一个人在频繁使用 AI,不能证明他的能力已经提高。

这和用代码行数评价工程师差不多。

相比使用量,我觉得下面这些变化更值得观察:

  • 是否开始主动怀疑和验证模型输出;
  • 是否知道哪些工作不能完全交给模型;
  • 是否会把关键规则改成 Hard Gate;
  • 是否能够设计失败重试和恢复流程;
  • 是否会用 Eval 判断修改有没有效果;
  • 是否能通过 Trace 定位概率问题;
  • 是否可以把反复出现的经验写成测试、规则或 Skill;
  • AI 生成代码的返工次数是否减少;
  • 是否能够对最终结果负责。

所以个人的 AI 学习记录,也不应该只统计“这个月用了多少”。

更有意义的问题是:

  1. 这个月解决了哪一种以前解决不了的问题?
  2. 在什么地方相信了模型的错误结果?
  3. 哪些人工纠正可以改成自动检查?
  4. 哪些错误已经重复出现?
  5. 新增了哪些可以复用的规则、Eval 或工具?
  6. 下一阶段应该刻意训练什么能力?

这种复盘更麻烦,不过它记录的确实是能力变化,不只是使用量变化。

AI 时代仍然需要专业主线

答辩最后还讨论了个人发展问题。

AI 可以帮助一个人处理更多环节。工程师可以参与需求分析、设计、开发、测试和内容生产,过去清晰的角色边界正在变淡。

但这并不意味着专业主线不再重要。

以数据可视化为例,模型可以辅助生成代码、分析数据和探索设计方案。但如果自己缺少对视觉表达、交互、数据和用户理解过程的长期积累,就很难判断模型给出的方案是否合理。

AI 让工程师能够参与更多环节,但判断模型给出的结果是否合理,仍然依赖长期积累的专业能力。

个人后续的发展,可以围绕自己的主线向外扩展:

  • 向下补软件工程、测试、可观测性和系统设计;
  • 向上理解用户问题以及结果为什么有用;
  • 学习 Agent、Harness、Gate 和 Eval;
  • 把个人经验整理成规则、案例和 Skill;
  • 逐渐从完成任务,走向定义问题和验收结果。

如果主线不清楚,很容易变成什么都能借助 AI 做一点,但没有哪一类问题能够真正判断和负责。

以后再看 AI 项目,我会直接检查这些问题

这次答辩让我记下了下面这份清单。以后再看一个 AI 项目,我不应该只看它生成了多少结果,还会继续检查:

  • 哪些步骤由确定性程序保证?
  • 哪些判断交给了模型?
  • 失败原因是否结构化?
  • 重试有没有明确上限?
  • 重复执行是否安全?
  • 能否还原完整执行过程?
  • 任务中断后能否恢复?
  • Eval 是否真的对应结果质量?
  • 项目经验有没有变成可复用的工程资产?

对个人也是一样。

会使用模型已经不再稀缺。下一阶段需要继续积累的,是识别模型的不可靠性、建立工程边界,并且对最终结果负责。能不能做到这些,可能就是 AI 工程师从“会用工具”走向“能够交付”的分界线。