更新 @2026-09-10:本文第四层「三个 harness 案例」一节与场景轴中 harness 一词的用法,按 OpenAI 2026-02-11 的《Harness engineering: leveraging Codex in an agent-first world》刷新——harness 指模型之外约束、告知、验证、纠正 agent 的整套系统;其余框架与协议以写作时的状态为准。

内容简介

这是三张 AI 学习地图中的第三张(三张的总览与分工见《AI 全栈学习地图》)。《AI-Infra 工程师学习地图》面向跑模型的人《AI 算法工程师学习地图》面向造模型的人,这一张面向用模型做产品的人——AI 应用工程师。它假设读者有后端工程的基础(服务、数据库、API、部署),同时关心产品:什么场景值得做、用户怎么用、效果怎么衡量。

“AI 应用”在这里取宽的定义:用模型改变现有的流程与体验。模型可以是 LLM,也可以是自动驾驶里的感知模型、VLA 与世界模型;动作可以是调用一个 API,也可以是控制一台车;输入可以是用户敲的字,也可以是传感器的每一帧。这张地图以 LLM 应用为主要案例展开,因为它当前的工程实践最成体系,但每一层的问题都会用物理世界的应用做对照——它们是同一张地图上的不同参数取值,只多出一层数字世界没有的基础设施:仿真。

调用一个模型 API 只要五行代码,这让”AI 应用开发”看起来门槛很低。真正的门槛在第六行之后:模型是一个非确定性、会出错、按 token 计费、有上下文上限的组件,而产品要求的是可靠、可控、可衡量、可负担。AI 应用工程师的全部工作,是在这样一个组件之上,用检索、工具、编排、评测、运营把它变成一个可以交付的产品。

地图回答三个问题:

一个 AI 应用由哪些层组成?每一层需要掌握什么?按什么顺序学?

需要什么 具体是什么
一种组件观 把模型当作一个有明确契约与失效模式的组件:API、token、上下文、延迟、幻觉
一套上下文工程 决定模型在每一步看到什么:prompt、检索结果、记忆、工具输出,以及它们的预算
一层检索 RAG:把私有知识可靠地送进上下文
一层 Agent 工具调用、循环、状态、多 agent、人机协作——让模型从”回答”变成”做事”
一套评测 AI 应用的单元测试:没有评测就没有迭代
一层运营 成本、延迟、安全、发布与回滚、数据飞轮
一种产品观 什么场景值得做、人和模型怎么分工、不确定性怎么呈现给用户

与前两张地图不同,这一层几乎没有 PyTorch 那样的事实标准框架。稳定的是协议与模式——OpenAI 兼容的模型 API、MCP、ReAct 循环、RAG 管线、evals;框架(LangChain / LangGraph、LlamaIndex、Dify、各家 Agent SDK)迭代很快。地图以协议与模式为主线,框架只作为抓手或代表点名。

两张图:架构视图与学习路径

第一张图:架构视图

一个 AI 应用从用户到模型的分层,以及贯穿所有层的两条横切:

