第2章:核心能力与工作原理

一、生成式推理(Generative Inference)

1.1 推理过程概览

输入Token IDs
Embedding层
Transformer层
输出Logits
解码策略
下一个Token
结束标记?
追加到序列
完整输出

1.2 解码策略详解

策略对比
解码策略
确定性策略
随机性策略
Greedy
贪婪解码
Beam Search
束搜索
Sampling
随机采样
Top-k Sampling
Top-p/Nucleus
Temperature调节
每步选最高概率
确定但单调
保留K条路径
质量高但慢
按概率采样
多样但可能差
限制候选数量
平衡质量和多样性
累积概率阈值
动态候选集
控制分布平滑度
0确定 2随机
关键参数
参数 范围 作用 典型值
temperature 0-2+ 控制随机性,越低越确定 0.7-0.9
top_p 0-1 核采样概率阈值 0.9-0.95
top_k 1-100+ 候选token数量 40-50
max_tokens 1-∞ 最大生成长度 512-2048
frequency_penalty -2-2 惩罚重复 0-0.5
presence_penalty -2-2 鼓励新话题 0-0.5
应用场景匹配
确定答案
创意内容
代码生成
对话
任务类型
需求
Greedy/低temp
高temp + top_p
Beam Search
中等temp
数学题
翻译
事实问答
故事创作
头脑风暴
广告文案
代码补全
结构化输出
聊天助手
客服对话

1.3 KV Cache机制

原理
有KV Cache
无KV Cache
计算并缓存KV
Token 1-100
生成Token 101
只计算新Token
复用缓存KV
完整计算
Token 1-100
生成Token 101
Token 1-101
重新计算全部
显存占用
KV Cache大小 = 2 × num_layers × num_heads × head_dim × seq_len × batch_size × 2 bytes(FP16)

示例:LLaMA-7B, seq_len=2048
= 2 × 32 × 32 × 128 × 2048 × 1 × 2
≈ 1GB per sequence
PagedAttention优化
传统KV Cache
连续内存分配
内存碎片
利用率低
PagedAttention
分页管理
按需分配
内存利用率>90%

1.4 Speculative Decoding(推测解码)

工作原理
小模型(Draft) 大模型(Target) 快速生成N个tokens 提交候选序列 并行验证N个tokens 接受前K个(K≤N) 从位置K+1继续 加速2-3倍,输出完全一致 小模型(Draft) 大模型(Target)
性能提升
传统自回归
逐个生成
100 tokens
10秒
Speculative
批量验证
100 tokens
3-4秒

二、长上下文与记忆管理

2.1 长上下文挑战

graph TB
    A[长上下文问题] --> B[计算复杂度]
    A --> C[显存占用]
    A --> D[注意力衰减]
    
    B --> B1[O(n²)复杂度]
    B --> B2[推理延迟增加]
    
    C --> C1[KV Cache线性增长]
    C --> C2[OOM风险]
    
    D --> D1[远距离依赖弱化]
    D --> D2[中间信息丢失]

2.2 上下文管理策略

策略对比
上下文策略
截断策略
压缩策略
检索策略
滑动窗口
保留最近N tokens
固定保留
系统提示+最近对话
摘要压缩
LLM总结历史
向量压缩
Embedding表示
RAG检索
按需加载
记忆索引
相关性召回
实现示例
# 滑动窗口策略
class SlidingWindowContext:
    def __init__(self, max_tokens=4096, keep_system=True):
        self.max_tokens = max_tokens
        self.system_prompt = ""
        self.messages = []
    
    def add_message(self, message):
        self.messages.append(message)
        # 超出限制时,移除最早的用户消息
        while self.count_tokens() > self.max_tokens:
            self.messages.pop(0)
    
    def get_context(self):
        return [self.system_prompt] + self.messages

2.3 记忆系统架构

记忆管理器
长期记忆
短期记忆
召回
召回
相关性检索
重要性评分
遗忘机制
向量数据库
知识图谱
文档库
当前对话
工作缓冲
上下文窗口

2.4 会话状态存储

无状态
有状态
会话请求
缓存策略
每次传完整历史
服务端存储
Redis
快速读写
数据库
持久化
对象存储
大容量
Session ID
后续请求引用

三、RAG核心流程

3.1 端到端流程

用户问题
Query理解
查询改写
同义词扩展
意图识别
多路检索
向量检索
语义相似
关键词检索
BM25
混合检索
融合排序
初排召回
Top-K
重排序
Reranking
交叉编码器
相关性模型
上下文构建
去重
截断
引用标注
Prompt拼装
LLM生成
答案+引用

3.2 索引构建

原始文档
文档解析
PDF/Word/HTML
表格/图片
文档分块
固定长度
512 tokens
语义分割
段落/章节
滑动窗口
重叠50 tokens
元数据提取
标题/作者/日期
关键词/标签
向量化
Embedding模型
768/1024维向量
索引存储
向量索引
HNSW/IVF
元数据索引
B-Tree
向量数据库
Milvus/Qdrant

3.3 检索策略

