推理与采样策略

为什么每次回答不一样?

LLM 每次生成的过程:

1. 计算下一个词的概率分布(词表中各Token的概率)

2. 采样:按概率随机抽一个词

3. 将该词加入输入,重复上述过程

由于第2步是随机的,所以结果可能不同,不保证每次都不同。

---

nanoGPT 的生成代码


@torch.no_grad()
def generate(self, idx, max_new_tokens, temperature=1.0, top_k=None):
    for _ in range(max_new_tokens):
        # 截断到 block_size
        idx_cond = idx if idx.size(1) <= self.config.block_size else idx[:, -self.config.block_size:]
        
        # 前向传播,获取 logits
        logits, _ = self(idx_cond)
        logits = logits[:, -1, :] / temperature  # 只取最后一步,除以温度
        
        # Top-k 过滤
        if top_k is not None:
            v, _ = torch.topk(logits, min(top_k, logits.size(-1)))
            logits[logits < v[:, [-1]]] = -float('Inf')
        
        # Softmax → 概率
        probs = F.softmax(logits, dim=-1)
        
        # 采样
        idx_next = torch.multinomial(probs, num_samples=1)
        idx = torch.cat((idx, idx_next), dim=1)
    return idx

---

Temperature(温度)

控制概率分布的"尖锐程度":


Temperature = 0.1(低温):概率集中在最高分的词,概率更集中,但仍可能随机采样且不保证正确
Temperature = 1.0(默认):原始概率分布,平衡
Temperature = 2.0(高温):概率分布更均匀,输出随机、创意

直觉类比:

  • 低温 = 概率更集中;不代表更懂法律或事实更准确
  • 高温 = 头脑风暴模式,说出各种可能性
  • 历史参数示例,未经法律正确性验证:

  • 合同起草、法律意见书:`temperature = 0.3-0.5`(保守)
  • 创意性思路激发:`temperature = 0.8-1.0`
  • ---

    Top-k 采样

    只从概率最高的 k 个词中采样,排除长尾低概率词。

    
    k=1:贪心解码(最确定,但容易重复)
    k=50:一个可选示例,并非所有GPT-2实现的默认值
    k=全量:等同于纯采样
    

    ---

    Top-p(Nucleus)采样

    从概率累计达到 p 的最小词集合中采样。

    
    p=0.9:取概率和达到 90% 的最少词汇集合
    

    自适应性更好:置信度高时集合小(接近贪心),置信度低时集合大(更随机)。

    ---

    历史API示意(未作当前接口兼容验证,不是本项目执行入口)

    
    # 法律文书生成(精确、保守)
    response = client.messages.create(
        model="claude-opus-4-6",
        temperature=0.3,
        top_p=0.9,
        ...
    )
    
    # 法律研究头脑风暴(发散思维)
    response = client.messages.create(
        model="claude-opus-4-6",
        temperature=0.8,
        ...
    )
    

    ---

    相关页面

  • 01-概念/大语言模型概述 — LLM 基础
  • 02-技术/nanoGPT代码解析 — 完整代码
  • 03-法律AI应用/AI合同审查 — 实践参数设置
  • 来源

  • [nanoGPT model.py generate()](https://github.com/karpathy/nanoGPT/blob/master/model.py)
  • 本轮核查来源与限制(2026-09-17)

  • https://raw.githubusercontent.com/karpathy/nanoGPT/master/model.py
  • 只修本轮明确列出的陈述,不将旧页整篇升级为已验证。themis_only为本地保存和禁止外发的兼容标记,不代表本地模型推理。