大语言模型(LLM)
大语言模型从大量序列数据中学习规律,并根据输入生成输出。常见的生成式模型通过逐步预测 token 来完成问答、写作、分类等任务。
理解与应用
大语言模型是具有大量参数、经过大规模数据训练的语言模型。对于常见的自回归生成模型,输入会先转成 token 序列;模型结合前面的内容,为下一个 token 给出概率分布,解码程序再选出一个 token。新 token 加入上下文后,这个过程继续,直到生成结束。平常看到的一整段回答,就是这样逐步产生的。
例如给模型一封客户来信,让它判断客户是在咨询价格还是申请退款。训练中学到的语言规律,使它能够联系“退回款项”“不想继续使用”等不同说法,而不必逐字匹配某个关键词。预训练让模型获得广泛的语言模式,后续的指令训练等过程则帮助它按请求作答。不过,模型可能把抱怨误判为退款申请,输出仍需要结合任务来检验。
生成一句合理的话与查到一条真实记录是两回事。如果继续问“这笔退款到账了吗”,模型仅凭来信无法知道银行或订单系统的当前状态。应用可以把查询结果交给模型,让它解释“已受理”和“已到账”的区别。这样,外部系统提供事实,模型负责语言理解与表达;联网、账户访问和工具执行也由应用提供,并不是模型参数天然具备的功能。
同一上下文还可能产生不同续写。贪心解码每次选当前概率最大的 token,采样则按照分布选择,因此有机会选中其他候选。降低采样随机性可以使输出更稳定,却不能使缺失的订单记录凭空出现。评估一个模型是否适合客服分类,应看它在真实类别、含糊来信和边界样本上的表现,而不只看一次回答是否流畅。
动手试一试:同一个概率分布怎样得到不同的下一步
把 0 到 1 按概率分成三段,采样值落在哪一段就选择哪个候选。真实采样会产生随机值,这里固定三个位置便于复现。概率表和候选都是手写的,并未运行模型,也无法由此判断一封来信的真实类别。
将代码保存为 example.py,使用 Python 3.10+ 运行 python3 example.py。仅使用标准库,无需密钥,不会调用外部模型。
Python 代码
# 人工设定的下一 token 分布,仅用于解释解码。
probabilities = [("咨询", 0.55), ("退款", 0.30), ("投诉", 0.15)]
greedy = max(probabilities, key=lambda item: item[1])[0]
def choose_at(value):
cumulative = 0.0
for token, probability in probabilities:
cumulative += probability
if value < cumulative:
return token
raise ValueError("采样值必须小于 1")
print("贪心选择:", greedy)
for value in (0.20, 0.70, 0.95):
print(f"采样位置 {value:.2f}: {choose_at(value)}")运行结果
贪心选择: 咨询 采样位置 0.20: 咨询 采样位置 0.70: 退款 采样位置 0.95: 投诉
常见误区
- 模型回答得肯定,不等于它拥有支持结论的外部记录;语气与事实正确性需要分别判断。
- 把整个产品的搜索、存储或执行能力都归到模型身上,会难以判断问题究竟出在模型还是应用。
前置与延伸
建议先读
可直接开始阅读。
相关概念
参考与版本
Apollo 原创讲解与教学示例。参考资料用于核对技术定义;核验日不代表资料的发布日期。
- Hugging Face:How do Transformers work? ↗
已核对官方 LLM Course 的预训练、迁移与模型架构说明;不据此指定当前模型能力或上下文上限。 · 核验:2026-10-10