青雲的博客

Article

AI Agent 工程师的核心能力:从模型调用到可靠系统

· 24 分钟阅读

这两年,AI Agent 工程师开始成为一个越来越常见的岗位名称。

但很多学习路线仍然停留在技术名词的罗列:Python、LangChain、Prompt、RAG、MCP、多 Agent。学完一圈,Demo 能跑了,真正接到业务时却不知道该从哪里下手。

问题不在于这些技术不重要,而在于它们不是主线。

我对这个岗位的理解是:

AI Agent 工程师不是“会调用大模型 API 的工程师”,也不是“特别会写 Prompt 的人”。

更准确地说,他是一个能把不稳定的模型能力,变成可执行、可验证、可恢复、可交付系统的工程师。

模型有概率。

业务要结果。

Agent 工程师的工作,就是在这两者之间搭一座桥。

真正的主线是:

你能不能定义一个目标,让 Agent 调用真实工具持续推进;出错时保留秩序;最后用外部证据证明任务确实完成了。

这篇文章试着给出一张完整的能力地图,以及一条可以用真实项目验证的成长路线。

先认清这个岗位到底在做什么

一个最小 Agent,看起来可能只有几十行代码:

用户输入
  -> 调用模型
  -> 模型选择工具
  -> 执行工具
  -> 把结果交还模型
  -> 循环直到输出答案

这部分不难。

真正困难的是后面的几十个问题:

  • 模型为什么该调工具时没有调?
  • 工具参数错了,应该重试、修正还是退出?
  • 同一个写操作执行两次,会不会产生重复数据?
  • RAG 搜到的内容到底是不是正确证据?
  • 上下文越来越长,哪些该保留,哪些该压缩?
  • 任务跑了两个小时,中断后能不能继续?
  • 模型说“完成了”,谁来证明它真的完成?
  • 高风险操作什么时候必须让人确认?
  • 换一个模型以后,系统为什么突然退化?
  • 效果提升了 5%,成本却涨了三倍,值不值得?

这些问题已经不是 Prompt Engineering 能单独解决的了。

它们涉及软件工程、分布式系统、数据工程、产品设计、安全治理和评估。

所以我对这个岗位还有一个更具体的定义:

AI Agent 工程师,本质上是一个理解模型不确定性的软件系统工程师。

第一层:扎实的软件工程基础

这是最容易被低估的一层。

很多学习路线一上来就教框架,但真实 Agent 项目最后拼的往往还是传统工程能力。

至少要掌握:

  • 一门主力语言,Python 或 TypeScript 都可以;
  • HTTP、WebSocket、流式响应和异步编程;
  • 数据库、缓存、队列和对象存储;
  • Git、测试、CI/CD、日志和部署;
  • API 设计、错误处理、重试和幂等;
  • 基本的权限、安全和密钥管理;
  • 阅读陌生代码和定位线上问题的能力。

为什么这些重要?

因为 Agent 一旦开始做事,就一定会碰真实系统。

它要读数据库、调接口、改文件、跑命令、等待异步任务、处理第三方限流。模型可以帮你写代码,但它不会替你承担系统设计的责任。

比如一个 sendEmail 工具,看起来只是调用一次 API。

真正上线以后,你要考虑:

  • 重试会不会导致邮件发两次;
  • 请求超时后,邮件到底发出去没有;
  • 用户有没有权限给这个地址发信;
  • 敏感信息能不能进入日志;
  • Agent 生成的是草稿,还是可以直接发送;
  • 操作失败以后如何补偿。

这些都不是模型问题。

这是软件工程问题。

如果你已经是后端、全栈、基础设施或平台工程师,其实不用把自己清零重学。你原来的大部分能力都能迁移过来。

第二层:理解模型,而不是迷信模型

Agent 工程师不一定要会训练大模型,但必须理解模型的工作边界。

至少要知道这些东西:

  • token 和 context window 是什么;
  • system prompt、用户消息、工具结果如何进入上下文;
  • temperature、reasoning effort、structured output 会影响什么;
  • tool calling 是模型生成结构化决策,不是模型真的执行了函数;
  • embedding 适合解决什么,不适合解决什么;
  • prompt cache 为什么会命中或失效;
  • 不同模型在推理、工具调用、长上下文、成本和速度上的差异;
  • 幻觉不是一个可以彻底“修掉”的 bug,而是要被系统管理的风险。

