Vibe Coding进阶之路之AI 应用工程体系:核心概念关系图与名词解释

本文面向希望从软件工程转向 AI Engineer 的开发者,解释 AI 应用工程中常见概念的关系:LLM、SLM、Prompt、Context Engineering、RAG、Embeddings、Agent、Guardrails、Human-in-the-loop、Evaluation、Observability、Vibe Coding 等。

这篇文档重点讨论"如何构建 AI 应用",不是"如何训练大模型"。


一、AI 应用工程关系图

AI 应用工程可以拆成两条链路理解:一条是用户使用产品时发生的运行链路,另一条是工程师构建和迭代产品时发生的开发链路。两者有关联,但不应该混为一谈。

1. AI 应用运行链路

#mermaid-svg-kjvglIINpoE2fF2V{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kjvglIINpoE2fF2V .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kjvglIINpoE2fF2V .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kjvglIINpoE2fF2V .error-icon{fill:#552222;}#mermaid-svg-kjvglIINpoE2fF2V .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kjvglIINpoE2fF2V .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kjvglIINpoE2fF2V .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kjvglIINpoE2fF2V .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kjvglIINpoE2fF2V .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kjvglIINpoE2fF2V .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kjvglIINpoE2fF2V .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kjvglIINpoE2fF2V .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kjvglIINpoE2fF2V .marker.cross{stroke:#333333;}#mermaid-svg-kjvglIINpoE2fF2V svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kjvglIINpoE2fF2V p{margin:0;}#mermaid-svg-kjvglIINpoE2fF2V .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kjvglIINpoE2fF2V .cluster-label text{fill:#333;}#mermaid-svg-kjvglIINpoE2fF2V .cluster-label span{color:#333;}#mermaid-svg-kjvglIINpoE2fF2V .cluster-label span p{background-color:transparent;}#mermaid-svg-kjvglIINpoE2fF2V .label text,#mermaid-svg-kjvglIINpoE2fF2V span{fill:#333;color:#333;}#mermaid-svg-kjvglIINpoE2fF2V .node rect,#mermaid-svg-kjvglIINpoE2fF2V .node circle,#mermaid-svg-kjvglIINpoE2fF2V .node ellipse,#mermaid-svg-kjvglIINpoE2fF2V .node polygon,#mermaid-svg-kjvglIINpoE2fF2V .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kjvglIINpoE2fF2V .rough-node .label text,#mermaid-svg-kjvglIINpoE2fF2V .node .label text,#mermaid-svg-kjvglIINpoE2fF2V .image-shape .label,#mermaid-svg-kjvglIINpoE2fF2V .icon-shape .label{text-anchor:middle;}#mermaid-svg-kjvglIINpoE2fF2V .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kjvglIINpoE2fF2V .rough-node .label,#mermaid-svg-kjvglIINpoE2fF2V .node .label,#mermaid-svg-kjvglIINpoE2fF2V .image-shape .label,#mermaid-svg-kjvglIINpoE2fF2V .icon-shape .label{text-align:center;}#mermaid-svg-kjvglIINpoE2fF2V .node.clickable{cursor:pointer;}#mermaid-svg-kjvglIINpoE2fF2V .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kjvglIINpoE2fF2V .arrowheadPath{fill:#333333;}#mermaid-svg-kjvglIINpoE2fF2V .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kjvglIINpoE2fF2V .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kjvglIINpoE2fF2V .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kjvglIINpoE2fF2V .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kjvglIINpoE2fF2V .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kjvglIINpoE2fF2V .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kjvglIINpoE2fF2V .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kjvglIINpoE2fF2V .cluster text{fill:#333;}#mermaid-svg-kjvglIINpoE2fF2V .cluster span{color:#333;}#mermaid-svg-kjvglIINpoE2fF2V div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kjvglIINpoE2fF2V .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kjvglIINpoE2fF2V rect.text{fill:none;stroke-width:0;}#mermaid-svg-kjvglIINpoE2fF2V .icon-shape,#mermaid-svg-kjvglIINpoE2fF2V .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kjvglIINpoE2fF2V .icon-shape p,#mermaid-svg-kjvglIINpoE2fF2V .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kjvglIINpoE2fF2V .icon-shape .label rect,#mermaid-svg-kjvglIINpoE2fF2V .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kjvglIINpoE2fF2V .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kjvglIINpoE2fF2V .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kjvglIINpoE2fF2V :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户需求
AI 产品
产品交互
后端服务
AI 交互体验
AI 输出展示
人工确认与接管
AI 应用编排层
Prompt
Context Engineering
RAG
Agent
Guardrails / Safety
Evaluation
模型输入

