1. 从鹦鹉学舌的误解说起大语言模型到底在做什么很多人第一次接触大语言模型脑子里冒出来的画面是一只特别聪明的鹦鹉——你问它什么它就从见过的语料里翻出一句最像样的回答丢给你。这个比喻听起来很直观但它漏掉了最关键的一层大语言模型不是在复读它是在用人类留下的语言痕迹重新绘制一张关于世界的地图。我刚开始接触这类模型的时候也走过一段弯路。那时候我总觉得它就是个高级一点的搜索工具直到有一次我让它解释一个我熟悉领域里的概念它给出的答案里有一个细节是我从来没在任何一篇文章里见过的表述方式但逻辑上完全自洽。那一刻我才意识到它不是在检索它是在重建。这张世界地图的原材料就是我们人类写下的所有文字——书籍、论文、论坛帖子、代码注释、产品说明书、聊天记录。模型做的事情是把这些文字里隐含的规律压缩成一套参数然后在需要的时候沿着这些规律重新走一遍生成一段新的文字。这个过程有点像你走过一座城市的每一条街道之后闭上眼睛也能在脑子里画出它的路网——你并没有把每条街的照片都存下来但你掌握了它们之间的连接关系。理解这一点非常重要因为它直接决定了你对模型能力的预期。如果你把它当成搜索引擎你会失望因为它不保证事实的精确性如果你把它当成一个语言规律的重建器你就能理解为什么它有时候会一本正经地胡说八道也能理解为什么它在某些创造性任务上表现得超出预期。这篇文章我想做的事情是把大语言模型这个听起来很玄的东西拆成几个可以理解、可以验证、可以上手操作的部分。不管你是刚入门的产品经理、想转行的开发者还是纯粹好奇的技术爱好者我都会尽量用生活化的类比加上实际能跑的例子让你不仅知道它是什么还能知道它为什么是这样以及你在用它的时候应该注意什么。2. 语言痕迹如何变成一张地图训练过程的三个关键阶段2.1 预训练把海量文本压缩成参数预训练这个阶段你可以把它想象成一个人被关在一个巨大的图书馆里任务只有一个——把每一本书的每一页都读一遍然后不断练习给定前文猜下一个词。这个练习看起来简单但它强迫模型去学习语法、事实、逻辑关系、甚至一些常识推理。具体来说模型看到的每一段文本都会被切分成一个个词元token。这个词元不一定是完整的词可能是半个词、一个标点、甚至一个字节。比如大语言模型这五个字在不同的分词方案下可能被切成大语言模型也可能被切成大语言模型。模型的任务就是看到前面的词元序列预测下一个词元是什么。这个过程中模型内部会形成一个高维的向量空间。每一个词、每一个概念都会被映射成这个空间里的一个点。语义相近的词在这个空间里的距离会比较近。更神奇的是一些抽象的关系也会被编码进去——比如国王和女王之间的关系可能和男人和女人之间的关系在向量空间里是平行的。我经常用一个类比来解释这个过程想象你在一个巨大的舞池里每个人代表一个词。训练的过程就是不断调整每个人的位置让经常一起出现的词靠得近一些让意思相反的词离得远一些。训练结束后这个舞池的布局就成了一张语义地图。模型生成文字的时候就是在这张地图上一步步走每一步都选择当前语境下最合理的下一个位置。注意预训练阶段模型学到的是语言的统计规律而不是事实数据库。它记住的是什么样的句子更可能出现在什么样的上下文里而不是某个事实一定为真。这是后面很多幻觉问题的根源。2.2 微调与对齐让地图变得好用预训练出来的模型能力很强但不太听话。你问它一个问题它可能会给你续写一段看起来像问题答案的文字也可能给你编一个故事。这时候就需要第二步微调和对齐。微调的做法是准备一批问题-答案对让模型在这些数据上继续训练学会当用户问什么的时候我应该给出什么样的回答。这一步相当于给那张语义地图加了一层导航层——地图还是那张地图但现在有了明确的路线指引。再往后是基于人类反馈的强化学习RLHF。简单说就是让人类评估员对模型的多个回答进行排序然后训练一个奖励模型来模拟人类的偏好最后用这个奖励模型去引导主模型生成更符合人类期望的回答。这一步解决的是什么样的回答算是好回答这个问题——是有帮助、诚实、无害的回答而不是仅仅看起来像答案的回答。我自己的体会是经过对齐的模型和没经过对齐的模型用起来完全是两种体验。前者像一个受过职业训练的助手后者像一个知识渊博但不太会聊天的学者。你在实际项目中如果发现模型回答总是跑偏很多时候不是模型能力不够而是对齐阶段没有覆盖到你的使用场景。2.3 推理在地图上走出一条新路推理阶段就是模型实际生成文字的过程。你给它一个输入通常叫 prompt它一个词元一个词元地往外吐。每吐出一个词元就把这个词元加到输入后面再预测下一个如此循环。这个过程有一个很重要的特性它是自回归的也就是说每一步的生成都依赖于前面已经生成的内容。这意味着模型一旦在某一步选了一个不太合适的词后面的内容可能会沿着这个方向越走越偏。这也是为什么在实际使用中提示词工程prompt engineering会这么重要——你给的开头越清晰模型走偏的概率就越低。还有一个常被忽略的点模型在推理时并没有重新学习。它的参数是固定的所有的智能都来自预训练和微调阶段压缩进参数里的那些规律。所以如果你发现模型对某个最新事件一无所知那不是它笨而是它的地图里还没有那块区域——除非你通过外部检索或者上下文注入的方式临时把这块信息补给它。3. 为什么它会胡说八道理解幻觉的底层机制3.1 幻觉不是bug是统计规律的副产品很多人第一次遇到模型一本正经地胡说八道时会觉得这东西根本不可靠。但如果你理解了它的工作原理就会发现幻觉其实是这套机制的必然产物。模型的目标是生成最可能的下一个词元而不是生成真实的事实。当它在某个上下文里发现某个虚构的细节比真实的细节更可能出现时它就会选择那个虚构的细节。比如你问它某本不存在的书的作者是谁它可能会给你一个听起来很合理的名字因为在它的训练数据里书名作者名这个模式太常见了它只是顺着这个模式往下走。我踩过的一个坑是早期我用模型来查一些技术参数的细节它给出的数字看起来非常合理但实际去查文档发现完全对不上。后来我学乖了凡是涉及具体数字、日期、引用来源的内容一律要求模型给出出处或者自己二次核实。这不是不信任模型而是理解它的能力边界。3.2 如何在实际使用中降低幻觉风险降低幻觉有几个实操层面的方法我自己常用的有这么几条第一把问题限定在模型见过的范围内。如果你问的是一个非常小众的领域模型很可能没有足够的训练数据来支撑准确回答。这时候更好的做法是先给它提供相关背景材料再让它基于材料回答。第二要求模型不确定就说不确定。你可以在提示词里明确写如果你不确定答案请直接说不知道不要编造。实测下来这句话能显著减少胡编乱造的情况。第三用分步推理的方式引导。让模型先列出它知道的已知条件再一步步推导结论而不是直接给答案。这样即使最终答案有偏差你也能从中间步骤看出问题出在哪里。第四交叉验证。对于关键信息用不同的问法问两到三次看答案是否一致。如果每次答案都不一样那基本可以判定这个信息不可靠。提示幻觉问题在创意写作场景里可能是优点在事实查询场景里是缺点。你在设计产品功能时要先想清楚你的场景更偏向哪一边。3.3 一个真实的排查案例有一次我帮一个团队排查他们的问答系统为什么总是给出错误答案。表面上看是模型不听话但实际排查下来发现问题出在他们的检索环节——检索到的文档本身就是过时的模型只是忠实地基于过时文档生成了回答。这个案例给我的启发是当你遇到模型输出问题时不要一上来就怀疑模型本身。先检查输入再检查提示词最后才怀疑模型能力。大部分实际问题都出在前两个环节。4. 从地图到工具实际应用中怎么用好它4.1 提示词的本质是给地图标注起点和方向很多人把提示词工程想得很神秘其实它的本质很简单你是在告诉模型从地图的哪个位置出发往哪个方向走。一个好的提示词通常包含这几个要素角色设定你是一个什么领域的专家、任务描述你要完成什么、约束条件有什么限制、输出格式结果长什么样。这四个要素不需要每次都写全但写得越清楚模型走偏的概率就越低。我自己的习惯是在写提示词之前先问自己三个问题我希望模型扮演什么角色我希望它输出什么形式的内容有哪些事情是它绝对不能做的把这三个问题的答案写进去基本就能得到一个可用的提示词。4.2 不同场景下的使用策略场景类型核心需求推荐策略注意事项事实查询准确性提供参考资料要求引用出处必须二次核实创意写作多样性放宽约束鼓励发散注意版权和原创性代码生成可运行性明确语言和框架版本必须实际运行测试数据分析逻辑性要求分步推理检查中间计算过程翻译润色风格一致性提供风格样例注意专业术语准确性这张表是我在实际项目中总结出来的不同场景对模型的要求差异很大。你不能用同一套提示词去应对所有场景就像你不能用同一把钥匙去开所有的锁。4.3 上下文窗口模型的短期记忆怎么用上下文窗口指的是模型在一次对话中能看到的最大文本长度。这个长度是有限的超出部分会被截断。理解这一点对于设计多轮对话系统非常关键。我见过很多团队在做一个长对话产品时把所有历史消息都塞进上下文结果要么超出限制要么因为上下文太长导致模型注意力分散回答质量下降。更好的做法是只保留最近几轮对话加上一个对更早对话的摘要。这样既节省了上下文空间又保留了关键信息。还有一个技巧是上下文注入如果你希望模型在回答时参考某些特定文档可以把文档内容直接放在提示词里。这相当于临时给模型的地图补了一块区域让它在这个区域内进行推理。4.4 温度参数控制走地图的随机性温度temperature是一个很关键的参数。温度低的时候模型倾向于选择概率最高的那个词输出比较稳定但可能缺乏创意温度高的时候模型会更多地选择概率较低但可能更有趣的词输出更多样但可能不太连贯。我的经验是事实类任务用低温度0.1到0.3创意类任务用高温度0.7到1.0一般对话用中间值0.5左右。这个不是绝对的你需要根据实际效果去调。有时候同一个任务温度从0.7调到0.3输出质量会有明显提升。5. 这张地图的边界在哪里能力与局限的清醒认知5.1 它擅长什么不擅长什么大语言模型擅长的东西本质上都是语言规律密集的任务文本分类、摘要、翻译、改写、代码补全、问答。这些任务的共同点是输入和输出之间存在比较稳定的语言模式模型从海量数据里学到的规律可以直接迁移过来。它不擅长的东西通常是需要精确计算或需要实时信息的任务。比如复杂的数学运算模型可能会在中间步骤出错比如查询今天的天气模型没有实时数据来源只能靠训练时的旧数据或者你提供的信息。还有一个容易被忽略的局限是长程依赖。虽然现在的模型上下文窗口越来越大但在处理很长的文本时模型对开头部分的记忆可能会衰减。如果你有一个很长的文档需要分析分段处理再汇总往往比一次性塞进去效果更好。5.2 一个常见的认知误区很多人觉得模型越大越聪明参数越多效果越好。这个说法在大方向上没错但在实际应用中一个经过良好微调的小模型在特定任务上完全可能超过一个通用的大模型。我参与过一个项目一开始用的是一个很大的通用模型效果一般而且推理成本很高。后来换成了一个参数量小很多但在特定领域数据上微调过的模型效果反而更好成本还降了一大截。这个经历让我明白选模型不是选最大的而是选最合适的。5.3 数据质量比数据数量更重要预训练阶段的数据量固然重要但数据的质量和多样性同样关键。如果训练数据里充斥着低质量的文本模型学到的规律也会偏向低质量。这也是为什么很多团队在微调阶段会花大量时间清洗和筛选数据。对于使用者来说这个道理同样适用你给模型的输入质量很大程度上决定了它的输出质量。如果你给的是一个模糊、矛盾、信息不全的提示词就不要指望模型能给出一个清晰、准确、完整的回答。6. 我在这条路上踩过的几个坑第一个坑是过度信任。刚开始用模型的时候我对它的输出几乎不加怀疑结果在一次技术方案里引用了一个它编造的API名称差点闹笑话。从那以后我养成了一个习惯凡是模型给出的具体事实、数字、名称一律标记为待核实。第二个坑是提示词太随意。我曾经觉得提示词就是随便写几句话后来发现同样的任务提示词写得好和写得差输出质量差距巨大。现在我写提示词的时间有时候比写代码的时间还长。第三个坑是忽略上下文管理。在做多轮对话的时候我一开始把所有历史都塞进去结果模型经常跑题。后来学会了做上下文摘要和关键信息提取效果好了很多。第四个坑是用错场景。我曾经试图用模型来做精确的数值计算结果发现它在多步计算中很容易出错。后来我把计算任务交给专门的工具模型只负责理解问题和解释结果整个流程就顺畅多了。这些坑说起来都不复杂但每一个都是实际踩过之后才真正记住的。如果你刚开始接触大语言模型我的建议是从小任务开始逐步建立对它的手感不要一上来就把它当成万能工具。7. 如果你也想深入理解它可以从这几个方向入手如果你想从使用者变成理解者我建议从三个方向入手。第一个方向是动手实践找一个开放的模型接口自己写几段提示词观察不同参数下的输出变化。这种手感是看多少篇文章都替代不了的。第二个方向是理解原理不需要从头推导数学公式但至少要理解词元注意力机制温度这些核心概念在说什么。理解了这些你在调参和写提示词的时候会更有方向感。第三个方向是关注边界多去尝试模型不擅长的任务看看它在什么情况下会失败失败的模式是什么样的。这种对边界的认知比单纯知道它能做什么更有价值。这张由人类语言痕迹绘成的世界地图还在不断扩展和细化。我们今天看到的版本可能只是未来某个更大图景的草图。但不管它怎么变理解它的底层逻辑——语言规律的压缩与重建——这个核心不会变。掌握了这个核心你就能在它每一次迭代的时候快速找到自己的位置。
阅读完成 · 觉得有帮助?