<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>系统设计 on AI Brew</title>
    <link>https://aibrew.ai/zh/tags/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/</link>
    <description>Recent content in 系统设计 on AI Brew</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Mon, 25 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://aibrew.ai/zh/tags/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>RAG vs Agent：什么时候用哪个（结合我们自己的实战）</title>
      <link>https://aibrew.ai/zh/2026/05/rag-vs-agent%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E7%94%A8%E5%93%AA%E4%B8%AA%E7%BB%93%E5%90%88%E6%88%91%E4%BB%AC%E8%87%AA%E5%B7%B1%E7%9A%84%E5%AE%9E%E6%88%98/</link>
      <pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate>
      <guid>https://aibrew.ai/zh/2026/05/rag-vs-agent%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E7%94%A8%E5%93%AA%E4%B8%AA%E7%BB%93%E5%90%88%E6%88%91%E4%BB%AC%E8%87%AA%E5%B7%B1%E7%9A%84%E5%AE%9E%E6%88%98/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;一句话&lt;/strong&gt; — RAG 从文档里找答案。Agent 去做事。真实系统几乎都是两者结合：RAG 提供上下文，Agent 基于上下文行动。难点不是选哪个，而是分清楚你问题的哪一层属于哪种模式。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;为什么这个对比在现在很重要&#34;&gt;为什么这个对比在现在很重要&lt;/h2&gt;
&lt;p&gt;过去半年发生了两件事，让 RAG vs Agent 不再是纸上谈兵。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一&lt;/strong&gt;：coding agent 在 2025 年 11 月跨过了质量门槛。Simon Willison 在 &lt;a href=&#34;https://simonwillison.net/2026/May/19/5-minute-llms/&#34;&gt;PyCon 闪电演讲&lt;/a&gt;里把这个时刻总结为 agent 从&amp;quot;经常能用&amp;quot;到&amp;quot;基本都能用&amp;quot;——可以作为日常生产力工具了，不再只是 demo。同一个月里 Anthropic、OpenAI、Google 之间的&amp;quot;最强模型&amp;quot;头衔换手了 5 次。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二&lt;/strong&gt;：模型实验室自己在转型。Greg Brockman 直说：&lt;em&gt;&amp;ldquo;模型本身已经不再是产品。&amp;rdquo;&lt;/em&gt; AI21 关闭了模型团队转去做 agent。DeepSeek 第一次组建了 &amp;ldquo;Harness 团队&amp;rdquo;。Latent Space 把这个趋势&lt;a href=&#34;https://www.latent.space/p/ainews-all-model-labs-are-now-agent&#34;&gt;总结为&lt;/a&gt; &lt;em&gt;&amp;ldquo;所有模型实验室现在都是 agent 实验室&amp;rdquo;&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;当训练模型的人都开始说&amp;quot;模型不是产品&amp;quot;的时候，&lt;strong&gt;怎么把模型接到系统里&lt;/strong&gt;就成了真正的工程问题。RAG 和 Agent 是两个主流答案，解决的问题不一样，选错了会浪费大量 token。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;心智模型&#34;&gt;心智模型&lt;/h2&gt;
&lt;h3 id=&#34;rag先检索再生成&#34;&gt;RAG：先检索，再生成&lt;/h3&gt;
&lt;p&gt;RAG 是固定的四步流水线：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;用户提问
   │
   ▼
Embedding 模型 → 向量
   │
   ▼
向量库 / 搜索索引 → 取最相关的 top-K 片段
   │
   ▼
片段拼进 LLM prompt 作为上下文
   │
   ▼