System / User / Context / Tool Results
LLM / SLM
模型响应
知识库 / 数据库 / 文档
解析 / 清洗 / 切分
Embeddings
关键词索引
向量索引或向量数据库
Retriever
过滤 / 权限校验 / 重排序
Tools / APIs
Memory / State
人工反馈
Observability

日志 / Trace / 成本 / 延迟

2. AI 应用开发链路

#mermaid-svg-7gzA0HCkMCBp5IAf{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7gzA0HCkMCBp5IAf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7gzA0HCkMCBp5IAf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7gzA0HCkMCBp5IAf .error-icon{fill:#552222;}#mermaid-svg-7gzA0HCkMCBp5IAf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7gzA0HCkMCBp5IAf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7gzA0HCkMCBp5IAf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7gzA0HCkMCBp5IAf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7gzA0HCkMCBp5IAf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7gzA0HCkMCBp5IAf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7gzA0HCkMCBp5IAf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7gzA0HCkMCBp5IAf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7gzA0HCkMCBp5IAf .marker.cross{stroke:#333333;}#mermaid-svg-7gzA0HCkMCBp5IAf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7gzA0HCkMCBp5IAf p{margin:0;}#mermaid-svg-7gzA0HCkMCBp5IAf .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7gzA0HCkMCBp5IAf .cluster-label text{fill:#333;}#mermaid-svg-7gzA0HCkMCBp5IAf .cluster-label span{color:#333;}#mermaid-svg-7gzA0HCkMCBp5IAf .cluster-label span p{background-color:transparent;}#mermaid-svg-7gzA0HCkMCBp5IAf .label text,#mermaid-svg-7gzA0HCkMCBp5IAf span{fill:#333;color:#333;}#mermaid-svg-7gzA0HCkMCBp5IAf .node rect,#mermaid-svg-7gzA0HCkMCBp5IAf .node circle,#mermaid-svg-7gzA0HCkMCBp5IAf .node ellipse,#mermaid-svg-7gzA0HCkMCBp5IAf .node polygon,#mermaid-svg-7gzA0HCkMCBp5IAf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7gzA0HCkMCBp5IAf .rough-node .label text,#mermaid-svg-7gzA0HCkMCBp5IAf .node .label text,#mermaid-svg-7gzA0HCkMCBp5IAf .image-shape .label,#mermaid-svg-7gzA0HCkMCBp5IAf .icon-shape .label{text-anchor:middle;}#mermaid-svg-7gzA0HCkMCBp5IAf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7gzA0HCkMCBp5IAf .rough-node .label,#mermaid-svg-7gzA0HCkMCBp5IAf .node .label,#mermaid-svg-7gzA0HCkMCBp5IAf .image-shape .label,#mermaid-svg-7gzA0HCkMCBp5IAf .icon-shape .label{text-align:center;}#mermaid-svg-7gzA0HCkMCBp5IAf .node.clickable{cursor:pointer;}#mermaid-svg-7gzA0HCkMCBp5IAf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7gzA0HCkMCBp5IAf .arrowheadPath{fill:#333333;}#mermaid-svg-7gzA0HCkMCBp5IAf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7gzA0HCkMCBp5IAf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7gzA0HCkMCBp5IAf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7gzA0HCkMCBp5IAf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7gzA0HCkMCBp5IAf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7gzA0HCkMCBp5IAf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7gzA0HCkMCBp5IAf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7gzA0HCkMCBp5IAf .cluster text{fill:#333;}#mermaid-svg-7gzA0HCkMCBp5IAf .cluster span{color:#333;}#mermaid-svg-7gzA0HCkMCBp5IAf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7gzA0HCkMCBp5IAf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7gzA0HCkMCBp5IAf rect.text{fill:none;stroke-width:0;}#mermaid-svg-7gzA0HCkMCBp5IAf .icon-shape,#mermaid-svg-7gzA0HCkMCBp5IAf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7gzA0HCkMCBp5IAf .icon-shape p,#mermaid-svg-7gzA0HCkMCBp5IAf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7gzA0HCkMCBp5IAf .icon-shape .label rect,#mermaid-svg-7gzA0HCkMCBp5IAf .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7gzA0HCkMCBp5IAf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7gzA0HCkMCBp5IAf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7gzA0HCkMCBp5IAf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 开发者 / AI Engineer
Vibe Coding
AI IDE / 编程助手
生成 / 修改 / 解释 / 重构代码
人工审查
测试与验证
发布 / 部署
AI 产品
需求理解 / 架构设计
离线评估 / 回归评估
线上反馈 / 监控数据


