跳到正文

第 L4 层

应用工程:从调一次 API 到带 evals 的生产系统

这一层

这一层解决的问题只有一个:把模型变成一个能上线、能量、能改的功能。知识点按一条线排,每一个都是前一个在生产里撞到的墙。

这条线怎么走

  1. 调用模型 API:token、流式、工具、成本:一切从消息列表进、token 流出开始。要会的是 context window、计费、流式、工具调用的请求响应形状、一次调用的毫秒和美元。
  2. Prompting:能度量的指令 / 结构化输出:让模型的回答能被程序消费:prompt 是接口规范,不是咒语——改一处要能说出指标动了多少;输出要能被程序消费,所以 schema 约束和降级链紧跟着来。
  3. Embedding:把意思变成向量:模型不知道你的数据。把意思变成向量,「按意思搜」成了算距离;要懂它和关键词检索什么时候混用、召回怎么量。
  4. RAG:先查再答:先查再答。难的不是接向量库,是切分、召回、重排、上下文预算,和一组带标准答案的问题。
  5. Agent:循环里带工具的模型:模型 + 工具 + 循环。工程全在边界上:步数上限、工具报错、上下文裁剪、什么时候该用固定流程。
  6. MCP:给每个系统一个统一的插口:给每个系统一个统一插口。写 server 的核心是把操作描述得让模型选得对,好不好由 agent 的选工具评测说了算。
  7. Evals:知道它有没有变好:没有评测,改 prompt、换模型都是猜。评测集从生产错误里一条条攒出来,裁判要和人对过。
  8. 可观测性:知道线上发生了什么,并能回到评测:线上每次调用一条 trace,加上质量信号,再抽样回到 error analysis——评测集靠这个环才不会停在上线那天。
  9. 成本:每一次调用都有价签:缓存、批量、路由、降级、上限;量每个成功结果的成本,不量平均。
  10. 安全:模型会照着不可信的文本行动:模型会照着不可信文本行动。拆开「私有数据、不可信内容、对外发送」三要素,削能力而不是只靠检测。

TypeScript:前端与 SDK 所在的语言 是旁支:生态的 SDK、框架、MCP 参考实现都在里面,目标是读得懂改得动,不是学语言。

线上的位置:model-apis、structured-output、cost、safety 贴着每一次调用;embeddings 与 rag 在调用之前;agents 与 mcp 把调用串成循环;evals 在发布之前,observability 在发布之后,两者首尾相接。

快变层怎么学

这一层以月计半衰期,教程写出来就旧了。只收三种东西:官方文档(供应商保证了什么)、开源项目与评测工具(别人怎么把它做成系统)、一线从业者的工程文章(踩过的坑)。学法是「一页官方文档 + 一个自己做过的项目」:每个节点的 project 字段就是那个项目,做完才算过。每季度重看精选,工具类超过新鲜度上限就换。

推荐前十

按阅读顺序;每条链到下面的节点。

  1. 1

    Claude Cookbooks — Anthropic free

    可以跑的 notebook,工具调用、JSON、缓存、批量各一个 → 调用模型 API:token、流式、工具、成本

  2. 2

    Prompting best practices — Anthropic free

    模型厂随版本重写的提示参考,先读适用于所有模型的部分 → Prompting:能度量的指令

  3. 3

    Structured outputs — Anthropic free

    schema 约束与 strict 工具参数的官方边界,决定你在哪层兜底 → 结构化输出:让模型的回答能被程序消费

  4. 4

    What are embeddings? — Vicki Boykis free

    从 one-hot 到 transformer embedding 的短书,带工程 → Embedding:把意思变成向量

  5. 5

    Introducing Contextual Retrieval — Anthropic free

    hybrid、rerank、chunk 上下文各有测过的数字 → RAG:先查再答

  6. 6

    Building effective agents — Anthropic free

    工作流与 agent 的区别,和什么时候两者都不需要 → Agent:循环里带工具的模型

  7. 7
  8. 8

    AI Evals: Everything You Need to Know — Hamel Husain and Shreya Shankar free

    从真实 trace 的 error analysis 开始,再做和人对过的裁判 → Evals:知道它有没有变好

  9. 9

    Prompt caching — Anthropic free

    最大的一项原生省钱手段,权威数字只在这页 → 成本:每一次调用都有价签

  10. 10

    My Lethal Trifecta talk at the Bay Area AI Security Meetup — Simon Willison free

    一条规则记住数据怎么被偷,设计权限边界时先拿掉一个要素 → 安全:模型会照着不可信的文本行动