混合检索
用户查询
向量检索
关键词检索
Embedding
ANN搜索
语义Top-10
分词
BM25算法
关键词Top-10
RRF融合
最终Top-5
RRF融合公式
RRF_score = Σ 1/(k + rank_i)

k: 常数(通常60)
rank_i: 在第i个列表中的排名

3.4 重排序(Reranking)

初排结果
Top-20
重排模型
交叉编码器
BERT-based
单塔模型
更快
LLM打分
最准确
精排Top-5
特征增强
时间新鲜度
文档权威性
用户点击率
最终排序

3.5 上下文拼装

graph TB
    A[检索文档] --> B[去重]
    B --> C[质量过滤]
    
    C --> C1[相关性阈值<br/>score > 0.7]
    C --> C2[长度过滤<br/>太短/太长]
    
    C --> D[内容组织]
    D --> D1[按相关性排序]
    D --> D2[按时间排序]
    D --> D3[按来源分组]
    
    D --> E[Token预算]
    E --> E1[系统提示: 500]
    E --> E2[检索内容: 2000]
    E --> E3[用户问题: 100]
    E --> E4[预留输出: 500]
    
    E --> F[截断策略]
    F --> F1[保留前N个完整块]
    F --> F2[摘要超长文档]
    
    F --> G[引用标注]
    G --> G1[[1] 文档标题<br/>内容片段]
    
    G --> H[最终Prompt]

四、函数/工具调用机制

4.1 调用流程

用户 LLM 解析器 工具执行器 外部API "查询北京到上海的机票" 分析意图 function_call(search_flight, {...}) 参数验证 执行函数 API调用 返回结果 结构化数据 自然语言答案 用户 LLM 解析器 工具执行器 外部API

4.2 函数定义规范

{
  "type": "function",
  "function": {
    "name": "search_flight",
    "description": "搜索航班信息,支持单程和往返",
    "parameters": {
      "type": "object",
      "properties": {
        "from_city": {
          "type": "string",
          "description": "出发城市"
        },
        "to_city": {
          "type": "string",
          "description": "目的城市"
        },
        "date": {
          "type": "string",
          "format": "date",
          "description": "出发日期 YYYY-MM-DD"
        },
        "passengers": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9,
          "default": 1
        }
      },
      "required": ["from_city", "to_city", "date"]
    }
  }
}

4.3 结构化输出

自由文本
结构化
LLM输出
输出类型
普通生成
约束生成
Schema定义
JSON Schema
Pydantic Model
OpenAPI Spec
语法引导
GBNF语法
正则约束
格式模板
验证与重试
Schema验证
自动修复
重新生成
Pydantic示例
from pydantic import BaseModel, Field
from typing import List

class FlightInfo(BaseModel):
    flight_number: str = Field(description="航班号")
    departure_time: str = Field(pattern=r"^\d{2}:\d{2}$")
    arrival_time: str = Field(pattern=r"^\d{2}:\d{2}$")
    price: float = Field(gt=0, description="价格(元)")
    available_seats: int = Field(ge=0, le=999)

class FlightSearchResult(BaseModel):
    flights: List[FlightInfo]
    total_count: int
    search_date: str

4.4 错误处理与重试

graph TB
    A[函数调用] --> B{执行结果}
    
    B -->|成功| C[返回结果]
    B -->|失败| D[错误类型]
    
    D -->|参数错误| E1[提示LLM修正]
    D -->|超时| E2[指数退避重试]
    D -->|限流| E3[等待后重试]
    D -->|业务错误| E4[返回错误信息]
    
    E1 --> F{重试次数}
    E2 --> F
    E3 --> F
    
    F -->|<3次| A
    F -->|≥3次| G[降级策略]
    
    G --> G1[使用缓存结果]
    G --> G2[返回默认值]
    G --> G3[人工介入]

五、多模态基础

5.1 多模态架构

融合层
编码器
输入模态
跨模态注意力
模态对齐
统一表示空间
Text Encoder
BERT/GPT
Vision Encoder
CLIP/ViT
Audio Encoder
Whisper
Video Encoder
时序处理
文本
图像
音频
视频
多模态Transformer
统一LLM
生成/分类/检索

5.2 视觉-语言模型

图像输入
Vision Encoder
视觉Token
文本输入
Text Tokenizer
文本Token
拼接
LLM Backbone
文本输出
应用场景
  • 图像理解:看图说话、VQA(视觉问答)
  • OCR增强:文档理解、表格提取
  • 图像生成:文生图、图生图
  • 视频分析:内容摘要、场景识别

5.3 语音-语言模型

音频输入
ASR
语音识别
文本转录
LLM处理
文本回复
TTS
语音合成
音频输出

六、总结:核心能力知识图谱

LLM核心能力
推理生成
上下文管理
知识增强
工具调用
多模态
解码策略
Greedy/Sampling
KV Cache
加速推理
Speculative
推测解码
滑动窗口
压缩摘要
记忆系统
RAG检索
重排序
引用生成
函数定义
参数解析
结构化输出
视觉理解
语音交互
跨模态融合

本章深入剖析了LLM的核心工作机制,为后续章节的架构设计和工程实践奠定了理论基础。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