二、先建立整体认知

AI 应用不是简单地把用户问题转发给模型。一个可用的 AI 产品通常需要处理模型选择、上下文组织、知识检索、工具调用、权限控制、人工确认、日志监控和效果评估。

更准确地说:

text 复制代码
AI Engineer 以 LLM 或 SLM 为能力核心,
用 Prompt 和 Context Engineering 控制输入,
用 RAG 连接外部知识,
用 Agent 和 Tools 执行多步骤任务,
用 Guardrails 控制安全边界,
用 Human-in-the-loop 控制高风险环节,
用 Evaluation 持续衡量和优化效果,
用 Observability 追踪线上质量、成本和故障,
用 Vibe Coding 提升开发效率。

三、核心名词解释

1. AI Engineer

AI Engineer 是把模型能力工程化、产品化的人。

这个角色通常不从零训练基础大模型,而是负责把模型、数据、工具、业务流程和用户体验组合成稳定可用的 AI 系统。

AI Engineer 需要理解:

  • 模型能力边界:什么适合交给模型,什么不适合;
  • Prompt 与上下文:如何让模型获得正确输入;
  • RAG:如何把私有知识接入模型;
  • Agent 与工具调用:如何让 AI 执行任务;
  • 评估与监控:如何判断 AI 系统是否真的有效;
  • 安全与合规:如何处理权限、隐私、越权访问和高风险操作。
  • 可观测性:如何追踪一次 AI 请求从输入、检索、工具调用到输出的完整链路。

对工程师来说,AI Engineer 最现实的切入点是 AI 应用开发,而不是模型训练。


2. LLM

LLM 是 Large Language Model,大语言模型,例如 GPT、Claude、Gemini、Llama、Qwen、DeepSeek 等。

LLM 擅长理解和生成语言,也能完成总结、翻译、代码生成、信息抽取、文档问答、结构化输出和任务推理。

但 LLM 不是可靠数据库,也不是自动执行系统。它可能不知道私有数据,可能产生幻觉,也可能因为上下文不足给出错误答案。即使模型支持工具调用,真正的执行仍然依赖外部系统、权限控制和工程编排。

因此,生产级 AI 应用通常不会只依赖一次 LLM 调用,而会结合 RAG、工具调用、人工确认和评估体系。


3. SLM

SLM 是 Small Language Model,小语言模型。

SLM 通常更小、更快、更便宜,也更容易本地部署。它不一定适合复杂推理,但适合明确、固定、低成本或低延迟任务,例如意图识别、文本分类、简单问答、内容审核、边缘设备推理和企业内网部署。

简单理解:

text 复制代码
LLM:泛化能力强,适合复杂任务,成本和延迟更高。
SLM:成本低、速度快,适合边界清晰的任务。

现代 AI 系统里,LLM 和 SLM 可以组合使用:复杂任务交给 LLM,简单判断或本地隐私任务交给 SLM。

选择模型时,不应只看"模型强不强",还要看任务复杂度、上下文长度、响应延迟、调用成本、结构化输出能力、工具调用能力、部署环境、数据隐私和吞吐量要求。生产系统里常见做法是按任务分层:高复杂度任务使用强模型,简单分类、路由、改写、审核任务使用更便宜或更快的模型。


4. Prompt

Prompt 是给模型的输入指令。它不只是用户输入的一句话,还可能包含角色、任务、约束、上下文、输出格式和示例。

一个 Prompt 通常回答这些问题:

  • 模型应该扮演什么角色;
  • 当前任务是什么;
  • 可参考的信息有哪些;
  • 有哪些限制和安全要求;
  • 输出应该是什么格式。

示例:

text 复制代码
你是一个资深代码审查助手。
请审查以下 TypeScript 模块,重点检查边界条件、性能、可维护性和类型安全。
请按照"严重问题 / 一般问题 / 优化建议"的结构输出。

Prompt 可以影响模型行为,但不能替代数据、权限、评估和业务逻辑。


5. Prompt Engineering

Prompt Engineering 是系统性地设计、测试和优化 Prompt。

它关注如何通过输入设计提高输出稳定性,例如明确角色、拆解任务、提供示例、约束输出格式、要求引用来源、使用结构化输出或 JSON Schema。