节点

调用模型 API:token、流式、工具、成本

半衰期: 快变

你的文字Unbelievably fast!Un3118bel6667iev11203ably1346fast3049!0共 6 个context window:模型一次读入的全部内容你的 prompt它的回答剩余空间

模型从来看不见字母和单词。tokenizer 把你的文本切成 token(常见词整个一个,生僻词切成几段),每个给一个编号——所以模型拼写会出错:它根本没见过字母。一切都按 token 计数:context window 是它一次能读多少(你的提示和它的回答加在一起),一次调用的价钱和耗时都随它增长。从代码里调模型,做的主要就是管这件事:token 一到就流式读出来、让它调你的工具、要一份你能校验的 JSON。这些决定了后面 RAG、agent、evals 的每一个工程取舍。

先修
LLM:模型怎么工作
之后
Agent:循环里带工具的模型 · 成本:每一次调用都有价签 · 可观测性:知道线上发生了什么,并能回到评测 · Prompting:能度量的指令 · 结构化输出:让模型的回答能被程序消费 · TypeScript:前端与 SDK 所在的语言
  • Claude Cookbooks — Anthropic free

    repo — Runnable notebooks for the calls you will actually make — tool use, JSON output, prompt caching, batches — each a working example rather than a description.

  • Let's build the GPT Tokenizer — Andrej Karpathy free

    video · 15 min · only 0:00–14:56 — What a token is, in a live tokenizer: why the same text costs different amounts on different models, and why models stumble on spelling and arithmetic.

复现项目: A client that knows what it costs — Call one model API with streaming, one tool and a JSON schema; log tokens and latency per call, and work out the cost of a thousand requests.

落选 (2)
  • OpenAI API reference — 另一家的同类文档;主力栈是 Anthropic 与 OpenRouter,Cookbooks 已覆盖同样的调用形态。
  • Anthropic SDK 的 README — 安装与调用示例,Cookbooks 是它的超集。

Prompting:能度量的指令

半衰期: 快变谁在招

Prompt指令示例文档问题LLM回答同样十个测试用例,prompt 的两个版本v14/10 通过v28/10 通过

对一次调用来说,提示就是模型的整个世界:你的指令、几个例子、它该用的文档,还有问题。措辞的小改动会以你预料不到的方式改变结果,所以好的提示是对着一组你自己保存的测试用例改出来的,从来不是凭一个回答的感觉。会写提示的标志不是写得花,而是改一处能说出指标动了多少——它是 evals 的入口,也是 RAG 和 agent 里最便宜的那根杠杆。

先修
调用模型 API:token、流式、工具、成本
之后
Agent:循环里带工具的模型 · Evals:知道它有没有变好 · RAG:先查再答 · 结构化输出:让模型的回答能被程序消费
  • Prompting best practices — Anthropic free

    docs — The model maker's reference, rewritten with each release so it fits the models you will call: instructions, examples, structure, output format, tools. Start with the techniques for all models.

复现项目: Improve one prompt with a test set, not by feel — Fifty cases with expected outputs, a baseline score, then each prompt change measured as a diff — keep the ones that move the number.

落选 (3)
  • Prompt engineering guide(OpenAI) — 同类官方页,留一家。
  • DSPy — 把 prompt 当可优化参数的框架,先有评测集再谈,归 Evals:知道它有没有变好 之后。
  • 各种 prompt 技巧合集站 — 教程类,快变层不收。

结构化输出:让模型的回答能被程序消费

半衰期: 快变

model-apispromptingstructured-output

