把 LLM 应用拆成一条“可控成本的工程链路”:从 Token 预算到渐进式加载的可执行框架
用一张“术语→工程要素→控制面”的翻译表把 LLM 从聊天能力拆到可计量、可回滚的工程链路。把 LLM 应用拆成一条“可控成本的工程链路”从 Token 预算到渐进式加载的可执行框架我更喜欢用一张“术语 → 工程要素 → 控制面”的翻译表把 LLM 从“会聊天”拆到一条能计量、能回滚的工程链路。LLM 应用从“能聊”到“能干活”差别往往不在于你懂了多少新名词而在于这些名词能不能落到可观测、可约束的工程对象上成本和稳定性有没有被明确写进控制面。同一组概念如果只停在“名词解释”落地时经常就变成模型参数调一调、提示词补一补但如果按工程语言去处理就会被拆成预算、接口、数据通道、编排和缓存这些可以监控、可以灰度、出了问题也能回放的东西。比较省事的切口是先做一张简化翻译表术语 → 工程要素 → 常见失控点Token → 计费/延迟的最小单位 → 单次请求成本没上限、P99 抖动Context Window → 单次推理携带上限 → 长上下文稀释关键信息、装配失控Prompt → 模型侧输入协议 → 难版本化、难回归、行为漂移RAG/Tool → 外部知识/外部动作通道 → 数据难追溯、动作难审计MCP → 标准化接入层 → “一源一接”导致集成碎片化、维护成本飙升Agent → 多步编排执行器 → 状态/重试/超时缺位线上难控渐进式加载 → 动态上下文/动态工具集合 → 一次性全量加载引发 token 暴涨、误调用总览把术语翻译成工程要素预算 / 接口 / 数据通道 / 编排 / 缓存1适用场景企业级 LLM 应用通常要同时做到成本可控、行为可解释、可灰度、可回滚。单纯“堆能力”更大模型、更长上下文、更多工具会把不确定性直接带到线上预算失控、依赖膨胀、SLO 对不齐。2诞生背景Token、RAG、Agent、MCP 这些词在团队里很容易变成“会背就算懂”。大家能复述概念但预算边界、接口契约、数据通道、编排策略、缓存策略没落地最后靠经验和补丁硬顶。3核心原理做一张翻译表把每个术语固定映射到一类工程要素并把它对应的控制面讲清楚。1Token计费与延迟的最小单位对应工程要素是预算max_input/max_output、采样策略、压缩/摘要策略。2Context Window单次推理可携带的上限对应工程要素是输入装配、裁剪规则、优先级队列高价值上下文优先。3Prompt静态上下文与指令结构对应工程要素是模板化、版本化、回归测试以及安全边界输出 schema/校验。4RAG/Tool外部知识与外部动作对应工程要素是数据通道索引/检索/引用、权限、失败模式超时/降级/审计。5MCP工具/数据的标准化接入层对应工程要素是集成成本、权限与审计的一致性、部署/运维模型复用。6Agent多步决策与执行对应工程要素是编排状态机/计划、重试、超时、预算控制与观测。7渐进式加载按需引入上下文/工具对应工程要素是动态预算与动态能力集合分层暴露、延迟注入、可降级。4缺陷/对比没有这张翻译表时系统常见的动作就剩两类纵向换更强模型/更大窗口横向堆更多提示词与工具。这两种都很难长成工程级控制面成本不好预测行为不好回放故障也不好定位。5回扣后面各段都按同一套路走先把计量单位定出来预算/窗口/缓存再把接口和数据流定出来prompt、RAG/tool、MCP最后把控制面补齐编排与渐进式加载。第一段Token 与 Context Window——把成本上限写进架构预算先于能力1适用场景成本波动大同一条业务链路不同请求的输入长度差异很大。长对话/长文档历史消息和附件叠加输入 token 一路线性增长。线上 P99 不稳定首 token 延迟TTFT和生成时延会随着输入长度明显抖动。2核心原理把“token 预算 窗口约束”当成架构硬边界而不是运营口号。1Token 预算Budget- 先把硬边界写死max_input_tokens / max_output_tokens / max_total_tokens。- 用预算反推设计最多能撑几轮对话 N、能塞多少文档片段 K、工具描述大概允许多长 L。- 常用估算Cost ≈ (Tin Tout) × price_per_tokenLatency 通常随 Tin 增长不一定严格线性但足够做保守约束。2窗口约束Context Window- 目标不是“能放多少放多少”而是“只带高价值信息”。- 需要优先级和裁剪系统消息/安全规则 当前任务指令 关键业务状态 检索证据 历史闲聊。- 长上下文的副作用很实在关键信息被稀释注意力被摊平执行偏差和幻觉风险都会上来。3工程落点在请求装配层prompt builder做 token accounting- 估算装配前估算各片段 token消息、检索片段、工具描述。- 装配按优先级拼出最小可用上下文Minimum Viable Context。- 超限裁剪超预算就按规则裁先裁历史再裁低置信证据最后触发摘要。- 降级路径比如“只回答不执行”“只给候选不做写操作”“要求用户补充信息”。3缺陷/对比只靠“换更大窗口模型”成本和延迟会一起涨还会把不可控输入带进更贵的推理路径。不裁剪的长上下文也会伤可解释性同一个问题历史长一点短一点就可能给出完全不同的行为复现和回放都很难。4回扣想让系统稳定地从“能聊”走到“能干活”第一步就是把 token 预算和窗口约束变成架构约束能测量、能触发降级、监控上也看得见。第二段Prompt——从“写句子”变成“可版本化的接口契约”1适用场景多人协作改 prompt线上行为经常漂移但说不清“为什么这次答得不一样”。同一业务在不同入口复用客服、运营后台、自动化任务各维护一份提示词慢慢就分叉了。合规与安全要求需要可审计、可回放、可灰度的输入协议。2核心原理Prompt 在工程里更像“模型侧接口定义输入协议”而不是文案。1结构化- 拆成固定槽位Role / Task / Constraints / Tools / Output Schema。- 输出用 schema 卡住JSON schema、表格列定义或者可校验的 DSL。2版本化与回归- Prompt 当 API 管要有版本号、变更记录、回归用例、灰度发布。- 回归集别贪多但要覆盖典型问题 边界问题 对抗样例越权、注入、数据泄露。3安全边界- “不可执行/不可泄露”写成硬约束输出端配校验和拒绝策略。- 业务动作的前置条件也要写清楚比如“必须拿到 tool 返回的明确证据才允许执行写操作”。3缺陷/对比Prompt 当“文案”基本就没法测试只能靠人工体验和线上观察。Prompt 当“配置/接口”才有工程化空间能回归、能灰度、能回滚。4回扣Prompt 是后面 RAG、tool、agent 编排的承载面这一步不先接口化后面往往只能用更长上下文和更多补丁去遮掩输入协议的不稳定。第三段RAG 与 Tool Calling——两条外部能力通道决定“数据正确性”与“动作可控性”1适用场景知识滞后模型参数里的知识跟不上最新业务规则、产品状态、内部文档。企业内数据访问要连知识库、工单、CRM、代码仓库等。确定性动作查库存、下单、改配置、发通知这些都有副作用。2核心原理把外部能力拆成两条通道分别立工程约束。1RAGRetrieval-Augmented Generation解决“说得对”grounding。- 知识外置文档/数据源能更新不用靠重新训练。- 工程要素索引、召回、重排、引用citations、可追溯能 trace 到原文/数据行。- 控制面片段长度、召回数量 K、证据置信阈值、引用格式强制。2Tool Calling解决“做得对”副作用可控。- 动作外置用确定性函数/API 去执行。- 工程要素参数 schema、权限边界、幂等、失败处理重试/超时/补偿和审计。3边界与组合只做 RAG 不等于能闭环它让回答更有依据但不保证动作执行可控。只做 tool 又容易“在错误前提上执行”比如没确认用户身份/库存状态就做写操作。常见组合是先 RAG/查询类 tool 拿证据 → 再写操作 tool → 再验证/回读。4缺陷/对比工具一多集成很容易碎片化同时工具描述本身也吃 token。成本问题会从“推理”转移到“上下文装配”。5回扣下一段要处理的就是这个数据源/工具越来越多时怎么避免“一源一接”把维护成本拖到长期主项。第四段MCP——用统一协议替代碎片化集成把“可扩展性”前置到架构层1适用场景企业内部数据源/工具数量持续增长。每个系统Drive/Slack/GitHub/Postgres/内部业务系统各做一套 connector交付慢、维护难。权限、审计、部署模型不一致同类能力在不同工具上表现不同治理很难统一。2核心原理MCP 的工程定位是“标准化接入层”把连接问题从应用工程里抽出去。1定位与目标Anthropic 把 MCP 描述为一个开放标准用来把 AI 助手连接到数据所在的系统内容仓库、业务工具、开发环境等替代碎片化的一次性集成。2架构形态用 client/server 建立安全的双向连接开发者可以暴露 MCP server也可以构建连接这些 server 的 MCP client。3工程收益- 接口标准化少做“一源一接”的定制连接器。- 治理复用权限、审计、部署与运维模型更容易对齐。- 可迁移性上层 agent/应用换模型或换框架时连接层更稳。3缺陷/对比协议统一不等于“知道该调用什么、什么时候调用”。MCP 解决的是连接成本和一致性成本编排和预算控制还是得在 agent/装配层补齐。4回扣当工具和数据接入能标准化后真正决定成本与稳定性的是把“上下文与工具集合”变成动态变量按需加载、可观测、可降级。第五段Agent 渐进式加载——把上下文与工具集合做成动态可控成本/稳定性闭环1适用场景多步任务分析 → 查询 → 执行 → 验证 → 汇报。工具多且长尾高频工具少低频工具多一次性全暴露会带来 token 和风险膨胀。上下文需要动态增补一开始信息不够必须边做边补证据。2核心原理Agent 是编排器渐进式加载才是控制面。1Agent 的工程定位- 它不是“更聪明的模型”而是多步执行的编排层。- 核心要素状态机/计划、工具选择、重试、超时、预算、观测trace、step 级 metrics。2渐进式加载Progressive Loading- 上下文渐进先装配最小必要上下文MVCMinimum Viable Context不够再检索、再扩展、再摘要。- 工具渐进默认只暴露高频、低风险工具罕见工具用“延迟注入/工具搜索”避免把一堆函数描述一次性塞进上下文。- 这一点和 OpenAI function calling 指南的建议一致token 紧张时限制一次性加载的函数、缩短函数描述对长尾工具做延迟加载tool search。3缓存作为控制面- 对稳定前缀/长提示启用 prompt caching把长 prompt 的固定部分当可复用前缀减少重复计算带来的延迟和成本。- 把缓存命中率拉进 SLO命中率掉下去往往说明 prompt 结构不稳定或者上下文装配开始失控。- 直觉上缓存更适合“稳定、重复、长”的输入前缀每次都高度变化的上下文就别指望它。3缺陷/对比一次性全量加载上下文/工具token 容易炸误调用概率上升也更难调试工具描述一长还会直接挤掉真正的业务上下文。渐进式加载给出一条可观测的扩展路径和降级路径预算快触顶时可以主动收敛能力集合。4回扣链路在这里闭起来了预算Token/窗口先把上限画出来通道RAG/tool/MCP决定能力从哪来、怎么连编排Agent决定怎么走渐进式加载 缓存把成本和稳定性放到同一套控制面里。如果要把“LLM 能干活”用工程语言说清楚大致就是这条链路Token计费单位→ Context Window携带上限→ Prompt输入协议→ RAG/Tool知识/动作通道→ MCP标准化接入→ Agent多步编排→ 渐进式加载动态控制面。落地顺序建议按“先控住再扩展”来1先做 token accounting每个请求把预算边界和降级路径写死。2把 prompt 接口化模板化 版本化 回归用例 输出校验。3把两条通道拆开RAG 负责 groundingtool 负责 side effects权限、幂等、审计要补齐。4再引入 MCP工具/数据接入标准化压下“一源一接”的长期维护成本。5最后上 agent 编排用渐进式加载上下文/工具 缓存prompt caching把成本和稳定性收敛到一套控制面里。最后收个口术语本身不值钱值钱的是你能不能把它们还原成预算、接口、数据通道、编排和缓存并把上下文与工具集合当成动态变量去管住。插图补充