需要注意的是,Prompt Engineering 不是"玄学咒语",也不是 AI 工程的全部。复杂系统更依赖上下文工程、数据质量、检索质量、工具边界和评估闭环。


6. Context Engineering

Context Engineering 是上下文工程,关注模型在生成答案前应该看到什么信息、以什么顺序看到、看到多少,以及哪些信息不应该进入上下文。

上下文可能包括:

  • 用户当前问题;
  • 历史对话;
  • 用户身份与权限;
  • 业务数据;
  • RAG 检索结果;
  • 工具调用结果;
  • 系统规则;
  • 输出格式约束。

对工程师来说,可以把 Context 类比为应用状态。软件模块的行为依赖配置、状态、接口数据和运行环境;模型输出依赖 Prompt、用户输入、历史消息、检索结果和工具结果。

上下文工程是 AI 应用稳定性的核心之一。很多"模型答错"的问题,本质上是上下文给错、给少、给多或排序不合理。


7. Embeddings

Embeddings 是向量嵌入,用一组数字表示文本、代码、图片等内容的语义特征。

例如下面几句话字面不同,但语义接近:

text 复制代码
系统接口响应慢如何排查?
服务延迟过高应该怎么优化?
如何降低请求耗时和提升吞吐量?

通过 Embedding 模型转换后,它们在向量空间中的距离会更近。这样系统就可以做语义搜索,而不是只依赖关键词匹配。

Embeddings 常用于语义搜索、RAG、代码搜索、推荐、聚类和去重。


8. 向量索引与向量数据库

向量数据库用于存储和检索 Embeddings,常见选择包括 FAISS、Chroma、Milvus、Pinecone、Weaviate、pgvector 等。

严格来说,RAG 不一定必须使用"向量数据库"。小规模场景可能只需要本地向量索引;复杂场景也可能使用关键词检索、向量检索、混合检索、知识图谱或数据库查询组合。

向量数据库解决的是"如何快速找到语义相关内容"的问题,但它不是 RAG 质量的全部。文档切分、元数据、权限过滤、重排序和评估同样重要。


9. RAG

RAG 是 Retrieval-Augmented Generation,检索增强生成。

它的目标是让模型在回答前先拿到外部知识,减少"凭空编造",并让答案可以基于可追溯的资料。

RAG 通常分为两个阶段。

离线索引阶段:

  1. 收集和清洗文档;
  2. 将文档切分成适合检索的片段;
  3. 提取标题、来源、权限、时间等元数据;
  4. 建立关键词索引、向量索引或混合索引。

在线检索阶段:

  1. 接收用户问题;
  2. 必要时进行查询改写;
  3. 从索引或数据库中检索候选内容;
  4. 对结果进行权限过滤、去重、重排;
  5. 把可信资料注入上下文;
  6. 让模型基于资料生成回答,并尽量给出引用来源。

核心公式:

text 复制代码
用户问题 + 检索资料 + 上下文组织 + 模型生成 = 更可靠的回答

RAG 适合企业知识库、产品文档助手、客服机器人、内部制度查询、合同分析和代码库问答。

RAG 的难点不是"接一个向量库",而是检索质量、文档结构、权限控制、引用准确性和评估体系。


10. Retriever

Retriever 是检索器,负责从知识库、数据库或搜索索引中找到与用户问题相关的内容。

一个好的 Retriever 通常不只做向量搜索,还可能组合:

  • 关键词检索;
  • 向量检索;
  • 混合检索;
  • 元数据过滤;
  • 权限过滤;
  • 查询改写;
  • 重排序。

在 RAG 中,检索质量决定回答上限。模型只能基于拿到的上下文回答,如果检索内容错了,回答也很容易错。


11. Agent

Agent 是能围绕目标进行多步骤处理的 AI 系统。它通常会结合模型、工具、状态和控制逻辑。

普通模型调用是:

text 复制代码
用户输入 -> 模型输出

Agent 更接近:

text 复制代码
目标 -> 规划 -> 调用工具 -> 观察结果 -> 调整下一步 -> 输出结果

不过 Agent 不是一个严格统一的技术标准。不同团队对 Agent 的定义不同:有的强调自主规划,有的强调工具调用,有的强调长任务执行和状态管理。

Agent 的关键挑战包括任务边界、工具选择、错误恢复、权限控制、成本控制、防止循环和人工确认。

需要注意:不是所有 AI 应用都需要 Agent。如果业务流程清晰、步骤固定、风险较高,通常更适合使用确定性的工作流,把 LLM 作为其中一个节点,而不是让模型自由规划。Agent 更适合目标明确但步骤不完全固定、需要多轮观察和工具调用的场景。