模型吐出的是文本,程序要的是字段。约束从强到弱有四级:供应商在解码时按 schema 约束(grammar)、工具参数的 strict 模式、prompt 里给格式加本地校验、只做解析加重试。工程量全在降级链上:每一级失败时下一级是什么、失败怎么计数、哪些字段允许缺。另外两件事常被忽略:schema 的字段名和描述是模型会读的文档,写法直接影响正确率;「JSON 合法」不等于「内容正确」,后者归 Evals:知道它有没有变好。

先修
调用模型 API:token、流式、工具、成本 · Prompting:能度量的指令
  • Structured outputs — Anthropic free

    docs — 模型侧 JSON schema 约束和 strict 工具参数的官方说明:支持哪些 schema 特性、编译后的 grammar 怎么缓存、和工具调用怎么配合——先弄清供应商保证了什么,再决定自己在哪一层兜底。

  • Instructor free

    repo — 把 schema 校验、失败重试、多供应商统一成一个薄层的开源实现;读它的校验与重试环,等于拿到自己写降级链时的参考答案。

复现项目: 一个带校验与降级链的抽取器 — 对一批真实输入用 JSON schema 约束抽取字段;schema 特性不支持时退到 prompt 约束加本地校验,再退到重试。记每一级的命中率、失败率和每条成本。

落选 (3)
  • Structured Outputs guide(OpenAI) — 同一件事的另一家官方页;主力栈是 Anthropic 与 OpenRouter,留一家够用。
  • Pydantic AI — 整个 agent 框架,本节点只要校验与降级这一层,Instructor 更薄。
  • JSON Schema 规范 — 原理类,不是本层的快变内容,用到时查。

Embedding:把意思变成向量

半衰期: 快变

离得近 = 意思相近退款政策退回商品GPU kernel矩阵运算CUDA「怎样才能拿回我的钱?」

在模型内部,每个 token 都变成一个向量——一长串数字,摆放得让意思相近的东西落在附近。对整段文字做同样的事,就能按意思搜:一个问「怎么退钱」的问题能找到退款政策,哪怕两者没有一个词相同。关键词检索在精确的名字、编码和报错信息上仍然更强,所以好的系统两种都用(hybrid)。要懂的是:各自擅长什么、什么时候混用、向量索引在数据量多大时才值得、怎么量召回。它是 RAG 的地基。

先修
LLM:模型怎么工作
之后
RAG:先查再答
  • What are embeddings? — Vicki Boykis free

    book — A short free book that goes from one-hot vectors to transformer embeddings with the engineering around them — the one explanation practitioners keep linking.

复现项目: Semantic search over your own documents — Embed a few thousand of your own documents into a vector index, then compare its top ten against keyword search on twenty queries you label.

落选 (2)
  • MTEB leaderboard — 选模型时现查的流,不收藏。
  • Sentence — Transformers 文档 — 自托管 embedding 的工具文档,用户走托管 API,用到再看。

RAG:先查再答

半衰期: 快变谁在招

问题检索你的文档最相关的 3 段Prompt问题3 段原文LLM回答[1] [3]

检索增强生成:模型回答之前,你的代码先在你自己的文档里搜索,把最相关的几段贴进提示。模型据此作答而不是凭记忆,还能说出是在哪里找到的。RAG 系统答错时,多半是对的那一段根本没被取回来,所以最先要量的是检索本身:回答问题的那一段,有多大比例出现在你取回的内容里。难的不是接上向量库,而是切分、召回、重排、上下文预算,以及用一组带标准答案的问题证明它比不检索更好。

先修
Embedding:把意思变成向量 · Prompting:能度量的指令
  • Introducing Contextual Retrieval — Anthropic free

    article — Hybrid search (embeddings plus BM25), reranking and chunk context, each with a measured drop in retrieval failures — design with numbers.

复现项目: Hybrid retrieval with a labelled query set — BM25 plus vectors fused with reciprocal rank fusion, a reranker, and 50 hand-labelled queries; report recall@k and nDCG against keyword search alone.

落选 (3)
  • RAGAS — 回答质量的指标库,等有了生成这一半再收。
  • LlamaIndex / LangChain 的 RAG 教程 — 框架教程,快变层不收。
  • 各家 reranker 文档(Cohere 等) — 工具文档,做 rerank 那一步时现查。

