
在讨论怎么用之前,先要理解它和传统软件组件的根本差异。这四点决定了后面所有工程决策。
第一,输出是概率性的。 同一个输入可能得到不同输出,且可能出错。工程上不能假设"调用即正确",必须设计校验、重试、兜底。
第二,上下文是稀缺资源。 上下文窗口再大也有成本,且存在"中间遗忘"现象——信息塞得越多,模型对关键内容的注意力反而越分散。上下文不是越多越好,而是越准越好。
第三,成本随 token 线性增长。 每次调用都在付费,且输入输出计价不同、长短上下文价格差异巨大。成本是架构设计的一等约束,不是财务问题。
第四,能力随版本漂移。 供应商更新模型、你调整提示词,效果都可能整体位移。没有评估集,你就不知道自己是在变好还是变坏。
一句话概括:大模型是一个高能力、高方差、有成本、会漂移的组件。 围绕它的工程,本质上是在管理这四项不确定性。
把大模型相关技术按层次拆开,有助于判断投入重点:
层次 | 内容 | 谁在做 | 工程重点 |
|---|---|---|---|
模型层 | 预训练、后训练、对齐 | 少数大厂 | 算力、数据、算法 |
推理层 | 部署、量化、批处理、KV Cache | 平台/基础设施 | 延迟、吞吐、成本 |
编排层 | 提示工程、RAG、Agent、工具调用 | 应用工程团队 | 上下文质量、可靠性 |
应用层 | 产品形态、交互、业务集成 | 产品团队 | 任务完成率、体验 |
绝大多数团队的工作集中在编排层和应用层。这意味着:你不需要训练模型,但必须精通如何把模型用好。 把精力错配到"自己训一个"上,是很多团队交的第一笔学费。
选型是最早也最容易做错的决策。常见错误是"一律用最强模型",结果成本失控、延迟不可接受;或者"一律用最便宜模型",结果效果不达标、返工无穷。
正确的做法是按任务分层,建立模型路由:
路由的依据是任务的失败代价和难度。一个实用的起点是:先用最强模型跑出效果上限,再逐级降级测试,找到"效果可接受的最低成本档位"。
# model-routing.yaml —— 按任务分层的路由策略
routes:
- match: { task: intent_classify }
model: small-fast # 延迟敏感,任务简单
max_tokens: 64
- match: { task: doc_qa, context_tokens: ">8000" }
model: mid-context # 长上下文,中等模型
fallback: large-reasoning # 低置信度时升级
- match: { task: multi_step_reasoning }
model: large-reasoning
budget: { max_cost_per_call_usd: 0.05 }路由策略要可配置、可灰度、可观测——每个路由档位的调用量、成本、成功率都应被记录,否则你无法判断分层是否合理。
如果选择自部署开源模型,推理优化就是绕不开的工程。三者的关系是:批处理提升吞吐、量化降低显存与成本、缓存降低重复计算,但都会在延迟或精度上付出代价。
几个关键手段:
对大多数应用团队,更现实的选择是用托管 API,把推理优化交给供应商,自己专注编排层。自部署只在三种情况下值得:数据不能出域、调用量足够大摊薄成本、需要对模型做深度定制。
"如何让模型知道它不知道的事",是应用层最核心的问题。主流方案有三条路:
1. 提示工程:把指令、示例、约束写进提示词。成本最低,适合任务明确、知识固定的场景。关键不是"写得长",而是结构清晰、约束明确、示例典型。
2. RAG(检索增强生成):把外部知识检索出来塞进上下文。适合知识量大、更新频繁、需要引用的场景。RAG 的效果上限由检索质量决定,很多 RAG 项目的失败不是生成不行,是召回不准——切分策略、嵌入模型、混合检索、重排序,每一环都要调。
3. 微调:用领域数据调整模型参数。适合风格、格式、领域术语的适配,不适合注入频繁变化的事实知识。微调的成本高、迭代慢,应当作为最后手段。
一个实用的判断顺序是:先提示工程 → 不够就上 RAG → 还不够再考虑微调。顺序颠倒会浪费大量时间。
还要提醒一点:长上下文不等于可以不做检索。把整本手册塞进去,成本高、延迟高、关键信息还容易被淹没。检索的价值在于"精准投喂",这一点不会因为窗口变大而消失。
这是整篇文章最重要的一节。大模型工程和传统软件工程最大的区别,就是必须把评估当作一等公民。
评估体系要解决三个问题:
评什么:从真实场景抽样构造评估集,覆盖典型、边缘、已知失败三类。评估集要版本化,只增不减,线上失败案例持续回灌。
怎么评:能用客观判定的用客观判定(结构化字段比对、关键信息命中、格式校验);主观质量用评分量表 + 人工抽检;大规模可用强模型做裁判,但必须定期人工校准裁判本身。
什么时候不许上线:把阈值写成发布门禁,让"效果不达标"变成流程里的硬阻断。
# gate.py —— 发布前的评估门禁(骨架)
def release_gate(candidate, baseline):
report = evaluate(candidate, dataset="evals/qa/v7.jsonl")
assert report.accuracy >= 0.90, "准确率未达标"
assert report.groundedness >= 0.95, "事实性未达标"
assert report.p95_latency_ms <= 3000, "延迟超标"
assert report.cost_per_call <= 0.004, "成本超标"
if report.accuracy < baseline.accuracy - 0.01:
raise ReleaseBlocked("相对基线回退超过 1%")
return report这段代码很短,但它把"感觉变好了"变成了"数据变好了"。没有门禁的团队,永远在凭感觉迭代。
大模型的成本结构有三个特点:随用量线性增长、长短上下文价差大、输出比输入贵。因此成本控制必须进入架构设计:
要持续跟踪两个指标:单任务平均成本和单任务成本分布的长尾。平均值好看但长尾失控,是很多 AI 产品规模化后亏损的原因。
大模型应用的安全面比传统应用更宽:
安全要在架构里解决,而不是靠提示词里加一句"请不要做坏事"。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。