真正有用的能力不是背参数。

而是遇到问题时,能判断它属于哪一层。

比如 Agent 漏掉了一次工具调用,可能是:

  • 工具描述不清楚;
  • 工具太多,选择空间过大;
  • 当前上下文里没有触发工具所需的信息;
  • 模型本身工具调用能力弱;
  • system prompt 和用户指令发生了冲突;
  • 上游状态已经错了。

如果你把所有问题都归结为“Prompt 写得不好”,优化很快就会变成玄学。

第三层:Context 和 RAG

Agent 的能力,不只取决于模型知道什么,还取决于这一轮看见了什么。

这就是 Context Engineering。

你需要理解不同信息的性质:

Context:这一轮决策必须看到的信息
State:任务进行到哪里、已经发生了什么
Memory:跨任务、跨会话需要保留的经验和偏好
Knowledge:通过 RAG 动态检索的外部知识

这四个东西不能全部塞进聊天历史。

RAG 也不能只理解成“文档切块以后放进向量库”。

一套稍微可靠的 RAG,至少包括:

  • 文档解析:网页、PDF、表格、代码不能统一按纯文本处理;
  • Chunk:保留标题、章节、代码块和语义边界;
  • Metadata:时间、来源、权限、业务线和文档层级;
  • Retrieval:关键词、向量和结构化过滤组合;
  • Rerank:召回负责找全,排序负责找准;
  • Context Assembly:控制顺序、长度、重复和冲突;
  • Citation:回答可以回到原始证据;
  • Evaluation:知道没搜到、搜错了,还是模型没用好证据。

学习这一层最好的方式,不是做一个“上传 PDF 然后聊天”的页面。

而是给自己设一组难题:跨文档引用、表格问答、时间冲突、权限过滤、没有答案。然后记录每一次错误发生在哪个阶段。

第四层:Tool Calling 和能力治理

Tool Calling 是 Agent 真正从“说”走向“做”的地方。

也是最容易翻车的地方。

一个好工具不只是有名字、描述和 JSON Schema。它还应该有:

  • 清楚的输入和输出契约;
  • 明确的副作用;
  • 可区分的错误类型;
  • 超时和重试策略;
  • 幂等或补偿机制;
  • 权限和审批规则;
  • 输出截断和敏感信息处理;
  • 可以进入 trace 的执行记录。

我一般会先按风险给工具分层:

类型例子默认策略
只读搜索、查询、读取文件自动执行
可逆写入创建草稿、写临时文件自动执行并记录
高风险写入发邮件、提交代码、修改订单执行前确认
不可逆操作删除数据、扣款、生产部署强审批或禁止

要记住一件事:

工具不是 Agent 的“插件列表”,而是系统交给模型的权力。

会定义工具,只能说明你做出了 Demo。

会治理工具,才开始接近生产系统。

第五层:Agent Loop、State 和 Memory

Agent 不只是模型调用一次工具。

它需要在多轮行动中持续接近目标。

我会把一个完整 Loop 拆成这些部分:

Goal         目标和成功标准
Planner      根据当前状态选择下一步
Actor        调模型、工具或子 Agent 执行动作
Observer     收集工具输出、日志、diff 和环境变化
Verifier     判断任务是否真的取得进展
State        保存已完成、失败、阻塞和下一步
Policy       权限、预算、模型路由和重试约束
Exit         成功、失败、风险、预算或人工接管

这里有两个常见误区。

第一个是把计划当成一次性产物。

真实任务会不断出现新信息,好的 Planner 应该根据 Observer 和 Verifier 的结果滚动调整,而不是死守最初生成的十步计划。

第二个是把聊天历史当成 State。

聊天历史记录了说过什么,但任务状态要回答:

  • 当前目标是什么;
  • 哪些已经完成;
  • 哪些验证通过;
  • 失败过什么;
  • 为什么选择下一步;
  • 哪些动作不能再重复;
  • 中断以后从哪里恢复。

长任务能不能稳定运行,往往不取决于上下文窗口有多大,而取决于这些状态有没有被系统接住。

