大语言模型(LLM)

大语言模型从大量序列数据中学习规律,并根据输入生成输出。常见的生成式模型通过逐步预测 token 来完成问答、写作、分类等任务。

返回概念图谱 →

理解与应用

大语言模型是具有大量参数、经过大规模数据训练的语言模型。对于常见的自回归生成模型,输入会先转成 token 序列;模型结合前面的内容,为下一个 token 给出概率分布,解码程序再选出一个 token。新 token 加入上下文后,这个过程继续,直到生成结束。平常看到的一整段回答,就是这样逐步产生的。

例如给模型一封客户来信,让它判断客户是在咨询价格还是申请退款。训练中学到的语言规律,使它能够联系“退回款项”“不想继续使用”等不同说法,而不必逐字匹配某个关键词。预训练让模型获得广泛的语言模式,后续的指令训练等过程则帮助它按请求作答。不过,模型可能把抱怨误判为退款申请,输出仍需要结合任务来检验。

生成一句合理的话与查到一条真实记录是两回事。如果继续问“这笔退款到账了吗”,模型仅凭来信无法知道银行或订单系统的当前状态。应用可以把查询结果交给模型,让它解释“已受理”和“已到账”的区别。这样,外部系统提供事实,模型负责语言理解与表达;联网、账户访问和工具执行也由应用提供,并不是模型参数天然具备的功能。

同一上下文还可能产生不同续写。贪心解码每次选当前概率最大的 token,采样则按照分布选择,因此有机会选中其他候选。降低采样随机性可以使输出更稳定,却不能使缺失的订单记录凭空出现。评估一个模型是否适合客服分类,应看它在真实类别、含糊来信和边界样本上的表现,而不只看一次回答是否流畅。

关系速览
大语言模型(LLM)建议先学 →Token 与上下文长度

学习建议:理解模型的输入输出单位,再判断预算、截断和计费差异。

大语言模型(LLM)面临风险 →幻觉

生成模型可能给出无证据的断言,因此其回答需要独立事实检查。

动手试一试:同一个概率分布怎样得到不同的下一步

把 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 原创讲解与教学示例。参考资料用于核对技术定义;核验日不代表资料的发布日期。