RAG(檢索增強生成)是結合檢索與生成式 AI 的技術框架。核心邏輯是先從外部知識庫精準檢索相關信息,再將其作為上下文輸入大模型生成回答。技術上依賴檢索引擎(如向量數據庫、BM25)、大語言模型(如 GPT、LLaMA)及數據預處理技術。通過檢索增強,解決大模型知識滯后、幻覺問題,提升回答準確性。應用廣泛,涵蓋智能客服、醫療問答、法律檢索、教育輔導等場景,能基于特定領域知識提供精準、可控的生成內容。
wow-RAG 是 Datawhale 推出的 RAG 技術實踐項目,網址:datawhalechina/wow-rag: A simple and trans-platform rag framework and tutorial ? ?https://github.com/datawhalechina/wow-rag
在 RAG(檢索增強生成)的文檔管理中,核心流程圍繞 “文檔預處理 - 存儲 - 檢索優化” 展開:首先對原始文檔進行加載與清洗,去除冗余信息并統一格式;接著通過分塊策略將長文檔拆解為語義連貫的小片段(如按句子、段落或主題分割),同時提取元數據(如來源、時間);隨后為每個文檔片段生成向量嵌入,借助向量數據庫將嵌入向量與文本片段關聯存儲,構建可高效檢索的索引;最后結合動態更新機制,支持新增文檔的增量入庫、過時文檔的刪除或修正,并通過調整分塊粒度、嵌入模型參數等方式持續優化檢索準確性,確保后續檢索時能快速匹配到與用戶 query 語義相關的文檔片段。
查看index下的所有文檔
print(index.docstore.docs)
print(index.docstore.docs) 的輸出結果是一個 字典,其中包含了通過 VectorStoreIndex.from_documents() 處理后存儲在文檔倉庫(docstore)中的所有文檔或節點(Node)數據。字典的 鍵是文檔 / 節點的唯一 ID(如 doc_id 或 node_id),值是對應的文檔 / 節點對象,包含文本內容、元數據、哈希值等核心信息。
輸出中每個 Document 或 Node 對象的關鍵信息包括:
id_ ? 唯一標識符,用于索引和檢索;
text ? 經過分塊、清洗后的文檔內容片段;
metadata ? 文檔的附加信息(如來源、頁碼、時間等),輔助檢索過濾;
hash ? 文檔內容的哈希值,用于檢測重復或更新。
輸出:
{'7601e3d4-10f2-4578-a740-3844ea5347ab': TextNode(id_='7601e3d4-10f2-4578-a740-3844ea5347ab', embedding=None, metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='175c70bd-eff9-4743-bd70-9174ee86dbed', node_type='4', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='fc891f08c5725428a6ea72c71b389cb0a718156509c4b2a4c42db880268b6595'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='2db319b2-7b0c-4c79-9be4-a3663819828c', node_type='1', metadata={}, hash='b12dc0fd22c420bcfefb4bf02ea246dc75127380caad1c4c69d8547ff3c6a6f5')}, metadata_template='{key}: {value}', metadata_separator='\n', text='總的來說,大模型可以分為常規大模型和推理型大模型,我們大多數人口中的大模型一般都是指常規大模型,本文重點介紹推理型大模型,并盡可能將大模型的推理過程解釋清楚,最后再來說說deepseek為什么能成功,用了哪些技術。\r\n\r\n什么是推理型大模型\r\n與常規 LLM 相比,推理型 LLM 在回答問題前,往往會先將問題拆解為更小的步驟(通常稱為推理步驟或思考過程),也可以說是思維鏈COT。\r\n\r\n\r\n普通大模型直接給出答案,沒有給出求解過程。推理型大模型會將推理過程和答案一起輸出。那么,“思考過程”、“推理步驟”或“思維鏈”(CoT, Chain-of-Thought)究竟意味著什么?\r\n\r\n\r\n我在之前的復旦大學文章中也提到過過思維鏈,可以說某種程度上,思維鏈直接決定了大模型的推理規劃能力:\r\n\r\n\r\n愛吃牛油果的璐璐:細說復旦大學,斯坦福大學智能代理AI-Agent(二更)\r\n280 贊同 · 16 評論文章\r\n\r\n愛吃牛油果的璐璐:大模型中的思維鏈、思維樹、思維圖\r\n19 贊同 · 2 評論文章\r\n雖然我們可以探討大模型是否真的能像人類那樣思考,但這些步驟將整個過程拆解為更小,且結構化的推理。推理型大模型不僅學習“回答什么”,更學習“如何回答”。\r\n\r\n\r\n為了理解推理型大模型的構建過程,我們首先需要探討一個范式轉變。\r\n\r\nTrain-time compute 到 Test-time compute\r\n大模型從關注訓練階段的擴展(訓練時計算)轉向關注推理階段(測試時計算),下面對兩者分別進行介紹。\r\n\r\n訓練時計算:Train-time compute\r\n在 2024 年上半年之前,為了提升大模型在預訓練階段的性能,開發者通常會增加以下幾個方面的規模:\r\n\r\n? 模型參數(parameters)\r\n\r\n? 數據集(tokens )\r\n\r\n? 計算量(FLOPs )\r\n\r\n這三者合稱為訓練時計算(train-time compute),它體現了預訓練數據作為“ AI 之燃料”的理念。基本上,預訓練投入越大,最終得到的模型就會越出色。\r\n\r\n\r\n訓練時計算不僅包括訓練期間所需的計算量,還涵蓋了微調時所需的計算量。\r\n\r\n\r\n長期以來,這些因素一直是提升 LLMs 性能的關鍵。研究人員通過各種 Scaling Law 探討模型規模(包括計算量、數據集大小和模型參數數量)與模型性能之間的關系。這些定律屬于所謂的“冪律”:某一變量(例如計算量)的增加會導致另一變量(例如性能)按比例發生變化。\r\n\r\n\r\n通常,這些關系會在對數-對數坐標系下展示(呈現直線),以突出計算量的大幅增加。', mimetype='text/plain', start_char_idx=0, end_char_idx=1103, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), '2db319b2-7b0c-4c79-9be4-a3663819828c': TextNode(id_='2db319b2-7b0c-4c79-9be4-a3663819828c', embedding=None, metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='175c70bd-eff9-4743-bd70-9174ee86dbed', node_type='4', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='fc891f08c5725428a6ea72c71b389cb0a718156509c4b2a4c42db880268b6595'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='7601e3d4-10f2-4578-a740-3844ea5347ab', node_type='1', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='32cfc924bc4fef294e6a4d6fdf27b07c2fd8ac2341c4c203b59c3d9e2cb658c2'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='0d515c1f-5c01-45a0-8ecb-fbb2644dfcf8', node_type='1', metadata={}, hash='f4b3bad6187a5829f41b2fbabb5986885799dcfcc242ecbe51050f5e16a93cba')}, metadata_template='{key}: {value}', metadata_separator='\n', text='長期以來,這些因素一直是提升 LLMs 性能的關鍵。研究人員通過各種 Scaling Law 探討模型規模(包括計算量、數據集大小和模型參數數量)與模型性能之間的關系。這些定律屬于所謂的“冪律”:某一變量(例如計算量)的增加會導致另一變量(例如性能)按比例發生變化。\r\n\r\n\r\n通常,這些關系會在對數-對數坐標系下展示(呈現直線),以突出計算量的大幅增加。最為知名的規模定律包括“Kaplan 定律”和“Chinchilla 定律”。這些定律能大致說明,隨著計算量、token 數量和參數數量的增加,模型性能也會相應提升。\r\n\r\n\r\n(圖片來自《Scaling laws for neural language models》)展示了模型性能如何隨著不同計算指標(如更長的訓練時間、數據集規模和參數數量)的增長而提高。這些定律也表明,為了獲得最佳性能,必須同步擴展這三個因素。Kaplan 定律指出,在固定計算量的前提下,擴大模型規模通常比增加數據量更為有效;而 Chinchilla 定律則認為,模型規模和數據量同樣重要。\r\n\r\n然而,在 2024 年期間,雖然計算量、數據集規模和模型參數數量持續增長,但其帶來的性能提升卻呈現出邊際遞減的趨勢。\r\n\r\n\r\n正如這些冪律所揭示的那樣,隨著規模的不斷擴大,收益也會逐步遞減。這就引發了一個問題:“我們是否已經遇到了瓶頸?”當然沒有,辦法總比困難多嘛,也自然而然的引出了測試時計算這一技術。\r\n\r\n測試時計算:Test-time Compute\r\n增加訓練時計算的高昂成本促使人們轉而關注另一種方法——即測試時計算(Test-time Compute)。與不斷增加預訓練成本不同,測試時計算允許模型在推理過程中“多思考一會兒”。\r\n\r\n\r\n非推理型模型,通常只輸出答案,省略“推理”步驟,如下圖所示:\r\n\r\n\r\n而推理型模型則會使用更多的 tokens,通過系統性的思考過程推導出答案:\r\n\r\n\r\n這一思路的核心在于:要 LLM 花費更多計算資源來生成更好的答案。若所有增加的計算資源都用在生成最終答案上,實際效率不高;但若將新增的計算資源用在提前生成包含額外信息、關系以及新思路的 token 上,則模型最終答案的質量會高得多。\r\n\r\n換句話說,與其讓模型直接把所有“算力”都投入到“一次性生成最終答案”,不如在生成答案之前先產生一些中間思考或輔助信息(tokens),再在此基礎上輸出答案。這樣會帶來更高質量、更準確的結果,盡管過程看似生成的文本更多、消耗的算力更大,但實際卻更高效,因為減少了錯誤或淺層回答的概率,從而節省了后續反復驗證或修改的成本。', mimetype='text/plain', start_char_idx=925, end_char_idx=2027, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), '0d515c1f-5c01-45a0-8ecb-fbb2644dfcf8': TextNode(id_='0d515c1f-5c01-45a0-8ecb-fbb2644dfcf8', embedding=None, metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='175c70bd-eff9-4743-bd70-9174ee86dbed', node_type='4', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='fc891f08c5725428a6ea72c71b389cb0a718156509c4b2a4c42db880268b6595'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='2db319b2-7b0c-4c79-9be4-a3663819828c', node_type='1', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='091944a0268f207c7dfb2b74f64cd129e2b96a775f3ccad6a1f43d4c23a6c652'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='48567331-b35c-40f0-b63a-08a8cf96b423', node_type='1', metadata={}, hash='7d7ea952a1a237c6b591e674e262f89fb6f2ed6053142cfe6c26a6aa1e6ff0f0')}, metadata_template='{key}: {value}', metadata_separator='\n', text='換句話說,與其讓模型直接把所有“算力”都投入到“一次性生成最終答案”,不如在生成答案之前先產生一些中間思考或輔助信息(tokens),再在此基礎上輸出答案。這樣會帶來更高質量、更準確的結果,盡管過程看似生成的文本更多、消耗的算力更大,但實際卻更高效,因為減少了錯誤或淺層回答的概率,從而節省了后續反復驗證或修改的成本。\r\n\r\n\r\n規模定律scaling law\r\n與訓練時計算相比,測試時計算的規模定律相對較新。其中有兩個有趣的研究方向,將測試時計算的規模定律與訓練時計算聯系起來。\r\n\r\n首先,OpenAI 的一篇帖子展示了測試時計算可能遵循與訓練時計算相同的擴展趨勢。\r\n\r\n\r\n圖示中添加了紅色虛線, OpenAI 認為這一新范式可能屬于測試時計算。\r\n\r\nOpenAI 認為隨著測試時計算領域的不斷發展,可能會出現一種向測試時計算擴展的范式轉變。\r\n\r\n其次,一篇題為《Scaling Scaling Laws with Board Games》的有趣論文,探索了 AlphaZero,并在不同的計算量下訓練它以玩 Hex 游戲。\r\n\r\n\r\n圖示展示了他們如何構造不同程度的訓練時計算和測試時計算。其研究結果表明,訓練時計算與測試時計算之間存在緊密聯系。每一條虛線都展示了達到特定 ELO 分數所需的最小計算量。\r\n\r\n\r\n隨著測試時計算擴展得像訓練時計算一樣,一個新的范式正逐步形成,即利用更多測試時計算來構建“推理”模型。通過這種范式轉變,這些“推理”模型不再純粹依賴訓練時計算(預訓練和微調),而是在訓練和推理之間取得平衡。\r\n\r\n\r\n測試時計算甚至可以在思考時間上實現擴展,如下圖所示:\r\n\r\n\r\n“長度擴展”也是我們在深入探討 DeepSeek-R1 時將會探討的一個內容。\r\n\r\n測試時計算的類別\r\n如 DeepSeek R-1 和 OpenAI-o1 這樣推理模型的巨大成功表明,測試時計算不僅僅是“多思考一會兒”這么簡單。\r\n\r\n測試時計算可以涵蓋多種技術,包括思維鏈、修正答案、回溯、采樣等等。\r\n\r\n大致而言,這些技術可以分為兩大類:\r\n\r\n1. Search against Verifiers:利用驗證器進行搜索(采樣生成多個答案并挑選最佳答案)\r\n\r\n2.', mimetype='text/plain', start_char_idx=1868, end_char_idx=2813, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), '48567331-b35c-40f0-b63a-08a8cf96b423': TextNode(id_='48567331-b35c-40f0-b63a-08a8cf96b423', embedding=None, metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='175c70bd-eff9-4743-bd70-9174ee86dbed', node_type='4', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='fc891f08c5725428a6ea72c71b389cb0a718156509c4b2a4c42db880268b6595'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='0d515c1f-5c01-45a0-8ecb-fbb2644dfcf8', node_type='1', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='927234300d1f955466fb71fcf65e8c5323b5e7437bcf0a72aee2a5c1451d1d79'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='1003dfc4-ae7f-4909-83c8-5c049689613d', node_type='1', metadata={}, hash='9d26742453510558b469f5b02a13b1cb42a888fa4b63d79b8202d7cde06e6071')}, metadata_template='{key}: {value}', metadata_separator='\n', text='測試時計算的類別\r\n如 DeepSeek R-1 和 OpenAI-o1 這樣推理模型的巨大成功表明,測試時計算不僅僅是“多思考一會兒”這么簡單。\r\n\r\n測試時計算可以涵蓋多種技術,包括思維鏈、修正答案、回溯、采樣等等。\r\n\r\n大致而言,這些技術可以分為兩大類:\r\n\r\n1. Search against Verifiers:利用驗證器進行搜索(采樣生成多個答案并挑選最佳答案)\r\n\r\n2. Modifying Proposal Distribution:修改Proposal(個人不太喜歡提議這個翻譯,總感覺較英文差點意思)分布(訓練過的“思考”過程)\r\n\r\n\r\n兩種方法的側重點不同,利用驗證器進行搜索側重于輸出,而修改提議分布則側重于輸入。\r\n\r\n\r\n接下來,將探討兩種類型的驗證器:\r\n\r\n? 結果獎勵模型(Outcome Reward Models, ORM)\r\n\r\n? 過程獎勵模型(Process Reward Models, PRM)\r\n\r\n結果獎勵模型 ORM\r\nORM只對結果進行評判,而不關心背后的過程:\r\n\r\n\r\n相反,過程獎勵模型 PRM 不僅評判結果,還會考量生成結果的過程(即“推理”過程)。\r\n\r\n過程獎勵模型PRM\r\n\r\n為了使 PRM 的推理步驟更具體,我們將推理展開看:\r\n\r\n\r\n可以看到:PRM 對步驟 2 打了一個最低分,說明步驟 2 是一個壞的推理步驟。\r\n\r\n接下來探討它們在各種驗證技術中的應用。\r\n\r\nSearch against Verifiers\r\n測試時計算的首個主要方法是利用驗證器進行搜索。這個過程通常包括兩個步驟:\r\n\r\n1. 生成多個推理過程及其對應的答案。\r\n\r\n2. 然后,利用驗證器(即獎勵模型)對生成的輸出進行評分。\r\n\r\n\r\n通常,驗證器也是一個經過微調的 LLM,用于評判大模型的結果(ORM)或大模型的思考過程(PRM)。\r\n\r\n使用驗證器的一個主要優勢在于,無需重新訓練或微調用于回答問題的 LLM。\r\n\r\n多數投票(Majority Voting)\r\n最直接的方法其實是不使用任何獎勵模型或驗證器,而是采用多數投票。\r\n\r\n具體做法是讓模型生成多個答案,然后選取出現次數最多的那個作為最終答案。\r\n\r\n\r\n這種方法也被稱為 自洽性(self-consistency),以強調需要生成多個答案及其推理步驟。\r\n\r\nBest-of-N 樣本\r\n第一種真正使用到驗證器的方法被稱為 Best-of-N 樣本。它的核心思路是:生成 N 個答案樣本,然后使用驗證器(一般是結果獎勵模型,ORM)來對每個答案進行判斷。\r\n\r\n1. 生成多個答案\r\n\r\n通常由一個大模型(也經常被稱為“Proposer”)在較高或多種溫度設定下生成多個答案樣本。\r\n\r\n\r\n2.', mimetype='text/plain', start_char_idx=2618, end_char_idx=3784, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), '1003dfc4-ae7f-4909-83c8-5c049689613d': TextNode(id_='1003dfc4-ae7f-4909-83c8-5c049689613d', embedding=None, metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='175c70bd-eff9-4743-bd70-9174ee86dbed', node_type='4', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='fc891f08c5725428a6ea72c71b389cb0a718156509c4b2a4c42db880268b6595'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='48567331-b35c-40f0-b63a-08a8cf96b423', node_type='1', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='dab9d5a9804ccde77aae7da82fe19b02d117eb4aeb86375d560b931e44df9e57'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='de3af69b-5b14-4e1c-82c2-573807e3c0ff', node_type='1', metadata={}, hash='af4bf4bc0882b658cb247252603c38fceeb90b20596e3a1c04b7fa7a5e969381')}, metadata_template='{key}: {value}', metadata_separator='\n', text='生成多個答案\r\n\r\n通常由一個大模型(也經常被稱為“Proposer”)在較高或多種溫度設定下生成多個答案樣本。\r\n\r\n\r\n2. 評分并選取最佳答案\r\n\r\n將每個答案輸入給結果獎勵模型(ORM),為其打分,并選出分數最高的那個答案。\r\n\r\n\r\n如果想評估的不只是答案,還包括推理過程,則可以使用 過程獎勵模型(PRM)。它會判斷每個推理步驟的質量,并選取具有最高總權重的候選答案。\r\n\r\n\r\n基于這兩類驗證器,我們還可以讓獎勵模型(RM)分別對每個答案候選進行加權,然后選出綜合得分最高的那一個,這種方法被稱為 加權 Best-of-N 樣本(Weighted Best-of-N samples)。\r\n\r\n\r\n使用過程獎勵模型的 Beam Search\r\n在生成答案和中間推理步驟時,我們可以將上述過程進一步擴展到 Beam Search。\r\n\r\n在 Beam Search 中,會對多個推理步驟進行采樣,并由過程獎勵模型(PRM)進行打分(類似于 Tree of Thought 的思路)。在此過程中,我們會追蹤評分最高的若干條“beam”,例如前三名。\r\n\r\n\r\n這種方法能讓我們快速終止那些得分低、不太可能帶來理想結果的推理路徑,從而將計算資源集中在更有用的推理路線。\r\n\r\n最終產生的答案,結合之前的 Best-of-N 方法進行加權或篩選,獲得最高分答案。\r\n\r\n蒙特卡洛樹搜索(Monte Carlo Tree Search)\r\n蒙特卡洛樹搜索(MCTS) 是在搜索樹中高效尋找最優路徑的一種方法,通常包括以下四個步驟:\r\n\r\n1. Selection:根據特定公式(例如上置信界 UCB)選擇當前樹中的某個葉子節點。\r\n\r\n2. Expand:在該葉子節點處創建額外的子節點(新的推理步驟)。\r\n\r\n3. Rollouts:對新生成的節點進行若干次隨機擴展,直到到達最終答案。\r\n\r\n4.', mimetype='text/plain', start_char_idx=3720, end_char_idx=4522, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), 'de3af69b-5b14-4e1c-82c2-573807e3c0ff': TextNode(id_='de3af69b-5b14-4e1c-82c2-573807e3c0ff', embedding=None, metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='175c70bd-eff9-4743-bd70-9174ee86dbed', node_type='4', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='fc891f08c5725428a6ea72c71b389cb0a718156509c4b2a4c42db880268b6595'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='1003dfc4-ae7f-4909-83c8-5c049689613d', node_type='1', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='c1b0eed835d53ded34491c3a475ac26996c8c4fb06201b3ab91cd9297b50eee1'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='96c385d2-8703-4636-84de-21c9be129a97', node_type='1', metadata={}, hash='9b0cf263fb45fb1b28abf8f1be2330a2d5d028b39f87b59310995c7d9147772d')}, metadata_template='{key}: {value}', metadata_separator='\n', text='Selection:根據特定公式(例如上置信界 UCB)選擇當前樹中的某個葉子節點。\r\n\r\n2. Expand:在該葉子節點處創建額外的子節點(新的推理步驟)。\r\n\r\n3. Rollouts:對新生成的節點進行若干次隨機擴展,直到到達最終答案。\r\n\r\n4. Backprop:將模擬中獲得的分數或獎勵向上更新到父節點。\r\n\r\n這四個步驟的目標是不斷擴大最優推理路徑的同時,兼顧對其他潛在路徑的探索,即在“探索”與“利用”之間取得平衡。\r\n\r\n節點的選擇和評分通常可參考下圖所示的公式或方法來執行:\r\n\r\n\r\n在選擇要進一步探索的推理步驟時,不一定總是選擇當前看起來最佳的路徑,這樣有助于避免過早收斂。\r\n\r\n具體實現中,選中一個節點后,可以對其進行擴展(生成新的推理步驟),再使用適當的溫度采樣來生成多個變體。\r\n\r\n\r\n隨后,我們會對某一分支進行多次模擬(rollout),直到生成完整的答案。\r\n\r\n這些 rollouts 可依據推理過程(PRM)、結果質量(ORM),或兩者結合來進行評估并得到分數。\r\n\r\n最后,將這些得分回溯更新到父節點,然后繼續進行新的選擇(selection),周而復始,持續改進搜索過程。\r\n\r\n\r\n修改提議分布 (Modifying Proposal Distribution)\r\n讓大模型進行推理的第二大類方法稱為“修改提議分布”。與利用驗證器(著重輸出)來搜索正確推理步驟不同,這種方法會訓練模型主動生成更優質的推理步驟(著重輸入)。換句話說,我們會對用于采樣(Completion/Thought/Tokens)的分布進行修改。試想,我們有一個問題,以及一個用于從中采樣的 tokens 的分布。常見的策略是選取得分最高的 token:\r\n\r\n\r\n但注意在上方示意圖中,有些 tokens 被標記成紅色——這些 tokens 會更傾向于帶來推理過程:\r\n\r\n\r\n盡管“貪婪”地選擇得分最高的 token 并不一定錯誤,但如果某些 token 指向了更詳細的推理步驟,往往可以得到更高質量的答案。\r\n\r\n當我們修改提議分布(即 token 的概率分布)時,實質上就是對模型的 token 排序進行重新評估,使得“推理” token 被選中的概率更大:\r\n\r\n\r\n從概念上說,修改提議分布的方法可以分成兩類:\r\n\r\n1. 通過 Prompt Engineering 來更新提示\r\n\r\n2. 訓練模型更多地關注推理 token 或推理過程\r\n\r\nPrompting\r\n在 Prompt Engineering 中,我們通過更新提示來改善輸出,同時也會引導模型顯式或隱式地展示之前提到的“推理過程”。\r\n\r\n要通過 Prompt 來改變提議分布,我們可以給模型提供示例(即“上下文學習”),從而誘導它生成更具推理傾向的回答:\r\n\r\n\r\n如果不想提供完整示例,也可以通過簡單的一句話來指示模型,例如“Let’s think step-by-step”,從而讓模型在回答之前先做推理拆解:\r\n\r\n\r\n不過需要注意:模型本身并不一定“真正學會”遵循這個過程。', mimetype='text/plain', start_char_idx=4394, end_char_idx=5686, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), '96c385d2-8703-4636-84de-21c9be129a97': TextNode(id_='96c385d2-8703-4636-84de-21c9be129a97', embedding=None, metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='175c70bd-eff9-4743-bd70-9174ee86dbed', node_type='4', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='fc891f08c5725428a6ea72c71b389cb0a718156509c4b2a4c42db880268b6595'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='de3af69b-5b14-4e1c-82c2-573807e3c0ff', node_type='1', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='e670fdda69b7638a9f3f998133b042fdf895d6fe3e0889ad25c559ac774c2183'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='de04124e-49be-4503-ab1c-a0a61d78d97e', node_type='1', metadata={}, hash='7eeb3b0eecca43eea8d4540ae40f97de21c036d3060b749cdb7c305c9a55173e')}, metadata_template='{key}: {value}', metadata_separator='\n', text='要通過 Prompt 來改變提議分布,我們可以給模型提供示例(即“上下文學習”),從而誘導它生成更具推理傾向的回答:\r\n\r\n\r\n如果不想提供完整示例,也可以通過簡單的一句話來指示模型,例如“Let’s think step-by-step”,從而讓模型在回答之前先做推理拆解:\r\n\r\n\r\n不過需要注意:模型本身并不一定“真正學會”遵循這個過程。此外,這種方法是靜態、線性的,缺少自我修正機制。一旦模型開始的推理過程出現錯誤,它往往會沿著這個錯誤的思路繼續下去,而不進行修正。\r\n\r\nSTaR:Self-Taught Reasoner\r\n除了提示工程,另一個思路是讓模型通過“學習”來進行推理,即讓模型因生成相應的推理步驟而獲得獎勵。此類方法通常需要大量的推理數據和強化學習,以在訓練中鼓勵某些行為。\r\n\r\n一個頗具爭議的方法是 STaR,即 Self-Taught Reasoner。STaR 會讓 LLM 生成自身的推理數據,并將這些推理作為微調的訓練輸入。\r\n\r\n模型先在步驟 (1)中生成推理步驟和答案。如果答案正確 (2a),則將該推理過程和最終答案一起加入到三元組數據集中 (3a),用于后續的監督微調 (5)。這個過程如下圖所示:\r\n\r\n\r\n如果模型給出的答案是錯誤的 (2b),則為模型提供一個“提示”(正確答案 3b),讓它去推理為什么這個答案才是正確的 (4b)。模型最終的推理過程同樣會被加入到相同的三元組數據集中,用于監督微調 (5)。這個過程如下圖所示:\r\n\r\n\r\n在這一過程中(以及許多其他修改提議分布的方法中),我們都會顯式地教模型去“遵循”我們示范的推理步驟。\r\n\r\n換句話說,我們可以通過監督微調來決定模型“應該怎樣”進行推理。\r\n\r\nSTaR 的完整流程相當有趣,因為它會自動生成合成訓練示例。正如我們會在后續討論 DeepSeek R1 時看到的,使用合成訓練示例是將推理過程蒸餾給其他模型的一種絕佳方式。\r\n\r\nDeepSeek-R1\r\n在推理模型領域,一項重大的發布是 DeepSeek-R1。這是一個開源模型,與 OpenAI 的 o1 推理模型直接競爭,并在業界產生了重大影響。\r\n\r\nDeepSeek 團隊通過多種技術手段,成功地將推理能力巧妙融入到其基礎模型(DeepSeek-V3-Base)中。我在之前的文章中也介紹了DeepSeek的核心概念,大家也可以根據需要進行查看:\r\n\r\n愛吃牛油果的璐璐:(萬字長文)手把手教你認識學會 DeepSeek,掌握核心概念\r\n\r\n值得注意的是,在這一過程中并未使用任何驗證器;與使用監督微調來提煉推理能力相比,DeepSeek 更加重視強化學習(RL)。', mimetype='text/plain', start_char_idx=5514, end_char_idx=6637, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), 'de04124e-49be-4503-ab1c-a0a61d78d97e': TextNode(id_='de04124e-49be-4503-ab1c-a0a61d78d97e', embedding=None, metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='175c70bd-eff9-4743-bd70-9174ee86dbed', node_type='4', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='fc891f08c5725428a6ea72c71b389cb0a718156509c4b2a4c42db880268b6595'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='96c385d2-8703-4636-84de-21c9be129a97', node_type='1', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='c8d20d6e56694e9409ad23670d26acff62068326a36a6810d27ad98b99ff4c19'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='ac42e4d1-bce1-4a45-8cd5-6bb567effd10', node_type='1', metadata={}, hash='1ec237657830554c65eeacccd3237f068397158cf68ecfe91fa2d4171c73eec0')}, metadata_template='{key}: {value}', metadata_separator='\n', text='DeepSeek 團隊通過多種技術手段,成功地將推理能力巧妙融入到其基礎模型(DeepSeek-V3-Base)中。我在之前的文章中也介紹了DeepSeek的核心概念,大家也可以根據需要進行查看:\r\n\r\n愛吃牛油果的璐璐:(萬字長文)手把手教你認識學會 DeepSeek,掌握核心概念\r\n\r\n值得注意的是,在這一過程中并未使用任何驗證器;與使用監督微調來提煉推理能力相比,DeepSeek 更加重視強化學習(RL)。\r\n\r\n接下來,讓我們深入探究他們是如何為模型訓練出推理能力的。\r\n\r\nDeepSeek-R1 Zero 的推理機制\r\n在通往 DeepSeek-R1 的道路上,有一個實驗性模型作出了關鍵貢獻,名為 DeepSeek-R1 Zero。\r\n\r\n它基于 DeepSeek-V3-Base 而來,但并沒有采用針對大量推理數據的監督微調,而是僅通過強化學習(RL)來激發模型的推理行為。\r\n\r\n為此,他們設計了一個非常簡單直觀的提示(Prompt),類似于系統提示,貫穿于整個Pipeline:\r\n\r\n\r\n可以看到,雖然提示中明確要求在 <think> 標簽內寫出推理過程,但并未對推理過程的具體形式做任何規定。\r\n\r\n強化學習階段\r\n在強化學習階段,DeepSeek基于規則設計了兩類獎勵:\r\n\r\n1. 準確度獎勵(Accuracy rewards):通過測試答案的正確性來給予獎勵。\r\n\r\n2.', mimetype='text/plain', start_char_idx=6429, end_char_idx=7032, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), 'ac42e4d1-bce1-4a45-8cd5-6bb567effd10': TextNode(id_='ac42e4d1-bce1-4a45-8cd5-6bb567effd10', embedding=None, metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='175c70bd-eff9-4743-bd70-9174ee86dbed', node_type='4', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='fc891f08c5725428a6ea72c71b389cb0a718156509c4b2a4c42db880268b6595'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='de04124e-49be-4503-ab1c-a0a61d78d97e', node_type='1', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='6b5b23b0c939ad5a06c77fae3b7e677d53c87384fa3a41bd275b5f7c618332bc'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='a52e1285-b9f7-40aa-88b9-7849aa151697', node_type='1', metadata={}, hash='c332dac398e02d00ae38f2394e441b3bd87d98a479c9da51c34dcfafc63a067c')}, metadata_template='{key}: {value}', metadata_separator='\n', text='為此,他們設計了一個非常簡單直觀的提示(Prompt),類似于系統提示,貫穿于整個Pipeline:\r\n\r\n\r\n可以看到,雖然提示中明確要求在 <think> 標簽內寫出推理過程,但并未對推理過程的具體形式做任何規定。\r\n\r\n強化學習階段\r\n在強化學習階段,DeepSeek基于規則設計了兩類獎勵:\r\n\r\n1. 準確度獎勵(Accuracy rewards):通過測試答案的正確性來給予獎勵。\r\n\r\n2. 格式獎勵(Format rewards):對使用 <thinking> 和 <answer> 標簽的行為給予獎勵。\r\n\r\n他們所使用的 RL 算法名為 Group Relative Policy Optimization (GRPO) 。接下來介紹GRPO的核心思路。\r\n\r\nGRPO\r\n對于那些導致答案正確的所有決策——無論是特定的 token 序列還是推理步驟——都會在訓練中獲得使其更有可能被采納的權重調整。\r\n\r\n而對于那些導致答案錯誤的所有決策,則會在訓練中獲得使其更不可能被采納的權重調整。\r\n\r\n\r\n有意思的是,該提示并沒有給出 <think> 過程應當如何呈現的示例,只是要求在 <think> 標簽內進行思考,無需更多細節。\r\n\r\n通過向模型提供與思維鏈(Chain-of-Thought)相關的間接獎勵,模型逐漸自主學會:當推理過程更長、更復雜時,答案更可能是正確的。\r\n\r\n\r\n這張圖非常重要,因為它進一步印證了從訓練時計算到測試時計算的范式轉變。當這些模型生成更長的思考序列時,實際上就加大了測試時計算的投入。\r\n\r\n通過這樣的訓練流程,研究人員發現,模型能夠自發地探索出最優的鏈式推理模式,并展現出如自我反思、自我驗證等高級推理能力。\r\n\r\n不過,這種做法仍存在一個顯著缺陷:其輸出的可讀性不佳,而且有時會混用多種語言。為了解決這個問題,團隊轉而研究另一種思路,也就是 DeepSeek-R1。\r\n\r\nDeepSeek-R1訓練\r\nDeepSeek-R1 的訓練大體可以概括為以下五個階段:\r\n\r\n1. 冷啟動(Cold Start)\r\n\r\n2. 面向推理的強化學習(Reasoning-oriented Reinforcement Learning)\r\n\r\n3. 拒絕采樣(Rejection Sampling)\r\n\r\n4. 監督微調(Supervised Fine-Tuning)\r\n\r\n5. 適用于所有場景的強化學習(Reinforcement Learning for all Scenarios)\r\n\r\n以下是各個階段的具體流程:\r\n\r\n1. 冷啟動(Cold Start)\r\n在第一步中,研究人員使用一個小型的高質量推理數據集(約 5000 個tokens)對 DeepSeek-V3-Base 進行微調。這樣做是為了避免“冷啟動”問題導致的可讀性不佳。\r\n\r\n\r\n2. 面向推理的強化學習\r\n在第二步中,得到的模型采用與 DeepSeek-V3-Zero 類似的強化學習過程進行訓練。但在獎勵機制中增加了一項新指標,用來確保目標語言的輸出保持一致性。\r\n\r\n\r\n3.', mimetype='text/plain', start_char_idx=6830, end_char_idx=8136, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), 'a52e1285-b9f7-40aa-88b9-7849aa151697': TextNode(id_='a52e1285-b9f7-40aa-88b9-7849aa151697', embedding=None, metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='175c70bd-eff9-4743-bd70-9174ee86dbed', node_type='4', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='fc891f08c5725428a6ea72c71b389cb0a718156509c4b2a4c42db880268b6595'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='ac42e4d1-bce1-4a45-8cd5-6bb567effd10', node_type='1', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='acedf367f7b12872b70bd06f00d7e05b146ba7d45ad11a0a53cba7ccde089c68'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='9dea914a-b261-4ed6-bb75-4f29ae8c891e', node_type='1', metadata={}, hash='0279db96c3126ea4e3acfcb96b6aa084085ec69f420f85270dd2cfdeeeca592f')}, metadata_template='{key}: {value}', metadata_separator='\n', text='冷啟動(Cold Start)\r\n在第一步中,研究人員使用一個小型的高質量推理數據集(約 5000 個tokens)對 DeepSeek-V3-Base 進行微調。這樣做是為了避免“冷啟動”問題導致的可讀性不佳。\r\n\r\n\r\n2. 面向推理的強化學習\r\n在第二步中,得到的模型采用與 DeepSeek-V3-Zero 類似的強化學習過程進行訓練。但在獎勵機制中增加了一項新指標,用來確保目標語言的輸出保持一致性。\r\n\r\n\r\n3. 拒絕采樣(Rejection Sampling)\r\n在第三步,研究人員利用上一步得到的模型合成推理數據,用于后續的監督微調。通過基于規則的獎勵策略(rule-based rewards)、生成式獎勵模型(Generative Reward Model),生成了 600,000 份高質量的推理示例。 此外,還生成了 200,000 份“非推理”示例,這些示例來自 DeepSeek-V3 及其部分訓練數據。\r\n\r\n\r\n4. 監督微調(Supervised Fine-Tuning)\r\n第四步,將得到的總計 800,000 條示例數據用于對 DeepSeek-V3-Base 的監督微調。\r\n\r\n\r\n5. 適用于所有場景的強化學習\r\n第五步,他們使用與 DeepSeek-R1-Zero 類似的方法,對微調后得到的模型再次進行 RL 訓練。但為了更好地對齊人類偏好(Human Preferences),在獎勵信號中額外加入了“有益性”與“無害性”的考量。同時,為了避免推理結果的可讀性問題,模型會被要求對推理過程進行適當的總結和精簡。\r\n\r\n\r\n通過上述五個階段,DeepSeek-R1 最終得以成型。可以說,DeepSeek-R1 是 DeepSeek-V3-Base 通過監督微調和強化學習得到的成果。其中,大量工作都集中在確保生成出高質量的訓練示例上。\r\n\r\n使用 DeepSeek-R1 進行推理“蒸餾”\r\nDeepSeek-R1 規模龐大,擁有 6710 億(671B)參數。這對于普通硬件來說,運行成本極高。\r\n\r\n因此,DeepSeek的研究人員還探索了如何將 DeepSeek-R1 的推理能力“蒸餾”到其他模型中,例如可以在消費級硬件上運行的 Qwen-32B。\r\n\r\n具體做法是,讓 DeepSeek-R1 作為教師模型(Teacher),而體量較小的模型則作為學生模型(Student)。兩者在面對相同的提示時,需要分別生成 token 的概率分布;學生模型會嘗試在訓練中逼近教師模型的分布:\r\n\r\n\r\n1. 使用之前提到的 80 萬高質量數據樣本(其中 60 萬條推理示例 + 20 萬條非推理示例)進行訓練。\r\n\r\n\r\n2.', mimetype='text/plain', start_char_idx=7923, end_char_idx=9062, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), '9dea914a-b261-4ed6-bb75-4f29ae8c891e': TextNode(id_='9dea914a-b261-4ed6-bb75-4f29ae8c891e', embedding=None, metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='175c70bd-eff9-4743-bd70-9174ee86dbed', node_type='4', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='fc891f08c5725428a6ea72c71b389cb0a718156509c4b2a4c42db880268b6595'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='a52e1285-b9f7-40aa-88b9-7849aa151697', node_type='1', metadata={'file_path': 'docs\\大模型推理.txt', 'file_name': '大模型推理.txt', 'file_type': 'text/plain', 'file_size': 22722, 'creation_date': '2025-07-21', 'last_modified_date': '2025-07-21'}, hash='63a1927e6be275695f51cfcc2e469dfbe8aec9a18bdd496632b388b953b6ef75')}, metadata_template='{key}: {value}', metadata_separator='\n', text='使用之前提到的 80 萬高質量數據樣本(其中 60 萬條推理示例 + 20 萬條非推理示例)進行訓練。\r\n\r\n\r\n2. 學生模型通過不斷對比自己的輸出分布和教師模型的輸出分布,來學習 DeepSeek-R1 的推理方式。\r\n\r\n這樣“蒸餾”出來的小模型性能依舊出色,因為它不僅學到了 80 萬條數據中的知識,還學到了 DeepSeek-R1 如何作答的思路。\r\n\r\nDeepSeek不太成功的嘗試\r\n還記得我們之前提到的 過程獎勵模型(PRMs) 和 蒙特卡洛樹搜索(MCTS) 嗎?DeepSeek 團隊也曾試圖用這些方法來培養模型的推理能力,但并未取得理想成果。\r\n\r\n在 MCTS 中,由于搜索空間極其龐大,研究人員不得不大幅限制節點擴展。此外,訓練一個能夠細化評估推理過程的獎勵模型本身就是一項困難的任務。\r\n\r\n在結合 PRMs 的 Best-of-N 技術中,他們遇到的主要問題是計算開銷過高,需要頻繁地對獎勵模型進行再訓練,以防止出現所謂的 “reward-hacking”(對獎勵函數的漏洞進行投機利用)。\r\n\r\n這并不代表這些技術就完全不適用,但至少說明了它們在實際應用中面臨著一些挑戰。\r\n\r\n結語\r\n以上就是關于推理型大模型的概念與 DeepSeek-R1 的有關介紹。希望這篇內容能幫助你更好地理解 “測試時計算擴展” 的潛力所在。也再次感謝為大模型探索道路上做出貢獻和努力的研究者們,像你們致敬!', mimetype='text/plain', start_char_idx=9003, end_char_idx=9614, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}')}
文檔來源與元數據整合:所有節點均關聯自文檔docs\大模型推理.txt,元數據中清晰記錄了文件路徑、名稱、類型(text/plain)、大小(22722 字節)及創建 / 修改日期(2025-07-21),確保檢索時可追溯內容來源。
語義分塊策略落地:原始文檔被拆分為 14 個TextNode,每個節點文本長度適中(約 500-1000 字符),圍繞 “推理型大模型定義”“訓練時 vs 測試時計算”“DeepSeek-R1 訓練流程” 等子主題拆分,保留了段落級語義連貫性,避免內容割裂。
節點關系網絡構建:通過relationships字段建立了完整的上下文關聯,每個節點包含SOURCE(指向原始文檔根節點)、PREVIOUS和NEXT(指向前后相鄰節點)的引用關系,形成鏈式結構,確保檢索時能還原文本邏輯流。
嵌入與過濾配置:節點明確標注了excluded_embed_metadata_keys和excluded_llm_metadata_keys,排除文件類型、大小等非核心元數據對嵌入生成和 LLM 調用的干擾,聚焦文本內容本身的語義表征。
內容完整性驗證:所有分塊文本覆蓋了原文核心內容,從推理型大模型定義、測試時計算范式,到 DeepSeek-R1 的五階段訓練流程、推理蒸餾技術等均有體現,未出現關鍵信息丟失,為后續檢索提供了完整的數據基礎。
查看index下所有node的ID
print(index.index_struct.nodes_dict)
輸出展示了一個向量索引結構中的?節點 ID 注冊表(nodes_dict
),它是構建高效檢索系統的核心組件。
輸出是一個字典,鍵和值均為節點 ID(如?7601e3d4-10f2-4578-a740-3844ea5347ab
)。這種設計看似冗余,但實際上實現了?節點 ID 的唯一性校驗和快速查找:
- 唯一性:每個 ID 在字典中只能出現一次,防止索引沖突。
- O (1) 復雜度:通過哈希表直接定位 ID,無需遍歷整個索引。
docstore.docs:存儲實際的文檔內容(文本、元數據等)。nodes_dict:作為索引層,僅維護 ID 映射,不存儲內容。
nodes_dict 支持以下核心操作:
向量相似度檢索:
當用戶查詢時,系統首先計算查詢向量與索引中節點向量的相似度,返回最相似的節點 ID 列表。
通過 nodes_dict 快速驗證 ID 有效性,再從 docstore 獲取完整內容。
文檔鏈導航:
由于節點間通過 relationships 建立了鏈式關系(如 PREVIOUS、NEXT),可基于 nodes_dict 快速跳轉到上下文節點,實現連貫的知識檢索。
增量更新:
新增文檔時,生成新 ID 并添加到 nodes_dict,同時將內容存入 docstore,無需重新處理已有索引。
查看index下面所有有ref文檔的信息
print(index.ref_doc_info)
輸出展示了向量索引系統中的文檔引用信息(ref_doc_info
),它建立了原始文檔與索引節點之間的映射關系。具體來看,這里有一個名為?175c70bd-eff9-4743-bd70-9174ee86dbed
?的文檔引用,對應著一個包含 11 個節點的知識條目。這些節點 ID(如?7601e3d4-10f2-4578-a740-3844ea5347ab
)此前在?nodes_dict
?中出現過,表明它們已被索引。該文檔的元數據顯示它源自?docs\大模型推理.txt
?文件,創建于 2025 年 7 月 21 日,大小為 22,722 字節。這種設計實現了文檔級的管理 —— 系統不僅能追蹤單個節點,還能將它們關聯回原始文檔,支持完整上下文的重建。例如,當檢索到某個相關節點時,系統可通過?ref_doc_info
?定位到整個文檔的元數據,甚至獲取同一文檔中的其他相關節點,為用戶提供更全面的信息。這種結構在處理長文檔時尤為重要,因為長文檔通常會被分割成多個節點以提高檢索精度,但用戶可能需要訪問完整的上下文。
參考文章
https://github.com/datawhalechina/wow-raghttps://github.com/datawhalechina/wow-rag