<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>小熊的网站</title><description>🐻</description><link>https://nanxiaoxiong.com/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>6.13.5</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年8月16日 01:04:08</lastBuildDate><item><title>LLM Agent 智能体底层原理</title><link>https://nanxiaoxiong.com/posts/agent-principles/</link><guid isPermaLink="true">https://nanxiaoxiong.com/posts/agent-principles/</guid><description>从 ReAct 范式到工具调用与记忆系统，理解 AI Agent 是如何&quot;自主行动&quot;的</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;什么是 Agent&lt;a href=&quot;#什么是-agent&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;LLM 本身只是一个”只会说话的模型”：你问它”帮我订个机票”，它只能回你一段话，不能真的去订。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Agent（智能体）&lt;/strong&gt; = 大模型（大脑）+ 工具（手脚）+ 记忆（经验）+ 规划（策略）。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/posts/agent-architecture.svg&quot; alt=&quot;Agent 架构：大脑 + 工具 + 记忆 + 规划&quot; /&gt;&lt;figcaption&gt;Agent 架构：大脑 + 工具 + 记忆 + 规划&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;它让大模型从”回答问题”升级为”完成任务”：自主决定下一步做什么、调用什么工具、根据结果调整计划，直到目标达成。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Agent 的核心四要素&lt;a href=&quot;#agent-的核心四要素&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;要素&lt;/th&gt;&lt;th&gt;作用&lt;/th&gt;&lt;th&gt;举例&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;大脑（LLM）&lt;/td&gt;&lt;td&gt;理解、推理、决策&lt;/td&gt;&lt;td&gt;GPT、Llama、Qwen&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;工具（Tools）&lt;/td&gt;&lt;td&gt;与外部世界交互&lt;/td&gt;&lt;td&gt;搜索、计算器、代码执行、API&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;记忆（Memory）&lt;/td&gt;&lt;td&gt;保存上下文与经验&lt;/td&gt;&lt;td&gt;对话历史、向量库、长期记忆&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;规划（Planning）&lt;/td&gt;&lt;td&gt;拆解任务、制定步骤&lt;/td&gt;&lt;td&gt;ReAct、CoT、Plan-and-Execute&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;一、工具调用（Function Calling / Tool Use）&lt;a href=&quot;#一工具调用function-calling--tool-use&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;原理&lt;a href=&quot;#原理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;工具调用本质上还是&lt;strong&gt;文本生成&lt;/strong&gt;，只不过模型输出的是结构化调用指令：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;开发者把工具的描述（名称、参数、用途）以 JSON Schema 形式告诉模型（在 System Prompt 里）&lt;/li&gt;
&lt;li&gt;模型判断”当前需要调用某个工具”，输出一个特殊的 JSON：
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;get_weather&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;arguments&quot;&lt;/span&gt;&lt;span&gt;: {&lt;/span&gt;&lt;span&gt;&quot;city&quot;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;北京&quot;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;应用层解析这个 JSON，执行真实函数，把结果作为一条新的消息回传给模型&lt;/li&gt;
&lt;li&gt;模型基于工具返回结果继续推理，直至给出最终答案&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;工具描述的 Prompt 长什么样&lt;a href=&quot;#工具描述的-prompt-长什么样&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;可用工具：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;- search(query: string): 联网搜索，参数为查询关键词&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;- calculate(expr: string): 计算数学表达式&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;- get_weather(city: string): 查询城市天气&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;当需要调用工具时，只输出 JSON：{&quot;name&quot;: &quot;...&quot;, &quot;arguments&quot;: {...}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;工具描述的质量直接影响调用成功率：&lt;strong&gt;描述要准确、参数要精简、说明要覆盖边界情况&lt;/strong&gt;。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;工具调用的关键工程点&lt;a href=&quot;#工具调用的关键工程点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;并行调用&lt;/strong&gt;：模型一次可调用多个工具（现代 API 支持 tool_calls 数组）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;失败重试&lt;/strong&gt;：工具执行出错时，把错误信息回传给模型让它纠错&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全校验&lt;/strong&gt;：工具是真实代码，必须做权限控制（不能把”删除数据库”暴露给任意 Agent）&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;二、ReAct 范式（推理 + 行动）&lt;a href=&quot;#二react-范式推理--行动&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;ReAct（Reasoning + Acting）是 Agent 最经典的工作范式，由论文 &lt;em&gt;ReAct: Synergizing Reasoning and Acting in Language Models&lt;/em&gt;（2022）提出。&lt;/p&gt;&lt;p&gt;核心思想：让模型交替输出&lt;strong&gt;思考（Thought）→ 行动（Action）→ 观察（Observation）&lt;/strong&gt;：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Thought: 用户想知道北京天气，我需要查天气&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Action: get_weather(&quot;北京&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Observation: 晴，26°C&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Thought: 天气查询完成，可以回答用户了&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Final Answer: 北京今天晴，气温 26°C&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;section&gt;&lt;h3&gt;为什么 ReAct 有效&lt;a href=&quot;#为什么-react-有效&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;思考&lt;/strong&gt;让模型推理当前状态，决定下一步&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;行动&lt;/strong&gt;让模型实际调用工具&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;观察&lt;/strong&gt;把真实世界的结果反馈给模型，纠正推理偏差&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;思考-行动-观察循环可以执行多轮，模型可以自我纠错：如果第一次搜索没结果，它会换个关键词再搜。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;实现方式&lt;a href=&quot;#实现方式&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 API 时代，ReAct 循环由&lt;strong&gt;应用代码&lt;/strong&gt;驱动：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;while not finished:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;1. 把当前消息历史发给 LLM&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;2. LLM 返回：要么是最终答案，要么是工具调用&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;3. 若是工具调用：执行工具，把结果追加进消息历史&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;4. 回到 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;模型本身不”运行循环”，循环是应用层的 while 循环，模型只是每轮输出”下一步干什么”。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;三、规划（Planning）&lt;a href=&quot;#三规划planning&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;复杂任务需要拆解。常见规划策略：&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. CoT（思维链）&lt;a href=&quot;#1-cot思维链&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;让模型”一步步思考”再回答，本质是让模型在输出最终答案前先生成中间推理步骤。简单但有效。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. Plan-and-Execute&lt;a href=&quot;#2-plan-and-execute&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先让模型制定完整计划（步骤列表），再逐条执行，执行完一个步骤后可以修订后续计划：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Plan:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;1. 搜索&quot;AI Agent&quot;定义&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2. 整理核心概念&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;3. 生成大纲&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;4. 撰写文章&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;好处：计划先行，减少长任务中的”走一步看一步”带来的发散。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. Tree of Thoughts（思维树）&lt;a href=&quot;#3-tree-of-thoughts思维树&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;每步探索多个候选思路，像搜索树一样评估分支。效果好但开销大，主要用于难题推理。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. Multi-Agent（多智能体协作）&lt;a href=&quot;#4-multi-agent多智能体协作&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;多个 Agent 分工协作：规划者拆任务、执行者干活、评审者把关。典型框架如 AutoGen、CrewAI。协作的关键是&lt;strong&gt;消息协议&lt;/strong&gt;——Agent 之间通过结构化消息传递任务与结果。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;四、记忆系统（Memory）&lt;a href=&quot;#四记忆系统memory&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;短期记忆 vs 长期记忆&lt;a href=&quot;#短期记忆-vs-长期记忆&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;短期记忆&lt;/strong&gt;：当前对话的上下文（直接放在 Prompt 里），受上下文窗口限制&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;长期记忆&lt;/strong&gt;：跨会话保存的信息（用户偏好、历史结论、知识片段）&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;长期记忆的实现&lt;a href=&quot;#长期记忆的实现&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;长期记忆的存储载体通常是&lt;strong&gt;向量数据库&lt;/strong&gt;：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;把重要信息（总结、事实、用户偏好）Embedding 后存入向量库&lt;/li&gt;
&lt;li&gt;新对话开始时，检索与该用户相关的记忆片段&lt;/li&gt;
&lt;li&gt;把检索到的记忆拼进 Prompt&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;这就是 RAG 技术在 Agent 记忆上的应用。更进一步的记忆管理：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;记忆压缩&lt;/strong&gt;：对话太长时让模型总结旧内容，替换掉原始消息&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;记忆遗忘&lt;/strong&gt;：过时的记忆要能淘汰，否则会污染判断&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分层记忆&lt;/strong&gt;：工作记忆（当前任务）、情景记忆（最近经历）、语义记忆（长期知识）&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;五、Agent 的完整执行循环&lt;a href=&quot;#五agent-的完整执行循环&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一个典型的单 Agent 系统运行时：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;1. 接收用户目标&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;2. 读取相关记忆（检索向量库）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;3. 循环：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;a. LLM 推理 → 决定行动&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;b. 行动 = 工具调用 / 子任务 / 直接回答&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;c. 工具结果写回上下文&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;d. 判断是否完成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;4. 输出结果，更新记忆&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;六、Agent 框架做了什么&lt;a href=&quot;#六agent-框架做了什么&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;主流框架（LangChain、LangGraph、LlamaIndex、Dify、Coze）本质上提供了：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;工具调用的统一抽象与解析&lt;/li&gt;
&lt;li&gt;ReAct 循环的状态机（LangGraph 的图编排）&lt;/li&gt;
&lt;li&gt;记忆/向量库的接入封装&lt;/li&gt;
&lt;li&gt;多 Agent 的消息路由&lt;/li&gt;
&lt;li&gt;Prompt 模板管理&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;框架解决的是&lt;strong&gt;工程复杂度&lt;/strong&gt;，核心智能仍然来自模型本身。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;七、Agent 的局限与风险&lt;a href=&quot;#七agent-的局限与风险&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;幻觉累积&lt;/strong&gt;：多轮推理中错误可能被放大&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具误用&lt;/strong&gt;：模型可能调用错误工具或错误参数&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;长任务漂移&lt;/strong&gt;：步骤越多越容易偏离原始目标&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全风险&lt;/strong&gt;：Agent 能执行真实操作，越权、数据泄露是真实威胁&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;成本&lt;/strong&gt;：每轮循环都是模型推理，多轮任务成本线性增长&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;工程上通过&lt;strong&gt;人类确认节点&lt;/strong&gt;（关键操作需审批）、&lt;strong&gt;超时与步数上限&lt;/strong&gt;、&lt;strong&gt;输出校验&lt;/strong&gt;来兜底。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;小结&lt;a href=&quot;#小结&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Agent 的本质公式：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Agent = LLM（推理决策） + Tools（行动能力） + Memory（经验） + Planning（策略）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;理解 ReAct 循环、工具调用协议、记忆检索这三件事，你就掌握了 Agent 的底层骨架。再往上，所有的 Agent 框架和产品形态（编程助手、客服机器人、自动化工作流）都是在这个骨架上生长出来的。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>知识库与 Embedding 底层原理</title><link>https://nanxiaoxiong.com/posts/knowledge-base-embedding/</link><guid isPermaLink="true">https://nanxiaoxiong.com/posts/knowledge-base-embedding/</guid><description>向量是怎么来的、向量检索为什么快、知识库系统是怎么搭起来的</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;知识库解决什么问题&lt;a href=&quot;#知识库解决什么问题&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;企业里最常见的诉求：把公司的文档、手册、制度变成”能对话的 AI 问答系统”。&lt;/p&gt;&lt;p&gt;一条朴素的路线是&lt;strong&gt;微调&lt;/strong&gt;：拿文档去继续训练模型。但微调成本高、周期长、知识更新就要重训，实际工程中 90% 的场景都不需要微调——用&lt;strong&gt;知识库 + RAG&lt;/strong&gt; 就够了。&lt;/p&gt;&lt;p&gt;知识库系统 = &lt;strong&gt;文档处理管线 + Embedding + 向量数据库 + 检索&lt;/strong&gt;。这篇深入讲它最底层的两个引擎：Embedding 和向量检索。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;一、Embedding 的底层原理&lt;a href=&quot;#一embedding-的底层原理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;从 one-hot 到稠密向量&lt;a href=&quot;#从-one-hot-到稠密向量&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最早表示词的方法是 &lt;strong&gt;one-hot&lt;/strong&gt;：每个词一个维度，向量长度为词表大小 V。问题很明显：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;维度爆炸（V 可能几十万）&lt;/li&gt;
&lt;li&gt;向量之间全是正交的，“猫”和”狗”没有任何相似度信息&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Embedding&lt;/strong&gt; 的做法是把词/句映射到低维稠密向量（几百到几千维），且&lt;strong&gt;语义相近的向量距离近&lt;/strong&gt;。这背后的核心是**分布式表示（Distributed Representation）**思想：一个词的含义由它周围的词共同决定（“You shall know a word by the company it keeps”——Firth, 1957）。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;上下文相关 vs 上下文无关&lt;a href=&quot;#上下文相关-vs-上下文无关&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;代表&lt;/th&gt;&lt;th&gt;特点&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;上下文无关（静态）&lt;/td&gt;&lt;td&gt;Word2Vec、GloVe&lt;/td&gt;&lt;td&gt;一个词只有一个向量，“苹果”（水果/公司）无法区分&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;上下文相关（动态）&lt;/td&gt;&lt;td&gt;BERT、BGE、text2vec&lt;/td&gt;&lt;td&gt;同一个词在不同句子里向量不同，能区分多义词&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;现代知识库用的都是&lt;strong&gt;上下文相关&lt;/strong&gt;的 Embedding：把整段文本（句子/段落）过一遍 Transformer 编码器，取输出的池化结果作为该文本的向量。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Embedding 是怎么训练出来的：对比学习&lt;a href=&quot;#embedding-是怎么训练出来的对比学习&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;训练目标非常直观：&lt;strong&gt;让语义相近的文本对向量靠近，语义无关的文本对向量远离&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;构造训练样本：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;正样本：问题-答案、原文-改写、标题-正文（语义相同）&lt;/li&gt;
&lt;li&gt;负样本：随机配对（语义无关）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;损失函数（InfoNCE）：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;L = -log( e^(sim(q, pos)/τ) / Σ e^(sim(q, neg_i)/τ) )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;sim 是余弦相似度&lt;/li&gt;
&lt;li&gt;τ 是温度参数，控制分布的尖锐程度&lt;/li&gt;
&lt;li&gt;分子拉近正样本，分母推远所有负样本&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;训练完成后，模型输出的向量就具有了”语义距离”性质——这正是检索的基础。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Embedding 的关键细节&lt;a href=&quot;#embedding-的关键细节&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;归一化&lt;/strong&gt;：使用前对向量做 L2 归一化，这样余弦相似度 = 内积，检索实现更简单&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;同模型原则&lt;/strong&gt;：入库和查询必须用同一个 Embedding 模型，否则向量空间不一致&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;维度选择&lt;/strong&gt;：768/1024/1536 是常见选择；维度高精度好但存储大、检索慢&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中文适配&lt;/strong&gt;：中文分词与英文不同，务必选中文语料训练过的模型（BGE 系列、m3e、text2vec）&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;二、向量相似度计算&lt;a href=&quot;#二向量相似度计算&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;三种度量&lt;a href=&quot;#三种度量&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;余弦相似度&lt;/strong&gt;：cos(θ) = (q·d) / (|q||d|)，只关心方向，最常用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内积&lt;/strong&gt;：归一化后与余弦等价，实现最快&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;欧氏距离&lt;/strong&gt;：越小越相似，适合绝对距离有意义的场景&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;为什么余弦相似度就够了&lt;a href=&quot;#为什么余弦相似度就够了&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;向量检索不关心”向量多长”，只关心”方向是否一致”——语义相关性本质是方向上的接近。所以归一化 + 内积是工业界标准实现。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;三、向量检索：从暴力到 ANN&lt;a href=&quot;#三向量检索从暴力到-ann&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;暴力检索&lt;a href=&quot;#暴力检索&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;数据量小时（万级以内），直接遍历计算所有相似度取 top-k。简单准确，但数据量大了以后每次查询都要扫全库，完全不可用。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;ANN（近似最近邻）的三大流派&lt;a href=&quot;#ann近似最近邻的三大流派&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;百万级以上必须用索引加速，核心思想是&lt;strong&gt;牺牲一点精度换速度&lt;/strong&gt;：&lt;/p&gt;
























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;算法&lt;/th&gt;&lt;th&gt;原理&lt;/th&gt;&lt;th&gt;特点&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;HNSW&lt;/td&gt;&lt;td&gt;构建分层图，先粗粒度跳到大致区域再精细搜索&lt;/td&gt;&lt;td&gt;召回率高、速度快，内存占用大；&lt;strong&gt;最主流&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IVF&lt;/td&gt;&lt;td&gt;先对全库聚类（K-Means），查询时只在最近的几个簇里搜&lt;/td&gt;&lt;td&gt;内存友好，配合 PQ 可大规模部署&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;PQ&lt;/td&gt;&lt;td&gt;把向量切块量化压缩，用查表代替距离计算&lt;/td&gt;&lt;td&gt;极致省内存，精度有损&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;HNSW 为什么快&lt;a href=&quot;#hnsw-为什么快&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;HNSW 的思想是”六度分隔”：构建多层图，上层图连接稀疏（跳得远），下层图连接密集（走得近）。查询时从顶层开始，逐层向下贪心搜索，很快就能收敛到目标附近。复杂度接近 O(log n)。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;向量数据库产品&lt;a href=&quot;#向量数据库产品&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Milvus / Zilliz&lt;/strong&gt;：分布式、云原生，百万级起步&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Qdrant / Weaviate&lt;/strong&gt;：Rust/Go 实现，性能好&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chroma&lt;/strong&gt;：轻量，适合原型&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pgvector&lt;/strong&gt;：PostgreSQL 插件，和现有业务库同栈，中小项目首选&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Elasticsearch&lt;/strong&gt;：自带 kNN 检索，与全文检索一体&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;选型的核心指标：数据量、查询 QPS、内存预算、是否需要混合检索、是否已有存储栈。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;四、混合检索：为什么纯向量不够&lt;a href=&quot;#四混合检索为什么纯向量不够&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;向量检索擅长”语义相关”，但对&lt;strong&gt;精确匹配&lt;/strong&gt;不敏感：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;用户搜”型号 A100”——向量可能匹配到”A100 和 H100 的对比”，但用户要的是 A100 的规格页&lt;/li&gt;
&lt;li&gt;搜错误代码 “ERR_503”——语义向量毫无办法，关键词匹配秒杀&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;**BM25（关键词检索）**恰好擅长这个：基于词频-逆文档频率打分，精确命中权重高。&lt;/p&gt;&lt;p&gt;工业级方案 = &lt;strong&gt;向量检索 + BM25 双路召回 + RRF 融合&lt;/strong&gt;：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;RRF 分数 = Σ 1 / (k + rank_i)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;RRF 把两路的排序位置融合成一个分数（rank 越靠前分越高），无需调权重参数，简单有效。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;五、知识库系统的完整架构&lt;a href=&quot;#五知识库系统的完整架构&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一个生产级知识库问答系统的分层：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/posts/knowledge-base-architecture.svg&quot; alt=&quot;知识库系统分层架构&quot; /&gt;&lt;figcaption&gt;知识库系统分层架构&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;┌──────────────────────────────────────────┐&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  接入层：Web / IM / API                   │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├──────────────────────────────────────────┤&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  编排层：Query 改写 → 检索 → Rerank → 生成 │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├──────────────────────────────────────────┤&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  检索层：向量库 + BM25 + 混合排序          │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├──────────────────────────────────────────┤&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  索引层：Chunking + Embedding + 元数据     │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├──────────────────────────────────────────┤&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│  存储层：向量数据库 + 文档源 + 元数据库     │&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;└──────────────────────────────────────────┘&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;section&gt;&lt;h3&gt;元数据（Metadata）的妙用&lt;a href=&quot;#元数据metadata的妙用&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;每个 Chunk 不光存向量，还存元数据：来源文档、章节、更新时间、权限标签。作用：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;过滤&lt;/strong&gt;：只检索某部门/某时间段的文档（检索前先过滤，既快又准）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;溯源&lt;/strong&gt;：回答时能指出”依据来自《运维手册》第 3 章”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;权限控制&lt;/strong&gt;：不同用户只能检索到权限范围内的内容&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;文档更新与版本&lt;a href=&quot;#文档更新与版本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;文档变了怎么办？&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;增量更新：只重新 Embedding 变化的 Chunk&lt;/li&gt;
&lt;li&gt;版本管理：向量库中按文档版本打标，可回滚&lt;/li&gt;
&lt;li&gt;定期全量重建：兜底方案，防止脏数据累积&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;六、常见误区&lt;a href=&quot;#六常见误区&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;




























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;误区&lt;/th&gt;&lt;th&gt;真相&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;”Embedding 模型越贵越好”&lt;/td&gt;&lt;td&gt;要匹配语言和数据域，中文场景用中文模型更稳&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;”向量维度越高越好”&lt;/td&gt;&lt;td&gt;高维度带来存储和检索开销，够用即可&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;”向量库能解决一切检索”&lt;/td&gt;&lt;td&gt;精确匹配场景必须混合 BM25&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;”数据入库就完事了”&lt;/td&gt;&lt;td&gt;数据质量、切分质量决定检索天花板&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;”RAG 能替代微调”&lt;/td&gt;&lt;td&gt;两者互补：知识用 RAG，风格/领域技能用微调&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;小结&lt;a href=&quot;#小结&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;知识库的底层是两件事：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Embedding&lt;/strong&gt;：用对比学习训练出的语义向量化能力，把文本变成可计算相似度的向量&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;向量检索（ANN）&lt;/strong&gt;：用 HNSW/IVF/PQ 等索引结构，在百万级向量中毫秒级找出最相似的片段&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;上层再叠加 Chunking、混合检索、Rerank、元数据管理，就构成了完整的知识库问答系统。这也是 RAG 技术栈的基石——理解了这一层，任何知识库产品的原理在你眼里都是透明的。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>RAG 检索增强生成原理与实践</title><link>https://nanxiaoxiong.com/posts/rag-principles/</link><guid isPermaLink="true">https://nanxiaoxiong.com/posts/rag-principles/</guid><description>从 Embedding、向量检索到生成融合，拆解 RAG 的完整技术链路</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;为什么需要 RAG&lt;a href=&quot;#为什么需要-rag&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;大语言模型有两个致命短板：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;知识截止&lt;/strong&gt;：训练数据是某个时间点之前抓取的，之后发生的事（新闻、新版本、公司内部文档）一概不知&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;幻觉&lt;/strong&gt;：模型不知道答案时不会说”我不知道”，而是会一本正经地编造&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;RAG（Retrieval-Augmented Generation，检索增强生成）的思路很朴素：&lt;strong&gt;模型不知道，那就先查资料，把资料塞进上下文里，再让它基于资料回答&lt;/strong&gt;。就像开卷考试——模型是考生，检索系统是它的笔记本。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;RAG 整体流程&lt;a href=&quot;#rag-整体流程&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一个标准的 RAG 系统分两个阶段：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/posts/rag-pipeline.svg&quot; alt=&quot;RAG 完整流程：离线索引 + 在线查询&quot; /&gt;&lt;figcaption&gt;RAG 完整流程：离线索引 + 在线查询&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;section&gt;&lt;h3&gt;阶段一：离线索引（建库）&lt;a href=&quot;#阶段一离线索引建库&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;收集文档（PDF、网页、Markdown、数据库记录……）&lt;/li&gt;
&lt;li&gt;清洗文本（去页眉页脚、去重、格式统一）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;切分（Chunking）&lt;/strong&gt;：把长文档切成小块&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;向量化（Embedding）&lt;/strong&gt;：每块文本转成一个向量&lt;/li&gt;
&lt;li&gt;存入&lt;strong&gt;向量数据库&lt;/strong&gt;，建立索引（便于 ANN 近似最近邻检索）&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;阶段二：在线查询（问答）&lt;a href=&quot;#阶段二在线查询问答&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;用户提问&lt;/li&gt;
&lt;li&gt;把问题向量化（用&lt;strong&gt;同一个&lt;/strong&gt; Embedding 模型）&lt;/li&gt;
&lt;li&gt;在向量库里检索 top-k 最相似的文本块&lt;/li&gt;
&lt;li&gt;把检索结果拼进 Prompt，与问题一起发给 LLM&lt;/li&gt;
&lt;li&gt;LLM 基于检索内容生成回答&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;核心一：Embedding（文本向量化）&lt;a href=&quot;#核心一embedding文本向量化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;什么是 Embedding&lt;a href=&quot;#什么是-embedding&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Embedding 是把一段文本映射成一个固定维度的稠密向量（如 768 维、1536 维），使得&lt;strong&gt;语义相近的文本在向量空间里距离更近&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;“猫”和”猫咪”的向量距离很近，“猫”和”汽车”的向量距离很远——这就是语义向量化的威力。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Embedding 模型怎么训练的&lt;a href=&quot;#embedding-模型怎么训练的&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;常见的训练思路是&lt;strong&gt;对比学习（Contrastive Learning）&lt;/strong&gt;：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;构造正样本对（语义相同的文本，如问题和答案、原文和改写）&lt;/li&gt;
&lt;li&gt;构造负样本对（语义无关的文本）&lt;/li&gt;
&lt;li&gt;训练目标：拉近正样本对的向量距离，推远负样本对的向量距离&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;损失函数常用 InfoNCE 或 Triplet Loss。训练好的模型对任意输入文本输出一个向量。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;Embedding 的注意点&lt;a href=&quot;#embedding-的注意点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;查询和文档必须用同一个模型&lt;/strong&gt;，否则向量空间不一致，检索失效&lt;/li&gt;
&lt;li&gt;中文场景要选中文优化过的模型（如 BGE、text2vec、m3e），英文模型对中文效果差&lt;/li&gt;
&lt;li&gt;向量维度越高，信息越丰富但存储和计算开销越大&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;核心二：Chunking（文本切分）&lt;a href=&quot;#核心二chunking文本切分&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;切分质量直接影响检索效果。切太大，噪音多、浪费上下文；切太小，语义不完整。&lt;/p&gt;&lt;p&gt;常见策略：&lt;/p&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;策略&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;th&gt;适用场景&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;固定长度切分&lt;/td&gt;&lt;td&gt;按字符数硬切，可加重叠&lt;/td&gt;&lt;td&gt;通用兜底&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;按段落/标题切分&lt;/td&gt;&lt;td&gt;尊重文档结构&lt;/td&gt;&lt;td&gt;Markdown、结构化文档&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;语义切分&lt;/td&gt;&lt;td&gt;用模型判断语义边界&lt;/td&gt;&lt;td&gt;高质量索引&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;父子块（Parent-Child）&lt;/td&gt;&lt;td&gt;小块检索、大块喂给模型&lt;/td&gt;&lt;td&gt;平衡精度与上下文&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;工程上常用&lt;strong&gt;重叠窗口&lt;/strong&gt;（overlap）避免把语义割裂在边界上。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;核心三：向量检索&lt;a href=&quot;#核心三向量检索&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;相似度度量&lt;a href=&quot;#相似度度量&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;向量检索的本质是算相似度，常用三种：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;余弦相似度&lt;/strong&gt;：cos(q, d) = q·d / (|q|·|d|)，只关心方向，最常用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内积&lt;/strong&gt;：q·d，未归一化，速度快&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;欧氏距离&lt;/strong&gt;：越小越相似，与余弦在归一化后等价&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;精确检索 vs 近似检索&lt;a href=&quot;#精确检索-vs-近似检索&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;暴力检索&lt;/strong&gt;：和库里每个向量算相似度，取 top-k。数据量小（万级）没问题&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ANN 近似检索&lt;/strong&gt;：数据量百万级以上，用索引结构加速，牺牲少量精度换取速度&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;主流的 ANN 算法：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HNSW（分层可导航小世界图）&lt;/strong&gt;：图结构，召回率高，内存占用大&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IVF（倒排文件）&lt;/strong&gt;：先聚类再在桶内检索&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PQ（乘积量化）&lt;/strong&gt;：把向量压缩存储&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;向量数据库（Milvus、Qdrant、Weaviate、Chroma、pgvector）就是把这些算法封装成可直接使用的服务。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;混合检索&lt;a href=&quot;#混合检索&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;纯向量检索对&lt;strong&gt;关键词精确匹配&lt;/strong&gt;（如型号 “A100”、代码片段）不敏感。工程上常用&lt;strong&gt;混合检索&lt;/strong&gt;：向量检索 + BM25 关键词检索，再用 RRF（Reciprocal Rank Fusion）融合排序。这是生产级 RAG 的标配。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;核心四：重排序（Rerank）&lt;a href=&quot;#核心四重排序rerank&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;向量检索的第一轮召回是”粗筛”，top-k 里可能混入语义相似但不直接相关的段落。重排序模型（如 BGE-Reranker、Cohere Rerank）对”问题-段落”对做精细的相关性打分，重新排序后只保留前 3~5 条喂给 LLM。&lt;/p&gt;&lt;p&gt;流程：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;问题 → 向量检索召回 50 条 → Rerank 重排 → 取前 5 条 → 拼 Prompt → LLM 生成&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;重排序能显著提升答案质量，代价是多一次模型推理。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;核心五：Prompt 拼接与生成&lt;a href=&quot;#核心五prompt-拼接与生成&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;检索到的文本块要拼成结构化的上下文，示例：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;你是一个严谨的助手，请仅根据以下参考资料回答问题。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;如果参考资料中没有答案，请明确说&quot;资料中未找到相关信息&quot;。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;参考资料：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[1] &amp;lt;chunk1&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[2] &amp;lt;chunk2&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[3] &amp;lt;chunk3&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;问题：&amp;lt;user_question&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;回答：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;要点：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;给资料编号，让模型在回答中&lt;strong&gt;引用来源&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;明确”没有就直说”，降低幻觉&lt;/li&gt;
&lt;li&gt;控制总长度，避免超出模型上下文窗口&lt;/li&gt;
&lt;li&gt;可加系统提示词约束回答风格&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;RAG 的进阶形态&lt;a href=&quot;#rag-的进阶形态&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. Query 改写（Query Rewriting）&lt;a href=&quot;#1-query-改写query-rewriting&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;用户的原始问题往往检索效果差，先用 LLM 把问题改写得更适合检索：拆解多跳问题、补全指代、生成子问题。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 多路召回&lt;a href=&quot;#2-多路召回&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;不同来源（向量库、SQL 数据库、API、搜索引擎）并行检索，结果融合。这就是 &lt;strong&gt;GraphRAG&lt;/strong&gt;（结合知识图谱）的思想。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. Agentic RAG&lt;a href=&quot;#3-agentic-rag&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;检索不再是”一次性的”：让 Agent 判断是否需要检索、需要检索什么、检索结果不够就换个方式再查，甚至自主调用多个工具。这就是 RAG 与 Agent 的融合。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. 评估与优化&lt;a href=&quot;#4-评估与优化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;RAG 系统要用指标持续迭代：&lt;strong&gt;召回率（Recall）、精确率、忠实度（Faithfulness，回答是否忠于检索内容）、答案相关性（Answer Relevancy）&lt;/strong&gt;。配合 RAGAS 等评估框架做回归测试。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;RAG 的常见问题与排查&lt;a href=&quot;#rag-的常见问题与排查&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;


































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;症状&lt;/th&gt;&lt;th&gt;可能原因&lt;/th&gt;&lt;th&gt;排查方向&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;答非所问&lt;/td&gt;&lt;td&gt;检索结果与问题无关&lt;/td&gt;&lt;td&gt;检查 Embedding 模型、Chunk 质量&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;答案有幻觉&lt;/td&gt;&lt;td&gt;检索结果不够/Prompt 约束弱&lt;/td&gt;&lt;td&gt;加 Rerank、加”不知道就说不知道”&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;回答太泛&lt;/td&gt;&lt;td&gt;喂给模型的上下文太短&lt;/td&gt;&lt;td&gt;增大 top-k、用父子块&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;检索慢&lt;/td&gt;&lt;td&gt;数据量大&lt;/td&gt;&lt;td&gt;换 ANN 索引、加缓存&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;中文效果差&lt;/td&gt;&lt;td&gt;Embedding 模型不适配&lt;/td&gt;&lt;td&gt;换中文 Embedding 模型&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;小结&lt;a href=&quot;#小结&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;RAG 的完整链路：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;文档 → 切分 → Embedding → 向量库&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;问题 → Embedding → 检索 → Rerank → Prompt → LLM → 带引用的答案&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;它解决了大模型的&lt;strong&gt;知识时效性&lt;/strong&gt;和&lt;strong&gt;幻觉&lt;/strong&gt;两大问题，是落地知识库问答（企业文档、客服、法律、医疗）最主流的技术方案。掌握了 RAG，你就掌握了让大模型”用上你数据”的核心能力。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>Transformer 架构底层原理详解</title><link>https://nanxiaoxiong.com/posts/transformer-principles/</link><guid isPermaLink="true">https://nanxiaoxiong.com/posts/transformer-principles/</guid><description>从注意力机制到多头自注意力，拆解 Transformer 的每一层原理</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;为什么需要 Transformer&lt;a href=&quot;#为什么需要-transformer&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在 Transformer 出现之前，处理序列数据主要靠两类模型：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RNN / LSTM&lt;/strong&gt;：按时间步逐个处理 token，第 t 个词的输出依赖前 t-1 个词的隐藏状态，天生无法并行，且长距离信息会随步数增长而衰减（梯度消失）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CNN&lt;/strong&gt;：虽然可以并行，但感受野有限，捕捉长距离依赖需要堆叠很多层&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;2017 年 Google 发表《Attention Is All You Need》，提出 Transformer，核心思路是：&lt;strong&gt;抛弃循环结构，只用注意力机制（Attention）建模序列中任意两个位置之间的关系&lt;/strong&gt;。任意两个 token 之间的距离都是 1，长距离依赖问题迎刃而解，而且可以完全并行计算。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;模型总览&lt;a href=&quot;#模型总览&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一个标准的 Transformer 编码器层由以下几部分组成：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/posts/transformer-architecture.svg&quot; alt=&quot;Transformer 架构图（Encoder-Decoder 结构）&quot; /&gt;&lt;figcaption&gt;Transformer 架构图（Encoder-Decoder 结构）&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;输入嵌入（Embedding）&lt;/strong&gt;：把 token 映射为向量&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;位置编码（Positional Encoding）&lt;/strong&gt;：注入位置信息&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多头自注意力（Multi-Head Self-Attention）&lt;/strong&gt;：建模 token 间关系&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;前馈网络（Feed-Forward Network）&lt;/strong&gt;：逐位置的非线性变换&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;残差连接与层归一化（Residual + LayerNorm）&lt;/strong&gt;：稳定训练&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;下面逐层拆解。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;输入嵌入与位置编码&lt;a href=&quot;#输入嵌入与位置编码&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;Token 嵌入&lt;a href=&quot;#token-嵌入&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;词表大小为 V，每个 token 通过查表得到一个 d 维向量（d 通常为 512~4096+）。嵌入矩阵是一个 V × d 的可学习参数矩阵。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;为什么需要位置编码&lt;a href=&quot;#为什么需要位置编码&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;注意力机制本身是&lt;strong&gt;置换不变的&lt;/strong&gt;：把”我打你”换成”你打我”，如果不加位置信息，模型看到的两组向量完全相同，无法区分语序。因此必须把位置信息加进去。&lt;/p&gt;&lt;p&gt;原始的 Transformer 使用&lt;strong&gt;正弦/余弦函数&lt;/strong&gt;生成位置编码：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PE(pos, 2i)   = sin(pos / 10000^(2i/d))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;PE(pos, 2i+1) = cos(pos / 10000^(2i/d))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;其中 pos 是位置，i 是维度下标。这种编码有几个好处：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;每个位置的编码唯一&lt;/li&gt;
&lt;li&gt;任意两个位置的相对距离可以通过线性变换表达（因为 sin(a+b) 可以展开）&lt;/li&gt;
&lt;li&gt;不需要学习，长度外推性较好（现代模型多用可学习的绝对位置编码或 RoPE 旋转位置编码，各有取舍）&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;自注意力机制（Self-Attention）&lt;a href=&quot;#自注意力机制self-attention&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;从查询-键-值说起&lt;a href=&quot;#从查询-键-值说起&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;自注意力的灵感来自检索系统：想象你在图书馆查资料，你手里有一个&lt;strong&gt;查询（Query）&lt;/strong&gt;，书架上每本书都有一个&lt;strong&gt;键（Key）&lt;/strong&gt;，你通过”查询和键的相似度”找到最相关的书，然后取走这本书的**值（Value）**内容。&lt;/p&gt;&lt;p&gt;对输入序列的每个 token，模型学习三个矩阵 W_Q、W_K、W_V，把嵌入向量 x 投影成三个向量：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;q = x · W_Q&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;k = x · W_K&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;v = x · W_V&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;注意力分数的计算&lt;a href=&quot;#注意力分数的计算&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;对于第 i 个 token，它要决定”我该关注序列里哪些 token”：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;计算它自己的 q_i 与所有 token 的 k_j 的点积，得到相似度&lt;/li&gt;
&lt;li&gt;除以 √d_k 做缩放（防止点积过大导致 softmax 梯度消失）&lt;/li&gt;
&lt;li&gt;过 softmax 归一化成权重&lt;/li&gt;
&lt;li&gt;用权重加权求和所有 v_j，得到输出&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;公式如下：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Attention(Q, K, V) = softmax(QKᵀ / √d_k) · V&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;为什么除以 √d_k&lt;a href=&quot;#为什么除以-d_k&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当维度 d_k 较大时，点积的方差会随之增大，导致 softmax 输出接近 one-hot，梯度极小。除以 √d_k 可以把方差拉回到 1 附近，保持梯度稳定。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;缩放点积注意力的计算复杂度&lt;a href=&quot;#缩放点积注意力的计算复杂度&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;注意力矩阵是 n×n（n 为序列长度），因此计算和显存开销都是 O(n²)。这就是为什么长上下文模型需要 FlashAttention、稀疏注意力、滑动窗口注意力等优化手段——它们本质上都是在降低这个 n² 的代价。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;多头注意力（Multi-Head Attention）&lt;a href=&quot;#多头注意力multi-head-attention&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;单头注意力只能捕捉一种”关系模式”。多头注意力把 d 维空间切成 h 个头，每个头在各自的子空间里独立做注意力，最后拼接：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;MultiHead(Q, K, V) = Concat(head₁, ..., head_h) · W_O&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;head_i = Attention(Q·W_Qᵢ, K·W_Kᵢ, V·W_Vᵢ)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;h 通常取 8~32，每个头的维度 d_k = d / h，总计算量不变。&lt;/p&gt;&lt;p&gt;多头带来的好处：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;多角度建模&lt;/strong&gt;：不同的头可以分别关注语法关系、指代关系、语义相似性等&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;集成效应&lt;/strong&gt;：多个头相当于多个”专家”投票，鲁棒性更好&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;并行计算&lt;/strong&gt;：各个头互不依赖，可以并行&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;前馈网络（FFN）&lt;a href=&quot;#前馈网络ffn&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;每个 token 经过注意力后，还要过一个&lt;strong&gt;逐位置&lt;/strong&gt;（position-wise）的两层 MLP：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;FFN(x) = max(0, x·W₁ + b₁)·W₂ + b₂&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;中间用 ReLU（现代模型常用 GELU / SwiGLU）激活，中间维度通常是 d 的 4 倍左右。注意这个 FFN 对每个位置独立作用，不跨 token 共享信息——跨 token 的信息交换全靠注意力层完成。&lt;/p&gt;&lt;p&gt;为什么要 FFN？注意力是&lt;strong&gt;线性&lt;/strong&gt;的加权求和（权重非负且和为 1），线性组合无法表达复杂的非线性映射。FFN 提供非线性变换能力，让模型能学到更复杂的特征。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;残差连接与层归一化&lt;a href=&quot;#残差连接与层归一化&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;残差连接&lt;a href=&quot;#残差连接&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;每一层子层（注意力、FFN）都套上残差：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;x&apos; = x + Sublayer(x)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;好处：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;梯度可以直接从输出流回输入，缓解深层网络的梯度消失&lt;/li&gt;
&lt;li&gt;即使某层学不到东西，也至少可以退化成恒等映射&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;层归一化（LayerNorm）&lt;a href=&quot;#层归一化layernorm&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;对每个 token 的 d 维向量做归一化：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;LayerNorm(x) = (x - μ) / √(σ² + ε) · γ + β&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;μ 和 σ 是该 token 自己那一维向量的均值和标准差。γ、β 是可学习的缩放和平移参数。LayerNorm 让每层输入的分布稳定，训练更快更稳。&lt;/p&gt;&lt;p&gt;现代模型（如 GPT、Llama）普遍采用 &lt;strong&gt;Pre-Norm&lt;/strong&gt; 结构，即先归一化再进子层，这样更深层也能稳定训练。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;从编码器到解码器&lt;a href=&quot;#从编码器到解码器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Transformer 原始论文是 Encoder-Decoder 架构：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;编码器&lt;/strong&gt;：双向注意力（每个 token 能看到全序列），适合理解任务（BERT 就是纯编码器）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;解码器&lt;/strong&gt;：带掩码的&lt;strong&gt;因果注意力&lt;/strong&gt;（只能看到自己及之前的 token），适合生成任务（GPT 就是纯解码器）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;因果注意力的实现很简单：在算完 QKᵀ 后，把上三角部分置为 -∞，softmax 后这些位置的权重就变成 0，模型便”看不到未来”。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;交叉注意力&lt;a href=&quot;#交叉注意力&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;解码器除了自注意力，还有一层交叉注意力（Cross-Attention）：Q 来自解码器，K、V 来自编码器输出。这让解码器在生成时能”查阅”编码器理解过的完整输入。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;训练目标与损失&lt;a href=&quot;#训练目标与损失&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;语言模型（GPT 类）用&lt;strong&gt;自回归&lt;/strong&gt;方式训练：给定前文，预测下一个 token，用交叉熵损失&lt;/li&gt;
&lt;li&gt;掩码语言模型（BERT 类）随机遮住 15% 的 token 让模型预测&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;为什么 Transformer 能”理解”语言&lt;a href=&quot;#为什么-transformer-能理解语言&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;严格说，Transformer 并不”理解”语言，它学到的是 token 之间的&lt;strong&gt;统计规律&lt;/strong&gt;和&lt;strong&gt;分布式表示&lt;/strong&gt;。但正因为注意力机制能让每个词充分参考上下文，加上足够多的数据和参数，模型涌现出语法、常识、推理等能力——这就是大模型”智能”的底层来源。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;小结&lt;a href=&quot;#小结&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;




























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;组件&lt;/th&gt;&lt;th&gt;作用&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;嵌入 + 位置编码&lt;/td&gt;&lt;td&gt;把 token 变成带位置信息的向量&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;多头自注意力&lt;/td&gt;&lt;td&gt;建模任意 token 之间的关系（O(n²)）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;前馈网络&lt;/td&gt;&lt;td&gt;逐位置非线性变换&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;残差 + LayerNorm&lt;/td&gt;&lt;td&gt;稳定深层网络训练&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;因果掩码&lt;/td&gt;&lt;td&gt;让解码器只能看过去&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;理解了这一层，再去看 RAG、Agent、知识库这些上层应用，你会发现它们都建立在”Transformer 能高效处理海量文本”这个地基之上。&lt;/p&gt;&lt;/section&gt;</content:encoded></item></channel></rss>