模型 / 資料集
nndl/llm-beginner avatar
nndl/llm-beginner

llm-beginner:一本電子書加上六個手寫任務,把大模型到智能體的路拆成可自檢的六步

《大模型与智能体》电子书与 6 个编程任务:Transformer、mini-GPT、SFT/DPO、RAG、工具调用与编程智能体。

6,746 個 Star1,362 個 ForkPythonMIT

秒懂

它是什麼?
nndl/llm-beginner 把《大模型與智能體》電子書與六個編程任務放在同一個倉庫裡,任務一到任務六沿著 Transformer、mini-GPT、SFT/DPO、RAG、工具調用、編程智能體推進。它的核心設計不是給你一份可跑的程式,而是給你接口約定與自檢腳本,實作要自己寫在 src/ 下。
適合誰用?
這個倉庫適合已經會寫 PyTorch、想在中文語料上親手把 attention、RoPE、KV cache、LoRA、DPO、ReAct 迴圈各寫一遍的人,也適合拿它當課程作業的骨架。不適合想直接拿現成模型做產品的人,因為六個任務的 src/ 都是空的,你得自己填。
可以商用嗎?
可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 10 天前。
用什麼語言寫的?
主要是 Python(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

書與練習分開走,但共用同一條路線

倉庫裡有兩份東西。一份是邱錫鵬寫的《大模型與智能體》電子書,全書 17 章,分成共用基礎、大模型、智能體、邊界與未來四個部分,PDF 從 releases 的 book-pdf 標籤下載。另一份是六個編程任務,從 task-1-transformer 一路排到 task-6-coding-agent。README 說得很直白:書與練習可以獨立學習,練習需要 Python 與深度學習基礎,不需要先讀完系列其他教材。

這個安排解決的問題是路線斷裂。市面上的大模型教材常常停在原理,讀完知道注意力怎麼算,卻沒寫過一行。另一類課程直接叫你跑通一個框架範例,你改幾個超參數就交差,注意力矩陣長什麼樣沒看過。llm-beginner 的做法是每個任務都先手寫關鍵組件,再對照框架,README 把這條原則寫成「先吃透原理,再看工程上怎麼封裝」。

六個任務的建議用時加起來大約 16 到 18 週,任務六自己就佔 5 到 6 週。README 強調這是學習節奏建議,可以按基礎與實驗規模調整。它不是一門有截止日期的課,是一份可以按自己速度走的清單。

六個任務目錄長得一樣,自檢靠簽名對齊

每個任務目錄的結構是統一的,README 列得很清楚:requirements.txt 放依賴,data/download.py 下載資料與模型,eval/run.py 是自檢腳本,eval/tutor_prompt.md 是一段可以貼給大模型做代碼審查的提示詞。你的實作寫在該任務的 src/ 下,要按任務 README 的「實現約定」表列出的類別或函式簽名導出。

這裡有個容易踩的點:自檢腳本正是按這些簽名 import 你的程式再評測,簽名不對就跑不起來。這意味著你不能自由命名,也不能把邏輯拆成自己順手的模組結構。對已經有工程習慣的人來說這有點綁手,但換來的是自動評分,六個任務共用同一套判定方式。

自檢結果有三種狀態。通過表示契約滿足;跳過表示前置條件還沒就緒,例如模型、ckpt 或資料缺失,README 特別註明跳過不是錯誤,補齊後重跑即可;失敗表示實作與預期不符,結果裡帶 error 或具體指標。結構化結果寫入 eval/result.json,始終是 UTF-8,可以附在提交裡。

需要說清楚的是自檢的邊界。README 自己講了,自檢只驗證關鍵契約,例如 attention 數值正確性、召回率、任務成功率,它是「能不能跑對」的下限檢查,不替代各任務 README「實驗」裡的對比與消融。所以你就算全部通過,也不代表你理解了 head 數對準確率的影響。

從注意力熱圖到會改代碼的 agent

任務一叫你手寫 scaled dot-product attention、multi-head attention 和完整的 encoder block,用 padding mask 跑 ChnSentiCorp 中文情感分類,再用 causal mask 跑一遍 toy 語言模型為任務二預熱,最後用 matplotlib 畫出句子內部的注意力熱圖。實驗部分要求比較 head 數與層數對準確率的影響,以及移除 residual 或 LayerNorm 後訓練還能不能收斂。

任務二用 PyTorch 從零搭 decoder-only 模型,要求手寫簡化版 BPE tokenizer,明確說不用 tiktoken 或 sentencepiece,並整合 RoPE、實作 KV cache、寫出 greedy、top-k、top-p、temperature 四種採樣。資料分三檔:約 49KB 的 poetryFromTang.txt 讓你在五分鐘內跑通 pipeline,約 100MB 的 TinyStories 或其中文版 CPU 也能跑,再往上是 1GB 以上的 SkyPile-150B 子集,建議用 GPU。

任務三手寫 LoRA 並完成 SFT 與 DPO,下載 Qwen2.5-0.5B。任務四建檢索、重排與生成流程並評測問答品質,資料是 BGE 模型加 NNDL PDF,還有一個 gold_qa 校驗。任務五實作 ReAct 迴圈、工具調用與錯誤恢復,下載腳本會生成 10 題任務集與檢索夾具。任務六建一個能改代碼、跑測試並迭代的編程智能體,本地生成 toy-repo,加 --with-swebench 會額外下載 SWE-bench Lite 抽樣元數據。

這條線的設計意圖是連續的。任務一的 causal mask 是任務二的預熱,任務二的採樣策略是任務三微調後評估生成的前提,任務五的 ReAct 迴圈是任務六的骨架。單做其中一個也能跑,但跳著做會少掉一些伏筆。

環境準備與跑一次自檢的實際指令

Python 要求 3.10 以上,README 推薦 3.11 或 3.12。各任務相互獨立,可以共用一個環境,也可以每個任務單獨建 venv 或 conda。裝依賴是按任務來的:

pip install -r task-1-transformer/requirements.txt

下載與自檢的標準流程,README 以任務一為例:

cd task-1-transformer python data/download.py python eval/run.py

中間那一步是在 src/ 下寫好實作,結果寫入 eval/result.json。各任務的 download.py 帶不同參數,任務二可以指定 --dataset poetry|tinystories|skypile,預設是 poetry;任務四有 --skip-models,只下 PDF 並校驗 gold_qa;任務六有 --with-swebench。

國內下載不穩的話,README 給的做法是先設鏡像再下載:

export HF_ENDPOINT=https://hf-mirror.com

Windows PowerShell 寫成 $env:HF_ENDPOINT = "https://hf-mirror.com"。完全連不上 Hugging Face 時,多數資料與模型可以改用 ModelScope,具體提示在各 download.py 末尾。

有一個硬性約束必須記住:請在倉庫內執行 eval/run.py。它依賴倉庫根目錄的 _eval_harness.py,那是六個任務共用的執行殼。把單個任務目錄拷到倉庫外,自檢就無法 import,你會看到一堆與自己實作無關的錯誤。Windows 控制台的中文亂碼問題,README 說腳本已經用 sys.stdout.reconfigure 自動處理,不需要額外設定。

自檢通過不等於學會,跳過也不等於失敗

最大的限制寫在倉庫自己的說明裡:實現代碼由學習者在 src/ 中完成。這不是一個 clone 下來就能跑的專案,六個 src/ 目錄是空的,你得從頭寫。如果你的目的是找一份可用的 RAG 或 agent 實作拿去改,這個倉庫不提供,它提供的是要求、資料腳本、接口約定與自檢。

第二個限制是評分粒度。自檢驗證的是關鍵契約,例如 attention 的數值正確性、召回率、任務成功率。它能告訴你注意力算錯了,不能告訴你為什麼某個 head 學到了奇怪的東西。任務一要求畫注意力熱圖並解讀,這種事情沒有自動判分,只能自己看。

跳過狀態容易被誤讀。當模型、ckpt 或資料缺失時,該項顯示跳過,README 反覆強調這不是錯誤。問題是跳過和通過在最終計數上都會讓你覺得進度在走,如果沒有回頭補齊前置條件,你可能在一個從未真正驗證過的實作上繼續往下做任務。建議每次跑完自檢先看 result.json 裡跳過了哪幾項,而不是只看有沒有失敗。

第三個限制是前置能力。README 明說練習需要 Python 與深度學習基礎。任務六要 5 到 6 週,這段時間你要處理代碼修改、測試執行與迭代,沒有寫過測試的人會卡在與大模型無關的地方。

跟 nanoGPT 與 Annotated Transformer 的分工

任務二的參考清單第一項是 karpathy 的 nanoGPT,任務一的參考清單裡有 Harvard 的 The Annotated Transformer 與 Jay Alammar 的圖解文章。這幾個是直接的對照對象,差別在於範圍與語言。

nanoGPT 的目標是讓你在一個檔案裡讀完並跑通 GPT 的預訓練與微調,代碼極簡,資料以英文為主,位置編碼用絕對位置編碼,KV cache 不是它的重點。llm-beginner 的任務二在 nanoGPT 的基礎上加了兩件事:手寫 BPE tokenizer,以及整合 RoPE、實作 KV cache。README 明確寫出這是對實踐書 v2 的擴展,RoPE 超出 nanoGPT 使用的絕對位置編碼,KV cache 在實踐書 v2 裡只講不實現。

The Annotated Transformer 是一份帶註釋的筆記式實作,讀起來像論文逐段翻譯成程式碼,適合理解,但它不提供自檢腳本,也不要求你自己寫。llm-beginner 的任務一要求你手寫,然後用 ChnSentiCorp 跑中文分類,並用自檢驗證 attention 的數值。中文語料與可判分的自檢是它相對這類筆記的實際差異。

代價是自由度。nanoGPT 你可以隨意重構,llm-beginner 的簽名被自檢綁住。選哪個取決於你要的是理解還是可驗證的進度。

維護成本、授權與版本狀態

倉庫採 MIT 授權,寬鬆,可以fork、改作、商用,保留版權聲明即可。這對想把六個任務改編成課程作業的人是友善的。需要提醒的是,MIT 覆蓋的是倉庫裡的程式與文件,各任務下載的資料集與模型有各自的授權條款,例如 ChnSentiCorp、TinyStories、SkyPile-150B、Qwen2.5-0.5B、BGE,這些不在 MIT 範圍內,實際使用前要各自確認。這裡不構成法律意見。

維護狀態方面,倉庫未封存,最近一次推送時間是 2026-09-06,同一天發布了 book-pdf 這個 release,內容是 PDF 全書。README 說書稿處於出版籌備階段,內容隨修訂更新,這意味著 PDF 會變,你手上那份可能不是最新的,引用章節時最好記下載日期。

升級成本主要落在依賴與模型兩塊。各任務的 requirements.txt 是分開的,某個任務的依賴升版不會影響其他任務,但六個任務共用一個環境時,PyTorch 版本衝突是現實風險,分開建 venv 或 conda 環境比較穩。模型方面,任務三固定下載 Qwen2.5-0.5B,如果上游模型下架或改名,download.py 會失敗,此時自檢會顯示跳過而不是失敗,容易誤判。

文件本身沒有提供版本號或變更日誌,判斷某個任務是否改過,只能看該任務目錄的提交歷史。這是使用前值得自己確認的一件事。

編輯結論

這個倉庫適合已經會寫 PyTorch、想在中文語料上親手把 attention、RoPE、KV cache、LoRA、DPO、ReAct 迴圈各寫一遍的人,也適合拿它當課程作業的骨架。不適合想直接拿現成模型做產品的人,因為六個任務的 src/ 都是空的,你得自己填。動手前先確認三件事:Python 版本是否 3.10 以上、eval/run.py 是否在倉庫根目錄內執行(它依賴根目錄的 _eval_harness.py)、以及 Hugging Face 是否連得上,連不上就先 export HF_ENDPOINT=https://hf-mirror.com 或改用各 download.py 末尾提示的 ModelScope 路徑。

官方來源

  1. License: MIT
  2. nndl/llm-beginner on GitHub
  3. Project website
  4. README
  5. Releases
社群筆記

社群筆記