LLM 基于检索内容写一次答案
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;一次检索，一次生成。便宜、确定性高、易于 debug。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>一句话</strong> — RAG 从文档里找答案。Agent 去做事。真实系统几乎都是两者结合：RAG 提供上下文，Agent 基于上下文行动。难点不是选哪个，而是分清楚你问题的哪一层属于哪种模式。</p>
</blockquote>
<hr>
<h2 id="为什么这个对比在现在很重要">为什么这个对比在现在很重要</h2>
<p>过去半年发生了两件事，让 RAG vs Agent 不再是纸上谈兵。</p>
<p><strong>第一</strong>：coding agent 在 2025 年 11 月跨过了质量门槛。Simon Willison 在 <a href="https://simonwillison.net/2026/May/19/5-minute-llms/">PyCon 闪电演讲</a>里把这个时刻总结为 agent 从&quot;经常能用&quot;到&quot;基本都能用&quot;——可以作为日常生产力工具了，不再只是 demo。同一个月里 Anthropic、OpenAI、Google 之间的&quot;最强模型&quot;头衔换手了 5 次。</p>
<p><strong>第二</strong>：模型实验室自己在转型。Greg Brockman 直说：<em>&ldquo;模型本身已经不再是产品。&rdquo;</em> AI21 关闭了模型团队转去做 agent。DeepSeek 第一次组建了 &ldquo;Harness 团队&rdquo;。Latent Space 把这个趋势<a href="https://www.latent.space/p/ainews-all-model-labs-are-now-agent">总结为</a> <em>&ldquo;所有模型实验室现在都是 agent 实验室&rdquo;</em>。</p>
<p>当训练模型的人都开始说&quot;模型不是产品&quot;的时候，<strong>怎么把模型接到系统里</strong>就成了真正的工程问题。RAG 和 Agent 是两个主流答案，解决的问题不一样，选错了会浪费大量 token。</p>
<hr>
<h2 id="心智模型">心智模型</h2>
<h3 id="rag先检索再生成">RAG：先检索，再生成</h3>
<p>RAG 是固定的四步流水线：</p>
<pre tabindex="0"><code>用户提问
   │
   ▼
Embedding 模型 → 向量
   │
   ▼
向量库 / 搜索索引 → 取最相关的 top-K 片段
   │
   ▼
片段拼进 LLM prompt 作为上下文
   │
   ▼
LLM 基于检索内容写一次答案
</code></pre><p>一次检索，一次生成。便宜、确定性高、易于 debug。</p>
<h3 id="agent推理--行动--再推理">Agent：推理 → 行动 → 再推理</h3>
<p>Agent 是一个推理循环：</p>
<pre tabindex="0"><code>用户目标
   │
   ▼
┌──────────────────────────────────────────┐
│   LLM 读取目标                            │
│   ↓                                       │
│   选择工具 (Read / Edit / Bash / ...)     │
│   ↓                                       │
│   Runtime 执行工具                        │
│   ↓                                       │
│   结果反馈给 LLM                          │
│   ↓                                       │
│   LLM 推理下一步该做什么                  │
│   ↓                                       │
│   选下一个工具                            │
│   ↓                                       │
│   ... 循环直到任务完成                    │
└──────────────────────────────────────────┘
</code></pre><p>每一轮都烧 token，每一步都可能失败，错误会沿着循环逐步累积。</p>
<hr>
<h2 id="两个具体例子">两个具体例子</h2>
<h3 id="rag-实战wiki-语义搜索">RAG 实战：Wiki 语义搜索</h3>
<p>我们本地跑了一个知识库——大概 60 篇 markdown，覆盖项目笔记、设计决策、对话记录。直接 <code>grep</code> 行不通，因为问题和答案很少共享关键词。</p>
<p>解决方案是封装了一个 MCP server：</p>
<pre tabindex="0"><code>MCP server: wiki-search
  Backend: bge-m3 embedding 模型
  存储:    60+ 篇 markdown 的余弦相似度索引
  输入:    自然语言查询（中英文都行）
  输出:    文件路径 + 章节标题 + 相似度分数