Agent:循环里带工具的模型

半衰期: 快变谁在招

请求工具、执行、把结果喂回去任务模型工具搜索运行代码调用 API工具调用结果完成

给模型一张工具清单(搜索、跑代码、调 API),再把它放进循环:它提出要用哪个工具,你的代码去执行,结果送回去,模型决定下一步,直到任务完成。一个自己写的朴素循环胜过花哨的框架;难的是循环外面那些东西:步数上限、工具报错怎么办、上下文怎么裁剪、什么时候该用固定流程而不是 agent,以及找出它到底在哪一步出错。评测要看它选没选对工具、参数对不对、走了几步。

先修
调用模型 API:token、流式、工具、成本 · Prompting:能度量的指令
之后
MCP:给每个系统一个统一的插口 · 安全:模型会照着不可信的文本行动
  • Building effective agents — Anthropic free

    article — Workflows versus agents, and when you need neither: the handful of patterns these systems are built from, named by a lab that ships them.

  • Hugging Face Agents Course free

    course — Hands-on: tool calling, a ReAct-style loop and multi-agent setups in code you run — the gap between reading about agents and writing one.

  • Effective context engineering for AI agents — Anthropic free

    article — Context is the agent loop's most expensive variable: when to trim, compress, take notes or hand off to a sub-agent, sorted by problem — the checklist for your own loop's context budget.

复现项目: Write the agent loop yourself, then evaluate it — Messages API tool use with a step cap, tool-error retries and context trimming; score it on 30 real tasks for tool choice, argument correctness and steps taken.

落选 (2)
  • OpenAI Agents SDK / LangGraph — 框架;项目字段要求自己写循环,框架放到写过之后。
  • Writing effective tools for agents(Anthropic,2025 — 09)— 内容贴 #557,但 HN 最高 3 分、没过背书线;在 MCP:给每个系统一个统一的插口 的落选里同记一笔。

MCP:给每个系统一个统一的插口

半衰期: 快变谁在招

客户端服务端聊天应用你的 agent代码编辑器MCP数据库工单内部 API服务端写一次,所有客户端都能用

Model Context Protocol 是把一个系统(数据库、工单系统、内部 API)作为工具提供给任何 agent 的标准方式:服务端写一次,所有会说 MCP 的助手和 agent 都能接上。功夫在工具的名字和描述上——agent 只有从描述里看得出什么时候该选它,才用得好;工具名、参数 schema、错误信息都是写给模型读的文档。好不好不由你说,由 agent 的选工具评测说。

先修
Agent:循环里带工具的模型
之后
安全:模型会照着不可信的文本行动
  • Model Context Protocol — introduction and spec free

    docs — The protocol itself — tools, resources, transports — straight from the spec rather than from a framework's wrapper around it.

复现项目: An MCP server for an API you know, measured by an agent — Expose five real operations as tools, then run an agent on 30 tasks and count how often it picks the right tool with the right arguments; rewrite descriptions until that number moves.

落选 (2)
  • MCP TypeScript SDK — 13,533 star 的官方实现,但它是写 server 的工具不是知识点,规范一条已够。
  • Writing effective tools for agents(Anthropic,2025 — 09)— 讲用 agent 迭代工具描述,正是 #557 的方法;HN 最高 3 分没过背书线,正文点名即可。

Evals:知道它有没有变好

半衰期: 快变谁在招

用例回答评分#1#2#3#4#5评分靠一条检查、一份评分标准或另一个模型改动前改动后每次改动都打分

同一个问题每次都可能得到不同的回答,所以一次测试说明不了什么。一个 eval 是一组真实用例加一种给每个回答打分的办法:能写精确检查的地方写精确检查,不能的地方用评分表或另一个模型当裁判;每次改动都跑一遍。先从读真实输出、给失败方式起名字开始——评测集就从那张清单里长出来,它才能告诉你一次改动是真的变好了,还是只把失败挪到了别处。它是这一层里最稀缺、最能区分候选人的技能。