12. Tools / Tool Calling

Tools 是模型或 Agent 可调用的外部能力,例如搜索、数据库、文件系统、业务 API、浏览器、代码执行器、GitHub、Jira、Slack 等。

Tool Calling 让 AI 可以从"生成文本"扩展到"读取信息或执行操作"。但模型通常只是决定调用哪个工具、传什么参数;真正的执行、权限、安全和审计仍然由工程系统负责。

高风险工具必须有保护措施,例如参数校验、权限校验、操作日志、限流、回滚方案和人工确认。


13. Memory / State

Memory 是记忆,State 是状态。它们用于保存对话历史、用户偏好、任务进度、工具调用结果和中间分析。

需要区分两类信息:

  • 短期状态:当前对话、当前任务步骤、工具返回结果;
  • 长期记忆:用户偏好、项目背景、历史经验。

长期记忆不是越多越好。它涉及隐私、授权、过期、删除和错误记忆污染。生产系统需要明确"记什么、为什么记、记多久、如何删除"。


14. Guardrails / Safety

Guardrails 是 AI 系统中的安全护栏,用来限制模型输入、输出和工具调用的风险。

常见 Guardrails 包括:

  • 输入检查:识别 prompt injection、越权请求、恶意指令;
  • 权限控制:确保用户只能检索和操作自己有权限的数据;
  • 输出检查:过滤敏感信息、违规内容、危险建议和不合规表达;
  • 工具保护:限制可调用工具、校验参数、阻止高风险操作;
  • 结构校验:验证 JSON、schema、类型和必填字段;
  • 人工确认:在删除、支付、提交代码、发送消息等操作前要求确认。

Guardrails 不是单一工具,而是一组工程策略。它应该贯穿模型调用前、检索阶段、工具调用阶段和输出返回前。


15. Human-in-the-loop

Human-in-the-loop 是人在环路中,指在 AI 系统关键节点引入人工确认、审核、修正或接管。

常见场景包括:

  • AI 发送邮件、提交代码、执行支付、删除数据前需要确认;
  • AI 输出医疗、法律、金融等高风险建议前需要专家审核;
  • AI 不确定或置信度不足时转人工;
  • 人工修正 AI 输出并形成反馈数据。

Human-in-the-loop 的价值是降低风险、提升信任,并把真实反馈带回评估和优化流程。


16. Evaluation

Evaluation 是评估体系,用来判断 AI 系统是否真的有效。

AI 输出具有不确定性,不能只依赖传统单元测试。评估通常关注:

  • 答案是否正确;
  • 是否基于检索资料;
  • 是否有幻觉;
  • 是否符合格式;
  • 是否符合业务规则;
  • 是否安全;
  • 响应速度和成本是否可接受;
  • 用户是否满意。

常见方法包括人工评估、黄金数据集、自动评分、LLM-as-a-Judge、A/B 测试、用户反馈、日志分析、检索召回率和引用准确率评估。

评估结果应该反向优化 Prompt、Context、RAG、Retriever、Agent 和产品交互。

工程上可以把 Evaluation 分成几类:

  • 离线评估:用固定测试集评估 Prompt、模型、RAG 和 Agent 变更;
  • 在线评估:通过用户反馈、转化率、人工接管率和线上日志观察真实效果;
  • 检索评估:关注召回率、命中率、重排质量和引用准确性;
  • 生成评估:关注正确性、完整性、格式、幻觉、安全和语气;
  • 回归评估:每次更换模型、Prompt、索引或工具逻辑后,确认旧问题没有被重新引入。

没有 Evaluation 的 AI 应用很难稳定迭代,因为你无法判断一次修改到底是变好还是变差。


17. Observability

Observability 是可观测性,用来追踪 AI 系统运行时发生了什么。

生产级 AI 应用至少应该记录:

  • 请求 ID 和用户会话;
  • 使用的模型、Prompt 版本和参数;
  • 检索命中的文档、分数和引用来源;
  • 工具调用的输入、输出、耗时和错误;
  • token 使用量、成本和延迟;
  • Guardrails 拦截记录;
  • 用户反馈和人工接管记录;
  • Evaluation 结果。

可观测性的价值是定位问题、控制成本、分析质量、复现线上故障,并为后续优化提供依据。没有日志和 trace,AI 系统出现错误时往往很难判断是模型问题、检索问题、上下文问题还是工具问题。


18. AI 输出与产品体验