</code></pre><p>当我问 Claude Code <em>&ldquo;上个月我们对自动管道是怎么决策的？&quot;</em>，会发生这些事：</p>
<ol>
<li>Claude Code 识别需要搜 wiki，调用 <code>search_wiki(&quot;自动管道 决策&quot;)</code></li>
<li>查询被嵌入成 1024 维向量</li>
<li>余弦相似度返回 top 5 相关章节</li>
<li>匹配片段被注入 Claude 的上下文</li>
<li>Claude 基于实际文件回答——不会瞎编</li>
</ol>
<p>这是端到端的 RAG。Wiki 是<strong>被动</strong>的，它被查询，不主动做事。</p>
<h3 id="agent-实战claude-code-改文件">Agent 实战：Claude Code 改文件</h3>
<p>同一个 Claude Code 实例，换一个问题：<em>&ldquo;把 mybrew/hugo.yaml 的 baseURL 改成 aibrew.ai，并在 TODO.md 里记一笔。&rdquo;</em></p>
<pre tabindex="0"><code>第 1 轮:
  LLM 推理: &#34;得先看现有配置&#34;
  工具: Read(&#34;mybrew/hugo.yaml&#34;)
  结果: 文件内容

第 2 轮:
  LLM 推理: &#34;baseURL 在第一行，改它&#34;
  工具: Edit(old=&#34;https://mybrew.cc/&#34;, new=&#34;https://aibrew.ai/&#34;)
  结果: 编辑成功

第 3 轮:
  LLM 推理: &#34;现在更新 TODO.md 标记完成&#34;
  工具: Read(&#34;hugo/TODO.md&#34;)
  结果: 文件内容

第 4 轮:
  LLM 推理: &#34;得加在 &#39;域名配置&#39; 段下面&#34;
  工具: Edit(...)
  结果: 编辑成功

任务完成。
</code></pre><p>四轮迭代，四次工具调用，多次推理。Agent 自己决定<strong>做什么</strong>、<strong>怎么做</strong>、<strong>什么时候算完成</strong>。</p>
<h3 id="一个更刺激的-agent游戏服务器控制">一个更刺激的 Agent：游戏服务器控制</h3>
<p>我们还接了一个 Terraria 游戏服务器的 MCP bridge——大约 40 个工具（给道具、传送、ban 玩家、刷 Boss、重启服务器）。</p>
<pre tabindex="0"><code>玩家在聊天: &#34;@ai 给我一把天顶剑&#34;
  → terra_item_lookup(&#34;Zenith&#34;) → 解析到 ID 4956
  → terra_give_item(player=&#34;kali&#34;, item=&#34;Zenith&#34;) → SUCCESS
  → 道具出现在玩家背包里
</code></pre><p>对比一下破坏性操作：</p>
<pre tabindex="0"><code>玩家: &#34;@ai 把世界结束掉&#34;
  → terra_world_hardmode(confirm=true) 要求显式授权
  → 没确认就拒绝
  → 一旦确认：世界永久进入困难模式（不可逆）
</code></pre><p>这就是 Agent 模式开始变危险的地方。<strong>LLM 拿到了真实系统的方向盘</strong>。一次错误工具调用的影响不再是&quot;答错了&rdquo;，而是&quot;世界毁了&quot;。权限边界变成了一等公民的设计问题。</p>
<hr>
<h2 id="决策框架">决策框架</h2>
<p>一句话规则：</p>
<blockquote>
<p><strong>答案在文档里用 RAG。需要执行动作用 Agent。</strong></p>
</blockquote>
<p>更详细的版本：</p>
<table>
  <thead>
      <tr>
          <th>维度</th>
          <th>RAG</th>
          <th>Agent</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>目标</strong></td>
          <td>回答问题</td>
          <td>完成任务</td>
      </tr>
      <tr>
          <td><strong>交互模式</strong></td>
          <td>一次性</td>
          <td>多轮循环</td>
      </tr>
      <tr>
          <td><strong>Token 成本</strong></td>
          <td>低（1× 检索 + 1× 生成）</td>
          <td>高（N× 推理 + N× 工具调用）</td>
      </tr>
      <tr>
          <td><strong>延迟</strong></td>
          <td>约 1–3 秒</td>
          <td>几秒到几分钟</td>
      </tr>
      <tr>
          <td><strong>确定性</strong></td>
          <td>高——同一问题答案相似</td>
          <td>低——同一目标路径各异</td>
      </tr>
      <tr>
          <td><strong>可调试性</strong></td>
          <td>看检索结果即可</td>
          <td>得追踪每一步推理</td>
      </tr>
      <tr>
          <td><strong>失败模式</strong></td>
          <td>上下文错或缺 → 答得差</td>
          <td>工具错误累积 → 跑偏</td>
      </tr>
      <tr>
          <td><strong>影响范围</strong></td>
          <td>答错就答错</td>
          <td>触碰真实系统</td>
      </tr>
      <tr>
          <td><strong>最适合</strong></td>
          <td>问答、搜索、摘要</td>
          <td>编码、运维、自动化、工作流</td>
      </tr>
  </tbody>
</table>
<h3 id="什么时候必须用-rag">什么时候必须用 RAG</h3>
<ul>
<li><em>&ldquo;我们的内部 API 文档对限流是怎么写的？&rdquo;</em></li>
<li><em>&ldquo;总结一下上周的客户反馈。&rdquo;</em></li>
<li><em>&ldquo;那次认证设计讨论的结论是什么？&rdquo;</em></li>
</ul>
<h3 id="什么时候必须用-agent">什么时候必须用 Agent</h3>
<ul>
<li><em>&ldquo;跑一下测试套件，把失败的修了。&rdquo;</em></li>
<li><em>&ldquo;把昨天 RSS 未读里最有意思的三篇挑出来，写成一篇 roundup。&rdquo;</em></li>
<li><em>&ldquo;把这个目录重构成新的 logging API。&rdquo;</em></li>
</ul>
<h3 id="大部分真实系统两个都要">大部分真实系统：两个都要</h3>
<ul>
<li><em>&ldquo;找到相关的设计文档，提个符合它思路的代码改动。&rdquo;</em>
→ RAG 拉文档，Agent 写代码。</li>
<li><em>&ldquo;看一下 Pinterest 怎么做 MCP 认证的，然后设计我们的认证层。&rdquo;</em>
→ RAG 收集参考，Agent 动手写。</li>
</ul>
<hr>
<h2 id="混合模式rag-驱动的-agent">混合模式：RAG 驱动的 Agent</h2>
<p>大部分 &ldquo;RAG vs Agent&rdquo; 对比都忽略了一件事：<strong>任何真实的 Agent 内部，RAG 都在多个层面同时发生</strong>。</p>
<p>一个 Claude Code session 简化后是这样：</p>
<pre tabindex="0"><code>会话启动:
  └─ 加载 CLAUDE.md 进上下文 ................ 启动时 RAG
  └─ 加载相关的 MEMORY.md ................... 启动时 RAG

用户提问:
  └─ Agent 推理目标
       │
       ├─ 工具调用: search_wiki(&#34;...&#34;) ....... 按需 RAG
       ├─ 工具调用: searxng_web_search(&#34;...&#34;) . 按需 RAG
       ├─ 工具调用: Read(&#34;config.yaml&#34;) ...... 确定性检索
       └─ 工具调用: Edit(...) ................ 行动
</code></pre><p>Agent 循环是外壳。<strong>RAG 调用发生在循环内部</strong>，按需进行，Agent 觉得需要更多依据时就调一次。</p>
<p>这跟 Pinterest 工程师描述的 MCP 部署完全一致：所有 Agent 界面（chat、IDE、CLI）都连同一组 MCP server，其中一部分是纯检索（Presto 查询、文档搜索），一部分是行动（提工单、重启任务）。Agent 在运行时自己决定调哪个。</p>
<hr>
<h2 id="生产案例pinterest-的-mcp-生态">生产案例：Pinterest 的 MCP 生态</h2>
<p>ByteByteGo 对 <a href="https://blog.bytebytego.com/p/how-pinterest-built-a-production">Pinterest MCP 部署</a>的写作是少数公开的生产实践之一。</p>
<h3 id="nm-问题">N×M 问题</h3>
<p>Pinterest 工程师每天要跨多个系统工作——Presto 查数据、Spark 调批处理、Airflow 跑工作流、查内部文档、追 ticket。他们想让 AI agent 能直接进到这些系统里。</p>
<p>直接做的话：</p>
<pre tabindex="0"><code>5 个 agent 界面 × 10 个内部工具 = 50 个定制集成
</code></pre><p>每加一个界面或工具就乘出更多工作量。还有 50 套 OAuth 流程、50 套 token 生命周期、50 套管道。</p>
<h3 id="mcp-的赌注">MCP 的赌注</h3>
<p>Model Context Protocol（MCP）的承诺是把乘法变加法：</p>
<pre tabindex="0"><code>5 个 client + 10 个 server = 15 个标准化集成
</code></pre><p>一个协议两端用。每个界面写一个 client。每个工具包一个 server。它们都说同一种&quot;语言&quot;。</p>
<h3 id="mcp-解决不了的问题">MCP 解决不了的问题</h3>
<p>Pinterest 的教训：<strong>协议本身是最容易的部分</strong>。真正的工程量在协议<strong>周围</strong>的基础设施：</p>
<table>
  <thead>
      <tr>
          <th>关注点</th>
          <th>Pinterest 的方案</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>发现机制</strong></td>
          <td>MCP server 中央注册中心——名字、版本、负责人、endpoint</td>
      </tr>
      <tr>
          <td><strong>认证（第一层）</strong></td>
          <td>服务身份——是哪个 agent runtime 在发起调用</td>
      </tr>
      <tr>
          <td><strong>认证（第二层）</strong></td>
          <td>用户身份——agent 是以谁的权限在操作</td>
      </tr>
      <tr>
          <td><strong>部署</strong></td>
          <td>所有 MCP server 走同一条 CI/CD 管线</td>
      </tr>
      <tr>
          <td><strong>可观测性</strong></td>
          <td>从第一天就埋点——调用频次、延迟、错误率</td>
      </tr>
  </tbody>
</table>
<p><strong>结论</strong>：Agent 越能干，权限和可观测性层就越重要。一个让任何 agent 都能调任何工具的协议，也是让任何被攻陷的 agent 都能调任何工具的协议。</p>
<p>这也是为什么我们更小的部署（3 个 MCP server：<code>searxng</code> / <code>wiki-search</code> / <code>terra_llm_bridge</code>）在破坏性操作上加了硬性的 <code>confirm=true</code> 门——比如 ban 玩家、重启世界、开启 hardmode。三个 server 不需要注册中心，但需要授权。</p>
<hr>
<h2 id="架构对比claude-code-vs-openclaw">架构对比：Claude Code vs OpenClaw</h2>
<p>两个主流 Agent harness 在设计上立场截然不同。ByteByteGo <a href="https://blog.bytebytego.com/p/ep214-claude-code-vs-openclaw-5-design">EP214</a> 从 5 个维度拆解：</p>
<h3 id="1-系统范围">1. 系统范围</h3>
<table>
  <thead>
      <tr>
          <th></th>
          <th>Claude Code</th>
          <th>OpenClaw</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>生命周期</td>
          <td>短命进程</td>
          <td>常驻 daemon</td>
      </tr>
      <tr>
          <td>触发方式</td>
          <td>用户跑 CLI</td>
          <td>WebSocket 从 Discord/Slack/WhatsApp 进来</td>
      </tr>
      <tr>
          <td>退出</td>
          <td>任务完成后</td>
          <td>永不退出</td>
      </tr>
  </tbody>
</table>
<p>Claude Code 是你召唤来干活的工人。OpenClaw 是永远在听的管家。</p>
<h3 id="2-agent-运行时">2. Agent 运行时</h3>
<ul>
<li><strong>Claude Code</strong>：单线程异步循环——<code>Think → Tool Call → Observe → Repeat</code>。一个进程一次只做一件事。</li>
<li><strong>OpenClaw</strong>：每个 session 独立队列。Gateway 把入站消息分发到各自的队列。</li>
</ul>
<h3 id="3-扩展模型">3. 扩展模型</h3>
<ul>
<li><strong>Claude Code</strong>：四个扩展原语，全都接进同一个 Agent 循环：
<ul>
<li><strong>MCP</strong>（外部工具服务）</li>
<li><strong>Plugin</strong>（打包的工具集）</li>
<li><strong>Skill</strong>（模型可调用的命名流程）</li>
<li><strong>Hook</strong>（事件驱动的 shell 命令）</li>
</ul>
</li>
<li><strong>OpenClaw</strong>：manifest-first 插件系统。所有插件先经过中央 Registry 才进入 Agent。</li>
</ul>
<h3 id="4-记忆机制">4. 记忆机制</h3>
<ul>
<li><strong>Claude Code</strong>：<code>CLAUDE.md</code> 在会话启动时加载进上下文。子目录有自己的 <code>CLAUDE.md</code>，<code>cd</code> 进去时追加加载。</li>
<li><strong>OpenClaw</strong>：<code>MEMORY.md</code> 和日常笔记分离存储。结构化片段上做向量 + 关键词的混合搜索。</li>
</ul>
<h3 id="5-多-agent-拓扑">5. 多 Agent 拓扑</h3>
<ul>
<li><strong>Claude Code</strong>：主 Agent → 子 Agent 模式。主 Agent 派遣子 Agent 干活。</li>
<li><strong>OpenClaw</strong>：路由分发模式。入站频道路由到专门的 Agent，再交给共享的子 Agent。</li>
</ul>
<p><strong>更深的规律</strong>：Claude Code 优化的是&quot;一个会话做一件事&quot;。OpenClaw 优化的是&quot;多个对话并发，环境感知存在&quot;。两个都是对的，看你的用例。<strong>别选错了。</strong></p>
<hr>
<h2 id="失败模式与反模式">失败模式与反模式</h2>
<h3 id="rag-失败模式">RAG 失败模式</h3>
<p><strong>1. 检索没命中相关片段。</strong> Embedding 模型觉得问题和答案语义距离很远，其实并不远。缓解：混合搜索（向量 + 关键词）、重排序、查询扩展。</p>
<p><strong>2. 检索返回太多无关片段。</strong> 上下文窗口被噪音填满。缓解：更严格的 top-K、相似度阈值、检索后过滤。</p>
<p><strong>3. 答案根本不在语料库里。</strong> RAG 无中生有不出来——不在索引里的知识，模型还是不知道。缓解：置信度检查，或者 fallback 到 web 搜索。</p>
<p><strong>4. 分块切碎了结构。</strong> 你把一个 markdown 文件从表格中间、代码块中间、论证中间切开了。缓解：结构感知分块（按 heading / paragraph / 语义单元）。</p>
<h3 id="agent-失败模式">Agent 失败模式</h3>
<p><strong>1. 推理跑偏。</strong> Agent 陷在循环里，反复尝试同一个失败方法的变体。缓解：最大步数限制、tool call 去重约束、显式的&quot;我试过什么&quot;记忆。</p>
<p><strong>2. 权限越界。</strong> Agent 做得太多。被要求修一个测试，结果重构了半个文件。缓解：prompt 里写明 scope，工具权限收窄，破坏性操作上 human-in-the-loop。</p>
<p><strong>3. Tool call 级联失败。</strong> 一次错误的工具调用（比如路径写错），后面跟着五步在&quot;修补症状&quot;而不是&quot;找根因&quot;。缓解：工具返回清晰的错误信息，&ldquo;试一次失败就上报&quot;的工具设计。</p>
<p><strong>4. 在错的地方烧钱。</strong> 20 步 Agent 循环的成本是单次 LLM 调用的 20 倍。如果 RAG 能回答的问题用 Agent 做，你就花了 20 倍的钱拿到更差的答案。缓解：先问自己&quot;这能不能一次检索搞定？&ldquo;再决定上不上 Agent。</p>
<h3 id="最糟的反模式rag-够用却上了-agent">最糟的反模式：RAG 够用却上了 Agent</h3>
<p>团队最贵的错误，是给搜索问题做了个 Agent。</p>
<p>如果用户问的是 <em>&ldquo;文档里哪里写了……？&quot;</em>，<strong>你不需要 Agent。你需要一个搜索框接上向量索引</strong>。停止用多步推理烧 token 去找一次检索就能浮上来的东西。</p>
<hr>
<h2 id="给开发者的实战清单">给开发者的实战清单</h2>
<p>如果你正在做新的 AI 功能，按这个顺序问自己：</p>
<ol>
<li><strong>把问题用动词描述。</strong> <em>&ldquo;回答关于 X 的问题&rdquo;</em> → RAG。<em>&ldquo;代替用户做 X&rdquo;</em> → Agent。</li>
<li><strong>如果一次检索能搞定，就一次检索。</strong> 更便宜、更快、更可预测。</li>
<li><strong>上 Agent 就在第一天设计权限。</strong> 不是第 50 天。Pinterest 的双层认证不是 feature，是生存必需。</li>
<li><strong>为混合模式留接口。</strong> 真实 Agent 内部一定会需要 RAG 式检索。挑一个协议（MCP 是显然的默认）一直用。</li>
<li><strong>全链路埋点。</strong> Tool call 次数、检索命中率、跑偏指标。看不到就调不好。</li>
<li><strong>每个任务设预算。</strong> Token 和迭代步数都要设。没有预算的 Agent 会创造性地永远花在错的地方。</li>
</ol>
<hr>
<h2 id="收尾">收尾</h2>
<p>RAG vs Agent 的对立框架在 2023 年合理——那时它们是两个抢同一个工作的范式。到了 2026 年，它们是同一个系统的互补层。</p>
<p>真正有意思的问题不是<em>选哪个</em>，而是 <strong>你问题的哪一层属于哪一层</strong>。分对了就能交付。分错了就要花一个季度重做。</p>
<p>对大多数现在在落地的团队来说，答案长这样：</p>
<pre tabindex="0"><code>                ┌───────────────────────────────┐
                │   Agent 循环（外层）          │
                │   推理 + 工具选择              │
                └──────────┬────────────────────┘
                           │
        ┌──────────────────┼──────────────────┐
        │                  │                  │
        ▼                  ▼                  ▼
    RAG 检索        操作类工具           计算
    （知识）        （修改状态）        （数学、代码）
</code></pre><p>Agent 做决策。RAG 提供信息。工具执行动作。这就是全栈。</p>
<hr>
<p><em>参考来源</em></p>
<ul>
<li><em><a href="https://blog.bytebytego.com/p/ep216-rags-vs-agents">ByteByteGo EP216 — RAGs vs Agents</a></em></li>
<li><em><a href="https://blog.bytebytego.com/p/how-pinterest-built-a-production">ByteByteGo — How Pinterest Built a Production MCP Ecosystem</a></em></li>
<li><em><a href="https://blog.bytebytego.com/p/ep214-claude-code-vs-openclaw-5-design">ByteByteGo EP214 — Claude Code vs. OpenClaw: 5 Design Dimensions</a></em></li>
<li><em><a href="https://simonwillison.net/2026/May/19/5-minute-llms/">Simon Willison — The Last Six Months in LLMs in Five Minutes</a></em></li>
<li><em><a href="https://www.latent.space/p/ainews-all-model-labs-are-now-agent">Latent.Space — All Model Labs Are Now Agent Labs</a></em></li>
</ul>
]]></content:encoded>
    </item>
  </channel>
</rss>
