这是《LLM 应用开发 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 选型的第一步不是找“最强模型”,而是判断任务是否适合模型,以及模型出错时业务能否承受。本章讨论 LLM 的能力边界、适用任务和工程降级方案。
2.1 模型擅长什么
| 任务类型 | 适合程度 | 原因 |
|---|---|---|
| 非结构化文本理解 | 高 | 语义归纳是核心能力 |
| 意图识别与分类 | 较高 | 可用少量示例适配 |
| 信息抽取 | 较高 | 适合文本到结构化字段 |
| 摘要与改写 | 较高 | 允许多种合理表达 |
| 代码生成与解释 | 较高 | 需要测试和评审兜底 |
| 精确数学计算 | 低 | 容易算错,应交给程序 |
| 强规则校验 | 低 | 应由代码实现 |
| 实时事实问答 | 低 | 必须接入外部数据 |
| 高危自动决策 | 低 | 需要规则、权限和人工确认 |
一个实用原则:让模型处理模糊性和语言理解,让程序处理确定性计算、权限和事务。
2.2 上下文窗口不是记忆
上下文窗口表示单次请求能容纳的输入和输出 token 数,不等于模型能可靠使用所有内容。
上下文窗口
|-- system
|-- 历史消息
|-- 检索资料
|-- 工具结果
|-- 用户问题
+-- 输出预留
常见问题:
- 长上下文中间部分容易被忽略;
- 无关内容会稀释关键信息;
- 历史消息累积导致成本和延迟上升;
- 超限请求会被拒绝或被截断;
- 上下文很长不代表事实准确;
- 用户隐私可能随历史被带入后续请求。
工程做法:
保留:任务指令、当前问题、相关资料、必要状态
压缩:历史摘要、工具结果摘要
丢弃:过期轮次、重复文档、无关日志
2.3 知识边界
模型参数中的知识来自训练数据,存在截止时间、语料偏差和错误事实。
| 问题 | 现象 | 处理 |
|---|---|---|
| 知识过期 | 新政策、新版本不知道 | 接入检索或 API |
| 私有知识缺失 | 不了解内部系统 | RAG 或数据库查询 |
| 冷门事实错误 | 编造来源 | 引用校验 |
| 数据冲突 | 多个资料说法不同 | 时间戳、权威度排序 |
| 业务规则变化 | 沿用旧规则 | 规则外置并版本化 |
生产系统不要依赖“模型记得”,而要让答案基于当前上下文。
2.4 不确定性与置信度
LLM 输出的 confidence 字段不一定等于真实概率。它可以作为辅助信号,但不能作为唯一风控依据。
{
"intent": "refund",
"confidence": 0.92,
"evidence": "用户提到申请退款和订单号"
}
更可靠的策略:
- 要求模型给出证据;
- 校验证据是否存在于输入;
- 多次采样观察稳定性;
- 使用分类器或规则交叉判断;
- 低置信场景进入人工确认;
- 关键字段用数据库验证。
2.5 模型版本差异
同一个 Prompt 在不同模型、不同版本、不同服务商上可能表现不同。
可能变化:
- 指令遵循程度;
- JSON 输出稳定性;
- 工具调用协议;
- 上下文窗口;
- 输入输出价格;
- 安全策略;
- 分词方式;
- 停止词和格式偏好。
版本管理建议:
应用版本
+-- Prompt 版本
+-- 模型版本
+-- 检索配置版本
+-- 工具 schema 版本
+-- 评测集版本
升级模型时必须跑回归评测,不能只看几条人工体验。
2.6 成本与延迟边界
token 是 LLM 系统的主要资源。
总成本 = 输入 token 价格 * 输入量 + 输出 token 价格 * 输出量
影响延迟的因素:
| 因素 | 说明 |
|---|---|
| 输入长度 | 预处理和注意力计算变慢 |
| 输出长度 | 生成是逐 token 进行 |
| 模型规模 | 能力强但通常更慢 |
| 网络链路 | 客户端、网关、服务商 |
| 并发限制 | 429 或排队 |
| 工具调用 | 数据库、搜索、内部 API |
| 重试 | 失败后成本叠加 |
优化顺序通常是:减少无效上下文、限制输出长度、增加缓存、选择合适模型,再考虑并发和批处理。
2.7 安全边界
模型没有天然的企业权限边界。它会按上下文生成内容,不会自动理解“这个用户不能看哪些数据”。
常见风险:
- Prompt 注入改变任务指令;
- 检索内容中携带攻击指令;
- 工具结果泄露敏感字段;
- 历史会话跨越权限场景;
- 输出系统提示或密钥;
- 诱导模型生成有害内容。
边界设计:
数据读取:按用户权限过滤
工具调用:最小权限 + 白名单
输出展示:字段级脱敏
关键动作:独立审批流
2.8 任务适配矩阵
| 业务任务 | 推荐方案 | 不建议 |
|---|---|---|
| 订单状态查询 | API + 模型组织语言 | 让模型猜状态 |
| 合同字段抽取 | OCR + LLM + schema 校验 | 直接写库 |
| 客服路由 | 分类 + 阈值 + 人工兜底 | 全自动闭环 |
| 报表生成 | 数据库取数 + 模板 | 模型计算总额 |
| 代码助手 | 生成 + 编译测试 + 评审 | 直接部署 |
| 知识问答 | RAG + 引用 | 依赖参数记忆 |
| 数据修改 | 生成 SQL 预览 + 权限确认 | 自动执行 |
2.9 降级方案
模型不可用不代表业务必须停摆。
主模型
-> 失败/超时
-> 备用模型
-> 仍失败
-> 规则模板
-> 人工客服
降级策略:
- 只读场景返回固定提示;
- 分类场景回退关键词规则;
- 生成场景使用模板;
- 高风险动作直接禁止;
- 保留失败请求用于重放;
- 明确告知用户服务降级;
- 监控降级比例。
本章小结
LLM 擅长理解、归纳、改写和结构化,但不擅长精确计算、实时事实、强规则校验和自主承担高危决策。生产系统要控制上下文、外置知识、校验输出、隔离权限,并为模型不可用准备降级路径。边界清楚后,模型能力才能被安全放大。
思考题
- 为什么长上下文不能替代 RAG?
- 模型输出的置信度可以怎样被验证?
- 哪些业务字段不应该交给模型直接判断?
- 模型升级时为什么要同时记录 Prompt 和检索配置版本?
- 如何为一个客服入口设计模型不可用时的降级链?