PageSourceSearch

https://www.wensi.ai/assets/04-architecture.html-BqyU9V_P.js

js wensi.ai collected 2026-10-05 13:24:18 UTC 96,029 bytes, 525 lines download raw bytes

1import{_ as i,c as t,b as c,a,e as s,d as l,w as p,r as o,o as d}from"./app-BNAFTfp7.js";const u={};function r(v,n){const e=o("RouteLink");return d(),t("div",null,[n[11]||(n[11]=c(`<h1 id="_04-codex-架构设计详解" tabindex="-1"><a class="header-anchor" href="#_04-codex-架构设计详解"><span>04 - Codex 架构设计详解</span></a></h1><blockquote><p>揭秘 Codex 的技术架构:从 Transformer 到代码生成</p></blockquote><h2 id="📋-本章目标" tabindex="-1"><a class="header-anchor" href="#📋-本章目标"><span>📋 本章目标</span></a></h2><p>学完本章,你将能够:</p><ul><li>理解 Codex 的整体技术架构</li><li>掌握 Transformer 在代码生成中的应用</li><li>了解训练数据和微调策略</li><li>理解推理过程和优化机制</li></ul><hr><h2 id="🏗️-整体架构概览" tabindex="-1"><a class="header-anchor" href="#🏗️-整体架构概览"><span>🏗️ 整体架构概览</span></a></h2><h3 id="系统架构图" tabindex="-1"><a class="header-anchor" href="#系统架构图"><span>系统架构图</span></a></h3><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">┌─────────────────────────────────────────────────────────┐</span>
2<span class="line">│                    Codex 系统架构                         │</span>
3<span class="line">├─────────────────────────────────────────────────────────┤</span>
4<span class="line">│                                                          │</span>
5<span class="line">│  ┌───────────────────────────────────────────────────┐  │</span>
6<span class="line">│  │              用户交互层                            │  │</span>
7<span class="line">│  │  ┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐         │  │</span>
8<span class="line">│  │  │ API  │  │ IDE  │  │  Web │  │ CLI  │         │  │</span>
9<span class="line">│  │  └───┬──┘  └───┬──┘  └───┬──┘  └───┬──┘         │  │</span>
10<span class="line">│  └──────┼─────────┼─────────┼─────────┼─────────────┘  │</span>
11<span class="line">│         │         │         │         │                 │</span>
12<span class="line">│  ┌──────┴─────────┴─────────┴─────────┴─────────────┐  │</span>
13<span class="line">│  │              API 网关层                           │  │</span>
14<span class="line">│  │  ┌─────────────────────────────────────────────┐ │  │</span>
15<span class="line">│  │  │ 认证 │ 限流 │ 路由 │ 监控 │ 缓存          │ │  │</span>
16<span class="line">│  │  └─────────────────────────────────────────────┘ │  │</span>
17<span class="line">│  └──────────────────────┬───────────────────────────┘  │</span>
18<span class="line">│                         │                              │</span>
19<span class="line">│  ┌──────────────────────┴───────────────────────────┐  │</span>
20<span class="line">│  │           推理引擎(Inference Engine)            │  │</span>
21<span class="line">│  │  ┌─────────────────────────────────────────────┐ │  │</span>
22<span class="line">│  │  │  输入处理 → Tokenization → Embedding        │ │  │</span>
23<span class="line">│  │  │      ↓                                       │ │  │</span>
24<span class="line">│  │  │  Transformer 模型(N层)                    │ │  │</span>
25<span class="line">│  │  │      ↓                                       │ │  │</span>
26<span class="line">│  │  │  输出处理 → Detokenization → 后处理         │ │  │</span>
27<span class="line">│  │  └─────────────────────────────────────────────┘ │  │</span>
28<span class="line">│  └────────────────────────────────────────────────┘  │</span>
29<span class="line">│                         │                              │</span>
30<span class="line">│  ┌──────────────────────┴───────────────────────────┐  │</span>
31<span class="line">│  │              存储与缓存层                          │  │</span>
32<span class="line">│  │  ┌────────┐  ┌────────┐  ┌────────┐            │  │</span>
33<span class="line">│  │  │  模型  │  │  缓存  │  │  日志  │            │  │</span>
34<span class="line">│  │  │  权重  │  │  结果  │  │  数据  │            │  │</span>
35<span class="line">│  │  └────────┘  └────────┘  └────────┘            │  │</span>
36<span class="line">│  └────────────────────────────────────────────────┘  │</span>
37<span class="line">│                                                         │</span>
38<span class="line">└─────────────────────────────────────────────────────────┘</span>
39<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="核心组件" tabindex="-1"><a class="header-anchor" href="#核心组件"><span>核心组件</span></a></h3><h4 id="_1-模型层-model-layer" tabindex="-1"><a class="header-anchor" href="#_1-模型层-model-layer"><span>1. 模型层(Model Layer)</span></a></h4><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">基础架构:Transformer Decoder-only</span>
40<span class="line">    ↓</span>
41<span class="line">特化优化:针对代码生成的改进</span>
42<span class="line">    ↓</span>
43<span class="line">规模:175B 参数(Codex-002)</span>
44<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="_2-训练管道-training-pipeline" tabindex="-1"><a class="header-anchor" href="#_2-训练管道-training-pipeline"><span>2. 训练管道(Training Pipeline)</span></a></h4><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">预训练(Pre-training)</span>
45<span class="line">    ↓</span>
46<span class="line">代码数据微调(Fine-tuning)</span>
47<span class="line">    ↓</span>
48<span class="line">人类反馈强化学习(RLHF)</span>
49<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="_3-推理系统-inference-system" tabindex="-1"><a class="header-anchor" href="#_3-推理系统-inference-system"><span>3. 推理系统(Inference System)</span></a></h4><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">输入处理</span>
50<span class="line">    ↓</span>
51<span class="line">上下文管理</span>
52<span class="line">    ↓</span>
53<span class="line">生成采样</span>
54<span class="line">    ↓</span>
55<span class="line">输出优化</span>
56<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="🧠-transformer-架构详解" tabindex="-1"><a class="header-anchor" href="#🧠-transformer-架构详解"><span>🧠 Transformer 架构详解</span></a></h2><h3 id="基础-transformer-结构" tabindex="-1"><a class="header-anchor" href="#基础-transformer-结构"><span>基础 Transformer 结构</span></a></h3><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">┌──────────────────────────────────────┐</span>
57<span class="line">│         Transformer Decoder           │</span>
58<span class="line">├──────────────────────────────────────┤</span>
59<span class="line">│                                       │</span>
60<span class="line">│  输入:Token序列                       │</span>
61<span class="line">│    ↓                                  │</span>
62<span class="line">│  Embedding Layer(词嵌入)            │</span>
63<span class="line">│    ↓                                  │</span>
64<span class="line">│  Positional Encoding(位置编码)      │</span>
65<span class="line">│    ↓                                  │</span>
66<span class="line">│  ┌─────────────────────────────┐     │</span>
67<span class="line">│  │  Decoder Layer × N          │     │</span>
68<span class="line">│  │                              │     │</span>
69<span class="line">│  │  ┌────────────────────────┐ │     │</span>
70<span class="line">│  │  │ Multi-Head Attention   │ │     │</span>
71<span class="line">│  │  └────────────────────────┘ │     │</span>
72<span class="line">│  │           ↓                  │     │</span>
73<span class="line">│  │  ┌────────────────────────┐ │     │</span>
74<span class="line">│  │  │ Feed Forward Network   │ │     │</span>
75<span class="line">│  │  └────────────────────────┘ │     │</span>
76<span class="line">│  │                              │     │</span>
77<span class="line">│  └─────────────────────────────┘     │</span>
78<span class="line">│    ↓                                  │</span>
79<span class="line">│  Output Layer(输出层)                │</span>
80<span class="line">│    ↓                                  │</span>
81<span class="line">│  Softmax(概率分布)                   │</span>
82<span class="line">│    ↓                                  │</span>
83<span class="line">│  Next Token(下一个token)            │</span>
84<span class="line">│                                       │</span>
85<span class="line">└──────────────────────────────────────┘</span>
86<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="codex-的特殊优化" tabindex="-1"><a class="header-anchor" href="#codex-的特殊优化"><span>Codex 的特殊优化</span></a></h3><h4 id="_1-代码特定的-tokenization" tabindex="-1"><a class="header-anchor" href="#_1-代码特定的-tokenization"><span>1. 代码特定的 Tokenization</span></a></h4><p><strong>普通文本 Tokenizer</strong>:</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">&quot;function&quot; → [&quot;fun&quot;, &quot;ction&quot;]  # 基于常见词频</span>
87<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p><strong>代码 Tokenizer(优化)</strong>:</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">&quot;function&quot; → [&quot;function&quot;]      # 保持完整关键字</span>
88<span class="line">&quot;getUserName&quot; → [&quot;get&quot;, &quot;User&quot;, &quot;Name&quot;]  # 识别驼峰命名</span>
89<span class="line">&quot;user_name&quot; → [&quot;user_&quot;, &quot;name&quot;]          # 识别蛇形命名</span>
90<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"
90></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>优势</strong>:</p><ul><li>✅ 保留代码语义</li><li>✅ 减少token数量</li><li>✅ 提高生成质量</li></ul><h4 id="_2-位置编码优化" tabindex="-1"><a class="header-anchor" href="#_2-位置编码优化"><span>2. 位置编码优化</span></a></h4><p><strong>标准位置编码</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># 绝对位置编码</span></span>
91<span class="line">pos_encoding<span class="token punctuation">[</span>pos<span class="token punctuation">]</span> <span class="token operator">=</span> sin<span class="token punctuation">(</span>pos <span class="token operator">/</span> <span class="token number">10000</span><span class="token operator">^</span><span class="token punctuation">(</span>2i<span class="token operator">/</span>d<span class="token punctuation">)</span><span class="token punctuation">)</span></span>
92<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>代码特定优化</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># 考虑缩进层级</span></span>
93<span class="line">pos_encoding <span class="token operator">=</span> combine<span class="token punctuation">(</span></span>
94<span class="line">    absolute_position<span class="token punctuation">,</span></span>
95<span class="line">    indentation_level<span class="token punctuation">,</span>  <span class="token comment"># 新增:缩进信息</span></span>
96<span class="line">    block_depth        <span class="token comment"># 新增:代码块深度</span></span>
97<span class="line"><span class="token punctuation">)</span></span>
98<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>意义</strong>:</p><ul><li>理解代码结构</li><li>保持缩进一致性</li><li>识别代码块边界</li></ul><h4 id="_3-attention-机制优化" tabindex="-1"><a class="header-anchor" href="#_3-attention-机制优化"><span>3. Attention 机制优化</span></a></h4><p><strong>标准 Attention</strong>:</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">关注所有上文 token</span>
99<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p><strong>代码特定 Attention</strong>:</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">1. 优先关注:</span>
100<span class="line">   - 相同缩进层级的代码</span>
101<span class="line">   - 变量定义位置</span>
102<span class="line">   - 函数签名</span>
103<span class="line">   - 导入语句</span>
104<span class="line"></span>
105<span class="line">2. 降低关注:</span>
106<span class="line">   - 注释(但不忽略)</span>
107<span class="line">   - 字符串字面量</span>
108<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>实现方式</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">class</span> <span class="token class-name">CodeAttention</span><span class="token punctuation">(</span>nn<span class="token punctuation">.</span>Module<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
109<span class="line">    <span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> d_model<span class="token punctuation">,</span> n_heads<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
110<span class="line">
110        <span class="token builtin">super</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>__init__<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
111<span class="line">        self<span class="token punctuation">.</span>attention <span class="token operator">=</span> MultiHeadAttention<span class="token punctuation">(</span>d_model<span class="token punctuation">,</span> n_heads<span class="token punctuation">)</span></span>
112<span class="line">        </span>
113<span class="line">    <span class="token keyword">def</span> <span class="token function">forward</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> query<span class="token punctuation">,</span> key<span class="token punctuation">,</span> value<span class="token punctuation">,</span> code_mask<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">)</span><span class="token punctuation">:</span></span>
114<span class="line">        <span class="token comment"># 标准 attention</span></span>
115<span class="line">        attn_weights <span class="token operator">=</span> self<span class="token punctuation">.</span>attention<span class="token punctuation">(</span>query<span class="token punctuation">,</span> key<span class="token punctuation">,</span> value<span class="token punctuation">)</span></span>
116<span class="line">        </span>
117<span class="line">        <span class="token comment"># 应用代码特定的权重调整</span></span>
118<span class="line">        <span class="token keyword">if</span> code_mask <span class="token keyword">is</span> <span class="token keyword">not</span> <span class="token boolean">None</span><span class="token punctuation">:</span></span>
119<span class="line">            <span class="token comment"># code_mask 标记代码的结构信息</span></span>
120<span class="line">            attn_weights <span class="token operator">=</span> attn_weights <span class="token operator">*</span> code_mask</span>
121<span class="line">        </span>
122<span class="line">        <span class="token keyword">return</span> attn_weights</span>
123<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="📚-训练数据与策略" tabindex="-1"><a class="header-anchor" href="#📚-训练数据与策略"><span>📚 训练数据与策略</span></a></h2><h3 id="训练数据来源" tabindex="-1"><a class="header-anchor" href="#训练数据来源"><span>训练数据来源</span></a></h3><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">┌──────────────────────────────────────┐</span>
124<span class="line">│          训练数据构成                 │</span>
125<span class="line">├──────────────────────────────────────┤</span>
126<span class="line">│                                       │</span>
127<span class="line">│  GitHub 公开代码库(60%)             │</span>
128<span class="line">│  ├─ 54M+ 仓库                        │</span>
129<span class="line">│  ├─ 筛选:star &gt; 1, 有效代码         │</span>
130<span class="line">│  └─ 去重、清洗                       │</span>
131<span class="line">│                                       │</span>
132<span class="line">│  编程问答(20%)                     │</span>
133<span class="line">│  ├─ Stack Overflow                   │</span>
134<span class="line">│  ├─ Reddit r/learnprogramming       │</span>
135<span class="line">│  └─ GitHub Issues/PR                │</span>
136<span class="line">│                                       │</span>
137<span class="line">│  技术文档(15%)                     │</span>
138<span class="line">│  ├─ 官方文档                         │</span>
139<span class="line">│  ├─ 教程                             │</span>
140<span class="line">│  └─ API 参考                         │</span>
141<span class="line">│                                       │</span>
142<span class="line">│  GPT-3 基础知识(5%)                │</span>
143<span class="line">│  └─ 通用语言理解能力                │</span>
144<span class="line">│                                       │</span>
145<span class="line">└──────────────────────────────────────┘</span>
146<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="数据处理流程" tabindex="-1"><a class="header-anchor" href="#数据处理流程"><span>数据处理流程</span></a></h3><h4 id="_1-数据清洗" tabindex="-1"><a class="header-anchor" href="#_1-数据清洗"><span>1. 数据清洗</span></a></h4><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">clean_code_data</span><span class="token punctuation">(</span>raw_code<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
147<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;代码数据清洗流程&quot;&quot;&quot;</span></span>
148<span class="line">    </span>
149<span class="line">    <span class="token comment"># 1. 移除无效代码</span></span>
150<span class="line">    <span class="token keyword">if</span> <span class="token keyword">not</span> is_valid_syntax<span class="token punctuation">(</span>raw_code<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
151<span class="line">
151        <span class="token keyword">return</span> <span class="token boolean">None</span></span>
152<span class="line">    </span>
153<span class="line">    <span class="token comment"># 2. 去除敏感信息</span></span>
154<span class="line">    code <span class="token operator">=</span> remove_credentials<span class="token punctuation">(</span>raw_code<span class="token punctuation">)</span></span>
155<span class="line">    code <span class="token operator">=</span> remove_api_keys<span class="token punctuation">(</span>code<span class="token punctuation">)</span></span>
156<span class="line">    code <span class="token operator">=</span> anonymize_personal_info<span class="token punctuation">(</span>code<span class="token punctuation">)</span></span>
157<span class="line">    </span>
158<span class="line">    <span class="token comment"># 3. 标准化格式</span></span>
159<span class="line">    code <span class="token operator">=</span> normalize_whitespace<span class="token punctuation">(</span>code<span class="token punctuation">)</span></span>
160<span class="line">    code <span class="token operator">=</span> standardize_line_endings<span class="token punctuation">(</span>code<span class="token punctuation">)</span></span>
161<span class="line">    </span>
162<span class="line">    <span class="token comment"># 4. 添加元数据</span></span>
163<span class="line">    metadata <span class="token operator">=</span> <span class="token punctuation">{</span></span>
164<span class="line">        <span class="token string">&#39;language&#39;</span><span class="token punctuation">:</span> detect_language<span class="token punctuation">(</span>code<span class="token punctuation">)</span><span class="token punctuation">,</span></span>
165<span class="line">        <span class="token string">&#39;quality_score&#39;</span><span class="token punctuation">:</span> assess_code_quality<span class="token punctuation">(</span>code<span class="token punctuation">)</span><span class="token punctuation">,</span></span>
166<span class="line">        <span class="token string">&#39;complexity&#39;</span><span class="token punctuation">:</span> calculate_complexity<span class="token punctuation">(</span>code<span class="token punctuation">)</span></span>
167<span class="line">    <span class="token punctuation">}</span></span>
168<span class="line">    </span>
169<span class="line">    <span class="token keyword">return</span> <span class="token punctuation">{</span></span>
170<span class="line">        <span class="token string">&#39;code&#39;</span><span class="token punctuation">:</span> code<span class="token punctuation">,</span></span>
171<span class="line">        <span class="token string">&#39;metadata&#39;</span><span class="token punctuation">:</span> metadata</span>
172<span class="line">    <span class="token punctuation">}</span></span>
173<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="_2-质量评分" tabindex="-1"><a class="header-anchor" href="#_2-质量评分"><span>2. 质量评分</span></a></h4><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">assess_code_quality</span><span class="token punctuation">(</span>code<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
174<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;代码质量评估&quot;&quot;&quot;</span></span>
175<span class="line">    </span>
176<span class="line">
176    score <span class="token operator">=</span> <span class="token number">0</span></span>
177<span class="line">    </span>
178<span class="line">    <span class="token comment"># 有注释 +10</span></span>
179<span class="line">    <span class="token keyword">if</span> has_comments<span class="token punctuation">(</span>code<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
180<span class="line">        score <span class="token operator">+=</span> <span class="token number">10</span></span>
181<span class="line">    </span>
182<span class="line">    <span class="token comment"># 有类型注解 +10</span></span>
183<span class="line">    <span class="token keyword">if</span> has_type_hints<span class="token punctuation">(</span>code<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
184<span class="line">        score <span class="token operator">+=</span> <span class="token number">10</span></span>
185<span class="line">    </span>
186<span class="line">    <span class="token comment"># 遵循风格指南 +20</span></span>
187<span class="line">    <span class="token keyword">if</span> follows_style_guide<span class="token punctuation">(</span>code<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
188<span class="line">        score <span class="token operator">+=</span> <span class="token number">20</span></span>
189<span class="line">    </span>
190<span class="line">    <span class="token comment"># 有测试 +30</span></span>
191<span class="line">    <span class="token keyword">if</span> has_tests<span class="token punctuation">(</span>code<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
192<span class="line">        score <span class="token operator">+=</span> <span class="token number">30</span></span>
193<span class="line">    </span>
194<span class="line">    <span class="token comment"># 文档完整 +30</span></span>
195<span class="line">    <span class="token keyword">if</span> has_documentation<span class="token punctuation">(</span>code<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
196<span class="line">        score <span class="token operator">+=</span> <span class="token number">30</span></span>
197<span class="line">    </span>
198<span class="line">    <span class="token keyword">return</span> score  <span class="token comment"># 0-100</span></span>
199<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="训练策略" tabindex="-1"><a class="header-anchor" href="#训练策略"><span>训练策略</span></a></h3><h4 id="阶段-1-预训练-pre-training" tabindex="-1"><a class="header-anchor" href="#阶段-1-预训练-pre-training"><span>阶段 1:预训练(Pre-training)</span></a></h4><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">目标:学习通用编程知识</span>
200<span class="line"></span>
201<span class="line">数据:所有清洗后的代码</span>
202<span class="line">方法:Causal Language Modeling</span>
203<span class="line">损失:Next Token Prediction</span>
204<span class="line"></span>
205<span class="line">训练任务:</span>
206<span class="line">给定 code[0:t],预测 code[t]</span>
207<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>示例</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># 输入序列</span></span>
208<span class="line"><span class="token builtin">input</span> <span class="token operator">=</span> <span class="token string">&quot;def fibonacci(n):\\n    if n &lt;=&quot;</span></span>
209<span class="line"></span>
210<span class="line"><span class="token comment"># 训练目标:预测下一个 token</span></span>
211<span class="line">target <span class="token operator">=</span> <span class="token string">&quot; 1&quot;</span></span>
212<span class="line"></span>
213<span class="line"><span class="token comment"># 后续</span></span>
214<span class="line"><span class="token builtin">input</span> <span class="token operator">=</span> <span class="token string">&quot;def fibonacci(n):\\n    if n &lt;= 1&quot;</span></span>
215<span class="line">target <span class="token operator">=</span> <span class="token string">&quot;:&quot;</span></span>
216<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="阶段-2-微调-fine-tuning" tabindex="-1"><a class="header-anchor" href="#阶段-2-微调-fine-tuning"><span>阶段 2:微调(Fine-tuning)</span></a></h4><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">目标:优化特定编程任务</span>
217<span class="line"></span>
218<span class="line">数据:高质量、有标注的代码对</span>
219<span class="line">方法:Supervised Fine-tuning</span>
220<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>数据格式</strong>:</p><div class="language-json line-numbers-mode" data-highlighter="prismjs" data-ext="json"><pre><code class="language-json"><span class="line"><span class="token punctuation">{</span></span>
221<span class="line">  <span class="token property">&quot;prompt&quot;</span><span class="token operator">:</span> <span class="token string">&quot;
221创建一个函数,计算列表的平均值&quot;</span><span class="token punctuation">,</span></span>
222<span class="line">  <span class="token property">&quot;completion&quot;</span><span class="token operator">:</span> <span class="token string">&quot;def calculate_average(numbers):\\n    if not numbers:\\n        return 0\\n    return sum(numbers) / len(numbers)&quot;</span></span>
223<span class="line"><span class="token punctuation">}</span></span>
224<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="阶段-3-rlhf-人类反馈强化学习" tabindex="-1"><a class="header-anchor" href="#阶段-3-rlhf-人类反馈强化学习"><span>阶段 3:RLHF(人类反馈强化学习)</span></a></h4><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">目标:对齐人类偏好</span>
225<span class="line"></span>
226<span class="line">流程:</span>
227<span class="line">1. 生成多个候选代码</span>
228<span class="line">2. 人类评分</span>
229<span class="line">3. 训练奖励模型</span>
230<span class="line">4. 用 PPO 优化生成策略</span>
231<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>奖励函数</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">code_reward</span><span class="token punctuation">(</span>generated_code<span class="token punctuation">,</span> expected_behavior<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
232<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;计算代码的奖励分数&quot;&quot;&quot;</span></span>
233<span class="line">    </span>
234<span class="line">    reward <span class="token operator">=</span> <span class="token number">0</span></span>
235<span class="line">    </span>
236<span class="line">    <span class="token comment"># 功能正确性(最重要)</span></span>
237<span class="line">    <span class="token keyword">if</span> passes_tests<span class="token punctuation">(</span>generated_code<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
238<span class="line">        reward <span class="token operator">+=</span> <span class="token number">50</span></span>
239<span class="line">    </span>
240<span class="line">    <span class="token comment"># 代码质量</span></span>
241<span class="line">    reward <span class="token operator">+=</span> code_quality_score<span class="token punctuation">(</span>generated_code<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.2</span></span>
242<span class="line">    </span>
243<span class="line">    <span class="token comment"># 性能</span></span>
244<span class="line">    reward <span class="token operator">+=</span> performance_score<span class="token punctuation">(</span>generated_code<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.15</span></span>
245<span class="line">    </span>
246<span class="line">    <span class="token comment"># 可读性</span></span>
247<span class="line">    reward <span class="token operator">+=</span> readability_score<span class="token punctuation">(</span>generated_code<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.15</span></span>
248<span class="line">    </span>
249<span class="line">    <span class="token keyword">return</span> reward</span>
250<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="⚙️-推理过程详解" tabindex="-1"><a class="header-anchor" href="#⚙️-推理过程详解"><span>⚙️ 推理过程详解</span></a></h2><h3 id="生成流程" tabindex="-1"><a class="header-anchor" href="#生成流程"><span>生成流程</span></a></h3><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">┌────────────────────────────────────────┐</span>
251<span class="line">│         代码生成流程                    │</span>
252<span class="line">├────────────────────────────────────────┤</span>
253<span class="line">│                                         │</span>
254<span class="line">│  1. 输入处理                            │</span>
255<span class="line">│     ↓                                   │</span>
256<span class="line">│  2. Tokenization                       │</span>
257<span class="line">│     ↓                                   │</span>
258<span class="line">│  3. 上下文构建                          │</span>
259<span class="line">│     ↓                                   │</span>
260<span class="line">│  4. 模型推理                            │</span>
261<span class="line">│     ↓                                   │</span>
262<span class="line">│  5. 采样生成                            │</span>
263<span class="line">│     ↓                                   │</span>
264<span class="line">│  6. 后处理                              │</span>
265<span class="line">│     ↓                                   │</span>
266<span class="line">│  7. 输出代码                            │</span>
267<span class="line">│                                         │</span>
268<span class="line">└────────────────────────────────────────┘</span>
269<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="详细步骤" tabindex="-1"><a class="header-anchor" href="#详细步骤"><span>详细步骤</span></a></h3><h4 id="_1-输入处理" tabindex="-1"><a class="header-anchor" href="#_1-输入处理"><span>1. 输入处理</span></a></h4><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">process_input</span><span class="token punctuation">(</span>user_prompt<span class="token punctuation">,</span> context<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">)</span><span class="token punctuation">:</span></span>
270<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;处理用户输入&quot;&quot;&quot;</span></span>
271<span class="line">    </span>
272<span class="line">    <span class="token comment"># 构建完整提示词</span></span>
273<span class="line">    prompt <span class="token operator">=</span> build_prompt<span class="token punctuation">(</span></span>
274<span class="line">        system_message<span class="token operator">=</span>get_system_message<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
275<span class="line">        context<span class="token operator">=</span>context<span class="token punctuation">,</span>  <span class="token comment"># 项目上下文</span></span>
276<span class="line">        user_input<span class="token operator">=</span>user_prompt</span>
277<span class="line">    <span class="token punctuation">)</span></span>
278<span class="line">    </span>
279<span class="line">    <span class="token keyword">return</span> prompt</span>
280<span class="line"></span>
281<span class="line"><span class="token comment"># 示例</span></span>
282<span class="line">system_message <span class="token operator">=</span> <span class="token string">&quot;你是一个专业的 Python 开发者&quot;</span></span>
283<span class="line">context <span class="token operator">=</span> <span class="token string">&quot;# 现有代码\\nclass User:\\n    pass&quot;</span></span>
284<span class="line">user_input <span class="token operator">=</span> <span class="token string">&quot;
284为 User 类添加一个验证邮箱的方法&quot;</span></span>
285<span class="line"></span>
286<span class="line">full_prompt <span class="token operator">=</span> <span class="token triple-quoted-string string">&quot;&quot;&quot;</span>
287<span class="line">你是一个专业的 Python 开发者</span>
288<span class="line"></span>
289<span class="line"># 现有代码</span>
290<span class="line">class User:</span>
291<span class="line">    pass</span>
292<span class="line"></span>
293<span class="line">任务:为 User 类添加一个验证邮箱的方法</span>
294<span class="line">&quot;&quot;&quot;</span></span>
295<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="_2-tokenization" tabindex="-1"><a class="header-anchor" href="#_2-tokenization"><span>2. Tokenization</span></a></h4><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">tokenize</span><span class="token punctuation">(</span>text<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
296<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;将文本转换为 token&quot;&quot;&quot;</span></span>
297<span class="line">    </span>
298<span class="line">    tokens <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span></span>
299<span class="line">    </span>
300<span class="line">    <span class="token comment"># 使用 BPE (Byte Pair Encoding)</span></span>
301<span class="line">    <span class="token keyword">for</span> word <span class="token keyword">in</span> text<span class="token punctuation">.</span>split<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span></span>
302<span class="line">        <span class="token comment"># 代码特定处理</span></span>
303<span class="line">        <span class="token keyword">if</span> is_code_keyword<span class="token punctuation">(</span>word<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
304<span class="line">            tokens<span class="token punctuation">.</span>append<span class="token punctuation">(</span>KEYWORD_TOKEN<span class="token punctuation">[</span>word<span class="token punctuation">]</span><span class="token punctuation">)</span></span>
305<span class="line">        <span class="token keyword">elif</span> is_identifier<span class="token punctuation">(</span>word<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
306<span class="line">            tokens<span class="token punctuation">.</span>extend<span class="token punctuation">(</span>tokenize_identifier<span class="token punctuation">(</span>word<span class="token punctuation">)</span><span class="token punctuation">)</span></span>
307<span class="line">        <span class="token keyword">else</span><span class="token punctuation">:</span></span>
308<span class="line">            tokens<span class="token punctuation">.</span>extend<span class="token punctuation">(</span>bpe_tokenize<span class="token punctuation">(</span>word<span class="token punctuation">)</span><span class="token punctuation">)</span></span>
309<span class="line">    </span>
310<span class="line">    <span class="token keyword">return</span> tokens</span>
311<span class="line"></span>
312<span class="line"><span class="token comment"># 示例</span></span>
313<span class="line">text <span class="token operator">=</span> <span class="token string">&quot;def getUserName():&quot;</span></span>
314<span class="line">tokens <span class="token operator">=</span> <span class="token punctuation">[</span></span>
315<span class="line">    TOKEN_DEF<span class="token punctuation">,</span>
315           <span class="token comment"># &quot;def&quot;</span></span>
316<span class="line">    TOKEN_GET<span class="token punctuation">,</span>           <span class="token comment"># &quot;get&quot;</span></span>
317<span class="line">    TOKEN_USER<span class="token punctuation">,</span>          <span class="token comment"># &quot;User&quot;</span></span>
318<span class="line">    TOKEN_NAME<span class="token punctuation">,</span>          <span class="token comment"># &quot;Name&quot;</span></span>
319<span class="line">    TOKEN_LPAREN<span class="token punctuation">,</span>        <span class="token comment"># &quot;(&quot;</span></span>
320<span class="line">    TOKEN_RPAREN<span class="token punctuation">,</span>        <span class="token comment"># &quot;)&quot;</span></span>
321<span class="line">    TOKEN_COLON          <span class="token comment"># &quot;:&quot;</span></span>
322<span class="line"><span class="token punctuation">]</span></span>
323<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="_3-生成策略" tabindex="-1"><a class="header-anchor" href="#_3-生成策略"><span>3. 生成策略</span></a></h4><p><strong>Temperature 采样</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">sample_next_token</span><span class="token punctuation">(</span>logits<span class="token punctuation">,</span> temperature<span class="token operator">=</span><span class="token number">0.2</span><span class="token punctuation">)</span><span class="token punctuation">:</span></span>
324<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;根据温度采样下一个 token&quot;&quot;&quot;</span></span>
325<span class="line">    </span>
326<span class="line">    <span class="token comment"># temperature 越低,输出越确定</span></span>
327<span class="line">    <span class="token comment"># temperature 越高,输出越随机</span></span>
328<span class="line">    </span>
329<span class="line">    probs <span class="token operator">=</span> softmax<span class="token punctuation">(</span>logits <span class="token operator">/</span> temperature<span class="token punctuation">)</span></span>
330<span class="line">    next_token <span class="token operator">=</span> sample_from_distribution<span class="token punctuation">(</span>probs<span class="token punctuation">)</span></span>
331<span class="line">    </span>
332<span class="line">    <span class="token keyword">return</span> next_token</span>
333<span class="line"></span>
334<span class="line"><span class="token comment"># temperature 效果:</span></span>
335<span class="line"><span class="token comment"># 0.0  → 总是选择最高概率(贪心)</span></span>
336<span class="line"><span class="token comment"># 0.2  → 偏向高概率(代码生成推荐)</span></span>
337<span class="line"><span class="token comment"># 0.8  → 较随机(创意任务)</span></span>
338<span class="line"><span class="token comment"># 1.0  → 完全按概率分布</span></span>
339<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>Top-p (Nucleus) 采样</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">top_p_sampling</span><span class="token punctuation">(</span>logits<span class="token punctuation">,</span> p<span class="token operator">=</span><span class="token number">0.95</span><span class="token punctuation">)</span><span class="token punctuation">:</span></span>
340<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;核心采样:只考虑累计概率 &gt;= p 的 token&quot;&quot;&quot;</span></span>
341<span class="line">    </span>
342<span class="line">    <span class="token comment"># 排序</span></span>
343<span class="line">    sorted_logits<span class="token punctuation">,</span> sorted_indices <span class="token operator">=</span> torch<span class="token punctuation">.</span>sort<span class="token punctuation">(</span>logits<span class="token punctuation">,</span> descending<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span></span>
344<span class="line">    probs <span class="token operator">=</span> softmax<span class="token punctuation">(</span>sorted_logits<span class="token punctuation">)</span></span>
345<span class="line">    </span>
346<span class="line">    <span class="token comment"># 计算累计概率</span></span>
347<span class="line">    cumulative_probs <span class="token operator">=</span> torch<span class="token punctuation">.</span>cumsum<span class="token punctuation">(</span>probs<span class="token punctuation">,</span> dim<span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span></span>
348<span class="line">    </span>
349<span class="line">    <span class="token comment"># 找到累计概率超过 p 的位置</span></span>
350<span class="line">    cutoff <span class="token operator">=</span> <span class="token punctuation">(</span>cumulative_probs <span class="token operator">&gt;</span> p<span class="token punctuation">)</span><span class="token punctuation">.</span>nonzero<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span></span>
351<span class="line">    </span>
352<span class="line">    <span class="token comment"># 只从这些 token 中采样</span></span>
353<span class="line">    top_tokens <span class="token operator">=</span> sorted_indices<span class="token punctuation">[</span><span class="token punctuation">:</span>cutoff<span class="token punctuation">]</span></span>
354<span class="line">    next_token <span class="token operator">=</span> sample_from<span class="token punctuation">(</span>top_tokens<span class="token punctuation">)</span></span>
355<span class="line">    </span>
356<span class="line">    <span class="token keyword">return</span> next_token</span>
357<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="_4-停止条件" tabindex="-1"><a class="header-anchor" href="#_4-停止条件"><span>4. 停止条件</span></a></h4><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">should_stop_generation</span><span class="token punctuation">(</span>generated_tokens<span class="token punctuation">,</span> context<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
358<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;判断是否停止生成&quot;&quot;&quot;</span></span>
359<span class="line">    </span>
360<span class="line">    <span class="token comment"># 1. 遇到特殊停止 token</span></span>
361<span class="line">    <span class="token keyword">if</span> generated_tokens<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token keyword">in</span> STOP_TOKENS<span class="token punctuation">:</span></span>
362<span class="line">
362        <span class="token keyword">return</span> <span class="token boolean">True</span></span>
363<span class="line">    </span>
364<span class="line">    <span class="token comment"># 2. 达到最大长度</span></span>
365<span class="line">    <span class="token keyword">if</span> <span class="token builtin">len</span><span class="token punctuation">(</span>generated_tokens<span class="token punctuation">)</span> <span class="token operator">&gt;=</span> MAX_LENGTH<span class="token punctuation">:</span></span>
366<span class="line">        <span class="token keyword">return</span> <span class="token boolean">True</span></span>
367<span class="line">    </span>
368<span class="line">    <span class="token comment"># 3. 代码块完整</span></span>
369<span class="line">    <span class="token keyword">if</span> is_complete_code_block<span class="token punctuation">(</span>generated_tokens<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
370<span class="line">        <span class="token keyword">return</span> <span class="token boolean">True</span></span>
371<span class="line">    </span>
372<span class="line">    <span class="token comment"># 4. 生成了重复内容</span></span>
373<span class="line">    <span class="token keyword">if</span> has_repetition<span class="token punctuation">(</span>generated_tokens<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
374<span class="line">        <span class="token keyword">return</span> <span class="token boolean">True</span></span>
375<span class="line">    </span>
376<span class="line">    <span class="token keyword">return</span> <span class="token boolean">False</span></span>
377<span class="line"></span>
378<span class="line"><span class="token keyword">def</span> <span class="token function">is_complete_code_block</span><span class="token punctuation">(</span>tokens<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
379<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;检查代码块是否完整&quot;&quot;&quot;</span></span>
380<span class="line">    </span>
381<span class="line">    <span class="token comment"># 检查括号、引号是否匹配</span></span>
382<span class="line">    <span class="token keyword">if</span> <span class="token keyword">not</span> brackets_balanced<span class="token punctuation">(</span>tokens<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
383<span class="line">        <span class="token keyword">return</span> <span class="token boolean">False</span></span>
384<span class="line">    </span>
385<span class="line">    <span class="token comment"># 检查缩进是否回到初始层级</span></span>
386<span class="line">    <span class="token keyword">if</span> <span class="token keyword">not</span> indentation_returned<span class="token punctuation">(</span>tokens<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
387<span class="line">        <span class="token keyword">return</span> <span class="token boolean">False</span></span>
388<span class="line">    </span>
389<span class="line">    <span class="token keyword">return</span> <span class="token boolean">True</span></span>
390<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="🚀-性能优化" tabindex="-1"><a class="header-anchor" href="#🚀-性能优化"><span>🚀 性能优化</span></a></h2><h3 id="推理优化" tabindex="-1"><a class="header-anchor" href="#推理优化"><span>推理优化</span></a></h3><h4 id="_1-kv-cache" tabindex="-1"><a class="header-anchor" href="#_1-kv-cache"><span>
3901. KV-Cache</span></a></h4><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">class</span> <span class="token class-name">KVCache</span><span class="token punctuation">:</span></span>
391<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;Key-Value 缓存优化&quot;&quot;&quot;</span></span>
392<span class="line">    </span>
393<span class="line">    <span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
394<span class="line">        self<span class="token punctuation">.</span>cache <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span></span>
395<span class="line">    </span>
396<span class="line">    <span class="token keyword">def</span> <span class="token function">forward_with_cache</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> input_ids<span class="token punctuation">,</span> past_key_values<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">)</span><span class="token punctuation">:</span></span>
397<span class="line">        <span class="token triple-quoted-string string">&quot;&quot;&quot;</span>
398<span class="line">        使用缓存加速推理</span>
399<span class="line">        </span>
400<span class="line">        原理:</span>
401<span class="line">        - 自回归生成每次只生成一个 token</span>
402<span class="line">        - 之前的 token 的 K、V 已经计算过</span>
403<span class="line">        - 缓存起来避免重复计算</span>
404<span class="line">        &quot;&quot;&quot;</span></span>
405<span class="line">        </span>
406<span class="line">        <span class="token keyword">if</span> past_key_values <span class="token keyword">is</span> <span class="token keyword">not</span> <span class="token boolean">None</span><span class="token punctuation">:</span></span>
407<span class="line">            <span class="token comment"># 只计算新 token 的 attention</span></span>
408<span class="line">            new_key<span class="token punctuation">,</span> new_value <span class="token operator">=</span> self<span class="token punctuation">.</span>compute_kv<span class="token punctuation">(</span>input_ids<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">:</span><span class="token punctuation">]</span><span class="token punctuation">)</span></span>
409<span class="line">            </span>
410<span class="line">            <span class="token comment"># 拼接到缓存</span></span>
411<span class="line">            key <span class="token operator">=</span> torch<span class="token punctuation">.</span>cat<span class="token punctuation">(</span><span class="token punctuation">[</span>past_key_values<span class="token punctuation">[</span><span class="token string">&#39;key&#39;</span><span class="token punctuation">]</span><span class="token punctuation">,</span> new_key<span class="token punctuation">]</span><span class="token punctuation">,</span> dim<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">)</span></span>
412<span class="line">            value <span class="token operator">=</span> torch<span class="token punctuation">.</span>cat<span class="token punctuation">(</span><span class="token punctuation">[</span>past_key_values<span class="token punctuation">[</span><span class="token string">&#39;value&#39;</span><span class="token punctuation">]</span><span class="token punctuation">,</span> new_value<span class="token punctuation">]</span><span class="token punctuation">,</span> dim<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">)</span></span>
413<span class="line">
413        <span class="token keyword">else</span><span class="token punctuation">:</span></span>
414<span class="line">            <span class="token comment"># 第一次,计算所有 token</span></span>
415<span class="line">            key<span class="token punctuation">,</span> value <span class="token operator">=</span> self<span class="token punctuation">.</span>compute_kv<span class="token punctuation">(</span>input_ids<span class="token punctuation">)</span></span>
416<span class="line">        </span>
417<span class="line">        <span class="token comment"># 执行 attention</span></span>
418<span class="line">        output <span class="token operator">=</span> self<span class="token punctuation">.</span>attention<span class="token punctuation">(</span>query<span class="token punctuation">,</span> key<span class="token punctuation">,</span> value<span class="token punctuation">)</span></span>
419<span class="line">        </span>
420<span class="line">        <span class="token keyword">return</span> output<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">&#39;key&#39;</span><span class="token punctuation">:</span> key<span class="token punctuation">,</span> <span class="token string">&#39;value&#39;</span><span class="token punctuation">:</span> value<span class="token punctuation">}</span></span>
421<span class="line"></span>
422<span class="line"><span class="token comment"># 性能提升:</span></span>
423<span class="line"><span class="token comment"># 无缓存:O(n²) - 每次重新计算所有 token</span></span>
424<span class="line"><span class="token comment"># 有缓存:O(n)  - 只计算新 token</span></span>
425<span class="line"><span class="token comment"># 加速比:生成 100 token,约快 50 倍</span></span>
426<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="_2-批处理-batching" tabindex="-1"><a class="header-anchor" href="#_2-批处理-batching"><span>2. 批处理(Batching)</span></a></h4><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">class</span> <span class="token class-name">BatchInference</span><span class="token punctuation">:</span></span>
427<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;批量推理&quot;&quot;&quot;</span></span>
428<span class="line">    </span>
429<span class="line">    <span class="token keyword">def</span> <span class="token function">generate_batch</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> prompts<span class="token punctuation">,</span> batch_size<span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">)</span><span class="token punctuation">:</span></span>
430<span class="line">        <span class="token triple-quoted-string string">&quot;&quot;&quot;批量生成多个请求&quot;&quot;&quot;</span></span>
431<span class="line">        </span>
432<span class="line">        results <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span></span>
433<span class="line">        </span>
434<span class="line">
434        <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>prompts<span class="token punctuation">)</span><span class="token punctuation">,</span> batch_size<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
435<span class="line">            batch <span class="token operator">=</span> prompts<span class="token punctuation">[</span>i<span class="token punctuation">:</span>i<span class="token operator">+</span>batch_size<span class="token punctuation">]</span></span>
436<span class="line">            </span>
437<span class="line">            <span class="token comment"># 填充到相同长度</span></span>
438<span class="line">            padded_batch <span class="token operator">=</span> pad_sequences<span class="token punctuation">(</span>batch<span class="token punctuation">)</span></span>
439<span class="line">            </span>
440<span class="line">            <span class="token comment"># 并行推理</span></span>
441<span class="line">            outputs <span class="token operator">=</span> self<span class="token punctuation">.</span>model<span class="token punctuation">(</span>padded_batch<span class="token punctuation">)</span></span>
442<span class="line">            </span>
443<span class="line">            results<span class="token punctuation">.</span>extend<span class="token punctuation">(</span>outputs<span class="token punctuation">)</span></span>
444<span class="line">        </span>
445<span class="line">        <span class="token keyword">return</span> results</span>
446<span class="line"></span>
447<span class="line"><span class="token comment"># 吞吐量提升:</span></span>
448<span class="line"><span class="token comment"># 单个处理:100 requests/min</span></span>
449<span class="line"><span class="token comment"># 批处理(8):600 requests/min</span></span>
450<span class="line"><span class="token comment"># 提升:6x</span></span>
451<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="_3-量化-quantization" tabindex="-1"><a class="header-anchor" href="#_3-量化-quantization"><span>3. 量化(Quantization)</span></a></h4><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">quantize_model</span><span class="token punctuation">(</span>model<span class="token punctuation">,</span> bits<span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">)</span><span class="token punctuation">:</span></span>
452<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;模型量化:降低精度以提升速度&quot;&quot;&quot;</span></span>
453<span class="line">    </span>
454<span class="line">    <span class="token comment"># FP32 → INT8</span></span>
455<span class="line">    <span class="token comment"># 模型大小:175GB → 44GB (4x 压缩)</span></span>
456<span class="line">    <span class="token comment"># 推理速度:提升 2-3x</span></span>
457<span class="line">    <span class="token comment"># 精度损失:&lt; 1%</span></span>
458<span class="line">    </span>
459<span class="line">    quantized_model <span class="token operator">=</span> torch<span class="token punctuation">.</span>quantization<span class="token punctuation">.</span>quantize_dynamic<span class="token punctuation">(</span></span>
460<span class="line">        model<span class="token punctuation">,</span></span>
461<span class="line">
461        <span class="token punctuation">{</span>torch<span class="token punctuation">.</span>nn<span class="token punctuation">.</span>Linear<span class="token punctuation">}</span><span class="token punctuation">,</span>  <span class="token comment"># 量化全连接层</span></span>
462<span class="line">        dtype<span class="token operator">=</span>torch<span class="token punctuation">.</span>qint8</span>
463<span class="line">    <span class="token punctuation">)</span></span>
464<span class="line">    </span>
465<span class="line">    <span class="token keyword">return</span> quantized_model</span>
466<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="缓存策略" tabindex="-1"><a class="header-anchor" href="#缓存策略"><span>缓存策略</span></a></h3><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">class</span> <span class="token class-name">ResponseCache</span><span class="token punctuation">:</span></span>
467<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;响应缓存&quot;&quot;&quot;</span></span>
468<span class="line">    </span>
469<span class="line">    <span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
470<span class="line">        self<span class="token punctuation">.</span>cache <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span></span>
471<span class="line">        self<span class="token punctuation">.</span>ttl <span class="token operator">=</span> <span class="token number">3600</span>  <span class="token comment"># 1小时</span></span>
472<span class="line">    </span>
473<span class="line">    <span class="token keyword">def</span> <span class="token function">get_cached_response</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> prompt<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
474<span class="line">        <span class="token triple-quoted-string string">&quot;&quot;&quot;获取缓存的响应&quot;&quot;&quot;</span></span>
475<span class="line">        </span>
476<span class="line">        <span class="token comment"># 1. 计算提示词的哈希</span></span>
477<span class="line">        cache_key <span class="token operator">=</span> self<span class="token punctuation">.</span>compute_hash<span class="token punctuation">(</span>prompt<span class="token punctuation">)</span></span>
478<span class="line">        </span>
479<span class="line">        <span class="token comment"># 2. 检查缓存</span></span>
480<span class="line">        <span class="token keyword">if</span> cache_key <span class="token keyword">in</span> self<span class="token punctuation">.</span>cache<span class="token punctuation">:</span></span>
481<span class="line">            cached <span class="token operator">=</span> self<span class="token punctuation">.</span>cache<span class="token punctuation">[</span>cache_key<span class="token punctuation">]</span></span>
482<span class="line">            </span>
483<span class="line">            <span class="token comment"># 检查是否过期</span></span>
484<span class="line">            <span class="token keyword">if</span> time<span class="token punctuation">.</span>time<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span> cached<span class="token punctuation">[</span><span class="token string">&#39;timestamp&#39;</span><span class="token punctuation">]</span> <span class="token operator">&lt;</span> self<span class="token punctuation">.</span>ttl<span class="token punctuation">:</span></span>
485<span class="line">
485                <span class="token keyword">return</span> cached<span class="token punctuation">[</span><span class="token string">&#39;response&#39;</span><span class="token punctuation">]</span></span>
486<span class="line">        </span>
487<span class="line">        <span class="token keyword">return</span> <span class="token boolean">None</span></span>
488<span class="line">    </span>
489<span class="line">    <span class="token keyword">def</span> <span class="token function">compute_hash</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> prompt<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
490<span class="line">        <span class="token triple-quoted-string string">&quot;&quot;&quot;计算提示词的哈希(语义相似性)&quot;&quot;&quot;</span></span>
491<span class="line">        </span>
492<span class="line">        <span class="token comment"># 简单版本:直接哈希</span></span>
493<span class="line">        <span class="token comment"># return hashlib.md5(prompt.encode()).hexdigest()</span></span>
494<span class="line">        </span>
495<span class="line">        <span class="token comment"># 高级版本:语义哈希</span></span>
496<span class="line">        embedding <span class="token operator">=</span> self<span class="token punctuation">.</span>encode<span class="token punctuation">(</span>prompt<span class="token punctuation">)</span></span>
497<span class="line">        <span class="token keyword">return</span> self<span class="token punctuation">.</span>semantic_hash<span class="token punctuation">(</span>embedding<span class="token punctuation">)</span></span>
498<span class="line"></span>
499<span class="line"><span class="token comment"># 缓存命中率:</span></span>
500<span class="line"><span class="token comment"># 常见请求(如&quot;hello world&quot;):90%+</span></span>
501<span class="line"><span class="token comment"># 相似请求(语义缓存):60%+</span></span>
502<span class="line"><span class="token comment"># 平均响应时间:从 2s 降至 50ms</span></span>
503<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="📊-性能指标" tabindex="-1"><a class="header-anchor" href="#📊-性能指标"><span>📊 性能指标</span></a></h2><h3 id="推理性能" tabindex="-1"><a class="header-anchor" href="#推理性能"><span>推理性能</span></a></h3><table><thead><tr><th>模型</th><th>参数量</th><th>首token延迟</th><th>生成速度</th><th>内存占用</th></tr></thead><tbody><tr><td>Codex-001</td><td>12B</td><td>800ms</td><td>15 tok/s</td><td>24GB</td></tr><tr><td>Codex-002</td><td>175B</td><td>1200ms</td><td>20 tok/s</td><td>350GB</td></tr><tr><td>GPT-4</td><td>~1.8T</td><td>1500ms</td><td>25 tok/s</td><td>~3TB</td></tr><tr><td>GPT-4o</td><td>~1.8T</td><td>300ms</td><td>80 tok/s</td><td>~3TB</td></tr></tbody></table><h3 id="生成质量" tabindex="-1"><a class="header-anchor" href="#生成质量"><span>生成质量</span></a></h3><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">HumanEval Pass@1(正确率):</span>
504<span class="line"></span>
505<span class="line">GPT-3:      12.0%</span>
506<span class="line">Codex-001:  28.8%</span>
507<span class="line">Codex-002:  37.7%</span>
508<span class="line">GPT-4:      67.0%</span>
509<span class="line">GPT-4o:     70.0%</span>
510<span class="line">o1:         72.0%</span>
511<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="💡-架构设计的关键takeaways" tabindex="-1"><a class="header-anchor" href="#💡-架构设计的关键takeaways"><span>💡 架构设计的关键takeaways</span></a></h2><h3 id="核心创新" tabindex="-1"><a class="header-anchor" href="#核心创新"><span>核心创新</span></a></h3><ol><li><p><strong>代码特定优化</strong></p><ul><li>Tokenizer 识别代码结构</li><li>Attention 关注代码语义</li><li>训练数据精心筛选</li></ul></li><li><p><strong>多阶段训练</strong></p><ul><li>预训练 → 微调 → RLHF</li><li>通用能力 + 代码专精 + 人类对齐</li></ul></li><li><p><strong>推理优化</strong></p><ul><li>KV-Cache 加速生成</li><li>批处理提升吞吐</li><li>智能缓存降低延迟</li></ul></li></ol><h3 id="设计权衡" tabindex="-1">
511<a class="header-anchor" href="#设计权衡"><span>设计权衡</span></a></h3><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">准确性 vs 速度</span>
512<span class="line">  ↓</span>
513<span class="line">GPT-4 更准确但慢</span>
514<span class="line">GPT-4o 稍牺牲准确性但快很多</span>
515<span class="line"></span>
516<span class="line">规模 vs 成本</span>
517<span class="line">  ↓</span>
518<span class="line">更大模型效果更好</span>
519<span class="line">但训练和推理成本更高</span>
520<span class="line"></span>
521<span class="line">通用 vs 专精</span>
522<span class="line">  ↓</span>
523<span class="line">Codex 曾是独立模型</span>
524<span class="line">现在融入 GPT-4(通用模型)</span>
525<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="🎯-下一步" tabindex="-1"><a class="header-anchor" href="#🎯-下一步"><span>🎯 下一步</span></a></h2><p>深入理解了架构后,可以:</p>`,106)),a("ul",null,[a("li",null,[n[1]||(n[1]=s("📖 ",-1)),l(e,{to:"/ai-programming/codex/05-advanced-features.html"},{default:p(()=>[...n[0]||(n[0]=[s("05 - 高级功能与集成",-1)])]),_:1}),n[2]||(n[2]=s(" - MCP、Skills 等高级特性",-1))]),a("li",null,[n[4]||(n[4]=s("📖 ",-1)),l(e,{to:"/ai-programming/codex/07-optimization-tips.html"},{default:p(()=>[...n[3]||(n[3]=[s("07 - 性能优化技巧",-1)])]),_:1}),n[5]||(n[5]=s(" - 实用优化策略",-1))]),a("li",null,[n[7]||(n[7]=s("📖 ",-1)),l(e,{to:"/ai-programming/codex/06-best-practices.html"},{default:p(()=>[...n[6]||(n[6]=[s("06 - 最佳实践",-1)])]),_:1}),n[8]||(n[8]=s(" - 高效使用方法",-1))])]),n[12]||(n[12]=a("hr",null,null,-1)),a("p",null,[n[10]||(n[10]=s("👉 ",-1)),l(e,{to:"/ai-programming/codex/05-advanced-features.html"},{default:p(()=>[...n[9]||(n[9]=[s("下一章:05 - 高级功能与集成",-1)])]),_:1})])])}const k=i(u,[["render",r]]),b=JSON.parse('{"path":"/ai-programming/codex/04-architecture.html","title":"Codex 架构设计详解","lang":"zh-CN","frontmatter":{"title":"Codex 架构设计详解","description":"深入了解 OpenAI Codex 的技术架构、工作原理和优化机制","lang":"zh-CN"},"git":{"updatedTime":1766413539000,"contributors":[{"name":"wsyx","username":"","email":"[email protected]","commits":1}],"changelog":[{"hash":"6f88b92aa0bd0fb67a38a1ba536877d410aa38fb","time":1766413539000,"email":"[email protected]","author":"wsyx","message":"feat:文章结构优化"}]},"filePathRelative":"ai-programming/codex/04-architecture.md"}');export{k as comp,b as data};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.