AI 输出不只是模型生成的一段文字,也可能是代码、JSON、表格、摘要、建议、任务执行结果或可编辑草稿。

AI 产品需要特别关注:

  • 流式输出;
  • 停止生成;
  • 重新生成;
  • 引用来源;
  • 复制和编辑;
  • 用户反馈;
  • 人工接管;
  • 错误恢复;
  • 版本对比;
  • trace id 展示;
  • 请求取消和超时处理;
  • 消息状态机;
  • 重试和降级;
  • 错误边界;
  • SSE、WebSocket 或流式接口处理。

这正是工程师转 AI Engineer 的优势:你不仅理解模型输出,还能把输出设计成用户能理解、能控制、能信任的交互。


19. Vibe Coding

Vibe Coding 是一种借助 AI 编程助手进行开发的方式。开发者用自然语言描述目标,AI 辅助生成、修改、解释和重构代码,开发者负责审查、验证和决策。

典型流程:

text 复制代码
描述需求 -> AI 生成方案或代码 -> 人工审查 -> 运行测试 -> 继续迭代 -> 上线

Vibe Coding 可以提高开发效率,尤其适合原型开发、代码解释、样板代码生成、Prompt 草稿、RAG 流程搭建、Agent 工具定义、测试用例和文档整理。

但它不是 AI 应用运行时的一部分,也不等于"不懂代码也能开发"。越是复杂系统,越需要开发者具备架构判断、测试意识、安全意识和代码审查能力。

Vibe Coding 的常见风险包括:

  • 生成不存在或不适合当前项目的 API;
  • 引入过度抽象;
  • 忽略边界条件;
  • 缺少测试;
  • 误读上下文;
  • 引入安全漏洞;
  • 生成看似合理但实际不可维护的代码。

因此,Vibe Coding 更适合作为效率放大器,而不是质量保证器。开发者仍然要负责需求拆解、架构判断、代码审查、测试验证和上线风险。


四、工程师如何迁移理解

可以用软件工程经验这样类比:

  • Prompt:类似组件或业务逻辑的行为说明;
  • Context:类似 props、state、store、接口数据和路由参数;
  • RAG:类似带语义检索能力的数据查询层;
  • Embeddings:类似语义索引;
  • Agent:类似可调用多个 API 的自动化工作流;
  • Tools:类似外部接口和系统能力;
  • Human-in-the-loop:类似确认弹窗、审批流和人工接管;
  • Guardrails:类似权限校验、表单校验、安全拦截和操作保护;
  • Evaluation:类似测试、监控、埋点和质量分析;
  • Observability:类似日志、性能监控、链路追踪和错误排查;
  • Vibe Coding:类似 AI 结对编程。

工程师的优势在于理解用户体验、状态管理、异步请求、错误处理和产品落地。这些能力在 AI 应用中同样重要。


五、建议学习路线

从软件工程转 AI Engineer,可以按下面顺序学习:

  1. LLM API:messages、system prompt、streaming、structured output、tool calling。
  2. Prompt 与 Context:角色、任务、约束、上下文压缩、历史消息管理。
  3. Embeddings 与 RAG:文档切分、索引、混合检索、重排序、引用来源。
  4. Agent 与 Tools:工具定义、任务状态、错误恢复、权限控制、人工确认。
  5. Guardrails:prompt injection 防护、权限过滤、参数校验、敏感信息保护。
  6. AI 产品体验:流式输出、停止生成、重试、反馈、引用展示、可编辑输出。
  7. Evaluation:测试集、人工评分、自动评分、幻觉检测、召回率、回归评估。
  8. Observability:日志、trace、token 成本、延迟、工具调用链路、错误分析。
  9. 工程化:缓存、限流、模型降级、安全策略、隐私保护、发布回滚。

六、总结

AI Engineer 的核心不是"会问模型问题",而是"把模型能力变成稳定、可控、可评估的产品能力"。

Prompt、Context、RAG、Embeddings、Agent、Tools、Guardrails、Human-in-the-loop、Evaluation 和 Observability 构成 AI 应用工程的主要模块。Vibe Coding 是开发这些模块时的 AI 辅助开发方式。

对工程师来说,最现实的转型方向是:

text 复制代码
AI 产品交互
+ LLM API
+ Prompt / Context Engineering
+ RAG
+ Agent / Tool Calling
+ Guardrails / Safety
+ Evaluation
+ Observability
+ 工程化能力

这条路线能最大程度复用已有工程经验,也最贴近真实业务中的 AI 应用开发。