%%{init: {"flowchart": {"wrappingWidth": 320}}}%%
flowchart TB
    subgraph APP["AI 应用"]
        direction TB
        UI["`**用户与渠道**
Web / IM / IDE / 语音 · 流式呈现 · 引用与可撤销`"]
        ORCH["`**应用与编排**
Agent runtime · 工作流 · 状态与持久化 · human-in-the-loop`"]
        CTX["`**上下文层**
prompt · RAG 检索 · memory · 工具与 MCP 服务`"]
        GW["`**模型接入层**
统一 API · 路由与 fallback · 缓存 · 配额与计费`"]
        UI --> ORCH --> CTX --> GW
    end
    MODEL["`**模型**
云 API | 自托管推理引擎(Infra 地图的范围)`"]
    GW --> MODEL
    EVAL["`**评测与可观测**
evals · trace · 在线指标`"]
    SAFE["`**安全与治理**
prompt injection · 权限 · PII · 审计`"]
    EVAL -.- APP
    SAFE -.- APP

    classDef app fill:#fff7e0,stroke:#c98a00,stroke-width:2px,color:#222
    classDef other fill:#f7f7f7,stroke:#c8c8c8,stroke-width:1px,color:#666
    classDef cross fill:#eef6ff,stroke:#5b8fd6,stroke-width:1px,color:#222
    class UI,ORCH,CTX,GW app
    class MODEL other
    class EVAL,SAFE cross
    style APP fill:#fffbea,stroke:#c98a00,stroke-width:2px

四层各有一个核心问题:用户层——不确定的输出怎么呈现;编排层——多步任务的状态放在哪、失败了怎么继续;上下文层——模型这一步该看到什么、看多少;接入层——用哪个模型、坏了换谁、花了多少钱。两条横切的地位与后端系统里的测试与安全相同:不是某一层的事,是每一层的事。

场景轴:两根正交的轴

架构视图是能力轴。AI 应用还有两根场景轴,彼此正交:服务谁(业务还是 IT)与动作落在哪个世界(数字还是物理)。两根轴拉出一个 2×2:

  数字世界 物理世界
AI4业务(作用于业务流程与客户) 智能客服、业务助手、内容生成、智能搜索、行业流程自动化(审核、报告、合同)、本体驱动的业务 agent(Palantir AIP 一类) 自动驾驶、无人机巡检(电网、风机、光伏)、能源调度与设备控制、工业质检与机器人操作、医疗影像辅助设备
AI4IT(作用于工程师与 IT 系统) coding agent、AIOps(告警归因、变更审查)、数据分析 agent(text-to-SQL)、内部知识库、运维与工单 数据中心巡检机器人、机房温控与能耗优化

第一根轴决定工具集与验证方式

  AI4业务 AI4IT
工具集 业务系统 API、CRM / ERP、知识库、设备控制 代码库、终端、CI、监控与日志、数据库
验证方式 人工评审、用户反馈、业务指标;难以自动验证,除非把验证前移到本体规则或仿真 编译、测试、lint、查询结果;大部分可自动验证
错误代价 面向客户或物理世界,错误外露 面向内部,可审核回滚
当前成熟度 copilot 为主,agent 在推进;物理世界侧自动驾驶 L2 量产、L4 限定区域运营 coding agent 已是最成熟的 agent 产品

第二根轴决定模型、输入、动作的形态,以及验证的基础设施

  数字世界 物理世界
模型 LLM / VLM 感知模型、VLM / VLA、世界模型、控制策略;端侧实时推理
输入 用户对话、业务数据、代码与日志 传感器流:摄像头、激光雷达、毫米波 / 超声波雷达、IMU、SCADA 遥测
动作 API、数据库、文件、消息;大多可撤销 控制系统:转向、制动、机械臂、阀门、变桨;连续、实时、不可撤销
时延 秒级,可挂起等人 毫秒级硬实时,不能等
验证基础设施 测试、评测集、灰度 物理仿真、硬件在环、影子模式、实车 / 实机测试——一套独立的基础设施与上线流程(见 L5、L6)
人在环的形态 审批工具调用、code review、坐席审核 操作员监控与接管;自动驾驶的 SAE L0–L5

四个格子共用全部能力层——模型作为组件、上下文的组装、动作的执行与权限、评测、运营、人机分工。差别归结为三个参数:动作的可逆性时延约束验证方式。这三个参数共同决定了一个场景的 agent 能走多远:能自动验证且可回滚的场景(代码能跑测试)允许 agent 自主循环几十步再交给人,这是 coding agent 最先成熟的原因;不能自动验证的场景只能把循环收短、把人放在环内;不可逆且验证成本极高的场景(驾驶、电网控制)则要先把验证做成一门独立的工程——仿真——自主级别才能一级一级往上走。理解这三个参数,比记住哪个场景”火”更重要:它告诉你一个新场景的 agent 化上限在哪。

本图的分层按能力轴走,以 LLM 应用为主线;第四层用三个案例解剖三个格子的 harness:coding agent(IT × 数字)、Palantir 的本体(业务 × 数字)、自动驾驶(业务 × 物理)。物理世界特有的基础设施——仿真——在第五层单独讨论,它的上线流程在第六层。

第二张图:学习路径

主题 回答的问题
L1 模型作为组件 模型这个组件的契约是什么?它怎么失效?怎么选?
L2 Prompt 与上下文工程 模型这一步该看到什么?怎么让输出可解析、可稳定?
L3 检索与知识接入 私域知识怎么进入模型?grep、向量、结构化三类检索各适合什么?何时该微调?
L4 工具、Agent 与运行时 模型怎么从”回答”变成”做事”?agent 运行时与传统服务、模型 serving 有什么不同?人怎么从环内退到环上、环外?
L5 评测、可观测与可追溯 怎么知道改了之后更好了?非确定性的系统怎么调试、怎么复现一次失败?
L6 生产化与运营 成本、延迟、安全、发布、回滚,以及数据怎么回流
L7 产品与体验 什么场景值得做?人和模型怎么分工?不确定性怎么呈现?
横切 评测驱动开发 没有评测集的改动只是猜
选修 微调 | 自托管 | 多模态交互 | 端侧 何时从”用模型”走向”改模型”或”跑模型”

顺序的理由:先把模型当组件理解透(L1),再学控制它的输入(L2、L3)、扩展它的能力(L4),然后才是衡量(L5)与运营(L6)——但评测(L5)应该在做第一个原型时就开始,这是横切一节的主题。产品(L7)放最后不是因为不重要,而是因为它的每个判断都需要前六层的知识做支撑。

两张图的叠加

架构视图中的位置 学习层
用户与渠道 L7 · L6(流式与延迟)
应用与编排 L4
上下文层 L2 · L3 · L4(工具与 memory)
模型接入层 L1 · L6
模型 L1(选型);实现属于 Infra 地图
评测与可观测 L5 · 横切
安全与治理 L6
场景轴 L7 · L4(可逆性、时延、验证方式决定 agent 化程度)

逐层说明

L1 模型作为组件

模型这个组件的契约是什么?它怎么失效?怎么选?

后端工程师习惯的组件(数据库、消息队列)有确定的语义;模型没有。这一层的目标是建立一个准确的组件模型——它能做什么、怎么坏、花多少钱、多慢:

主题 概念 说明
失效模式 非确定性(同一输入不同输出)、幻觉(自信地编造)、指令遵循不稳、上下文窗口上限与”中间遗忘”、知识截止、对 prompt 微小改动的敏感 每一条都对应后面某一层的应对手段;先知道病,再学药
API 契约 消息与角色(system / user / assistant / tool)、tool calling、structured output(JSON schema)、多模态输入(图片 / 音频 / 文件)、流式输出、prompt caching、批处理接口、推理模型的 reasoning 参数 OpenAI 兼容格式已是事实标准,自托管引擎(vLLM 等)也提供同一接口;学一次,处处可用
成本与延迟形态 按输入 / 输出 token 计费,输出贵数倍;缓存命中的输入折价;首 token 延迟(TTFT)与逐 token 速度;长上下文让 TTFT 线性增长;推理模型的”思考”token 既花钱又花时间 这是 L6 成本与延迟优化的账本;理解 prefill / decode 的差别只需要 Infra 地图 08 前两篇的结论
模型选型 闭源 API vs 开源自托管;推理模型 vs 非推理模型;大模型 vs 小模型分流;embedding 模型与 rerank 模型;多模态能力;上下文长度;排行榜的局限(污染、与自己任务的相关性) 选型的正确方法是用自己的评测集(L5)跑一遍,不是看榜
客户端工程 重试与退避、超时、幂等、速率限制、SDK 与直接 HTTP、流式解析(SSE)、tokenizer 计数 与调用任何不稳定的第三方服务相同,但失败类型更多(内容过滤、上下文超限、工具调用格式错)

L2 Prompt 与上下文工程

模型这一步该看到什么?怎么让输出可解析、可稳定?

“prompt 工程”这个词已经不够用:生产系统里模型每一步看到的东西,是 system prompt、对话历史、检索结果、工具返回、记忆片段拼成的一个上下文,它的组装、预算与压缩是一门工程。

主题 概念 说明
prompt 设计 角色与任务说明、few-shot 示例、思维链与”先想再答”、分步与分解、输出格式约束、负面指令的低效、模型差异(同一 prompt 换模型要重调) 模式是稳定的,措辞是不稳定的;把 prompt 当代码管,不当文案管
结构化输出 JSON schema 约束解码、枚举与类型校验、解析失败的重试与修复、结构化输出对推理质量的影响 让下游代码能消费模型输出的前提
上下文预算 各部分(system、历史、检索、工具输出)的 token 配额;历史的截断与摘要;检索结果的数量与排序;工具输出的裁剪 上下文不是越多越好:无关内容降低准确率、拉长延迟、增加成本
prompt caching 前缀稳定才能命中:system prompt 与工具定义放前面、动态内容放后面;缓存对成本与 TTFT 的影响 一个排序决定能省一半成本
版本与迭代 prompt 放版本库、与模型版本绑定、每次改动跑评测集(L5)、A/B prompt 改一个词就是一次发布
长上下文 vs 检索 什么时候把全部资料塞进上下文(配合 prompt caching)、什么时候检索;成本、延迟、准确率三者的权衡 引出 L3

L3 检索与知识接入

私域知识怎么进入模型?grep、向量、结构化三类检索各适合什么?何时该微调?

通用模型不知道你的业务。把私域知识送进模型有两条路:放进上下文(检索、工具查询)或放进权重(微调、继续预训练)。这一层先回答哪条路,再讲检索本身。

1. 先决定:进上下文还是进权重

微调不是灌知识的工具:用 SFT 注入事实不可靠、会遗忘、无法引用来源、知识一变就要重训。微调擅长的是行为——风格、格式、术语用法、工具调用习惯。按知识的类型决定方式:

知识类型 例子 方式
会变的事实 价格、库存、政策、工单状态 检索或直接查系统(工具调用);永远不进权重
结构化业务数据与关系 客户—订单—工单、组织架构 SQL / API / 本体(ontology)与图谱
非结构化文档 制度、合同、技术文档、聊天记录 检索(词法 + 向量 + rerank)
领域术语与表达习惯 行业黑话、公司内部说法 few-shot 示例;量大且稳定时微调
流程性技能 怎么写这类报告、怎么审这类单 示例 + 工具;效果不够再 SFT
海量领域语料的整体适应 法律、医学、代码库整体风格 继续预训练(贵,且仍需配检索给事实与引用)

默认顺序是 prompt → few-shot → 检索 / 工具 → 微调:越靠后越贵、越不灵活、越难追溯。微调的方法(SFT、LoRA、DPO)属于算法地图 L5;应用工程师要会的是判断、准备数据与评测。

2. 三类检索,不是一类

“RAG = 向量数据库”是 2023 年的印象。检索有三类,各有适用条件,生产系统通常混用:

类型 做法 适合 不适合
词法 / 精确 grep、glob、BM25、全文索引 有精确标识符的语料(代码、日志、配置、带编号的制度);语料在一个可枚举范围内;agent 能多轮迭代 词汇不匹配(”报销标准”vs”差旅费用规定”)、语义相近表述不同、千万级文档
向量 / 语义 embedding + ANN(HNSW / IVF);混合检索 + rerank 非结构化文档的语义匹配、大规模语料、用户提问与文档措辞不一致 精确匹配(型号、编号)、需要关系推理、数据频繁变化
结构化 SQL、API、知识图谱、本体(ontology) 有 schema 的业务数据、实体关系、”agent 该对什么对象执行什么动作”、权限随对象走 自由文本

coding agent 几乎只用第一类(grep + 读文件)而不用向量库,这不是向量检索过时,而是代码恰好满足第一类的全部前提:精确标识符、单仓库、能迭代。把这个经验搬到企业文档上会失败——那里词汇不匹配、语料大、用户问法与文档措辞不同,第二类仍是正确工具。Palantir Ontology、GraphRAG 一类属于第三类:它们解决的是结构化知识与”动作绑定对象”的问题,不替代前两类。

3. 从流水线到 agentic retrieval

经典 RAG 是一条固定流水线:query → embedding → top-k → 塞进 prompt → 生成。当前的趋势是把检索变成 agent 的工具:模型自己决定查什么、用哪类检索、查几轮、结果够不够。这带来两个变化——检索的召回压力变小(一次没找到可以换词再查),而对工具描述、上下文预算与循环控制(L4)的要求变高。长上下文加 prompt caching 则让”小语料直接全放进上下文”成为第三种选项。三者不是替代关系:流水线 RAG 适合高并发的问答,agentic retrieval 适合复杂任务,全放上下文适合小而稳定的资料。

4. 检索流水线的工程

无论哪种形态,检索本身的工程决定不变:

阶段 概念 说明
文档处理 解析(PDF、Office、HTML、扫描件 OCR、表格与图片)、清洗、元数据(来源、时间、权限)、分块策略(固定 / 递归 / 语义 / 按结构)、块大小与重叠 分块是效果的第一决定因素,且没有通用答案
索引 embedding 模型与维度、向量索引的召回-延迟权衡、向量库(pgvector、Qdrant、Milvus、Elasticsearch 一类,点名不展开)、全文索引、增量更新与删除 数据量小时 pgvector 足够;先用现有基础设施
检索 混合检索(向量 + 关键词)与融合(RRF)、rerank(cross-encoder)、query 改写与扩展、多跳、元数据过滤、权限过滤必须在检索时做 rerank 是性价比最高的一步
生成 引用与溯源、”不知道”的处理、上下文排序对生成的影响 引用是可信度的来源(L7)
进阶形态 GraphRAG、多模态 RAG(图表、图片)、Agentic RAG、长上下文的替代与互补 先把基础做好
评测 检索侧:recall@k、MRR;生成侧:faithfulness、answer relevance、context precision;评测集从真实问题采样 检索与生成分开评,否则不知道该改哪一半

L4 工具、Agent 与运行时

模型怎么从”回答”变成”做事”?agent 运行时与传统服务、模型 serving 有什么不同?人怎么从环内退到环上、环外?

Agent 是当前变化最快、也最容易被过度设计的一层。它的核心机制并不复杂——一个循环:模型看上下文、决定调用什么工具、执行、把结果放回上下文、再决定。复杂的是把这个循环做可靠

%%{init: {"flowchart": {"wrappingWidth": 260}}}%%
flowchart TB
    START(["用户任务"]) --> LLM["模型推理:读上下文,给出下一步"]
    LLM --> DEC{"输出类型?"}
    DEC -- "最终回答" --> DONE(["交付结果"])
    DEC -- "工具调用" --> PERM{"权限与风险检查"}
    PERM -- "需要人确认" --> HITL["human-in-the-loop:等待批准 / 修改"]
    HITL -- "批准" --> EXEC
    HITL -- "拒绝 / 修改" --> LLM
    PERM -- "自动允许" --> EXEC["执行工具(沙箱 / API / MCP 服务)"]
    EXEC --> OBS["观察结果,写回上下文"]
    OBS --> BUDGET{"预算与步数检查"}
    BUDGET -- "继续" --> LLM
    BUDGET -- "耗尽 / 循环检测" --> FAIL(["降级:交给人或返回部分结果"])
    OBS -- "上下文过长" --> COMPACT["压缩 / 摘要上下文"] --> LLM

    classDef llm fill:#fff7e0,stroke:#c98a00,stroke-width:2px,color:#222
    classDef human fill:#eef6ff,stroke:#5b8fd6,color:#222
    classDef stop fill:#f0f0f0,stroke:#888,color:#222
    class LLM llm
    class HITL human
    class DONE,FAIL,START stop

图里每一个菱形都是一个工程决定:权限检查决定哪些工具能自动执行、哪些要人批准;预算检查防止无限循环与失控的成本;上下文压缩决定长任务能走多远。一个 agent 框架提供的,本质上就是这张图的运行时。

agent 运行时是一种新的服务形态

后端工程师熟悉两种服务:传统应用服务,以及(读过 Infra 地图的话)模型 serving。agent 运行时是第三种,把它与前两者放在一起看,才知道为什么现有的框架都不够用:

  传统应用服务 模型 serving(Infra 地图 08) agent 运行时
一次调用 毫秒级,确定性 秒级;一个请求进、一串 token 出 分钟到小时;几十次模型调用 + 工具执行交替
状态 无状态,或存数据库 请求内的 KV cache,引擎自己管 每一步都要持久化:崩溃、重启、等人之后从断点续跑
控制流 代码决定 模型决定分支;运行时只提供边界(权限、预算、步数)
等待 不等人 不等人 可能挂起几小时等人批准
副作用 代码可控 执行任意工具;需要沙箱与最小权限
并发单位 请求 请求 / batch 会话(session);一个会话内部串行,会话之间并行
失败 异常、超时 超时、OOM 幻觉、死循环、预算耗尽、工具半成功——大多不是异常
资源瓶颈 CPU / DB GPU 显存与算力 模型 API 配额与费用、沙箱资源、等待中的会话数
最接近的老概念 Web 框架 数据库引擎 工作流引擎 / durable execution(Temporal 一类)+ actor + 沙箱

这解释了几件事:为什么 LangGraph 要把 agent 建成带 checkpoint 的状态图;为什么各家都在推”agent runtime”作为独立产品;为什么直接用 Web 框架写 agent 会在”用户关了页面、任务还在跑”和”服务重启、任务从头开始”上撞墙。运行时要提供的核心能力:持久化与恢复、挂起与唤醒(等人、等外部事件)、事件流(把每一步推给前端)、预算与超时、沙箱管理、会话隔离。

长程任务:人从环内退到环上、环外

agent 能自主跑多久,不是模型能力单独决定的,是一组工程手段叠出来的。这些手段的演进顺序,也是人从 human-in-the-loop(逐步批准)退到 human-on-the-loop(监控与抽检)再到 human-out-of-the-loop(无人在环)的路径:

阶段 关键技术 人的位置
单步问答 prompt、检索 每一步都是人发起
短循环 agent ReAct、工具调用、逐步审批 in the loop:每个有副作用的动作都要确认
长循环 agent 持久化与断点续跑、上下文压缩、外置计划(todo / plan 文件)、子 agent 隔离上下文、自动验证循环(测试、lint、仿真) in the loop,但审批粒度变粗:按风险分级,只读自动、写入确认、不可逆二次确认
策略化授权 权限白名单、风险分类器、预算上限、沙箱、可回滚的动作设计 从”逐个批”到”批一类”:人定策略,运行时执行
后台异步 agent 任务队列、异步交付(提 PR、生成报告草稿)、事件通知 on the loop:人看结果、看仪表盘、抽检轨迹、处理告警,不看过程
无人在环 只在可自动验证 + 可回滚的动作上;持续的轨迹评测与回归;异常自动降级回环内 out of the loop,但有退路

每上一级,都是把某类验证从人手里交给系统。不能自动验证的动作(给客户发合同)停在 in the loop;能验证但不可逆的动作(删数据库)停在 on the loop 加二次确认;可验证可回滚的(改代码提 PR、跑数据分析)可以走到 out of the loop。自动驾驶的 SAE 分级是同一条路径最严格的版本:L2 是人在环内(随时接管)、L3 是人在环上(系统请求时接管)、L4 / L5 是人在环外,每升一级都对应验证体系(仿真里程、影子模式、安全冗余)的一次量级跳跃,而不是模型换了一代。

主题 概念 说明
工具调用 function calling 的契约(schema、参数校验、返回格式);工具描述的写法决定模型用不用对;工具数量与选择准确率的关系;并行工具调用 工具是 agent 的手;描述写不好,手就不听话
MCP Model Context Protocol:把工具、资源、prompt 模板以统一协议暴露给任何模型客户端;server / client 架构、传输方式、鉴权 工具生态的”USB 接口”,是这一层最值得学的协议
循环与规划 ReAct(思考-行动-观察)、plan-and-execute、反思与自我修正;推理模型对显式规划的替代 大多数任务一个 ReAct 循环就够
状态与持久化 多步任务的状态放在哪;中断与恢复;durable execution(每步持久化、崩溃后继续);状态机建模。LangGraph 在这里作为抓手:它把 agent 显式建成有状态的图,checkpoint 每一步,是理解”agent 运行时”最直接的参考实现——不是因为它是标准,而是这个概念没有具体实现很难讲清 后端工程师的老朋友:工作流引擎与状态机
memory 会话内记忆(上下文本身)、跨会话记忆(用户偏好、历史事实)的存储与检索、记忆的写入策略与遗忘 本质是一个特殊的 RAG
多 agent 什么时候需要(上下文隔离、并行、专业化);orchestrator-workers、handoff、层级;agent 间协议(A2A 一类);多 agent 的成本与调试代价 多 agent 不是默认选项:先用一个 agent 加更好的工具
沙箱与安全 代码执行沙箱(容器、microVM)、文件系统与网络隔离、工具的最小权限、prompt injection 通过工具返回进入上下文的风险 agent 的每一个工具都是攻击面
人机协作 哪些动作需要确认(不可逆、高成本、对外)、确认的粒度、人在环内的交互设计、审批的持久化 人机分工是 L7 的产品问题,也是这里的运行时问题
可靠性 幂等的工具设计、失败重试与回退、循环检测、步数与 token 预算、超时、部分结果的交付 agent 的失败是常态,设计要假设失败

三个 harness 案例

模型之外的一切——工具、上下文管理、权限、验证、沙箱、可观测——业内叫 harness(马具)。场景轴的三个格子各取一个最成熟的案例,它们的 harness 组件一一对应,取值不同。

案例一:coding agent(IT × 数字)。 Claude Code、Cursor Agent、Codex 一类是当前最成熟的 agent 产品,因为代码场景可自动验证,它们把循环做到了几十步:

Harness 组件 coding agent 里的做法 通用意义
工具集 读文件、搜索(grep / glob)、编辑、执行命令、浏览器;工具少而正交 工具集设计:给模型”手”而不是”按钮”
上下文管理 项目说明文件(如 AGENTS.md)作为常驻上下文;按需读文件而不是全量塞入;长会话自动压缩;子 agent 隔离探索性搜索的上下文 上下文预算(L2)在长任务里的实践
权限模型 只读工具自动执行、写与执行需确认、可配置白名单、危险操作二次确认 图中”权限与风险检查”的实例
验证循环 改完跑测试、lint、类型检查,结果回到上下文,模型自己修 自动验证是 agent 自主性的来源;业务场景要找自己的”测试”
沙箱 工作目录隔离、命令执行的限制、网络访问控制 安全边界
可观测 每一步的工具调用、token 消耗、耗时可见;trace 可回放 L5 的 trace 在 agent 上的形态

案例二:本体驱动的业务 agent(业务 × 数字)。 Palantir Foundry 的 Ontology 与其上的 AIP 是业务侧最完整的 harness 样本。它先把企业数据建成本体——对象(客户、订单、设备)、属性、关系,以及每类对象允许的动作(改派、审批、下单)与权限——然后让 agent 在本体上工作,而不是直接碰数据库表和 API:

Harness 组件 本体驱动的做法 对应 coding agent 的
工具集 本体动作:有类型、有校验、有权限的业务操作,而不是裸 SQL / 裸 API 读 / 写 / 执行工具
上下文管理 按对象与关系取数:agent 看到的是”这个客户的这几笔订单”,不是全表 按需读文件
权限模型 权限挂在对象与动作上,agent 继承发起人的权限;动作分自动 / 需审批 只读自动、写入确认
验证循环 动作有前置校验与业务规则;结果写回本体可追溯;审批流是验证的一部分 测试、lint
沙箱 动作先生成”提案”,人审批后才落库(写入的暂存区) 工作目录隔离
可观测 每个动作有发起人、依据、时间的审计链 trace

它回答了 AI4业务最难的那一格——业务动作没有”测试”可跑,怎么验证? 答案是把验证前移到本体:动作被类型、规则、权限约束住,agent 能做的错事范围被结构性地压小,剩下的交给审批。这就是为什么本体在 agent 时代重新流行:它不是检索技术,是业务世界的 harness。

案例三:自动驾驶(业务 × 物理)。 自动驾驶栈是这张地图在物理世界的完整映射,而且每一格都被推到了最严格的取值:

Harness 组件 自动驾驶的做法 与数字世界 agent 的差别
模型 感知(检测、分割、占据网络)→ 预测 → 规划的模块化栈,或端到端模型;VLM / VLA 与世界模型在进入量产栈 车端实时推理、算力受限、多模型协同
上下文 多传感器融合(摄像头、激光雷达、毫米波、超声波)、高精 / 轻地图、车辆状态、时序帧 上下文是连续的数据流,不是一次组装
动作 转向、油门、制动的连续控制;经底盘控制系统执行 不可撤销、毫秒级、物理约束
权限与安全 功能安全(ISO 26262)、预期功能安全(SOTIF)、冗余传感与算力、最小风险策略(安全停车) 权限模型变成安全架构
验证循环 仿真闭环(场景库、日志重仿真、传感器仿真、世界模型生成)、影子模式(新版本在车上跑但不控车,与人类驾驶对比)、封闭场地与公开道路测试、接管率与每接管里程 验证是独立的一门工程(L5 仿真一节),成本是数字世界的几个量级
数据飞轮 接管与 corner case 自动回传 → 自动标注 / 数据挖掘 → 重训 → OTA 推送 与 L6 的数据飞轮同构,规模大得多
人机分工 SAE L0–L5;驾驶员监控(脱手 / 脱眼检测)、接管请求与接管时间 自主级别是产品定义,由验证体系决定
可观测 车端日志与事件回传、事故重建、轨迹回放 与 L5 的录制回放同构

自动驾驶告诉这张地图两件事。第一,能力层是通用的:换掉模型(LLM → VLA)、换掉工具(MCP → 控制系统)、换掉输入(对话 → 传感器),层次不变。第二,自主级别的上限由验证与可逆性决定:行业花了十几年、数十亿公里把 L2 做到量产、L4 做到限定区域,不是因为模型不够聪明,而是每升一级都要把验证体系重建一次。数字世界的 agent 正在走同一条路,只是可逆性给了它更多犯错的余地。

建设 harness 的人——给 agent 配工具、定权限、管上下文、搭验证——是每个格子里都在出现的新角色:IT 侧的平台工程师、业务侧的本体 / 流程工程师、物理世界的仿真与安全工程师。把这三张表套到任何一个新场景上,缺哪一格,agent 就在哪一格失控。

L5 评测、可观测与可追溯

怎么知道改了之后更好了?非确定性的系统怎么调试、怎么复现一次失败?

evals 之于 AI 应用,如同单元测试之于软件——区别是 AI 应用没有 evals 连”能跑”都不能确认。这是应用工程师与”会调 API 的人”的分水岭。

主题 概念 说明
评测集 golden set 的构造(从真实流量采样、覆盖边界与失败案例、人工标注期望)、规模(几十条就能开始,几百条能看趋势)、持续补充(线上 bad case 回流) 评测集是 AI 应用最重要的资产,比 prompt 重要
评分方式 精确匹配与规则(能自动验证的优先)、LLM-as-judge(评分标准、参考答案、pairwise 对比)及其偏差(位置、长度、自我偏好、宽容度)、人工评审的抽样与一致性 judge 也要被评测:与人工标注的一致率
评什么 单步:准确率、格式正确率、faithfulness;RAG:检索与生成分开(L3);agent:任务完成率、步数与成本、工具调用正确率、轨迹评测(过程对不对,不只结果) agent 的评测最难,也最缺
回归与门禁 每次改 prompt / 模型 / 检索参数跑全量评测集;CI 里的评测门禁;模型供应商静默升级带来的回归 “换了个模型版本效果变差”是常态
在线评测 A/B 与灰度、隐式反馈(采纳、重试、放弃)、显式反馈(点赞点踩、纠正)、在线指标与离线评测集的校准 离线好不等于在线好
trace 与可观测 每次请求的完整链路(prompt、检索结果、工具调用、模型输出、token、耗时、成本);OpenTelemetry 的 GenAI 语义约定;Langfuse / LangSmith / Arize Phoenix 一类工具(点名) 没有 trace 的 agent 无法调试
运行时可靠性 guardrails(输入输出检查、话题与格式约束)、fallback(换模型、降级到规则)、幻觉检测(引用校验、一致性检查)、置信度与”拒答” 在评测发现之前,先在运行时兜底

非确定性系统的可追溯实践

传统调试假设”同样的输入得到同样的输出”,模型打破了这个假设。让一个 agent 的失败可复现、可解释、可归因,有一组已经成形的做法:

实践 做法 解决什么
span 级 trace 每次模型调用、每次工具调用、每次检索各是一个 span,记录完整输入输出、模型版本、采样参数、token 与耗时;会话 → 任务 → 步骤三级树 “它为什么这么做”——回到那一步它看到了什么
录制-回放 把每次模型响应按 span 录下来;调试时回放录制的响应而不是重新调用模型,复现同一条轨迹;改了工具或解析逻辑后用录制回放做回归 把非确定性从调试与测试里剔除
决策点日志 在 agent 循环的每个分支(选了哪个工具、为什么终止、权限检查结果、预算余量)打结构化事件,而不是只留模型文本 让状态机可视化:轨迹图而不是日志流
轨迹级评测 对整条轨迹评分(任务完成、步数、成本、是否走了不必要的弯路、是否越权),不只看最终输出;抽样送人工与 judge agent 的失败常在过程里
生产 trace 上的在线评测 judge 按比例跑在真实流量的 trace 上,指标进监控与告警;离线评测集从这里补充 离线集覆盖不到的失效模式
版本对比 同一评测集在两个 prompt / 模型 / 工具版本下的轨迹 diff:哪些 case 由对变错、哪一步开始分叉 回归定位
反馈绑定 用户点赞点踩、纠正、接管,都带 trace id 落库 从”用户说不好”到”哪一步不好”
失败分类学 给失败打类型:检索未命中、指令未遵循、工具返回被截断、幻觉、权限拒绝、预算耗尽…… 按类型统计而不是按条数 决定该改哪一层
敏感数据处理 trace 里的 prompt 与输出含用户数据:脱敏、分级存储、保留期限、访问审计 可观测与合规的冲突

自动驾驶把同一套实践做到了极致:车端事件回传、事故的传感器数据重建与轨迹回放、影子模式下新旧版本的逐帧对比——都是 span 级 trace、录制回放与版本对比在物理世界的形态。

物理世界的评测基础设施:仿真

数字世界的 agent 可以在测试环境里随便跑;物理世界的 agent 不能——每一次实车、实机测试都贵、慢、有风险,而要覆盖的场景(暴雨夜晚的施工路段、风机叶片的罕见裂纹、电网的极端负荷)在现实里等不到。所以物理世界的 AI 应用多出一层数字世界没有的基础设施:仿真。它承担的角色相当于数字世界的评测集 + 测试环境 + 数据生成器三者之和。

仿真形态 做法 用途
场景仿真 用场景描述语言(OpenSCENARIO 一类)定义交通参与者、天气、路网,在仿真器(CARLA、各厂自研)里闭环运行整套栈 覆盖长尾场景、回归测试、把一次事故变成可重复的用例
日志重仿真 把实车录下的传感器数据回放给新版本的栈,比较它与旧版本 / 人类的决策 用真实数据做回归;开环(不影响录制的世界)为主
传感器仿真与合成数据 渲染摄像头、激光雷达、雷达的物理级信号;生成带标注的训练与测试数据 补真实数据的稀缺场景;标注免费
数字孪生 对一座变电站、一个风场、一条产线建高保真模型,实时同步物理状态 能源与工业场景的仿真基座;在孪生上试策略再下发
世界模型作为学习型仿真器 用生成模型预测”如果这样操作,下一帧世界是什么样”(GAIA、Cosmos 一类) 可控生成罕见场景;正在与传统仿真器融合
硬件在环 / 软件在环 HIL:真实控制器接仿真的传感与执行;SIL:全软件 验证栈在真实算力与时延约束下的行为

仿真带来自己的工程问题:

问题 内容
sim-to-real gap 仿真里过、现实里不过;传感器噪声、材质、动力学的失真;用真实数据校准仿真器,用域随机化让模型不依赖仿真的细节
场景覆盖 怎么知道测够了:场景库的构成、参数空间的采样、覆盖率指标(ODD 覆盖)、从实车 corner case 自动生成变体
开环 vs 闭环 开环评测便宜但不反映”决策改变世界”的效应;闭环才能测规划与控制
保真度 vs 规模 高保真跑得慢、覆盖少;低保真跑得快、可信度低;分层:低保真筛、高保真验
仿真的可信度 仿真器本身要被验证——它与现实的偏差要可量化;否则仿真通过率是一个没有含义的数字

对能源、无人机、工业机器人,替换掉”车”和”路”,这张表一样成立:电网的潮流仿真、风机的气动仿真、机器人的物理引擎(Isaac Sim、MuJoCo 一类),都在扮演同一个角色。数字世界的 agent 工程正在借这个思路:用模拟的用户与环境(沙箱里的文件系统、模拟的 API、合成的用户)做 agent 的闭环评测,本质上就是仿真。

L6 生产化与运营

成本、延迟、安全、发布、回滚,以及数据怎么回流?

主题 概念 说明
模型接入 通过模型网关接多供应商(统一 API、路由、fallback、配额、计费);应用侧使用网关,网关的建设属于 Infra 地图 09 不要在每个应用里各写一遍供应商适配
成本 token 账:输入 / 输出 / 缓存 / 思考 token 分别多少;prompt caching 的前缀设计;小模型分流(路由简单请求);批处理接口;上下文裁剪;缓存语义相同的请求;按用户 / 功能的 token 预算与告警 成本是 AI 应用最容易失控的指标
延迟 流式输出(感知延迟)、TTFT 的来源(上下文长度、排队)、并行工具调用、预取与投机(提前检索)、模型选择(小模型快)、超时与降级 用户感知的是 TTFT,不是总时长
安全 prompt injection(直接与间接——通过网页、文档、工具返回注入)、越狱、系统 prompt 泄漏、数据泄漏(把私有数据发给模型、模型输出中的 PII)、工具的最小权限与沙箱、输出内容安全;防御的分层(输入过滤、权限、输出检查、人工确认)而不是指望一个过滤器 间接注入是 agent 时代最重要的新攻击面
治理与合规 审计日志(谁在什么时候让模型做了什么)、数据驻留与供应商条款、用户数据是否用于训练、模型版本的记录、AI 生成内容的标识 面向企业客户的必答题
发布 prompt / 模型 / 检索配置的版本化与灰度、评测门禁、回滚;供应商模型的弃用周期 把 prompt 当代码发布
数据飞轮 线上反馈 → bad case → 评测集补充 → prompt / 检索迭代;积累到一定规模 → 微调数据(选修);用户纠正作为标注 这是 AI 应用长期护城河的来源

物理世界的上线流程

数字世界的发布是”评测门禁 → 灰度 → 全量 → 回滚”,几小时到几天。物理世界的发布多了仿真与实机的层层关卡,几周到几个月,而且”回滚”本身可能不安全(一辆行驶中的车不能回滚到上一版):

阶段 做什么 门禁
仿真回归 全量场景库 + 日志重仿真 关键场景零退化;覆盖率达标
硬件在环 在目标算力与实时约束下跑 时延、算力占用、故障注入下的降级行为
封闭场地 / 实验室 实车、实机、有安全员 预定义测试用例通过
影子模式 新版本部署到量产设备上运行但不控制,决策与现役版本 / 人类操作逐帧对比,差异回传 差异率与差异类型可解释
限定范围放量 特定车队、区域、时段、天气(ODD);安全员或远程监控 接管率、事件率优于现役版本
全量 OTA 分批推送,保留回退版本;监控接管与事件 事件率不劣化
数据回流 接管、事件、罕见场景自动回传 → 挖掘 → 标注 → 进场景库与训练集 闭环

影子模式是这条流程里最有价值的一环,也是数字世界可以直接借用的:新版本 prompt / 模型在生产流量上并行运行但不出结果,与现役版本对比——这就是 L5 的版本对比在线做。能源与工业场景的对应物是在数字孪生上先跑、再在一台设备 / 一条线上试、再推全厂。

L7 产品与体验

什么场景值得做?人和模型怎么分工?不确定性怎么呈现?

主题 概念 说明
场景选择 模型擅长什么(生成、总结、分类、抽取、对话、代码);错误代价与验证成本决定形态;”demo 到产品的鸿沟”——demo 展示的是上限,产品交付的是下限;ROI:省了谁的时间、值多少 好场景的特征:错误可容忍或可验证、有明确的人工基线
形态选择 copilot(人主导,模型建议)→ agent(模型主导,人审批)→ 自动化(无人在环);同一场景随可靠性提升逐步升级 与场景轴一节的验证方式对应
人机分工 信任的建立与校准:过度信任与不信任都是失败;让用户知道模型在做什么、做到哪;可撤销、可修改、可接管 人机协作设计是 AI 产品区别于传统产品的核心
不确定性的呈现 流式输出、引用与溯源、置信度与”我不确定”、多候选、生成过程可见(agent 的步骤) 让用户能判断,而不是让用户相信
交互形态 对话不是唯一形态:内嵌到工作流、批处理、后台 agent、语音;对话式界面的局限(发现性差、不可预测) “加个聊天框”往往是最差的集成方式
产品指标 任务完成率、采纳率(建议被接受)、人工介入率、纠正率、用户留存;成本 / 任务;与 L5 在线评测打通 用产品指标而不是模型指标判断成败

横切:评测驱动开发

没有评测集的改动只是猜。

对应算法地图的”实验方法论”,这一层的核心纪律是:

纪律 内容
先有评测再有 prompt 第一个原型就配几十条评测样例;改任何东西先跑评测
看 trace 不看感觉 效果差先看 trace:是检索没找到、prompt 没说清、工具返回被截断,还是模型本身不行
一次改一处 prompt、模型、检索参数、工具描述同时改,就不知道哪个起了作用
从 bad case 出发 线上失败案例进评测集,比凭空设计样例有效十倍
校准 judge LLM 评分要定期与人工抽检对齐
记录一切 每次评测的配置、模型版本、结果可追溯;三个月后能解释为什么当时选了这个方案

选修

  • 微调作为应用手段:决策在 L3 第 1 节;这里补充执行——数据准备(从 trace 与反馈里筛高质量样本)、评测集先于训练、微调后的回归与版本管理。微调的方法(SFT、LoRA、DPO、蒸馏)属于算法地图 L5。
  • 自托管推理:数据不能出域、成本到了自托管更便宜的规模、需要开源模型的特定能力。部署与优化属于 Infra 地图 08、09;应用工程师要会的是判断何时值得、以及自托管带来的接口与能力差异。
  • 语音与多模态交互:语音输入输出(ASR / TTS / 实时语音 API)、图片与文档理解在产品里的用法、多模态对上下文成本的影响(一张图几百到几千 token)。
  • 端侧模型:小模型在设备上运行的场景(隐私、离线、延迟)、能力边界、与云端模型的分工。

与另两张地图的关系

三张地图用一条规则分工:

应用地图回答”用什么、怎么组合、效果好不好”;算法地图回答”模型怎么造”;Infra 地图回答”模型怎么跑”。

重叠主题 应用地图负责(本图) 算法地图负责 Infra 地图负责
模型 作为组件的契约、失效模式、选型 结构、训练、能力 serving:调度、KV、多卡
模型网关 使用:接入、路由、fallback 建设:多租户、配额、可观测(09)
微调 何时需要、数据准备、效果评测 配方:SFT / LoRA / DPO 训练基础设施(07)
评测 应用效果:任务完成率、faithfulness、在线指标 模型能力:benchmark、LLM-as-judge 方法论 性能:吞吐、延迟、MFU
embedding / rerank 选用与调参 训练与对比学习 向量检索的算力
上下文与 token 预算、缓存前缀、成本 上下文窗口与位置编码 KV cache 与 prefill 成本(04、08)
安全 prompt injection、工具权限、PII 对齐与拒答训练 平台层的隔离与审计
可观测 trace:prompt、工具、token、成本 训练曲线 GPU 指标、请求级指标
成本 按 token 的账 按训练算力的账 按 GPU 小时的账
Agent 编排、工具、harness agent 能力的训练(RL、工具使用数据) RL 后训练的 rollout 基础设施(选修)

三张地图的交点:应用工程师读 Infra 地图 08 前两篇能理解 token 计费与延迟形态的来源;读 04 系列的 KV cache 与多模态两篇能理解长上下文与图片为什么贵。反过来,Infra 与算法工程师读本图能知道自己的产出被怎样使用、评测与反馈从哪里来。

按目标选择路径

目标 路径 说明
做业务 AI 应用(客服、助手、知识库) L1 → L2 → L3 → L5 → L6 → L7 RAG 是主战场;L4 在需要动作时补
做 AI4IT / coding agent / harness 建设 L1 → L2 → L4(重运行时与 harness 案例)→ L5 → L6 平台工程师的新方向;验证循环与权限模型是核心
做物理世界应用(自动驾驶、无人机、能源与工业) 场景轴 → L4(运行时、自主级别、案例三)→ L5(可追溯、仿真)→ L6(上线流程、数据飞轮);模型部分走算法地图 用本图建立应用栈的框架;仿真是这条路径独有的基础设施
产品经理 / 技术负责人 L1 → L7 → L5 → 场景轴 → L4(概念层) 判断场景与形态、看懂评测结果、知道 agent 化的上限在哪
后端工程师转 AI 应用 L1 → L2 → L5 → L3 → L4 → L6 已有的服务、数据库、API 经验直接复用;新东西是组件观与评测

边界与说明

不在地图上的内容

  • 模型训练与微调方法:属于算法地图。本图只讲何时需要微调与怎么准备数据。
  • 推理引擎与平台内部:serving、网关建设、GPU 集群。属于 Infra 地图。本图只讲如何使用。
  • 通用后端与前端知识:Web 框架、数据库、消息队列、前端框架。假设已具备;本图只讲 AI 组件带来的差异。
  • 行业知识:金融、医疗、法律等领域的业务逻辑与合规。它们决定场景,但不属于这张地图。
  • 具身智能的模型与硬件:感知 / VLA / 世界模型的训练属于算法地图;车端芯片、实时操作系统、底盘控制属于嵌入式与汽车电子;仿真器本身的实现(渲染、物理引擎)属于图形学与 CAE。本图只讨论物理世界应用作为应用栈的组装、仿真验证、上线流程、数据闭环与自主级别演进。

版本与时效

这一层变化最快的是框架与产品,最稳定的是协议与模式:OpenAI 兼容 API、MCP、ReAct 循环、三类检索与 agentic retrieval、durable execution、evals 与 trace 的方法论。地图以后者为骨架;框架只作代表点名,其中 LangGraph 因为”有状态的 agent 运行时”这个概念需要一个具体实现来讲清而被用作抓手,不代表它是标准。模型能力的提升会不断把某些工程手段变得不必要(更长的上下文、更好的指令遵循、内置的工具使用),地图会随之更新,但”在非确定性组件之上做可靠产品”这个问题不会消失。

关于”AI 应用工程师”

这张地图的目标是能判断一个场景值不值得做、把它做成可交付的产品、并用评测证明它有效的工程师。它同时要求产品判断与工程实现,因为在这个领域两者分不开:形态选择(copilot 还是 agent)既是产品决定也是可靠性决定,评测集既是工程资产也是对”效果好”的产品定义。

最终目标

读完这张地图上的内容之后,面对一个业务需求,读者应该能够沿着整个链路追问下去:

追问 答案来自
这个场景模型能做吗?错误代价与验证成本允许什么形态? L7 · 场景轴
该用 prompt、RAG 还是微调?长上下文能不能替代检索? L2 · L3 · 选修
私域知识该进上下文还是进权重?用 grep、向量还是本体? L3
检索没找到还是生成没说对? L3 · L5(分开评)
这个 agent 为什么在第 17 步做了那件事?能复现吗? L5(trace、录制回放)
这个场景能让人退到环上吗?缺的是模型还是验证? L4(自主级别)· 场景轴
这个物理世界的应用测够了吗?仿真通过意味着什么? L5(仿真)· L6(上线流程)
agent 在第几步失控了?哪个工具该要人确认? L4 · trace
改了 prompt 之后是变好了还是变差了? L5 · 横切
一个请求花了多少钱、慢在哪一段? L1 · L6
用户为什么不信它 / 过度信它? L7
供应商换了模型版本,怎么第一时间知道? L5 回归 · L6 发布

三张地图到这里闭合:造模型的人、跑模型的人、用模型的人,各自知道自己站在哪里、隔壁在做什么、边界上的事该谁负责。

本文由 arganzheng 创作,采用 CC BY 4.0 许可协议。在保留原文作者、署名以及完整原文链接(https://arganzheng.life/ai-application-engineer-learning-roadmap.html)的前提下,欢迎各种形式的转载、翻译或商业引用。


COMMENTS

评论存放在 GitHub Discussions, 用 GitHub 账号登录即可发表,支持 Markdown。 想针对正文某句话说?选中那段文字,点浮出的「评论」即可划线评论;觉得哪里写错了,发表时勾上「同时提交 Issue」。 有人回复你时 GitHub 会按你的通知设置发邮件,不用守在这里。

×