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">"function" â ["fun", "ction"] # åºäºå¸¸è§è¯é¢</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">"function" â ["function"] # ä¿æå®æ´å ³é®å</span> 88<span class="line">"getUserName" â ["get", "User", "Name"] # è¯å«é©¼å³°å½å</span> 89<span class="line">"user_name" â ["user_", "name"] # è¯å«èå½¢å½å</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 > 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">"""ä»£ç æ°æ®æ¸ æ´æµç¨"""</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">'language'</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">'quality_score'</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">'complexity'</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">'code'</span><span class="token punctuation">:</span> code<span class="token punctuation">,</span></span> 171<span class="line"> <span class="token string">'metadata'</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">"""代ç è´¨éè¯ä¼°"""</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">"def fibonacci(n):\\n if n <="</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">" 1"</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">"def fibonacci(n):\\n if n <= 1"</span></span> 215<span class="line">target <span class="token operator">=</span> <span class="token string">":"</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">"prompt"</span><span class="token operator">:</span> <span class="token string">"
221å建ä¸ä¸ªå½æ°ï¼è®¡ç®å表çå¹³åå¼"</span><span class="token punctuation">,</span></span> 222<span class="line"> <span class="token property">"completion"</span><span class="token operator">:</span> <span class="token string">"def calculate_average(numbers):\\n if not numbers:\\n return 0\\n return sum(numbers) / len(numbers)"</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">"""计ç®ä»£ç çå¥å±åæ°"""</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">"""å¤çç¨æ·è¾å ¥"""</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">"ä½ æ¯ä¸ä¸ªä¸ä¸ç Python å¼åè "</span></span> 283<span class="line">context <span class="token operator">=</span> <span class="token string">"# ç°æä»£ç \\nclass User:\\n pass"</span></span> 284<span class="line">user_input <span class="token operator">=</span> <span class="token string">"
284为 User 类添å ä¸ä¸ªéªè¯é®ç®±çæ¹æ³"</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">"""</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">"""</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">"""å°ææ¬è½¬æ¢ä¸º token"""</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">"def getUserName():"</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"># "def"</span></span> 316<span class="line"> TOKEN_GET<span class="token punctuation">,</span> <span class="token comment"># "get"</span></span> 317<span class="line"> TOKEN_USER<span class="token punctuation">,</span> <span class="token comment"># "User"</span></span> 318<span class="line"> TOKEN_NAME<span class="token punctuation">,</span> <span class="token comment"># "Name"</span></span> 319<span class="line"> TOKEN_LPAREN<span class="token punctuation">,</span> <span class="token comment"># "("</span></span> 320<span class="line"> TOKEN_RPAREN<span class="token punctuation">,</span> <span class="token comment"># ")"</span></span> 321<span class="line"> TOKEN_COLON <span class="token comment"># ":"</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">"""æ ¹æ®æ¸©åº¦éæ ·ä¸ä¸ä¸ª token"""</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">"""æ ¸å¿éæ ·ï¼åªèè累计æ¦ç >= p ç token"""</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">></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">"""夿æ¯å¦åæ¢çæ"""</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">>=</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">"""æ£æ¥ä»£ç 忝å¦å®æ´"""</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">"""Key-Value ç¼åä¼å"""</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">"""</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"> """</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">'key'</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">'value'</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">'key'</span><span class="token punctuation">:</span> key<span class="token punctuation">,</span> <span class="token string">'value'</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">"""æ¹éæ¨ç"""</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">"""æ¹éçæå¤ä¸ªè¯·æ±"""</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">"""模åéåï¼éä½ç²¾åº¦ä»¥æåé度"""</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"># 精度æå¤±ï¼< 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">"""ååºç¼å"""</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">"""è·åç¼åçååº"""</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">'timestamp'</span><span class="token punctuation">]</span> <span class="token operator"><</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">'response'</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">"""è®¡ç®æç¤ºè¯çåå¸ï¼è¯ä¹ç¸ä¼¼æ§ï¼"""</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"># 常è§è¯·æ±ï¼å¦"hello world"ï¼ï¼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.