先修
Prompting:能度量的指令
之后
微调:教它你的任务 · 可观测性:知道线上发生了什么,并能回到评测
  • AI Evals: Everything You Need to Know — Hamel Husain and Shreya Shankar free

    article — Start from error analysis on real traces, not from a metric; then judges you check against people — the practice behind 'evaluation frameworks' in these postings.

  • promptfoo free

    repo — Runs an eval set as CI — cases in YAML, assertions by rule or by judge, red when the score drops — turning one-off eval studies into a regression suite. Open source; part of OpenAI since March 2026.

  • Inspect free

    repo — An evaluation institute's open-source framework: a clean task / dataset / solver / scorer split, with agent tasks and tool use first-class — the shape to grow a reusable harness in.

复现项目: An eval harness that gates a change — Label 100 real outputs by hand, build an LLM judge and measure its agreement with you, and make CI fail when a prompt or model change drops the score.

落选 (4)
  • Hamel Husain 与 Shreya Shankar 的 evals 课程 — 付费课程,形态是教程,快变层只收文档、项目、工具与文章;FAQ 一条已经是课程的提纯。
  • Braintrust — 托管平台,本节点要的是能进 CI 的开源工具。
  • Who Validates the Validators(Shankar 等,2024) — 裁判要和人对齐的原始论文,原理类,归 L5。
  • OpenAI Evals — 仓库偏基准测试,不是应用评测的形状。

可观测性:知道线上发生了什么,并能回到评测

半衰期: 快变

model-apisevalsobservability

LLM 功能的可观测性是三件事:每次调用一条 trace(prompt 版本、模型、token、延迟、成本、工具调用序列);线上质量信号(用户改没改结果、重试、降级触发、投诉);以及回环——从 trace 里抽样、人工标注、做 error analysis、把失败模式变成 Evals:知道它有没有变好 的新用例。只记状态码的日志不够,要能重建「模型看到了什么、答了什么」,又不能存超出隐私许可的内容。没有这个回环,评测集只会停在上线那天的样子。

先修
调用模型 API:token、流式、工具、成本 · Evals:知道它有没有变好
  • Langfuse free

    repo — 开源、可自托管进 k3s 的 trace / 会话 / 评分平台。价值不在看板,而在把生产 trace 变成能抽样、能打分、能回灌进评测集的数据——error analysis 的入口就在这里。

复现项目: 给一个在线 LLM 功能接 trace,再从 trace 回到评测集 — 给一个生产里的 LLM 功能每次调用记一条 trace(输入摘要、prompt 版本、模型、token、延迟、成本、用户有没有改译文);一个月后抽 100 条做 error analysis,把失败模式写成新的评测用例。

落选 (3)
  • OpenTelemetry GenAI semantic conventions — 方向对(厂商中立的 span 属性),但仓库 664 star 没过背书线;接 Langfuse 时顺手对照字段名。
  • LangSmith — 闭源托管,自托管只给企业版;本层偏可自托管的开源。
  • Phoenix(Arize) — 和 Langfuse 同类,二选一即可。

成本:每一次调用都有价签

半衰期: 快变

model-apiscost

成本 = 单价 × token × 次数,杠杆按便宜程度排:缩短 prompt 和输出;prompt caching(共用前缀只付一次全价);Batch API(异步换半价);模型路由(便宜模型先上,不确定时升级);供应商故障时的降级;最后是硬上限——每用户配额、每日预算、先报价再执行。量的时候看每次请求的 p50 / p95 而不是平均,更要看「每个成功结果」的成本:一个失败重试三次的便宜模型不便宜。缓存和路由会改变模型看到的内容,改完要回 Evals:知道它有没有变好 跑一遍。

先修
调用模型 API:token、流式、工具、成本
  • Prompt caching — Anthropic free

    docs — 供应商原生省钱手段里最大的一项:哪些前缀能缓存、各模型的最小可缓存长度、写入与命中的价格倍率,权威数字只在这页。读完就能算出共用一段长系统提示的调用该省多少。

复现项目: 给一个共用系统提示的生产调用加 prompt caching,拿账单验证 — 把共用的系统提示和术语表放进缓存前缀,跑一周,对比缓存命中 token 占比、每千次调用成本和 p50 延迟;批量回填类任务改走 Batch API,再比一次。