第六层:Harness Engineering

如果说模型是发动机,Harness 就是发动机周围整套让它可以上路的系统。

它把前面的能力组织起来:

  • Prompt 和上下文装配;
  • 工具注册和权限;
  • Loop 和任务状态;
  • 沙箱和资源隔离;
  • Hooks、Skills、MCP 和插件;
  • Trace、日志和可观测性;
  • Context compaction 和长任务恢复;
  • Verifier、评估和质量门禁;
  • 人类确认、接管和回滚。

我自己做 Orca 时,对这一层感受很深。

有一次用户只反馈了三个字:

卡死了。

把 session 日志拉出来后,我看到接近 88 万 input tokens。真正的问题不是某个请求超时,而是很多小问题叠在一起:文件读取太长、搜索结果没有分页、旧 reasoning 被反复带回、压缩触发太晚、工具输出不断膨胀,系统压缩时用户还不知道发生了什么。

最后的修复涉及工具输出、上下文重放、soft compaction、TUI 状态和回归测试。

模型没有变。

变的是它在怎样的工程环境里工作。

这就是 Harness Engineering。

这次问题的完整排查过程,我单独写在了《用户说 Orca 卡死了,我最后修的是 Agent 的上下文债》里。

优秀的 Agent 工程师,不能只在模型表现好时把流程跑通。

还要在模型犯错、工具失败、上下文膨胀和任务中断时,让系统仍然保留秩序。

第七层:Evaluation 和可观测性

这是我认为 Agent 工程师最核心,也最稀缺的一项能力。

没有评估,Agent 开发就是玄学。

你改了 Prompt,感觉更好了。

换了模型,感觉更聪明了。

加了几个工具,感觉能力更强了。

但它可能只是换了一种错法。

Agent 评估不能只看最终回答像不像。至少要看五个维度:

维度要回答的问题
任务有没有真正完成目标
证据结论有没有可靠依据
过程工具和步骤是否合理
成本token、时间和调用次数是否可接受
边界失败和风险是否处理得当

不要让模型既当选手,又当唯一裁判。

能用确定性验证的,优先使用确定性验证:

  • 代码任务跑测试和构建;
  • 数据任务核对查询结果;
  • RAG 任务检查引用证据;
  • 工作流任务检查下游状态;
  • 高风险任务检查审批和审计记录。

LLM-as-Judge 可以辅助处理主观质量,但不能代替测试、规则和人工抽检。

同时要建立 trace。

一次任务为什么成功、为什么失败、在哪一步开始跑偏、花了多少成本,都应该能够被还原。没有 trace,你看到的只有最后一段话,根本谈不上优化。

第八层:安全、成本和生产工程

Demo 关心“能不能做”。

生产系统还要关心“出事怎么办”。

这一层包括:

  • Prompt injection 和不可信内容隔离;
  • 工具权限、最小授权和敏感操作审批;
  • 文件系统、Shell、浏览器和代码执行沙箱;
  • 密钥、隐私数据和日志脱敏;
  • 超时、限流、重试、熔断和降级;
  • 模型路由、缓存和 token 预算;
  • checkpoint、恢复、回滚和人工接管;
  • 灰度发布、监控、告警和事故复盘。

Agent 最大的风险不是偶尔答错。

而是它答错以后还有执行权。

所以安全不能等产品上线前再补。权限和风险边界,应该在定义工具时就进入设计。

成本也是一样。

“让模型再想一轮”很容易,“这一轮是否值得”才是工程问题。优秀的 Agent 工程师要能在任务成功率、延迟和成本之间做取舍,而不是默认把所有步骤都交给最贵的模型。

第九层:产品和领域判断

最后一层经常被技术学习路线漏掉。

不是所有流程都适合做 Agent。

Agent 比较适合这些任务:

  • 输入和路径有一定不确定性;
  • 需要动态选择工具;
  • 可以通过环境反馈逐步推进;
  • 有清楚的成功标准;
  • 失败可以被发现、恢复或交还给人。

如果流程高度固定、规则明确,普通工作流和代码通常更便宜、更稳定。

如果任务没有可验证的结果,比如“帮公司做出正确战略”,那不是再加几个 Agent 就能解决的。

