# AI Agent 工程师: 工作内容、技能要求与入门路线 ```{contents} ``` "AI Agent 工程师"这个词最近两年被用得很泛:招聘网站上,它可能指"会调 LangChain 的后端",也可能指"负责把大模型接进业务流程的产品工程师",甚至等于"Prompt 工程师"。 这篇文章回答三个问题:这个岗位**每天在做什么**、需要哪些**可验证的技能**、以及一个普通开发者**从零到能上手**的具体路线是什么。文中的每个概念都尽量落到本仓库已有的实践文章上——原理说明 + 可跑代码,而不是概念堆砌。 ## 一句话定义 > AI Agent 工程师 = 把"会说话的模型"改造成"能自己动手把任务做完的系统"的人。 关键词是**系统**,不是模型。 | 岗位 | 主要产出 | 是否训练模型 | |------|---------|-------------| | 算法/大模型工程师 | 模型权重、微调与对齐方案、推理加速 | 是 | | **AI Agent 工程师** | 能完成任务的 Agent 系统(循环 + 工具 + 上下文 + 评估 + 运维) | 基本不训练,以调用与工程集成为主 | | Prompt 工程师 | 提示词模板与效果调优 | 否,但只是 Agent 工程的一个子集 | | 后端工程师 | 稳定的业务 API 与数据流 | 否 | 一句话概括这个岗位要解决的问题:**概率性的组件,怎么接进要求确定性的业务里**。模型输出天然不确定,而业务要求"要么成功、要么可解释地失败",这两者之间的全部工程缝隙,就是这个岗位的工作内容。 ## 一、日常工作内容 按一个 Agent 从想法到上线的生命周期展开,六个阶段的日常大致是: ```{mermaid} flowchart LR A[定义任务边界
成功标准] --> B[上下文与提示设计
context engineering] B --> C[工具与协议
function calling / MCP] C --> D[编排实现
循环 / DAG / 多 Agent] D --> E[评估与观测
eval + trace] E --> F[上线与运维
成本 / 权限 / 回滚] F -.失败样本回流.-> B E -.不达标.-> D ``` ### 1. 把模糊需求翻译成"可判定的任务" 业务方说"做个能自动处理客服工单的 Agent",这句话没法直接开工。要拆成: 1. **输入是什么**:邮件正文?工单系统里的字段?附件? 2. **输出是什么**:一句回复、一次数据库写入、一个工单状态变更? 3. **什么算成功**:这里是最关键的一步——**必须存在一个自动可判定的成功信号**。比如"工单被正确分类到 12 个类目之一"可以自动判定;"回复让客户满意"不可判定,得换成"包含退款金额且金额与订单表一致"。 能不能自动判定成功,直接决定这个任务适不适合做成 Agent。不可判定的任务先别急着上模型。 ### 2. 上下文工程 (context engineering) 确定任务后,决定"模型每轮该看到什么"。这是当下这个岗位**最耗时间**的部分,也是效果差异最大的地方: - **系统提示词**:角色、边界、输出格式约定。工程化的写法是把角色/工具规范/安全边界/任务管理分成独立模块,而不是写成一大段散文; - **检索**:从文档库、代码库、数据库里取出该给模型的事实。这块的技术栈见 [RAG: 给模型接上外部知识](./rag.md); - **历史与记忆**:多轮对话怎么压缩,跨会话经验怎么持久化(常见做法是落成 `AGENTS.md` 之类的项目记忆文件); - **预算控制**:上下文窗口是有限的,超了就要摘要、截断、按优先级打分裁剪。 日常动作是:跑一个失败用例 → 打印出真正发给模型的完整上下文 → 发现"该给的信息没给"或"无关信息挤爆了窗口" → 改组装逻辑。 ### 3. 工具与协议设计 工具是 Agent 的手,而模型只能看到工具的 JSON 描述,看不到实现。所以工具体验就是产品体验: | 设计点 | 反例 | 正例 | |--------|------|------| | 描述 | `query`——查询数据 | "按订单号查订单状态与金额, 返回 JSON" | | 粒度 | 一个 `do_everything` 巨工具 | 每个工具只做一件原子的事 | | 返回 | 甩回 800 行原始日志 | 内部先过滤, 只回结构化结论 + 明确的成功/失败标记 | | 权限 | 给 Agent 一个 unrestricted shell | 命令白名单 + 超时 + 高危操作人审 | 再往上就是协议层:把工具用统一协议(如 [MCP: AI 应用的 "USB-C" 接口](./mcp.md))暴露,做到"一处实现,多个 Agent 复用"。当工具数量上到几十个,协议化就从"锦上添花"变成"必需品"。 ### 4. 编排:循环、DAG 还是多 Agent 三种形态各有适用面,选错会白烧很多 token: | 形态 | 适合 | 代价 | |------|------|------| | 单次调用 / Prompt 链 | 步骤固定、一次问答能解决的 | 复杂任务会崩 | | Agent 循环 (ReAct) | 流程未知的开放式探索 | 可能死循环、不可复现 | | DAG | 流程已知、步骤固定的生产流程 | 需要事先把流程摸清楚 | | 多 Agent (主管 + 专家) | 子任务彼此独立、可并行 | 通信开销大、调试成本高 | 成熟做法是**分层**:用 Agent 循环在探索阶段把流程摸清,固化下来后改写成 DAG 进生产。原理与最小实现见 [从0开始搭建一个 Agent](./agent.md) 和 [AI 工作流里的 DAG](./dag.md)。 ### 5. 评估 (eval):这个岗位的分水岭 这是"玩具"和"产品"之间那道线。一个 Agent 上线前必须能回答:**改了这句提示词,效果是变好了还是变坏了?** 日常动作: - 维护一个**测试集**:从真实失败样本里攒出来的(输入, 期望行为)列表,几十条起步; - 定义**指标**:任务成功率、工具调用正确率、平均轮数、幻觉率、拒绝率、单任务成本与延迟; - **回归**:每次改提示词/换模型/加工具后跑一遍全量测试集,对比通过率曲线; - **判分方式**:能用代码判定的就用代码判(断言输出 JSON 字段、断言数据库状态);不能的用模型判分(LLM-as-judge),但要有抽样人工复核。 没有这一步,后面所有优化都是凭感觉。 ### 6. 安全加固、上线与运维 - **提示词注入**:外部数据(网页、邮件、文件名)里夹带的指令,模型分不清"用户说的"和"数据里写的"。防护靠权限收口而不是靠提示词; - **权限模型**:最小权限、沙箱执行、危险操作二次确认; - **可观测**:每次运行保留完整 trace——发给模型的完整上下文、每轮的工具调用与返回、最终输出、耗时与 token 数。线上出问题第一件事是回放 trace; - **成本与延迟优化**:缓存稳定前缀(见 [KV Cache: 大模型推理加速的关键机制](./kv-cache.md))、把简单请求路由到小模型、并行化无依赖的工具调用; - **灰度与回滚**:新提示词、新模型先在 5% 流量上跑,指标不达标一键回退(整体部署方法见 [从学习到生产](./production-deployment.md))。 ### 团队协作 - 和**业务方**:对齐"什么算成功",管理对准确率的预期(90% 不是"差不多了",20 次里错 2 次对某些场景不可接受); - 和**后端/SRE**:工具接口、限流、鉴权、成本归属; - 和**风控/法务**:数据不能出域、模型输出不能涉及合规承诺; - 和**算法团队**:要不要微调、换哪个模型、上下文窗口多大。 一个容易被忽略的现实:**这个岗位的技术栈每几个月就会变一次**(模型换代、框架换代、协议换代)。能活下来的是那些理解"循环 + 工具 + 上下文 + 评估"这套不变量的人,而不是记住某个框架 API 的人。 ## 二、需要的技能 按"基础 → 核心 → 加分"三层组织。判断某项技能是否真会,标准只有一个:**能不能在项目里用出来**。 ### 第一层:基础(缺了寸步难行) | 技能 | 具体到能做什么 | 为什么必需 | |------|--------------|-----------| | Python | 熟练写异步代码、类型标注、pydantic 数据校验 | Agent 生态的主语言, 几乎所有框架和示例都是 Python | | HTTP / API 集成 | 调 REST、处理超时重试与限流、读 SDK 文档 | 每个工具都是一次 API 调用 | | JSON / JSON Schema | 手写工具定义, 解析模型输出的结构化数据 | function calling 的接口语言 | | Git 与命令行 | 分支、diff、grep 检索代码库 | Agent 常常要操作代码和文件 | | 后端基本功 | 数据库读写、消息队列、容器化部署 | Agent 最终是一个要上线的服务 | | 英文文档阅读 | 直接读官方 docs 和论文 | 中文资料滞后, 生态更新以英文为主 | ### 第二层:核心(决定能不能独立交付) | 技能 | 具体到能做什么 | |------|--------------| | **LLM 基础直觉** | 知道 token、上下文窗口、温度、幻觉的成因;知道模型不会"执行"任何东西,只会输出 token,一切行动都是外层代码干的 | | **Function Calling 协议** | 能手写 `tools` 定义、处理 `tool_calls`、把结果以正确 id 回传、处理参数解析失败 | | **Agent 循环** | 能写出带最大轮数、超时、错误处理的 ReAct 循环;知道循环的记忆就是那串 messages | | **上下文工程** | 能设计系统提示词的结构;能做检索、压缩、按优先级裁剪 | | **RAG** | 会切分文档、算 embedding、向量检索 + 关键词检索混合、重排序;知道什么时候根本不需要向量库 | | **评估与观测** | 能自己搭测试集与判分脚本;能接 trace 与日志, 用数据说话 | | **工具设计** | 能写出一份模型不会用错的工具描述;知道返回值要短小结构化 | | **安全与权限** | 理解提示词注入的攻击面;能设计沙箱、白名单、人审三道闸 | ### 第三层:加分(决定走多高) | 技能 | 什么时候用得上 | |------|--------------| | 工作流编排(DAG、队列、重试、幂等) | 流程固化的生产系统, 见 [AI 工作流里的 DAG](./dag.md) | | 多 Agent 协作 | 子任务可并行、需要角色分工时 | | MCP / A2A 协议 | 工具与 Agent 需要跨系统复用时 | | 微调与蒸馏 | 提示词优化到瓶颈、需要稳定输出格式或降本时 | | 推理服务运维 | 自建推理(llama.cpp / vLLM)、GPU 显存与吞吐调优, 见 [从0开始搭建本地 AI 服务](./local-ai-service.md) | | 产品思维 | 判断"这个需求该不该用 Agent 做", 往往是最高杠杆的技能 | ### 软技能 - **把不确定说清楚**:向非技术同事解释"为什么这次答错了""为什么准确率只能到 95%"; - **结果导向**:Agent 项目 80% 的时间花在让最后 10% 的失败率降下来,要有耐心做脏活; - **持续学习但不追新**:新框架先看它解决了什么问题,再决定要不要引入。 ## 三、如何入门 核心原则:**先跑通最小闭环,再逐层加复杂度**。不要一上来学框架——框架是对原理的封装,不理解原理,遇到问题只会卡死。 ### 第一步:跑通"模型 + 一次函数调用"(1~2 天) 1. 在本地跑起一个模型服务(见 [从0开始搭建本地 AI 服务](./local-ai-service.md)),或者直接用任意 OpenAI 兼容 API; 2. 用 `curl` 或 Python 发一次带 `tools` 定义的请求,观察模型返回的 `tool_calls`; 3. 自己执行那个工具,把结果以 `role: "tool"` 回传,拿到最终答案。 **这一步的验收标准**:不看别人的代码,能自己写出这段请求-执行-回传的三步流程,并解释 `arguments` 为什么是字符串、`tool_call_id` 为什么必须原样带回。 ### 第二步:写出你的第一个 Agent 循环(3~5 天) 按 [从0开始搭建一个 Agent](./agent.md) 里的 30 行示例跑通,然后**故意把它改坏**,观察每种故障的现象: - 把 `max_rounds` 去掉,看它怎么不收敛; - 把工具描述改得含糊,看模型是不是就不用这个工具了; - 让工具返回 1 万行原始输出,看多轮之后回答质量怎么掉。 **这一步的验收标准**:能背出 Agent 的三要素(LLM + 工具 + 循环),并能独立诊断上面三种故障。 ### 第三步:加上检索与结构化输出(1~2 周) 做一个**有真实数据的小项目**,例如"基于你自己的笔记/代码库回答问题的助手": 1. 文档切分 + embedding + 向量检索(参考 [RAG: 给模型接上外部知识](./rag.md)); 2. 强制结构化输出(JSON),并用校验库在解析失败时触发重试; 3. 把检索也做成一门工具,让模型自己决定"要不要查、查什么"。 **这一步的验收标准**:能说出"什么时候该用检索、什么时候该把内容直接塞进提示词",以及混合检索为什么常常比纯向量检索好。 ### 第四步:补上评估与安全(1~2 周) 这是区分"做过 demo"和"能做产品"的分水岭: 1. 攒 30 条真实测试用例(输入 + 期望行为),写个脚本自动跑分; 2. 记录每次运行的工具调用序列、token 数、耗时; 3. 给工具加白名单、超时、危险操作确认;写一个"注入攻击"用例(让 Agent 读一段含恶意指令的文件),验证它不会照做。 **这一步的验收标准**:你能拿着一条通过率曲线说"这次改动把成功率从 62% 提到 85%",而不是"感觉变好了"。 ### 第五步:做真实项目,建立作品集(3~8 周) 入门最快的路径是**解决你自己真实存在的问题**。选题建议按"有明确成功信号"来挑: | 项目 | 成功信号 | 会练到的技能 | |------|---------|------------| | 日志/告警分诊助手 | 错误分类与人工判断一致 | 结构化输出、评估集、规则兜底 | | 个人知识库问答 | 答案引用到正确原文段落 | RAG、引用、幻觉抑制 | | 代码库问答/改码助手 | 生成的补丁能通过测试 | 代码检索、工具设计、沙箱 | | 工作流自动化(如日报汇总) | 定时产出且人工只做审核 | DAG、调度、幂等 | | 客服工单处理 | 分类准确率 + 平均处理时长 | 工具权限、人机协作、上线运维 | 交付时**一定要写清三件事**:成功率多少(怎么量出来的)、失败模式有哪些、成本和延迟是多少。面试时这三条比"我用了哪个框架"有说服力得多。 ### 一个 12 周路线图 ```{mermaid} flowchart LR W12["第 1~2 周
Python + API
+ JSON Schema"] --> W34["第 3~4 周
本地模型
+ 一次工具调用"] W34 --> W56["第 5~6 周
Agent 循环
+ 故障诊断"] W56 --> W78["第 7~9 周
RAG
+ 结构化输出"] W78 --> W910["第 10~11 周
评估与安全"] W910 --> W1112["第 12 周
真实项目
+ 作品集"] ``` 按每周 8~10 小时投入估算。有后端经验的人可以跳过基础段,直接用真实项目倒逼学习。 ### 学习资源(按权威性排序) 1. **官方文档优先**:OpenAI / Anthropic 的 function calling 与上下文工程文档、模型上下文协议(MCP)规范、你所用推理引擎的文档。文档永远比二手教程新; 2. **论文**:ReAct(推理与行动交替)、Reflexion(反思)、以及各类 Agent 综述——读摘要 + 方法图即可,不必逐行推导; 3. **开源项目源码**:挑一个成熟 Agent 框架,只读它的主循环那一百来行,比读完整仓库有价值; 4. **本仓库的实践系列**:[从0开始搭建本地 AI 服务](./local-ai-service.md) → [从0开始搭建一个 Agent](./agent.md) → [RAG](./rag.md) → [MCP](./mcp.md) → [DAG](./dag.md) → [从学习到生产](./production-deployment.md),这是一条从原理到生产的完整线。 ## 四、常见误区 | 误区 | 现实 | |------|------| | "Agent 效果不好是模型不行" | 大多数线上故障来自工具实现、上下文组装和错误处理, 不是模型本身。先打印出真正发给模型的上下文再下结论 | | "先把框架学完再动手" | 框架换代很快, 主循环原理却十年不变。直接手写 30 行循环比看完 10 小时教程有用 | | "提示词工程就是全部" | 提示词只是上下文工程的一部分; 工具设计、检索质量、评估闭环的杠杆往往更大 | | "demo 惊艳 = 能上线" | demo 跑一次成功很容易, 上线要求第 100 次也成功, 还要能解释失败的那几次 | | "Agent 越自主越好" | 生产系统里, 自主度要和可验证性匹配; 拿不准的环节就该插人工确认 | | "多 Agent 一定更强" | 多 Agent 引入通信开销与不可复现性; 单 Agent + 更好的工具常常更划算 | | "准确率 90% 就够用了" | 取决于场景: 内部草稿也许够, 涉及资金与用户外发则远远不够 | ## 五、面试与求职准备 **简历/作品**:一个能演示的项目 + 一份写清指标的报告(成功率、失败模式、成本、延迟)。带上你如何量化改进的那次迭代。 **高频问题**: 1. 一个 Agent 调用工具失败后应该怎么处理?(答:错误信息回传模型让它换路 + 重试上限 + 兜底逻辑,而不是抛异常结束) 2. 上下文塞满了怎么办?(答:按优先级裁剪 / 摘要压缩 / 检索代替全量塞入 / 分阶段交付) 3. 怎么防止提示词注入?(答:最小权限 + 沙箱 + 白名单 + 人工确认,提示词层面只能降低概率) 4. 怎么判断 Agent 改得好不好?(答:测试集 + 指标 + 回归对比,给出具体数字) 5. 什么时候该用 DAG、什么时候该用 Agent 循环?(答:流程是否已知/是否固定) 6. 幻觉怎么抑制?(答:检索给事实 + 强制引用 + 输出校验 + 明确的"不知道"出口) **岗位方向**:AI 应用/Agent 开发工程师、AI 平台工程师、AI 产品工程师、解决方案架构师。要求从"会调 API"到"能设计评估体系"不等,看 JD 关键词就能分辨:出现"eval / 可观测 / 成本优化 / 权限"的,是认真的 Agent 岗;只写"熟悉 LangChain"的,多半是 prompt 集成岗。 ## 小结 把全文压缩成三句话: 1. **工作内容**:定义可判定的任务 → 设计上下文与工具 → 编排循环或 DAG → 建立评估 → 收权限、上线上量 → 用失败样本回流持续迭代; 2. **技能要求**:Python 与 API 集成的底子 + function calling / 循环 / 上下文工程 / 工具设计 / RAG 的核心 + 评估与安全的分水岭能力; 3. **入门路径**:手写一次工具调用 → 手写 30 行循环 → 加检索与结构化输出 → 补评估与安全 → 用真实项目做作品集。 这个岗位真正的门槛从来不是"会不会用某个框架",而是能不能把一个概率性的系统,做成别人敢用的产品。