
「语义热力学」和「叙事引力」放在一起看起来像理论物理的论文标题但放进大模型推理里它其实在描述一个非常工程化的问题模型生成下一个 token 时候选空间是怎么一步步被剪掉的。搞清楚这个问题你就能解释为什么同样的采样参数换一段上下文之后输出质量差别很大也能解释为什么温度调低并不等于输出稳定。下面我把这套概念拆成可以观察、可以调节、可以排查的工程语言适合做大模型推理调优、提示词设计和生成质量评估的读者参考。标题里那句 narrative gravity prunes LLM inference核心就是想说上下文里逐渐成型的叙事会形成一种惯性把后续生成的概率分布往少数路径上压。压得越狠候选分支越少输出越“确定”。这个视角不是让你去背物理公式而是帮你建立一套调试 LLM 时的判断顺序先看分布再看上下文最后才动参数。1. 先把这个概念翻译成工程语言1.1 语义热力学到底在说哪件事大模型生成文本时本质上是在词表上维护一个概率分布。每生成一个 token模型会给词表里的每个词打分再通过 softmax 之类的操作转成概率。这个概率分布的“混乱程度”可以用熵来描述分布越平不确定性越大分布越尖确定性越强。“语义热力学”就是把这种分布变化当成一个类似热力学的系统来观察。温度是采样参数熵是输出不确定性语义约束则像外部场不断把概率质量往某些方向压。这样理解的好处是你可以用“熵高不高”“分布尖不尖”来描述生成状态而不是只会说“模型抽风了”或者“输出不稳定”。但要注意这只是一种分析视角不是模型内部真的跑着一套物理定律。把它当工具它能帮你解释现象、设计实验把它当成严谨的科学结论那就过度解读了。1.2 叙事引力如何剪枝候选空间“叙事引力”说的是在生成推进过程中前面文本积累起来的主题、角色、因果链、语气和格式要求会形成一种上下文惯性。这种惯性会让后续 token 的概率分布向符合当前叙事的区域集中。你不需要写一条规则说“现在只能聊这个话题”模型从注意力机制和大量训练样本里已经学到了这种倾向一旦某条语义轨迹稳定下来偏离它的候选 token 概率会快速下降。这就是“剪枝”的含义。它不一定是用规则显式删掉候选词而是概率天然集中在少数路径上分支变少。也是因为这个原因长对话里模型一旦走偏后面很难拉回来——叙事引力已经指向了一个错误方向越往后越难偏离。这个现象在调试时很容易观察到上下文越具体输出越收敛上下文越空泛输出越飘。很多人以为是采样参数在起作用其实更大的因素在于输入里有没有形成足够清晰的叙事轨道。1.3 它和 LLM 推理的真实交集落到实际操作这个框架和 LLM 推理的交集主要有三块采样参数决定你多大程度服从概率尖峰也就是多少“服从引力”。上下文管理决定叙事轨道是否清晰、是否存在多个互相冲突的“引力中心”。生成策略贪婪、束搜索、采样本质上是在“只走最稳的路”和“偶尔探索分支”之间做选择。后面每一节都会围绕这三块展开。先把这点想清楚后文里的参数表格和排查清单才不会变成死记硬背。2. LLM 推理中的剪枝发生在哪一层2.1 从 logits 到采样分布先被压缩一次标准生成过程从输入到输出大致是这样的输入经过 Transformer 前向计算得到每个位置的 logits。logits 除以温度做缩放。经过 softmax 变成概率。用 top-k 或 top-p 过滤砍掉低概率候选。最后采样或取 argmax得到当前 token。每一步都是对分布的一次改动。温度改变分布形状top-k 和 top-p 直接砍候选采样决定最终落点。所谓“剪枝”在这些环节里是显式发生的。但叙事引力发生在更早的地方。它在隐藏状态里就已经起作用了注意力机制会把前面 token 的信息集中到当前位置模型内部表示已经携带了“当前话题应该是什么”的语义约束。所以你会发现即使你不改任何采样参数只要把上下文叙事捋顺输出也会明显收敛。这也是为什么调试时不要一上来就动温度。先确认模型“想”往哪里走再看采样层要不要放开或收紧。2.2 温度、top-k、top-p 与引力强度的关系可以把这几个参数理解成控制“引力强度”的旋钮。参数作用对分布的影响工程类比常见默认值temperature缩放 logits温度低分布变尖温度高分布变平引力更强 / 更保守0.7 左右top-k只保留概率最高的 k 个 token硬性剪枝候选数量固定限制通道数量40 到 50top-p保留累积概率达到 p 的 token动态剪枝按概率质量收口按质量累积关闸0.9 左右repetition_penalty惩罚已经出现的 token抑制重复片段防止叙事打转1.0 到 1.2实际调试时我一般建议每次只动一个参数。比如先固定 temperature 在 0.7调 top-p 从 0.9 降到 0.8看输出是否更集中。如果同时改三个参数出了问题你很难判断是哪一步导致的。温度低时输出稳定是表象。它把概率质量压到最高分的少数 token 上相当于放大了叙事引力的效果。温度高时分布变平模型更容易跳出当前叙事但也更容易跑题。理想的设置是让引力和探索之间有个平衡而不是一味压温度。2.3 束搜索、长度惩罚和注意力窗口束搜索和采样不是一回事。束搜索会保留 top-n 条候选序列最后按整句分数挑一个最优解。它更像是对“整条叙事轨迹”做全局剪枝而不只是看下一个 token。代价是计算量变大而且如果束宽太小所有候选可能都来自同一叙事方向多样性很差。长度惩罚影响的是长叙事能不能活下来。生成句子越长累积分数越难保持如果不做长度惩罚模型会倾向于早收尾导致叙事没展开就结束。反过来长度惩罚设置不当模型可能为了凑长度而重复。注意力窗口决定叙事引力的“记忆半径”。如果上下文超过窗口被截断或者多条文档被 packing 在一起导致顺序混乱叙事线索就会断。输出突然跳题往往不是模型能力问题而是它能看到的内容已经接不上前面的轨道了。3. 用实验观察叙事引力是否真的在起作用3.1 设计一组对比实验想验证“叙事引力”这个说法有没有用不需要搭复杂框架做一组对比实验就行。准备同一主题的两组 prompt。A 组带强叙事上下文比如明确角色、目标、事件链、输出格式B 组只有一句泛泛的请求。固定模型、seed、max_tokens温度分别取 0.2、0.7、1.2。每组重复 10 到 20 次记录输出。下面是示意代码结构参考通用 LLM 接口具体 SDK 请按你实际用的来调整。# 示意代码观察不同叙事强度下的输出分布 def run_experiment(prompt, temperature, seed, max_tokens256): outputs [] for i in range(20): response llm.chat( messages[{role: user, content: prompt}], temperaturetemperature, seedseed, # 如果 SDK 支持就固定缩小随机差异 max_tokensmax_tokens, ) outputs.append(response) return outputs # 用法示例 # strong_context 你是一位资深产品经理目标是写一份周报包含进展、风险和下周计划。 # weak_context 写一份周报。 # outputs run_experiment(strong_context, temperature0.7, seed42)要注意seed 并不是在所有模型和推理框架里都能完全复现。量化版本、推理框架、GPU 环境不同结果都可能不一样。所以实验时要尽量保持环境不变否则你很难判断差异来自叙事约束还是来自随机性。3.2 要记录哪些可量化指标有了多组输出下一步是记录可比较的指标。指标怎么记录说明什么输出熵 / 困惑度对输出 token 的平均 log 概率取负熵越低分布越尖叙事约束越强首 token 分歧度20 次输出里第一个 token 的去重数量分歧小说明早期就被锁定了方向重复率连续重复 n-gram 的占比引力过强的退化信号语义偏离度人工判断或对比主题关键词引力不足时容易跳题约束遵守率是否按格式、事实、角色要求输出提示词建立的轨道是否被维持单次推理耗时生成时间如果做了动态剪枝能看出计算差异这些指标不需要全部跑一遍。根据你的场景挑两三个就够。比如做客服问答重点看约束遵守率和语义偏离度做创意写作重点看熵和重复率。3.3 怎么判断结果是有效还是失效输出“有效”的典型表现是同一主题下语义收敛但不是整段复读约束遵守率高换 seed 后结果差异不大。如果输出每次都换话题说明叙事引力太弱。这时候优先加上下文把角色、目标、边界写清楚而不是急着调采样参数。如果输出开始绕圈、重复片段、越写越空说明引力过强。常见原因是温度太低或者重复惩罚过重也可能是提示词里把约束写得过于僵化。这两种情况看起来都像“生成质量差”但处理方向完全相反。先判断是哪一类再动手能省很多时间。4. 调参与调上下文时的常见坑4.1 温度不是越低越好很多人为了让输出稳定把温度直接压到 0.1 甚至 0。短输出还好长输出很容易进入“确定性陷阱”最高概率 token 形成一条局部最优路径一旦前面某个位置选错后面会沿着错误方向一路稳定地错下去。而且温度在 0 到 0.3 这段区间对分布形状影响特别大。稍微调一点结果可能完全变样。0.5 到 1.0 之间反而更好控制。我的建议是需要稳定时先降低 top-p 或加重复惩罚而不是一味压温度。这里有一个判断标准如果输出看起来“稳定但空洞”也就是每次都差不多但内容没有实质推进那大概率是温度过低导致的退化不是模型没有能力。4.2 上下文越长引力不一定越强上下文长不等于叙事清晰。RAG 场景里最容易碰到这种情况塞进多篇文档其中两篇观点相反模型同时接收到两个互相冲突的“引力中心”输出就会摇摆。一会儿支持 A一会儿支持 B看起来像逻辑混乱其实是输入里没有形成单一轨道。处理方式不是继续加长上下文而是先做分段、重排、摘要让输入里尽量只有一条主线。system prompt 里同时写大量互相矛盾的指令也会出现同样的问题。多个引力中心互相拉扯时采样参数只能帮你选边不能帮你消除冲突。4.3 输出异常时的排查顺序遇到输出质量下降、跑题、重复、格式错乱我一般按这个顺序排查先看输入。上下文是否自洽有没有矛盾指令格式和分隔符是否清晰。再看采样参数。温度、top-p、top-k、重复惩罚有没有被意外改写。再看长度。max_tokens 是否太小导致话没说完就被截断上下文有没有溢出窗口。再看环境。模型版本、量化精度、KV cache 实现、seed 处理是否一致。最后看框架。不同推理框架的采样实现有细微差异同一个参数在不同框架里效果不一定一样。很多“生成质量变差”的问题根因不在采样参数而在输入上下文里埋了互相冲突的目标。先把输入捋干净再动参数通常比盲目调温度更有效。5. 这套概念的生产价值与边界5.1 推理加速与成本判断如果叙事引力强说明候选分布很尖很多位置的 token 几乎是确定的。这给了推理优化一个启发在低熵区域可以用更小的草稿模型先生成候选再用大模型验证这就是推测解码的思路。也可以在高置信度区域提前结束分支探索减少不必要的采样和计算。但这些只是分析框架带来的方向不是说套用这个公式就能直接压缩推理。真要落地还是要结合具体框架做 profiling看单 token 耗时、KV cache 占用、采样层耗时占比、批处理吞吐。先量化再决定要不要做动态剪枝或模型级联。5.2 提示词设计与评估设计提示词时把核心约束放在最前面给出一致的示例保持角色和目标单一尽量避免多个“引力中心”打架。评估时不要只看单条输出好不好要看同一输入在不同 seed、不同温度下的分布宽度、重复率、约束遵守率。这些指标能帮你判断问题到底出在提示词还是采样参数。比如你做了一版提示词单测两条效果不错但放到线上发现输出飘忽。这时候跑一次多 seed 实验如果分歧度很高说明叙事约束不够强优先改提示词如果分歧度低但输出内容不对那就是方向被锁到错误轨道上了要去查上下文里有没有误导性信息。5.3 这个框架的边界“语义热力学”是一个比喻不是已经被验证过的物理理论。标题里写了 formalizing但从工程落地角度看它更适合当思维工具帮你组织观察、设计实验、解释失败而不是替代严谨的评估。它不能替代形式化验证也不能替代测试集和人工评测。如果你的场景对输出有硬性要求比如金额、日期、代码、法律条款该做规则校验就做规则校验该用结构化输出就用结构化输出。叙事引力能解释模型为什么这么走但不能保证它不犯错。另外本主题原始材料里没有给出具体实现代码或测评数据。如果你想基于这个思路做研究建议把它当作假设来设计实验而不是当作已经验证的结论直接引用。我自己的体会是LLM 推理里最值得练的不是记住某个参数的最优值而是建立一套“先看输入叙事、再看概率分布、最后调参数”的判断顺序。语义热力学和叙事引力这套说法最大的价值就是让你在调试时有一个统一的语言去描述问题。先跑稳单条路径再谈批量优化先把上下文捋顺再去动温度和采样——这个顺序比我试过的任何一组默认参数都可靠。