落选 (3)
  • Message Batches API docs(Anthropic) — 本想收,HN 最高 3 分、没过背书线;和 prompt caching 同一个文档站,读完那页顺手读,正文与项目里已点名。
  • OpenRouter docs — 主力路由层,但它是产品文档不是知识点;路由与降级在 `OpenRouterRouting.java` 里已是自己的实现。
  • 各家价格表 — 流,不收藏,算账时现查。

安全:模型会照着不可信的文本行动

半衰期: 快变

agentsmcpsafety

这里的安全是 LLM 应用的应用安全,不是对齐。三个问题:不可信内容从哪进来(用户输入、检索到的文档、工具返回、网页);模型能做什么(工具权限最小化、不可逆操作要人确认、按任务分级);数据能从哪出去(外链、markdown 图片、带参数的工具调用)。Prompt injection 没有完整解法,所以靠削能力而不是只靠检测:把三要素拆开、输出先校验再执行、每次调用有记录和上限。MCP server 的作者同时是攻击面的作者——工具描述和返回值都是模型会照做的文本。

先修
Agent:循环里带工具的模型 · MCP:给每个系统一个统一的插口
  • OWASP Top 10 for LLM Applications 2025 free

    docs — 十类风险一张清单——prompt injection、输出处理不当、过度代理、向量库弱点、无上限消耗。给自己的 agent 或 MCP server 做威胁建模时逐条过一遍,不会漏掉整类。

  • My Lethal Trifecta talk at the Bay Area AI Security Meetup — Simon Willison free

    article — 一条判定规则就够记:私有数据、不可信内容、对外发送三者同在,数据就能被偷走。设计工具权限边界时先问「拿掉哪一个」,比堆检测器可靠。

复现项目: 给 ImageStep MCP 做一轮 prompt injection 红队 — 用 promptfoo 的 red team 对 MCP server 的 7 个工具跑注入用例(藏在文件名、URL 页面、工具返回里的指令),数 agent 越过权限边界或把数据发到外部的次数;修完再跑一轮。

落选 (3)
  • 各家 prompt injection 防护指南(Anthropic / OpenAI 文档) — 以 prompt 层手段为主,不如上面两条从能力边界讲。
  • Greshake 等《Not what you've signed up for》(2023) — 间接注入的原始论文,原理类,归 L5 前沿而非本层。
  • Lakera 等 guardrail 产品 — 检测类产品,迭代快,是流不是收藏。

TypeScript:前端与 SDK 所在的语言

半衰期: 快变谁在招

{ }

客户集成会碰到 web 前端和 SDK,它们大多是 TypeScript 写的;模型厂的 SDK、agent 框架、MCP 的参考实现也在里面。已经在写它的人直接跳过。它在这一层的意义是「读得懂、改得动生态里的代码」,不是语言本身。

先修
调用模型 API:token、流式、工具、成本
  • The TypeScript Handbook free

    docs — The language's own reference, short enough to read in an evening — enough to read and change the web and SDK code these roles ship to customers.

复现项目: Type an SDK for an API you use — Write a small typed client for a real API — request and response types, errors as values, one streaming endpoint — and publish it with its tests.

落选 (2)
  • Effective TypeScript — 付费书,深度超出「读得懂改得动」的要求。
  • Total TypeScript — 课程,快变层不收教程。

完成标准自测

  • 有一个在线的 RAG 或 agent 功能,带常驻的评测集(≥ 50 条人工核过的金标),CI 里分数掉线就红。
  • 能对任一次线上调用说出 prompt 版本、模型、token、延迟、成本,并从生产 trace 抽样做过一轮 error analysis。
  • 改一个 prompt 或换一个模型,能给出指标变化的数字和成本变化的数字。
  • 写过一个 MCP server 或工具集,用 agent 的选工具评测量过描述改动的效果。
  • 对自己的系统画过一次「不可信内容从哪进、模型能做什么、数据从哪出」的图,并拆掉过一个要素。

作者的笔记原稿。