优秀的 Agent 工程师,不只是会问“怎么实现”。

他还要问:

  • 为什么这里需要 Agent,而不是普通自动化?
  • 用户愿意把多大的权力交给它?
  • 用户什么时候需要看到过程?
  • 哪些错误可以容忍,哪些错误一次都不能发生?
  • 人类应该在什么位置介入?
  • 这个系统创造的价值,能不能覆盖模型和工程成本?

技术决定能不能做。

产品判断决定该不该做。

一条更实际的学习路线

如果让我重新学一次,我不会从“把所有框架过一遍”开始。

我会用四个项目逐层建立能力。

第一个项目:有证据的 RAG

做一个你真正熟悉领域的知识助手。

要求不只是能问答,还要:

  • 支持多种文档;
  • 使用 metadata 和 hybrid search;
  • 回答附带原文引用;
  • 找不到时明确拒答;
  • 准备至少 30 条评估样本;
  • 记录召回、答案、延迟和成本。

做完这个项目,你会真正理解解析、检索、上下文和评估。

第二个项目:会做事的单 Agent

给它 3 到 5 个真实工具,比如搜索、读取数据、生成草稿和提交审批。

要求:

  • 工具有明确 Schema;
  • 错误有语义;
  • 写操作具备幂等性;
  • 高风险动作需要确认;
  • 最终结果经过 Verifier;
  • 整个过程可以在 trace 里重放。

不要急着做多 Agent。

一个单 Agent 的工具、状态、权限和验证都没有做好,多 Agent 只会放大混乱。

第三个项目:可以中断和恢复的长任务 Agent

让它完成一个持续几十分钟、跨多个步骤的任务。

比如分析一个仓库、修复问题、运行测试并生成报告。

要求:

  • 有明确 Goal 和验收标准;
  • State 不依赖聊天历史;
  • 支持 checkpoint 和 resume;
  • 有最大轮数、token 和工具预算;
  • 能检测重复动作和无进展;
  • 中断后知道从哪里继续;
  • 无法完成时能主动交还给人。

这一步会让你真正理解 Loop、State、Memory 和 Harness。

第四个项目:接入真实用户

最后,把前面的 Agent 给真实用户使用。

不一定要很多人,十个真实用户就能暴露大量 Demo 里看不到的问题。

你需要开始处理:

  • 模糊输入;
  • 权限差异;
  • 失败恢复;
  • 反馈和投诉;
  • 成本和延迟;
  • 版本退化;
  • 监控和事故复盘。

Agent 工程能力不是看教程长出来的。

它是在真实任务失败以后,你能不能把这次失败沉淀成下一次的机制。

怎么判断自己有没有入门?

不是看你会多少框架。

我会用下面这些问题检查:

  • 你能不能不用框架,写出一个最小 Agent Loop?
  • 你能不能解释 Context、State、Memory 的区别?
  • 你能不能给工具做权限和副作用分级?
  • 你能不能区分 RAG 是召回错了,还是生成错了?
  • 你能不能为一个 Agent 写 20 到 30 条固定 eval case?
  • 你能不能从 trace 里找到任务开始跑偏的位置?
  • 你能不能让长任务中断后继续,而不是重新开始?
  • 你能不能证明一次改动提高了成功率,而不是只说“感觉更好了”?
  • 你能不能说明什么时候不该用 Agent?

如果这些问题大多能回答,并且有实际项目作为证据,你已经不只是“会调用模型”了。

最后

成为 AI Agent 工程师并不需要先成为大模型研究员。

但成为一名优秀的 AI Agent 工程师,需要你同时尊重两件事:

第一,模型确实带来了过去软件没有的智能和泛化能力。

第二,这种能力天然不稳定,不能直接等同于可靠交付。

所以真正要学的,不只是 Prompt、RAG、Tool Calling 和框架。

而是怎么定义目标、组织上下文、治理工具、记录状态、构建 Loop、验证结果、控制风险,再把一次次失败沉淀成系统能力。

模型决定 Agent 的上限。

工程决定它有没有下限。

而优秀的 Agent 工程师,做的就是把这条下限一点点托起来。

延伸阅读

Keep Reading

相关文章

评论