<?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 Chico's Tech Blog</title><link>https://realtime-ai.chat/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/</link><description>Recent content in 开发工具 on Chico's Tech Blog</description><image><title>Chico's Tech Blog</title><url>https://github.com/chicogong.png</url><link>https://github.com/chicogong.png</link></image><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 14 Jan 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://realtime-ai.chat/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/index.xml" rel="self" type="application/rss+xml"/><item><title>Claude Code 高级功能实战：MCP、Hooks、SubAgent 与自定义命令</title><link>https://realtime-ai.chat/posts/claude-code-advanced-features/</link><pubDate>Fri, 26 Dec 2025 10:00:00 +0800</pubDate><guid>https://realtime-ai.chat/posts/claude-code-advanced-features/</guid><description>Claude Code 高级功能实战:MCP、Hooks、SubAgent 与自定义命令,把 AI 编程从「对话写代码」升级为自动化工作流。</description><content:encoded><![CDATA[<h2 id="前言不只是聊天机器人">前言：不只是聊天机器人</h2>
<p>大多数人使用 Claude Code 只是简单地&quot;对话写代码&quot;。但 Claude Code 的真正威力在于它的<strong>可扩展性</strong>和<strong>自动化能力</strong>。</p>
<p>本文将深入介绍 Claude Code 的四大高级功能：</p>
<ol>
<li><strong>MCP（Model Context Protocol）</strong>：让 Claude 连接外部工具和数据源</li>
<li><strong>Hooks</strong>：在关键节点插入自动化脚本</li>
<li><strong>SubAgent 多智能体架构</strong>：并发执行复杂任务</li>
<li><strong>CLAUDE.md 配置系统</strong>：定义项目规范和工作流</li>
</ol>
<p>这些功能组合起来，能让 Claude Code 从一个&quot;AI助手&quot;进化成&quot;AI工程师团队&quot;。</p>
<hr>
<h2 id="一mcp让-claude-连接一切">一、MCP：让 Claude 连接一切</h2>
<h3 id="11-什么是-mcp">1.1 什么是 MCP？</h3>
<p>MCP（Model Context Protocol）是 Anthropic 推出的开放协议，让 AI 模型能够与外部工具和数据源进行标准化交互。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">传统方式：Claude 只能看到你发给它的文本
</span></span><span class="line"><span class="cl">MCP方式：Claude 可以主动调用工具获取信息
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">┌─────────────┐     MCP协议      ┌─────────────┐
</span></span><span class="line"><span class="cl">│  Claude Code │ ◄────────────► │  外部服务    │
</span></span><span class="line"><span class="cl">└─────────────┘                 └─────────────┘
</span></span><span class="line"><span class="cl">                                    ├── 文件系统
</span></span><span class="line"><span class="cl">                                    ├── 数据库
</span></span><span class="line"><span class="cl">                                    ├── GitHub
</span></span><span class="line"><span class="cl">                                    ├── Slack
</span></span><span class="line"><span class="cl">                                    ├── Google Drive
</span></span><span class="line"><span class="cl">                                    └── 自定义工具
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="12-配置-mcp-服务器">1.2 配置 MCP 服务器</h3>
<p><strong>方法一：命令行添加（推荐）</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 添加文件系统访问</span>
</span></span><span class="line"><span class="cl">claude mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem ~/Documents ~/Projects
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 添加 GitHub 集成</span>
</span></span><span class="line"><span class="cl">claude mcp add github -e <span class="nv">GITHUB_TOKEN</span><span class="o">=</span>your_token -- npx -y @modelcontextprotocol/server-github
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 添加内存服务（持久化记忆）</span>
</span></span><span class="line"><span class="cl">claude mcp add memory -- npx -y @modelcontextprotocol/server-memory
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 查看已配置的服务器</span>
</span></span><span class="line"><span class="cl">claude mcp list
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>方法二：JSON 配置文件</strong></p>
<p>编辑 <code>~/.claude/settings.json</code>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;mcpServers&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;filesystem&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;-y&#34;</span><span class="p">,</span> <span class="s2">&#34;@modelcontextprotocol/server-filesystem&#34;</span><span class="p">,</span> <span class="s2">&#34;/Users/me/Projects&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;env&#34;</span><span class="p">:</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;github&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;-y&#34;</span><span class="p">,</span> <span class="s2">&#34;@modelcontextprotocol/server-github&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;env&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;GITHUB_TOKEN&#34;</span><span class="p">:</span> <span class="s2">&#34;ghp_xxxxxxxxxxxx&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;postgres&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;-y&#34;</span><span class="p">,</span> <span class="s2">&#34;@modelcontextprotocol/server-postgres&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;env&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;DATABASE_URL&#34;</span><span class="p">:</span> <span class="s2">&#34;postgresql://user:pass@localhost:5432/mydb&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="13-常用-mcp-服务器">1.3 常用 MCP 服务器</h3>
<table>
  <thead>
      <tr>
          <th style="text-align: left">服务器</th>
          <th style="text-align: left">用途</th>
          <th style="text-align: left">安装命令</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">filesystem</td>
          <td style="text-align: left">读写本地文件</td>
          <td style="text-align: left"><code>@modelcontextprotocol/server-filesystem</code></td>
      </tr>
      <tr>
          <td style="text-align: left">github</td>
          <td style="text-align: left">GitHub 操作</td>
          <td style="text-align: left"><code>@modelcontextprotocol/server-github</code></td>
      </tr>
      <tr>
          <td style="text-align: left">postgres</td>
          <td style="text-align: left">数据库查询</td>
          <td style="text-align: left"><code>@modelcontextprotocol/server-postgres</code></td>
      </tr>
      <tr>
          <td style="text-align: left">memory</td>
          <td style="text-align: left">持久化记忆</td>
          <td style="text-align: left"><code>@modelcontextprotocol/server-memory</code></td>
      </tr>
      <tr>
          <td style="text-align: left">slack</td>
          <td style="text-align: left">Slack 消息</td>
          <td style="text-align: left"><code>@modelcontextprotocol/server-slack</code></td>
      </tr>
      <tr>
          <td style="text-align: left">puppeteer</td>
          <td style="text-align: left">网页自动化</td>
          <td style="text-align: left"><code>@modelcontextprotocol/server-puppeteer</code></td>
      </tr>
  </tbody>
</table>
<h3 id="14-实战连接数据库查询">1.4 实战：连接数据库查询</h3>
<p>配置 PostgreSQL MCP 后，你可以这样使用：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 帮我查一下最近7天注册的用户数量，按天分组
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 我来查询数据库...
</span></span><span class="line"><span class="cl">[调用 postgres MCP 服务器]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">查询结果：
</span></span><span class="line"><span class="cl">| 日期 | 新增用户数 |
</span></span><span class="line"><span class="cl">|------|-----------|
</span></span><span class="line"><span class="cl">| 12-20 | 156 |
</span></span><span class="line"><span class="cl">| 12-21 | 189 |
</span></span><span class="line"><span class="cl">| 12-22 | 203 |
</span></span><span class="line"><span class="cl">| 12-23 | 178 |
</span></span><span class="line"><span class="cl">| 12-24 | 245 |
</span></span><span class="line"><span class="cl">| 12-25 | 312 |
</span></span><span class="line"><span class="cl">| 12-26 | 198 |
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">总计：1,481 位新用户
</span></span><span class="line"><span class="cl">可以看出 12-25（圣诞节）有明显的注册高峰。
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="二hooks自动化工作流的核心">二、Hooks：自动化工作流的核心</h2>
<h3 id="21-什么是-hooks">2.1 什么是 Hooks？</h3>
<p>Hooks 是 Claude Code 生命周期中的&quot;钩子&quot;，让你在特定事件发生时自动执行脚本。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">用户输入 → [UserPromptSubmit Hook] → Claude 思考
</span></span><span class="line"><span class="cl">                                          ↓
</span></span><span class="line"><span class="cl">                              [PreToolUse Hook] → 工具执行
</span></span><span class="line"><span class="cl">                                                      ↓
</span></span><span class="line"><span class="cl">                                          [PostToolUse Hook] → 返回结果
</span></span><span class="line"><span class="cl">                                                                   ↓
</span></span><span class="line"><span class="cl">                                                          [Stop Hook] → 会话结束
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="22-官方-8-大事件">2.2 官方 8 大事件</h3>
<table>
  <thead>
      <tr>
          <th style="text-align: left">事件</th>
          <th style="text-align: left">触发时机</th>
          <th style="text-align: left">可用变量</th>
          <th style="text-align: left">能否阻断</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left"><code>SessionStart</code></td>
          <td style="text-align: left">会话新建/resume</td>
          <td style="text-align: left">无</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>UserPromptSubmit</code></td>
          <td style="text-align: left">用户按回车前</td>
          <td style="text-align: left"><code>prompt</code></td>
          <td style="text-align: left">✅</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>PreToolUse</code></td>
          <td style="text-align: left">工具准备执行前</td>
          <td style="text-align: left"><code>tool_name</code>, <code>tool_input</code></td>
          <td style="text-align: left">✅</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>PostToolUse</code></td>
          <td style="text-align: left">工具执行结束后</td>
          <td style="text-align: left"><code>tool_name</code>, <code>tool_input</code>, <code>tool_output</code></td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>Notification</code></td>
          <td style="text-align: left">Claude 需要用户输入</td>
          <td style="text-align: left"><code>notification_text</code></td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>Stop</code></td>
          <td style="text-align: left">回答整体结束</td>
          <td style="text-align: left">无</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>SubagentStop</code></td>
          <td style="text-align: left">子代理任务结束</td>
          <td style="text-align: left"><code>subagent_name</code>, <code>result</code></td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>PreCompact</code></td>
          <td style="text-align: left">压缩对话缓存前</td>
          <td style="text-align: left">无</td>
          <td style="text-align: left">❌</td>
      </tr>
  </tbody>
</table>
<h3 id="23-配置-hooks">2.3 配置 Hooks</h3>
<p><strong>全局配置</strong> <code>~/.claude/settings.json</code>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;PreToolUse&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;matcher&#34;</span><span class="p">:</span> <span class="s2">&#34;Bash&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;echo &#39;[AUDIT] Bash command: $TOOL_INPUT&#39; &gt;&gt; ~/.claude/audit.log&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;PostToolUse&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;matcher&#34;</span><span class="p">:</span> <span class="s2">&#34;Write&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span> 
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx prettier --write $FILE_PATH 2&gt;/dev/null || true&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;UserPromptSubmit&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;/path/to/validate-prompt.sh&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>项目级配置</strong> <code>.claude/settings.local.json</code>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;PostToolUse&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;matcher&#34;</span><span class="p">:</span> <span class="s2">&#34;Write&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npm run lint:fix -- $FILE_PATH&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="24-实战示例">2.4 实战示例</h3>
<p><strong>示例1：自动格式化代码</strong></p>
<p>每次 Claude 写入文件后，自动运行 Prettier：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;PostToolUse&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;matcher&#34;</span><span class="p">:</span> <span class="s2">&#34;Write|Edit|MultiEdit&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx prettier --write \&#34;$TOOL_INPUT\&#34; 2&gt;/dev/null || true&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>示例2：危险命令拦截</strong></p>
<p>阻止执行危险的 Bash 命令：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="c1"># ~/.claude/scripts/validate-bash.sh</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">DANGEROUS_PATTERNS</span><span class="o">=</span><span class="s2">&#34;rm -rf|DROP TABLE|DELETE FROM|format|mkfs&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="nb">echo</span> <span class="s2">&#34;</span><span class="nv">$TOOL_INPUT</span><span class="s2">&#34;</span> <span class="p">|</span> grep -qE <span class="s2">&#34;</span><span class="nv">$DANGEROUS_PATTERNS</span><span class="s2">&#34;</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;BLOCKED: 检测到危险命令&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">exit</span> <span class="m">0</span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;PreToolUse&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;matcher&#34;</span><span class="p">:</span> <span class="s2">&#34;Bash&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;~/.claude/scripts/validate-bash.sh&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>示例3：Slack 通知</strong></p>
<p>任务完成后发送 Slack 通知：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;Stop&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;curl -X POST -H &#39;Content-type: application/json&#39; --data &#39;{\&#34;text\&#34;:\&#34;Claude Code 任务完成!\&#34;}&#39; $SLACK_WEBHOOK_URL&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="三subagent多智能体并发架构">三、SubAgent：多智能体并发架构</h2>
<h3 id="31-架构原理">3.1 架构原理</h3>
<p>Claude Code 采用分层多 Agent 架构，通过<strong>主 Agent</strong>和<strong>SubAgent</strong>协作处理复杂任务：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">用户请求
</span></span><span class="line"><span class="cl">    ↓
</span></span><span class="line"><span class="cl">主 Agent (nO 函数)
</span></span><span class="line"><span class="cl">    ↓
</span></span><span class="line"><span class="cl">是否调用 Task 工具？
</span></span><span class="line"><span class="cl">    ├── 否 → 直接处理 → 返回结果
</span></span><span class="line"><span class="cl">    └── 是 → 创建 SubAgent
</span></span><span class="line"><span class="cl">              ↓
</span></span><span class="line"><span class="cl">         并发执行调度器 (UH1)
</span></span><span class="line"><span class="cl">              ↓
</span></span><span class="line"><span class="cl">         多个 SubAgent 并行执行
</span></span><span class="line"><span class="cl">              ↓
</span></span><span class="line"><span class="cl">         结果合成器 (KN5)
</span></span><span class="line"><span class="cl">              ↓
</span></span><span class="line"><span class="cl">         返回合成结果
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="32-核心特性">3.2 核心特性</h3>
<ol>
<li><strong>完全隔离的执行环境</strong>：每个 SubAgent 在独立上下文中运行</li>
<li><strong>智能并发调度</strong>：支持最多 10 个 Agent 并发执行</li>
<li><strong>安全权限控制</strong>：SubAgent 无法调用 Task 工具（防止递归）</li>
<li><strong>高效结果合成</strong>：智能合并多个 Agent 的输出</li>
</ol>
<h3 id="33-task-工具使用">3.3 Task 工具使用</h3>
<p>当你给 Claude Code 一个复杂任务时，它会自动决定是否使用 SubAgent：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 分析这个项目的代码质量，包括：
</span></span><span class="line"><span class="cl">1. 代码结构是否合理
</span></span><span class="line"><span class="cl">2. 是否有潜在的性能问题
</span></span><span class="line"><span class="cl">3. 测试覆盖率如何
</span></span><span class="line"><span class="cl">4. 安全漏洞检查
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 这是一个复杂的分析任务，我会启动多个 SubAgent 并行处理：
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[启动 SubAgent 1] 分析代码结构...
</span></span><span class="line"><span class="cl">[启动 SubAgent 2] 检查性能问题...
</span></span><span class="line"><span class="cl">[启动 SubAgent 3] 分析测试覆盖率...
</span></span><span class="line"><span class="cl">[启动 SubAgent 4] 扫描安全漏洞...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[等待所有 SubAgent 完成...]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[合成结果] 综合所有 Agent 的分析：
</span></span><span class="line"><span class="cl">...
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="34-subagent-可用工具">3.4 SubAgent 可用工具</h3>
<p>SubAgent 可以使用以下工具：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">SUBAGENT_ALLOWED_TOOLS</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;Read&#39;</span><span class="p">,</span>       <span class="c1">// 读取文件
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;Write&#39;</span><span class="p">,</span>      <span class="c1">// 写入文件
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;Edit&#39;</span><span class="p">,</span>       <span class="c1">// 编辑文件
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;MultiEdit&#39;</span><span class="p">,</span>  <span class="c1">// 多处编辑
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;Glob&#39;</span><span class="p">,</span>       <span class="c1">// 文件搜索
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;Grep&#39;</span><span class="p">,</span>       <span class="c1">// 内容搜索
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;Bash&#39;</span><span class="p">,</span>       <span class="c1">// 执行命令
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;WebFetch&#39;</span><span class="p">,</span>   <span class="c1">// 网页获取
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;WebSearch&#39;</span><span class="p">,</span>  <span class="c1">// 网络搜索
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;TodoRead&#39;</span><span class="p">,</span>   <span class="c1">// 读取任务
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;TodoWrite&#39;</span><span class="p">,</span>  <span class="c1">// 写入任务
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// 被禁用的工具（防止递归）
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">const</span> <span class="nx">BLOCKED_TOOLS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Task&#39;</span><span class="p">];</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="35-并发执行示例">3.5 并发执行示例</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 帮我同时搜索项目中所有的 TODO 注释、FIXME 标记和废弃的 API 调用
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 我会并行启动 3 个搜索任务：
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[SubAgent 1] 搜索 TODO 注释...
</span></span><span class="line"><span class="cl">[SubAgent 2] 搜索 FIXME 标记...
</span></span><span class="line"><span class="cl">[SubAgent 3] 搜索废弃 API 调用...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">--- 3 秒后 ---
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[SubAgent 1 完成] 找到 23 个 TODO
</span></span><span class="line"><span class="cl">[SubAgent 2 完成] 找到 8 个 FIXME
</span></span><span class="line"><span class="cl">[SubAgent 3 完成] 找到 5 个废弃 API
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[合成结果]
</span></span><span class="line"><span class="cl">## 代码待办事项汇总
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">### TODO (23处)
</span></span><span class="line"><span class="cl">- src/api/user.ts:45 - TODO: 添加缓存
</span></span><span class="line"><span class="cl">- src/components/Table.tsx:123 - TODO: 优化渲染性能
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">### FIXME (8处)
</span></span><span class="line"><span class="cl">- src/utils/date.ts:67 - FIXME: 时区处理有问题
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">### 废弃 API (5处)
</span></span><span class="line"><span class="cl">- src/legacy/auth.ts:12 - 使用了已废弃的 crypto.createCipher
</span></span><span class="line"><span class="cl">...
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="四claudemd-配置系统">四、CLAUDE.md 配置系统</h2>
<h3 id="41-三级配置文件">4.1 三级配置文件</h3>
<p>Claude Code 使用三类 <code>.md</code> 文件进行配置，优先级从高到低：</p>
<table>
  <thead>
      <tr>
          <th style="text-align: left">文件</th>
          <th style="text-align: left">位置</th>
          <th style="text-align: left">作用范围</th>
          <th style="text-align: left">版本控制</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left"><code>CLAUDE.local.md</code></td>
          <td style="text-align: left">项目根目录</td>
          <td style="text-align: left">当前用户</td>
          <td style="text-align: left">❌ 不提交</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>CLAUDE.md</code></td>
          <td style="text-align: left">项目根目录</td>
          <td style="text-align: left">当前项目</td>
          <td style="text-align: left">✅ 提交</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>~/.claude/CLAUDE.md</code></td>
          <td style="text-align: left">用户目录</td>
          <td style="text-align: left">所有项目</td>
          <td style="text-align: left">❌ 不提交</td>
      </tr>
  </tbody>
</table>
<h3 id="42-创建项目配置">4.2 创建项目配置</h3>
<p>使用 <code>/init</code> 命令自动生成：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">claude
</span></span><span class="line"><span class="cl">&gt; /init
</span></span></code></pre></td></tr></table>
</div>
</div><p>这会在项目根目录创建 <code>CLAUDE.md</code> 文件。</p>
<h3 id="43-配置示例">4.3 配置示例</h3>
<p><strong>项目级 CLAUDE.md</strong>（提交到 Git）：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># 项目配置
</span></span></span><span class="line"><span class="cl"><span class="gh"></span>
</span></span><span class="line"><span class="cl"><span class="gu">## 项目概述
</span></span></span><span class="line"><span class="cl"><span class="gu"></span>这是一个 Next.js 14 电商平台，使用 TypeScript + Prisma + PostgreSQL。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 技术栈
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 框架：Next.js 14 (App Router)
</span></span><span class="line"><span class="cl"><span class="k">-</span> 语言：TypeScript 5.x (严格模式)
</span></span><span class="line"><span class="cl"><span class="k">-</span> 数据库：PostgreSQL + Prisma ORM
</span></span><span class="line"><span class="cl"><span class="k">-</span> 样式：Tailwind CSS
</span></span><span class="line"><span class="cl"><span class="k">-</span> 状态管理：Zustand
</span></span><span class="line"><span class="cl"><span class="k">-</span> 测试：Vitest + Testing Library
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 代码规范
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 使用 ESLint + Prettier 格式化
</span></span><span class="line"><span class="cl"><span class="k">-</span> 组件使用函数式写法
</span></span><span class="line"><span class="cl"><span class="k">-</span> 所有函数必须有 JSDoc 注释
</span></span><span class="line"><span class="cl"><span class="k">-</span> 禁止使用 any 类型
</span></span><span class="line"><span class="cl"><span class="k">-</span> 错误处理使用自定义 Error 类
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 目录结构
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>src/
├── app/           # Next.js App Router 页面
├── components/    # React 组件
├── lib/           # 工具函数和配置
├── hooks/         # 自定义 Hooks
├── types/         # TypeScript 类型定义
└── prisma/        # 数据库 Schema</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">## 常用命令
</span></span><span class="line"><span class="cl">- `npm run dev` - 启动开发服务器
</span></span><span class="line"><span class="cl">- `npm run build` - 构建生产版本
</span></span><span class="line"><span class="cl">- `npm run test` - 运行测试
</span></span><span class="line"><span class="cl">- `npm run lint` - 代码检查
</span></span><span class="line"><span class="cl">- `npx prisma studio` - 打开数据库管理界面
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">## Git 提交规范
</span></span><span class="line"><span class="cl">- feat: 新功能
</span></span><span class="line"><span class="cl">- fix: 修复 Bug
</span></span><span class="line"><span class="cl">- refactor: 重构
</span></span><span class="line"><span class="cl">- docs: 文档
</span></span><span class="line"><span class="cl">- test: 测试
</span></span><span class="line"><span class="cl">- chore: 构建/工具
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">## 注意事项
</span></span><span class="line"><span class="cl">- 数据库敏感操作需要人工确认
</span></span><span class="line"><span class="cl">- 不要直接修改 prisma/migrations 目录
</span></span><span class="line"><span class="cl">- API 路由必须有权限验证
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>个人本地配置 CLAUDE.local.md</strong>（不提交）：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># 本地配置
</span></span></span><span class="line"><span class="cl"><span class="gh"></span>
</span></span><span class="line"><span class="cl"><span class="gu">## 个人偏好
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 我喜欢详细的注释
</span></span><span class="line"><span class="cl"><span class="k">-</span> 代码示例要完整可运行
</span></span><span class="line"><span class="cl"><span class="k">-</span> 解释时使用中文
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 本地环境
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> Node.js: v20.10.0
</span></span><span class="line"><span class="cl"><span class="k">-</span> 数据库：本地 Docker 容器
</span></span><span class="line"><span class="cl"><span class="k">-</span> 端口：3000 (开发), 5432 (PostgreSQL)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 调试配置
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 使用 VS Code 调试
</span></span><span class="line"><span class="cl"><span class="k">-</span> 断点调试端口: 9229
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>全局配置 ~/.claude/CLAUDE.md</strong>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># 全局配置
</span></span></span><span class="line"><span class="cl"><span class="gh"></span>
</span></span><span class="line"><span class="cl"><span class="gu">## 通用规范
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 使用 2 空格缩进
</span></span><span class="line"><span class="cl"><span class="k">-</span> 变量命名使用 camelCase
</span></span><span class="line"><span class="cl"><span class="k">-</span> 常量使用 UPPER_SNAKE_CASE
</span></span><span class="line"><span class="cl"><span class="k">-</span> 组件使用 PascalCase
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 默认工具
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 包管理器：pnpm
</span></span><span class="line"><span class="cl"><span class="k">-</span> 版本控制：Git
</span></span><span class="line"><span class="cl"><span class="k">-</span> 编辑器：VS Code
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 安全规则
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 不要在代码中硬编码密钥
</span></span><span class="line"><span class="cl"><span class="k">-</span> 敏感文件（.env）不要提交
</span></span><span class="line"><span class="cl"><span class="k">-</span> API 调用必须有超时设置
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="44-自定义斜杠命令">4.4 自定义斜杠命令</h3>
<p>在 <code>.claude/commands/</code> 目录下创建 Markdown 文件，即可定义自定义命令：</p>
<p><strong>文件结构</strong>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">.claude/
</span></span><span class="line"><span class="cl">└── commands/
</span></span><span class="line"><span class="cl">    ├── review.md      # /review 命令
</span></span><span class="line"><span class="cl">    ├── test.md        # /test 命令
</span></span><span class="line"><span class="cl">    └── deploy.md      # /deploy 命令
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>示例：review.md</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">请对当前项目进行代码审查：
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">1.</span> 检查代码质量
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否有重复代码
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 函数是否过长
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 命名是否清晰
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">2.</span> 检查潜在问题
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否有未处理的错误
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否有性能问题
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否有安全漏洞
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">3.</span> 检查最佳实践
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否遵循项目规范
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否有充分的测试
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否有必要的注释
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">请提供详细的改进建议。
</span></span></code></pre></td></tr></table>
</div>
</div><p>使用：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&gt; /review
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="五综合实战打造个人-ai-工作流">五、综合实战：打造个人 AI 工作流</h2>
<h3 id="51-完整配置示例">5.1 完整配置示例</h3>
<p>结合以上所有功能，配置一个完整的 AI 开发工作流：</p>
<p><strong>~/.claude/settings.json</strong>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;mcpServers&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;filesystem&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;-y&#34;</span><span class="p">,</span> <span class="s2">&#34;@modelcontextprotocol/server-filesystem&#34;</span><span class="p">,</span> <span class="s2">&#34;~/Projects&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;env&#34;</span><span class="p">:</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;github&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;-y&#34;</span><span class="p">,</span> <span class="s2">&#34;@modelcontextprotocol/server-github&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;env&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;GITHUB_TOKEN&#34;</span><span class="p">:</span> <span class="s2">&#34;${GITHUB_TOKEN}&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;PostToolUse&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;matcher&#34;</span><span class="p">:</span> <span class="s2">&#34;Write|Edit&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx prettier --write \&#34;$FILE_PATH\&#34; 2&gt;/dev/null || true&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;Stop&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;echo \&#34;[$(date)] Task completed\&#34; &gt;&gt; ~/.claude/activity.log&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;permissions&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;allow&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Bash(npm run *)&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Bash(git *)&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Bash(npx prettier *)&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;deny&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Bash(rm -rf *)&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Bash(sudo *)&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="52-工作流示例">5.2 工作流示例</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">1. 启动项目
</span></span><span class="line"><span class="cl">   &gt; claude
</span></span><span class="line"><span class="cl">   &gt; /init  # 生成 CLAUDE.md
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2. 查看项目状态
</span></span><span class="line"><span class="cl">   &gt; /review  # 运行自定义代码审查命令
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">3. 开发新功能
</span></span><span class="line"><span class="cl">   &gt; 帮我实现用户头像上传功能，要支持裁剪和压缩
</span></span><span class="line"><span class="cl">   
</span></span><span class="line"><span class="cl">   [Claude 自动]:
</span></span><span class="line"><span class="cl">   - 分析项目结构
</span></span><span class="line"><span class="cl">   - 创建组件文件（自动格式化）
</span></span><span class="line"><span class="cl">   - 编写测试用例
</span></span><span class="line"><span class="cl">   - 更新文档
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">4. 提交代码
</span></span><span class="line"><span class="cl">   &gt; 提交这些改动，写一个清晰的 commit message
</span></span><span class="line"><span class="cl">   
</span></span><span class="line"><span class="cl">   [Claude 使用 GitHub MCP]:
</span></span><span class="line"><span class="cl">   - 生成 commit message
</span></span><span class="line"><span class="cl">   - 创建 commit
</span></span><span class="line"><span class="cl">   - 可选：创建 PR
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="总结">总结</h2>
<p>Claude Code 的高级功能让它从一个简单的 AI 聊天工具，变成了一个真正的<strong>AI 开发平台</strong>：</p>
<table>
  <thead>
      <tr>
          <th style="text-align: left">功能</th>
          <th style="text-align: left">作用</th>
          <th style="text-align: left">收益</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left"><strong>MCP</strong></td>
          <td style="text-align: left">连接外部工具和数据</td>
          <td style="text-align: left">扩展能力边界</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>Hooks</strong></td>
          <td style="text-align: left">自动化工作流</td>
          <td style="text-align: left">减少重复操作</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>SubAgent</strong></td>
          <td style="text-align: left">并发处理复杂任务</td>
          <td style="text-align: left">提升效率</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>CLAUDE.md</strong></td>
          <td style="text-align: left">定义项目规范</td>
          <td style="text-align: left">保持一致性</td>
      </tr>
  </tbody>
</table>
<p>掌握这些功能，你就能把 Claude Code 打造成专属的 AI 工程师团队。</p>
<hr>
<h2 id="参考资源">参考资源</h2>
<ul>
<li><a href="https://docs.anthropic.com/claude-code">Claude Code 官方文档</a></li>
<li><a href="https://modelcontextprotocol.io">MCP 协议规范</a></li>
<li><a href="https://github.com/modelcontextprotocol/servers">MCP 服务器列表</a></li>
</ul>
]]></content:encoded></item><item><title>Dify vs Coze vs FastGPT：低代码AI平台终极对决</title><link>https://realtime-ai.chat/posts/lowcode-ai-platforms/</link><pubDate>Wed, 14 Jan 2026 10:00:00 +0800</pubDate><guid>https://realtime-ai.chat/posts/lowcode-ai-platforms/</guid><description>Dify、Coze、FastGPT 三大低代码 AI 平台横向对决:工作流能力、适用场景与选型建议。</description><content:encoded><![CDATA[<h2 id="低代码ai平台是什么">低代码AI平台是什么？</h2>
<p>简单说：<strong>不写代码（或少写代码），通过可视化界面搭建AI应用</strong>。</p>
<p>传统方式：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># 写一堆代码...</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">langchain</span> <span class="kn">import</span> <span class="o">...</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openai</span> <span class="kn">import</span> <span class="o">...</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 配置模型</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 写提示词</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 处理输入输出</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 搭建API</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 部署上线</span>
</span></span><span class="line"><span class="cl"><span class="c1"># ... 几百行代码</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>低代码平台：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">拖入&#34;输入节点&#34; → 拖入&#34;大模型节点&#34; → 拖入&#34;输出节点&#34; → 连线 → 发布
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>5分钟搞定一个AI客服、知识库问答、智能助手</strong>。</p>
<hr>
<h2 id="三大平台概览">三大平台概览</h2>
<table>
  <thead>
      <tr>
          <th style="text-align: left">平台</th>
          <th style="text-align: left">背景</th>
          <th style="text-align: left">特点</th>
          <th style="text-align: left">定位</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left"><strong>Dify</strong></td>
          <td style="text-align: left">开源社区</td>
          <td style="text-align: left">功能全面，可私有化</td>
          <td style="text-align: left">企业级应用</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>Coze</strong></td>
          <td style="text-align: left">字节跳动</td>
          <td style="text-align: left">简单易用，集成丰富</td>
          <td style="text-align: left">个人/小团队</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>FastGPT</strong></td>
          <td style="text-align: left">开源社区</td>
          <td style="text-align: left">知识库专精</td>
          <td style="text-align: left">知识问答场景</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="dify全能型选手">Dify：全能型选手</h2>
<h3 id="简介">简介</h3>
<p>Dify 是目前功能最全面的开源低代码AI平台，由LangGenius团队开发。</p>
<ul>
<li>官网：https://dify.ai</li>
<li>GitHub：https://github.com/langgenius/dify</li>
<li>Stars：50k+</li>
</ul>
<h3 id="核心功能">核心功能</h3>
<p><strong>1. 可视化工作流</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">┌─────────┐    ┌─────────┐    ┌─────────┐
</span></span><span class="line"><span class="cl">│  开始   │ →  │ LLM调用 │ →  │ 条件判断│
</span></span><span class="line"><span class="cl">└─────────┘    └─────────┘    └─────────┘
</span></span><span class="line"><span class="cl">                                  ↓
</span></span><span class="line"><span class="cl">                    ┌─────────────┴─────────────┐
</span></span><span class="line"><span class="cl">                    ↓                           ↓
</span></span><span class="line"><span class="cl">              ┌─────────┐                 ┌─────────┐
</span></span><span class="line"><span class="cl">              │ 知识库  │                 │ 代码执行│
</span></span><span class="line"><span class="cl">              └─────────┘                 └─────────┘
</span></span></code></pre></td></tr></table>
</div>
</div><p>支持节点：</p>
<ul>
<li>LLM（GPT/Claude/Qwen等）</li>
<li>知识库检索</li>
<li>条件分支</li>
<li>代码执行（Python/JavaScript）</li>
<li>HTTP请求</li>
<li>变量赋值</li>
<li>迭代循环</li>
</ul>
<p><strong>2. 知识库（RAG）</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">上传文档 → 自动分块 → 向量化 → 存储 → 检索增强
</span></span></code></pre></td></tr></table>
</div>
</div><p>支持格式：PDF、Word、Markdown、TXT、网页链接</p>
<p><strong>3. 多模型支持</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="l">支持的模型：</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">OpenAI</span><span class="p">:</span><span class="w"> </span><span class="l">GPT-4o, GPT-4, GPT-3.5</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">Anthropic</span><span class="p">:</span><span class="w"> </span><span class="l">Claude 3.5, Claude 3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">Google</span><span class="p">:</span><span class="w"> </span><span class="l">Gemini Pro</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">国产</span><span class="p">:</span><span class="w"> </span><span class="l">通义千问, 文心一言, DeepSeek, Moonshot</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">本地</span><span class="p">:</span><span class="w"> </span><span class="l">Ollama, LocalAI</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p><strong>4. API &amp; 嵌入</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># 调用你搭建的应用</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;https://api.dify.ai/v1/chat-messages&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;Authorization&#39;</span><span class="p">:</span> <span class="s1">&#39;Bearer your-api-key&#39;</span><span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="n">json</span><span class="o">=</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="s1">&#39;inputs&#39;</span><span class="p">:</span> <span class="p">{},</span>
</span></span><span class="line"><span class="cl">        <span class="s1">&#39;query&#39;</span><span class="p">:</span> <span class="s1">&#39;你好&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s1">&#39;user&#39;</span><span class="p">:</span> <span class="s1">&#39;user-123&#39;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>还可以一键嵌入到网站：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;https://dify.ai/embed.js&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="实战搭建客服机器人">实战：搭建客服机器人</h3>
<p><strong>Step 1：创建应用</strong></p>
<p>选择&quot;聊天助手&quot; → 输入应用名称</p>
<p><strong>Step 2：配置提示词</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">你是一名专业的电商客服，名叫小智。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">职责：
</span></span><span class="line"><span class="cl">1. 回答商品相关问题
</span></span><span class="line"><span class="cl">2. 处理订单查询
</span></span><span class="line"><span class="cl">3. 解决售后问题
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">规则：
</span></span><span class="line"><span class="cl">- 语气友好亲切
</span></span><span class="line"><span class="cl">- 不知道的问题说&#34;我帮您转接人工客服&#34;
</span></span><span class="line"><span class="cl">- 涉及退款说&#34;请提供订单号，我帮您查询&#34;
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>Step 3：添加知识库</strong></p>
<p>上传：</p>
<ul>
<li>产品手册.pdf</li>
<li>FAQ文档.md</li>
<li>退换货政策.docx</li>
</ul>
<p><strong>Step 4：测试发布</strong></p>
<p>在预览窗口测试对话 → 满意后点击&quot;发布&quot;</p>
<p><strong>Step 5：获取API</strong></p>
<p>复制API Key → 集成到你的网站/App</p>
<h3 id="dify-优缺点">Dify 优缺点</h3>
<p><strong>优点</strong>：</p>
<ul>
<li>开源可私有化部署</li>
<li>功能最全面</li>
<li>工作流设计灵活</li>
<li>社区活跃，更新快</li>
<li>支持团队协作</li>
</ul>
<p><strong>缺点</strong>：</p>
<ul>
<li>学习曲线略陡</li>
<li>部分高级功能需要编码</li>
<li>私有化部署需要运维能力</li>
</ul>
<hr>
<h2 id="coze简单好用派">Coze：简单好用派</h2>
<h3 id="简介-1">简介</h3>
<p>Coze（扣子）是字节跳动推出的AI Bot开发平台。</p>
<ul>
<li>国际版：https://coze.com</li>
<li>国内版：https://coze.cn</li>
</ul>
<h3 id="核心功能-1">核心功能</h3>
<p><strong>1. Bot创建（超简单）</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">输入Bot名字 → 写一段人设 → 选择模型 → 完成！
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>2. 插件市场</strong></p>
<p>Coze最大的亮点是丰富的插件生态：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">内置插件：
</span></span><span class="line"><span class="cl">- 联网搜索
</span></span><span class="line"><span class="cl">- 图片生成（DALL-E/MidJourney）
</span></span><span class="line"><span class="cl">- 代码执行
</span></span><span class="line"><span class="cl">- 文档解析
</span></span><span class="line"><span class="cl">- 数据分析
</span></span><span class="line"><span class="cl">...200+插件
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">第三方插件：
</span></span><span class="line"><span class="cl">- 天气查询
</span></span><span class="line"><span class="cl">- 股票行情
</span></span><span class="line"><span class="cl">- 快递追踪
</span></span><span class="line"><span class="cl">- 翻译服务
</span></span><span class="line"><span class="cl">- ...
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>3. 工作流（Flow）</strong></p>
<p>可视化编排，但比Dify简单：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">触发器 → 处理节点 → 输出
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>4. 多平台发布</strong></p>
<p>一键发布到：</p>
<ul>
<li>网页</li>
<li>Discord</li>
<li>Telegram</li>
<li>Slack</li>
<li>飞书</li>
<li>微信（公众号/小程序）</li>
</ul>
<h3 id="实战搭建新闻摘要bot">实战：搭建新闻摘要Bot</h3>
<p><strong>Step 1：创建Bot</strong></p>
<p>名称：每日新闻助手</p>
<p>人设提示词：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">你是一个新闻摘要助手。
</span></span><span class="line"><span class="cl">用户发送新闻链接，你负责：
</span></span><span class="line"><span class="cl">1. 提取关键信息
</span></span><span class="line"><span class="cl">2. 生成3句话摘要
</span></span><span class="line"><span class="cl">3. 给出重要性评分（1-5星）
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>Step 2：添加插件</strong></p>
<ul>
<li>启用&quot;网页读取&quot;插件</li>
<li>启用&quot;联网搜索&quot;插件</li>
</ul>
<p><strong>Step 3：配置工作流</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">用户输入URL 
</span></span><span class="line"><span class="cl">    ↓
</span></span><span class="line"><span class="cl">[网页读取插件] 获取内容
</span></span><span class="line"><span class="cl">    ↓
</span></span><span class="line"><span class="cl">[LLM节点] 生成摘要
</span></span><span class="line"><span class="cl">    ↓
</span></span><span class="line"><span class="cl">返回结果
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>Step 4：测试发布</strong></p>
<p>发布到 Discord/Telegram，随时随地用！</p>
<h3 id="coze-优缺点">Coze 优缺点</h3>
<p><strong>优点</strong>：</p>
<ul>
<li>上手极简，5分钟搞定</li>
<li>插件生态丰富</li>
<li>多平台发布方便</li>
<li>免费额度慷慨</li>
<li>支持豆包模型（免费）</li>
</ul>
<p><strong>缺点</strong>：</p>
<ul>
<li>不开源，无法私有化</li>
<li>复杂场景支持有限</li>
<li>数据存储在云端</li>
<li>企业级功能较弱</li>
</ul>
<hr>
<h2 id="fastgpt知识库专家">FastGPT：知识库专家</h2>
<h3 id="简介-2">简介</h3>
<p>FastGPT 专注于知识库问答场景，是构建企业知识库的首选。</p>
<ul>
<li>官网：https://fastgpt.in</li>
<li>GitHub：https://github.com/labring/FastGPT</li>
<li>Stars：20k+</li>
</ul>
<h3 id="核心功能-2">核心功能</h3>
<p><strong>1. 高级RAG</strong></p>
<p>FastGPT的知识库检索做得最细致：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">文档上传
</span></span><span class="line"><span class="cl">    ↓
</span></span><span class="line"><span class="cl">智能分块（支持多种策略）
</span></span><span class="line"><span class="cl">    ↓
</span></span><span class="line"><span class="cl">多路召回（向量+关键词+全文）
</span></span><span class="line"><span class="cl">    ↓
</span></span><span class="line"><span class="cl">重排序（Rerank）
</span></span><span class="line"><span class="cl">    ↓
</span></span><span class="line"><span class="cl">上下文压缩
</span></span><span class="line"><span class="cl">    ↓
</span></span><span class="line"><span class="cl">生成回答
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>2. 对话日志分析</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">┌─────────────────────────────────────────┐
</span></span><span class="line"><span class="cl">│  问题统计    回答质量    用户满意度      │
</span></span><span class="line"><span class="cl">│  ████████    ████████    ████████       │
</span></span><span class="line"><span class="cl">│                                          │
</span></span><span class="line"><span class="cl">│  高频问题 Top 10                         │
</span></span><span class="line"><span class="cl">│  1. 如何退款？ (234次)                   │
</span></span><span class="line"><span class="cl">│  2. 发货时间？ (189次)                   │
</span></span><span class="line"><span class="cl">│  ...                                     │
</span></span><span class="line"><span class="cl">└─────────────────────────────────────────┘
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>3. 应用编排</strong></p>
<p>支持复杂的对话流程设计：</p>
<ul>
<li>意图识别</li>
<li>多轮对话</li>
<li>表单收集</li>
<li>人工转接</li>
</ul>
<h3 id="实战搭建企业知识库">实战：搭建企业知识库</h3>
<p><strong>Step 1：上传文档</strong></p>
<p>支持批量上传：</p>
<ul>
<li>员工手册</li>
<li>产品文档</li>
<li>技术规范</li>
<li>历史工单</li>
</ul>
<p><strong>Step 2：配置索引</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">分块策略</span><span class="p">:</span><span class="w"> </span><span class="l">按段落</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">块大小</span><span class="p">:</span><span class="w"> </span><span class="l">500字</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">重叠</span><span class="p">:</span><span class="w"> </span><span class="l">50字</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">向量模型</span><span class="p">:</span><span class="w"> </span><span class="l">text-embedding-3-small</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p><strong>Step 3：配置检索</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">召回方式</span><span class="p">:</span><span class="w"> </span><span class="l">混合检索</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">召回数量</span><span class="p">:</span><span class="w"> </span><span class="m">5</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">相似度阈值</span><span class="p">:</span><span class="w"> </span><span class="m">0.7</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">启用重排序</span><span class="p">:</span><span class="w"> </span><span class="l">是</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p><strong>Step 4：设置问答</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">系统提示词：
</span></span><span class="line"><span class="cl">你是公司的AI助手。基于知识库内容回答问题。
</span></span><span class="line"><span class="cl">如果知识库没有相关信息，请说&#34;这个问题我需要确认后回复您&#34;。
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>Step 5：嵌入网站</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">iframe</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;https://fastgpt.in/chat/xxx&#34;</span> <span class="na">width</span><span class="o">=</span><span class="s">&#34;400&#34;</span> <span class="na">height</span><span class="o">=</span><span class="s">&#34;600&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">iframe</span><span class="p">&gt;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="fastgpt-优缺点">FastGPT 优缺点</h3>
<p><strong>优点</strong>：</p>
<ul>
<li>知识库功能最强</li>
<li>RAG效果最好</li>
<li>开源可私有化</li>
<li>对话分析完善</li>
<li>部署简单（Docker一键）</li>
</ul>
<p><strong>缺点</strong>：</p>
<ul>
<li>工作流相对简单</li>
<li>插件生态不如Coze</li>
<li>非知识库场景较弱</li>
</ul>
<hr>
<h2 id="横向对比">横向对比</h2>
<h3 id="功能对比">功能对比</h3>
<table>
  <thead>
      <tr>
          <th style="text-align: left">功能</th>
          <th style="text-align: left">Dify</th>
          <th style="text-align: left">Coze</th>
          <th style="text-align: left">FastGPT</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">可视化工作流</td>
          <td style="text-align: left">⭐⭐⭐⭐⭐</td>
          <td style="text-align: left">⭐⭐⭐</td>
          <td style="text-align: left">⭐⭐⭐</td>
      </tr>
      <tr>
          <td style="text-align: left">知识库RAG</td>
          <td style="text-align: left">⭐⭐⭐⭐</td>
          <td style="text-align: left">⭐⭐⭐</td>
          <td style="text-align: left">⭐⭐⭐⭐⭐</td>
      </tr>
      <tr>
          <td style="text-align: left">插件生态</td>
          <td style="text-align: left">⭐⭐⭐</td>
          <td style="text-align: left">⭐⭐⭐⭐⭐</td>
          <td style="text-align: left">⭐⭐</td>
      </tr>
      <tr>
          <td style="text-align: left">多模型支持</td>
          <td style="text-align: left">⭐⭐⭐⭐⭐</td>
          <td style="text-align: left">⭐⭐⭐⭐</td>
          <td style="text-align: left">⭐⭐⭐⭐</td>
      </tr>
      <tr>
          <td style="text-align: left">多平台发布</td>
          <td style="text-align: left">⭐⭐⭐</td>
          <td style="text-align: left">⭐⭐⭐⭐⭐</td>
          <td style="text-align: left">⭐⭐⭐</td>
      </tr>
      <tr>
          <td style="text-align: left">私有化部署</td>
          <td style="text-align: left">⭐⭐⭐⭐⭐</td>
          <td style="text-align: left">❌</td>
          <td style="text-align: left">⭐⭐⭐⭐⭐</td>
      </tr>
      <tr>
          <td style="text-align: left">上手难度</td>
          <td style="text-align: left">中等</td>
          <td style="text-align: left">简单</td>
          <td style="text-align: left">简单</td>
      </tr>
  </tbody>
</table>
<h3 id="适用场景">适用场景</h3>
<table>
  <thead>
      <tr>
          <th style="text-align: left">场景</th>
          <th style="text-align: left">推荐平台</th>
          <th style="text-align: left">理由</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">企业级应用</td>
          <td style="text-align: left">Dify</td>
          <td style="text-align: left">功能全面，可私有化</td>
      </tr>
      <tr>
          <td style="text-align: left">个人Bot</td>
          <td style="text-align: left">Coze</td>
          <td style="text-align: left">简单好用，免费额度多</td>
      </tr>
      <tr>
          <td style="text-align: left">知识库问答</td>
          <td style="text-align: left">FastGPT</td>
          <td style="text-align: left">RAG效果最好</td>
      </tr>
      <tr>
          <td style="text-align: left">快速原型</td>
          <td style="text-align: left">Coze</td>
          <td style="text-align: left">5分钟出Demo</td>
      </tr>
      <tr>
          <td style="text-align: left">复杂工作流</td>
          <td style="text-align: left">Dify</td>
          <td style="text-align: left">流程设计最灵活</td>
      </tr>
      <tr>
          <td style="text-align: left">数据敏感场景</td>
          <td style="text-align: left">Dify/FastGPT</td>
          <td style="text-align: left">支持私有化部署</td>
      </tr>
  </tbody>
</table>
<h3 id="价格对比">价格对比</h3>
<table>
  <thead>
      <tr>
          <th style="text-align: left">平台</th>
          <th style="text-align: left">免费额度</th>
          <th style="text-align: left">付费方案</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">Dify Cloud</td>
          <td style="text-align: left">200次/月</td>
          <td style="text-align: left">$59-499/月</td>
      </tr>
      <tr>
          <td style="text-align: left">Dify 私有化</td>
          <td style="text-align: left">无限</td>
          <td style="text-align: left">免费（自己付API费）</td>
      </tr>
      <tr>
          <td style="text-align: left">Coze</td>
          <td style="text-align: left">豆包模型免费</td>
          <td style="text-align: left">GPT等按量付费</td>
      </tr>
      <tr>
          <td style="text-align: left">FastGPT Cloud</td>
          <td style="text-align: left">有限</td>
          <td style="text-align: left">按量付费</td>
      </tr>
      <tr>
          <td style="text-align: left">FastGPT 私有化</td>
          <td style="text-align: left">无限</td>
          <td style="text-align: left">免费</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="我的选择建议">我的选择建议</h2>
<h3 id="个人开发者学习">个人开发者/学习</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">首选：Coze
</span></span><span class="line"><span class="cl">理由：最简单，免费额度多，适合尝鲜
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="初创公司小团队">初创公司/小团队</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">首选：Dify Cloud
</span></span><span class="line"><span class="cl">理由：功能全面，按需付费，支持协作
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="中大型企业">中大型企业</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">首选：Dify 私有化 或 FastGPT 私有化
</span></span><span class="line"><span class="cl">理由：数据安全，完全可控
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="知识库客服场景">知识库/客服场景</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">首选：FastGPT
</span></span><span class="line"><span class="cl">理由：RAG效果最好，对话分析完善
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="想快速验证想法">想快速验证想法</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">首选：Coze
</span></span><span class="line"><span class="cl">理由：5分钟出Demo，一键发布多平台
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="快速上手指南">快速上手指南</h2>
<h3 id="dify-5分钟上手">Dify 5分钟上手</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Docker 部署</span>
</span></span><span class="line"><span class="cl">git clone https://github.com/langgenius/dify.git
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> dify/docker
</span></span><span class="line"><span class="cl">docker compose up -d
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 访问 http://localhost:3000</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="coze-5分钟上手">Coze 5分钟上手</h3>
<ol>
<li>访问 <a href="https://coze.cn">https://coze.cn</a></li>
<li>登录（抖音/飞书账号）</li>
<li>点击&quot;创建Bot&quot;</li>
<li>输入名称和提示词</li>
<li>发布！</li>
</ol>
<h3 id="fastgpt-5分钟上手">FastGPT 5分钟上手</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Docker 一键部署</span>
</span></span><span class="line"><span class="cl">curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/deploy/fastgpt/docker-compose.yml
</span></span><span class="line"><span class="cl">docker compose up -d
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 访问 http://localhost:3000</span>
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="总结">总结</h2>
<p>2025年，低代码AI平台已经非常成熟。不会写代码的人也能搭建强大的AI应用。</p>
<p><strong>核心选择逻辑</strong>：</p>
<ul>
<li>想简单 → <strong>Coze</strong></li>
<li>想全面 → <strong>Dify</strong></li>
<li>想专精 → <strong>FastGPT</strong></li>
</ul>
<p>别犹豫了，去试试吧！</p>
]]></content:encoded></item><item><title>Claude Code 深度体验：终端里的AI编程革命</title><link>https://realtime-ai.chat/posts/claude-code-deep-dive/</link><pubDate>Tue, 13 Jan 2026 10:00:00 +0800</pubDate><guid>https://realtime-ai.chat/posts/claude-code-deep-dive/</guid><description>Claude Code 深度体验评测:终端里的 AI 编程到底强在哪,与 Cursor、Copilot 的真实差异。</description><content:encoded><![CDATA[<h2 id="开场不是copilot是coder">开场：不是Copilot，是Coder</h2>
<p>2025年，AI编程工具已经卷到飞起。Cursor、Windsurf、GitHub Copilot……每个都说自己是&quot;最强AI编程助手&quot;。</p>
<p>但当我第一次用上 <strong>Claude Code</strong> 时，我意识到：</p>
<blockquote>
<p>这玩意儿不是来&quot;辅助&quot;我写代码的，它是来<strong>替我干活</strong>的。</p></blockquote>
<p>Claude Code 是 Anthropic 推出的命令行AI编程工具。它不是IDE插件，而是一个<strong>独立运行在终端里的Agent</strong>。你给它一个任务，它会：</p>
<ul>
<li>自己读代码</li>
<li>自己写代码</li>
<li>自己跑命令</li>
<li>自己修Bug</li>
<li>自己提交PR</li>
</ul>
<p><strong>这才是2025年该有的AI编程体验。</strong></p>
<hr>
<h2 id="1-安装30秒上手">1. 安装：30秒上手</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 全局安装</span>
</span></span><span class="line"><span class="cl">npm install -g @anthropic-ai/claude-code
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 进入项目目录</span>
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> your-project
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 启动</span>
</span></span><span class="line"><span class="cl">claude
</span></span></code></pre></td></tr></table>
</div>
</div><p>首次启动会要求登录 Anthropic 账号，授权后就能用了。</p>
<p><strong>费用</strong>：使用 Claude API 计费，Claude Sonnet 大约 $3/百万token，正常使用一天几毛钱。</p>
<hr>
<h2 id="2-核心能力不只是聊天">2. 核心能力：不只是聊天</h2>
<h3 id="21-自主文件操作">2.1 自主文件操作</h3>
<p>Claude Code 可以直接读写你的项目文件：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 帮我看看 src/api/user.ts 里有什么问题
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 我来读取这个文件...
</span></span><span class="line"><span class="cl">[读取 src/api/user.ts]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">发现了几个问题：
</span></span><span class="line"><span class="cl">1. 第23行：缺少错误处理
</span></span><span class="line"><span class="cl">2. 第45行：类型定义不完整
</span></span><span class="line"><span class="cl">3. 第67行：存在潜在的内存泄漏
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">要我修复吗？
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">You: 修
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 
</span></span><span class="line"><span class="cl">[编辑 src/api/user.ts]
</span></span><span class="line"><span class="cl">已完成修复，主要改动：
</span></span><span class="line"><span class="cl">- 添加了 try-catch 包装
</span></span><span class="line"><span class="cl">- 补充了 UserResponse 类型定义
</span></span><span class="line"><span class="cl">- 在 useEffect 中添加了 cleanup 函数
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="22-执行shell命令">2.2 执行Shell命令</h3>
<p>它能直接在你的终端跑命令：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 跑一下测试，看看有没有挂的
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude:
</span></span><span class="line"><span class="cl">[执行 npm test]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">测试结果：
</span></span><span class="line"><span class="cl">✓ 45 passed
</span></span><span class="line"><span class="cl">✗ 2 failed
</span></span><span class="line"><span class="cl">  - user.test.ts: &#34;should handle empty input&#34;
</span></span><span class="line"><span class="cl">  - auth.test.ts: &#34;should refresh token&#34;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">要我修复这两个失败的测试吗？
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="23-git-操作">2.3 Git 操作</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">You</span><span class="p">:</span> <span class="err">把今天的改动提交一下，写个清晰的</span><span class="n">commit</span> <span class="n">message</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">Claude</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">执行</span> <span class="n">git</span> <span class="n">status</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">执行</span> <span class="n">git</span> <span class="n">diff</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">我看到你改了这些文件：</span>
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="n">src</span><span class="o">/</span><span class="n">api</span><span class="o">/</span><span class="n">user</span><span class="o">.</span><span class="n">ts</span> <span class="p">(</span><span class="err">修复类型问题</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="n">src</span><span class="o">/</span><span class="n">components</span><span class="o">/</span><span class="n">Login</span><span class="o">.</span><span class="n">tsx</span> <span class="p">(</span><span class="err">添加</span><span class="n">loading状态</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="n">tests</span><span class="o">/</span><span class="n">user</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">ts</span> <span class="p">(</span><span class="err">补充测试用例</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">建议的</span> <span class="n">commit</span> <span class="n">message</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">执行</span> <span class="n">git</span> <span class="n">add</span> <span class="o">.</span> <span class="o">&amp;&amp;</span> <span class="n">git</span> <span class="n">commit</span> <span class="o">-</span><span class="n">m</span> <span class="s2">&#34;fix: 修复用户API类型问题并完善登录组件</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="err">修复</span> <span class="n">user</span><span class="o">.</span><span class="n">ts</span> <span class="err">中的类型定义不完整问题</span>
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="err">为</span> <span class="n">Login</span> <span class="err">组件添加</span> <span class="n">loading</span> <span class="err">状态处理</span>
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="err">补充用户模块的单元测试</span><span class="s2">&#34;]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">已提交。需要我</span> <span class="n">push</span> <span class="err">吗？</span>
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="3-实战场景它能干什么">3. 实战场景：它能干什么</h2>
<h3 id="场景1debug-一个复杂bug">场景1：Debug 一个复杂Bug</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 用户反馈说登录后会闪退，帮我查一下
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 让我先看看相关代码...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[读取 src/pages/Login.tsx]
</span></span><span class="line"><span class="cl">[读取 src/hooks/useAuth.ts]
</span></span><span class="line"><span class="cl">[读取 src/store/authSlice.ts]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">我需要看看错误日志：
</span></span><span class="line"><span class="cl">[执行 npm run dev]
</span></span><span class="line"><span class="cl">[执行 打开浏览器开发者工具 - 等待错误]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">找到问题了！
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">在 useAuth.ts 第34行：
</span></span><span class="line"><span class="cl">auth.user.name.toLowerCase()
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">当 user 对象存在但 name 为 null 时会崩溃。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">修复方案：
</span></span><span class="line"><span class="cl">auth.user?.name?.toLowerCase() ?? &#39;&#39;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">要我修复吗？
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="场景2重构整个模块">场景2：重构整个模块</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 把 src/utils 下的所有 JavaScript 文件迁移到 TypeScript
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 收到，我来处理这个迁移任务。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[扫描 src/utils 目录]
</span></span><span class="line"><span class="cl">发现 12 个 JS 文件需要迁移。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">开始迁移...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[1/12] helpers.js → helpers.ts
</span></span><span class="line"><span class="cl">- 添加参数类型注解
</span></span><span class="line"><span class="cl">- 添加返回值类型
</span></span><span class="line"><span class="cl">- 导出类型定义
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[2/12] formatters.js → formatters.ts
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[12/12] 完成！
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[执行 npx tsc --noEmit]
</span></span><span class="line"><span class="cl">类型检查通过，无错误。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[执行 npm test]
</span></span><span class="line"><span class="cl">所有测试通过。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">迁移完成！共修改 12 个文件，添加了 45 个类型定义。
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="场景3从零实现一个功能">场景3：从零实现一个功能</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">You</span><span class="p">:</span> <span class="err">帮我实现一个用户头像上传功能，要支持裁剪和压缩</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">Claude</span><span class="p">:</span> <span class="err">好的，我来实现这个功能。</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">首先分析一下需求：</span>
</span></span><span class="line"><span class="cl"><span class="mf">1.</span> <span class="err">前端：选择图片</span> <span class="err">→</span> <span class="err">裁剪</span> <span class="err">→</span> <span class="err">预览</span> <span class="err">→</span> <span class="err">上传</span>
</span></span><span class="line"><span class="cl"><span class="mf">2.</span> <span class="err">后端：接收文件</span> <span class="err">→</span> <span class="err">压缩</span> <span class="err">→</span> <span class="err">存储</span> <span class="err">→</span> <span class="err">返回</span><span class="n">URL</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">让我先看看现有的项目结构</span><span class="o">...</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">读取</span> <span class="n">package</span><span class="o">.</span><span class="n">json</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">读取</span> <span class="n">src</span><span class="o">/</span><span class="n">components</span> <span class="err">目录结构</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">我建议使用</span> <span class="n">react</span><span class="o">-</span><span class="n">image</span><span class="o">-</span><span class="n">crop</span> <span class="err">做裁剪，</span><span class="n">browser</span><span class="o">-</span><span class="n">image</span><span class="o">-</span><span class="n">compression</span> <span class="err">做压缩。</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">执行</span> <span class="n">npm</span> <span class="n">install</span> <span class="n">react</span><span class="o">-</span><span class="n">image</span><span class="o">-</span><span class="n">crop</span> <span class="n">browser</span><span class="o">-</span><span class="n">image</span><span class="o">-</span><span class="n">compression</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">现在创建组件</span><span class="o">...</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">创建</span> <span class="n">src</span><span class="o">/</span><span class="n">components</span><span class="o">/</span><span class="n">AvatarUploader</span><span class="o">/</span><span class="n">index</span><span class="o">.</span><span class="n">tsx</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">创建</span> <span class="n">src</span><span class="o">/</span><span class="n">components</span><span class="o">/</span><span class="n">AvatarUploader</span><span class="o">/</span><span class="n">ImageCropper</span><span class="o">.</span><span class="n">tsx</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">创建</span> <span class="n">src</span><span class="o">/</span><span class="n">components</span><span class="o">/</span><span class="n">AvatarUploader</span><span class="o">/</span><span class="n">styles</span><span class="o">.</span><span class="n">module</span><span class="o">.</span><span class="n">css</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">创建</span> <span class="n">src</span><span class="o">/</span><span class="n">api</span><span class="o">/</span><span class="n">upload</span><span class="o">.</span><span class="n">ts</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">组件已创建完成。使用方式：</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">import</span> <span class="p">{</span> <span class="n">AvatarUploader</span> <span class="p">}</span> <span class="n">from</span> <span class="s1">&#39;@/components/AvatarUploader&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">&lt;</span><span class="n">AvatarUploader</span> 
</span></span><span class="line"><span class="cl">  <span class="n">onUpload</span><span class="o">=</span><span class="p">{(</span><span class="n">url</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="n">updateUserAvatar</span><span class="p">(</span><span class="n">url</span><span class="p">)}</span>
</span></span><span class="line"><span class="cl">  <span class="n">maxSize</span><span class="o">=</span><span class="p">{</span><span class="mi">5</span><span class="p">}</span> <span class="o">//</span> <span class="n">MB</span>
</span></span><span class="line"><span class="cl">  <span class="n">aspectRatio</span><span class="o">=</span><span class="p">{</span><span class="mi">1</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="o">/&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">要我写个使用示例吗？</span>
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="4-高级用法">4. 高级用法</h2>
<h3 id="41-自定义指令claudemd">4.1 自定义指令（CLAUDE.md）</h3>
<p>在项目根目录创建 <code>CLAUDE.md</code>，写入项目规范：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># 项目规范
</span></span></span><span class="line"><span class="cl"><span class="gh"></span>
</span></span><span class="line"><span class="cl"><span class="gu">## 代码风格
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 使用 TypeScript 严格模式
</span></span><span class="line"><span class="cl"><span class="k">-</span> 组件使用函数式写法
</span></span><span class="line"><span class="cl"><span class="k">-</span> 状态管理使用 Zustand
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 命名规范
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 组件：PascalCase
</span></span><span class="line"><span class="cl"><span class="k">-</span> 函数：camelCase
</span></span><span class="line"><span class="cl"><span class="k">-</span> 常量：UPPER_SNAKE_CASE
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 提交规范
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> feat: 新功能
</span></span><span class="line"><span class="cl"><span class="k">-</span> fix: 修复
</span></span><span class="line"><span class="cl"><span class="k">-</span> refactor: 重构
</span></span><span class="line"><span class="cl"><span class="k">-</span> docs: 文档
</span></span></code></pre></td></tr></table>
</div>
</div><p>Claude Code 会自动读取这个文件，所有操作都会遵循你的规范。</p>
<h3 id="42-并行任务">4.2 并行任务</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: /parallel 同时帮我：1. 升级所有过期依赖 2. 修复 ESLint 警告 3. 补充缺失的测试
</span></span></code></pre></td></tr></table>
</div>
</div><p>Claude Code 会同时执行多个任务，大幅提升效率。</p>
<h3 id="43-持久记忆">4.3 持久记忆</h3>
<p>Claude Code 会记住你的项目上下文：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 还记得上周我们讨论的那个性能优化方案吗？执行它
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 记得，上周我们讨论了：
</span></span><span class="line"><span class="cl">1. 将大型列表改为虚拟滚动
</span></span><span class="line"><span class="cl">2. 添加 React.memo 包装
</span></span><span class="line"><span class="cl">3. 使用 useMemo 缓存计算结果
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">我现在开始实施...
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="5-与其他工具对比">5. 与其他工具对比</h2>
<table>
  <thead>
      <tr>
          <th style="text-align: left">特性</th>
          <th style="text-align: left">Claude Code</th>
          <th style="text-align: left">Cursor</th>
          <th style="text-align: left">GitHub Copilot</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">运行环境</td>
          <td style="text-align: left">终端</td>
          <td style="text-align: left">IDE</td>
          <td style="text-align: left">IDE插件</td>
      </tr>
      <tr>
          <td style="text-align: left">自主执行命令</td>
          <td style="text-align: left">✅</td>
          <td style="text-align: left">❌</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left">读写任意文件</td>
          <td style="text-align: left">✅</td>
          <td style="text-align: left">有限</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left">Git操作</td>
          <td style="text-align: left">✅</td>
          <td style="text-align: left">❌</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left">多文件重构</td>
          <td style="text-align: left">✅ 强</td>
          <td style="text-align: left">✅ 中</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left">项目理解</td>
          <td style="text-align: left">✅ 深度</td>
          <td style="text-align: left">✅ 中等</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left">价格</td>
          <td style="text-align: left">按量付费</td>
          <td style="text-align: left">$20/月</td>
          <td style="text-align: left">$10/月</td>
      </tr>
  </tbody>
</table>
<p><strong>我的建议</strong>：</p>
<ul>
<li><strong>日常补全</strong>：用 Copilot</li>
<li><strong>复杂编辑</strong>：用 Cursor</li>
<li><strong>项目级任务</strong>：用 Claude Code</li>
</ul>
<hr>
<h2 id="6-注意事项">6. 注意事项</h2>
<h3 id="安全性">安全性</h3>
<p>Claude Code 有完整的<strong>权限控制系统</strong>：</p>
<ul>
<li>读取文件：自动允许</li>
<li>写入文件：需要确认（可设置自动）</li>
<li>执行命令：需要确认（可设置白名单）</li>
<li>网络请求：需要确认</li>
</ul>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Claude: 我需要执行 rm -rf node_modules，允许吗？
</span></span><span class="line"><span class="cl">[Allow] [Deny] [Allow All npm commands]
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="token-消耗">Token 消耗</h3>
<p>复杂任务可能消耗大量 token。建议：</p>
<ol>
<li>任务描述要清晰具体</li>
<li>大型重构分步进行</li>
<li>使用 <code>/compact</code> 命令压缩上下文</li>
</ol>
<hr>
<h2 id="7-总结">7. 总结</h2>
<p>Claude Code 代表了 AI 编程工具的新方向：</p>
<blockquote>
<p><strong>从&quot;辅助编码&quot;到&quot;自主编码&quot;</strong></p></blockquote>
<p>它不是在你旁边提建议的助手，而是一个能独立完成任务的程序员。</p>
<p><strong>适合场景</strong>：</p>
<ul>
<li>大型代码重构</li>
<li>跨文件修改</li>
<li>自动化运维任务</li>
<li>快速原型开发</li>
</ul>
<p><strong>不太适合</strong>：</p>
<ul>
<li>需要精细控制的核心算法</li>
<li>涉及敏感数据的操作</li>
<li>完全没有代码基础的用户</li>
</ul>
]]></content:encoded></item><item><title>本地部署大模型完全指南：Ollama + vLLM + LMStudio 实战</title><link>https://realtime-ai.chat/posts/local-llm-deployment/</link><pubDate>Tue, 23 Dec 2025 10:00:00 +0800</pubDate><guid>https://realtime-ai.chat/posts/local-llm-deployment/</guid><description>本地部署大模型完全指南:Ollama、vLLM、LMStudio 三种方案实战对比,兼顾隐私、性能与成本。</description><content:encoded><![CDATA[<h2 id="为什么要本地部署">为什么要本地部署？</h2>
<p>在云端API满天飞的2025年，为什么还要本地部署大模型？</p>
<h3 id="理由1隐私安全">理由1：隐私安全</h3>
<p>你的代码、文档、聊天记录……全都发给了云端。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">敏感场景：
</span></span><span class="line"><span class="cl">- 公司内部代码 → 发给OpenAI？
</span></span><span class="line"><span class="cl">- 医疗病历数据 → 发给云端？
</span></span><span class="line"><span class="cl">- 法律合同文本 → 谁来保证不泄露？
</span></span></code></pre></td></tr></table>
</div>
</div><p>本地部署 = 数据永远不出你的电脑。</p>
<h3 id="理由2成本控制">理由2：成本控制</h3>
<table>
  <thead>
      <tr>
          <th style="text-align: left">使用场景</th>
          <th style="text-align: left">云端API成本</th>
          <th style="text-align: left">本地部署成本</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">每天1万次调用</td>
          <td style="text-align: left">~$300/月</td>
          <td style="text-align: left">电费 ~$30/月</td>
      </tr>
      <tr>
          <td style="text-align: left">7B模型长期使用</td>
          <td style="text-align: left">持续付费</td>
          <td style="text-align: left">一次性硬件投入</td>
      </tr>
      <tr>
          <td style="text-align: left">团队10人使用</td>
          <td style="text-align: left">$200+/人/月</td>
          <td style="text-align: left">共享一台服务器</td>
      </tr>
  </tbody>
</table>
<h3 id="理由3低延迟">理由3：低延迟</h3>
<p>云端API：网络往返 100-500ms
本地部署：几乎零延迟</p>
<h3 id="理由4自由定制">理由4：自由定制</h3>
<ul>
<li>想微调？随便调</li>
<li>想改提示词模板？自己改</li>
<li>想限制输出长度？随心所欲</li>
</ul>
<hr>
<h2 id="硬件要求">硬件要求</h2>
<h3 id="最低配置跑7b模型">最低配置（跑7B模型）</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">CPU：8核以上
</span></span><span class="line"><span class="cl">内存：16GB
</span></span><span class="line"><span class="cl">显卡：8GB显存（如RTX 3070）
</span></span><span class="line"><span class="cl">     或 Apple M1/M2/M3（统一内存）
</span></span><span class="line"><span class="cl">存储：50GB SSD可用空间
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="推荐配置跑13b-70b模型">推荐配置（跑13B-70B模型）</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">CPU：12核以上
</span></span><span class="line"><span class="cl">内存：32GB+
</span></span><span class="line"><span class="cl">显卡：24GB显存（如RTX 4090）
</span></span><span class="line"><span class="cl">     或 Apple M2 Pro/Max/Ultra
</span></span><span class="line"><span class="cl">存储：200GB SSD可用空间
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="显存-vs-模型大小速查表">显存 vs 模型大小速查表</h3>
<table>
  <thead>
      <tr>
          <th style="text-align: left">模型大小</th>
          <th style="text-align: left">最低显存</th>
          <th style="text-align: left">推荐显存</th>
          <th style="text-align: left">代表模型</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">3B</td>
          <td style="text-align: left">4GB</td>
          <td style="text-align: left">6GB</td>
          <td style="text-align: left">Phi-3 Mini</td>
      </tr>
      <tr>
          <td style="text-align: left">7B</td>
          <td style="text-align: left">6GB</td>
          <td style="text-align: left">8GB</td>
          <td style="text-align: left">Llama 3.1 7B, Qwen2.5 7B</td>
      </tr>
      <tr>
          <td style="text-align: left">13B</td>
          <td style="text-align: left">10GB</td>
          <td style="text-align: left">16GB</td>
          <td style="text-align: left">Llama 3.1 13B</td>
      </tr>
      <tr>
          <td style="text-align: left">34B</td>
          <td style="text-align: left">20GB</td>
          <td style="text-align: left">24GB</td>
          <td style="text-align: left">CodeLlama 34B</td>
      </tr>
      <tr>
          <td style="text-align: left">70B</td>
          <td style="text-align: left">40GB</td>
          <td style="text-align: left">48GB</td>
          <td style="text-align: left">Llama 3.1 70B</td>
      </tr>
  </tbody>
</table>
<p><strong>注</strong>：使用量化（Q4/Q5）可降低约50%显存需求。</p>
<hr>
<h2 id="方案一ollama推荐新手">方案一：Ollama（推荐新手）</h2>
<p>Ollama 是目前最简单的本地大模型部署方案，一行命令就能跑。</p>
<h3 id="安装">安装</h3>
<p><strong>macOS / Linux：</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -fsSL https://ollama.com/install.sh <span class="p">|</span> sh
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>Windows：</strong>
下载安装包：https://ollama.com/download</p>
<h3 id="基础使用">基础使用</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 下载并运行 Llama 3.1 8B</span>
</span></span><span class="line"><span class="cl">ollama run llama3.1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 下载并运行 Qwen 2.5 7B（中文更好）</span>
</span></span><span class="line"><span class="cl">ollama run qwen2.5
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 下载并运行 DeepSeek Coder（代码专用）</span>
</span></span><span class="line"><span class="cl">ollama run deepseek-coder-v2
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 查看已下载的模型</span>
</span></span><span class="line"><span class="cl">ollama list
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 删除模型</span>
</span></span><span class="line"><span class="cl">ollama rm llama3.1
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="作为api服务使用">作为API服务使用</h3>
<p>Ollama 默认启动 API 服务在 <code>http://localhost:11434</code></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">requests</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s1">&#39;http://localhost:11434/api/generate&#39;</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;model&#39;</span><span class="p">:</span> <span class="s1">&#39;qwen2.5&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;prompt&#39;</span><span class="p">:</span> <span class="s1">&#39;用Python写一个快速排序&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;stream&#39;</span><span class="p">:</span> <span class="kc">False</span>
</span></span><span class="line"><span class="cl"><span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s1">&#39;response&#39;</span><span class="p">])</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>兼容 OpenAI API 格式：</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openai</span> <span class="kn">import</span> <span class="n">OpenAI</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">client</span> <span class="o">=</span> <span class="n">OpenAI</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">base_url</span><span class="o">=</span><span class="s1">&#39;http://localhost:11434/v1&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">api_key</span><span class="o">=</span><span class="s1">&#39;ollama&#39;</span>  <span class="c1"># 任意值即可</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">response</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">chat</span><span class="o">.</span><span class="n">completions</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">model</span><span class="o">=</span><span class="s1">&#39;qwen2.5&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">messages</span><span class="o">=</span><span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span><span class="s1">&#39;role&#39;</span><span class="p">:</span> <span class="s1">&#39;user&#39;</span><span class="p">,</span> <span class="s1">&#39;content&#39;</span><span class="p">:</span> <span class="s1">&#39;你好，介绍一下你自己&#39;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">choices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="自定义模型modelfile">自定义模型（Modelfile）</h3>
<p>创建 <code>Modelfile</code>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-dockerfile" data-lang="dockerfile"><span class="line"><span class="cl"><span class="k">FROM</span><span class="w"> </span><span class="s">qwen2.5</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># 设置系统提示词</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span>SYSTEM <span class="s2">&#34;&#34;&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span>你是一个专业的Python开发助手。<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span>回答要简洁，代码要有注释。<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="s2">&#34;&#34;&#34;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span><span class="c"># 设置参数</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span>PARAMETER temperature 0.7<span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err"></span>PARAMETER num_ctx <span class="m">4096</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>构建并运行：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama create my-python-helper -f Modelfile
</span></span><span class="line"><span class="cl">ollama run my-python-helper
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="ollama-优缺点">Ollama 优缺点</h3>
<p><strong>优点</strong>：</p>
<ul>
<li>安装简单，一行命令</li>
<li>模型库丰富，一键下载</li>
<li>内存管理优秀</li>
<li>社区活跃</li>
</ul>
<p><strong>缺点</strong>：</p>
<ul>
<li>推理速度不是最快</li>
<li>高级功能较少</li>
<li>不支持多卡并行（原生）</li>
</ul>
<hr>
<h2 id="方案二vllm推荐生产环境">方案二：vLLM（推荐生产环境）</h2>
<p>vLLM 是性能最强的本地推理引擎，来自UC Berkeley。</p>
<h3 id="安装-1">安装</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install vllm
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="启动服务">启动服务</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 启动 OpenAI 兼容的 API 服务</span>
</span></span><span class="line"><span class="cl">python -m vllm.entrypoints.openai.api_server <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    --model Qwen/Qwen2.5-7B-Instruct <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    --port <span class="m">8000</span> <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    --tensor-parallel-size <span class="m">1</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="使用-api">使用 API</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openai</span> <span class="kn">import</span> <span class="n">OpenAI</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">client</span> <span class="o">=</span> <span class="n">OpenAI</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">base_url</span><span class="o">=</span><span class="s1">&#39;http://localhost:8000/v1&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">api_key</span><span class="o">=</span><span class="s1">&#39;vllm&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">response</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">chat</span><span class="o">.</span><span class="n">completions</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">model</span><span class="o">=</span><span class="s1">&#39;Qwen/Qwen2.5-7B-Instruct&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">messages</span><span class="o">=</span><span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span><span class="s1">&#39;role&#39;</span><span class="p">:</span> <span class="s1">&#39;user&#39;</span><span class="p">,</span> <span class="s1">&#39;content&#39;</span><span class="p">:</span> <span class="s1">&#39;解释一下什么是RAG&#39;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">choices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="高级特性">高级特性</h3>
<p><strong>1. 多GPU并行</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 使用2张显卡</span>
</span></span><span class="line"><span class="cl">python -m vllm.entrypoints.openai.api_server <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    --model meta-llama/Llama-3.1-70B-Instruct <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    --tensor-parallel-size <span class="m">2</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>2. 量化加载</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># AWQ 量化</span>
</span></span><span class="line"><span class="cl">python -m vllm.entrypoints.openai.api_server <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    --model TheBloke/Llama-2-7B-Chat-AWQ <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    --quantization awq
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>3. 批处理优化</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">vllm</span> <span class="kn">import</span> <span class="n">LLM</span><span class="p">,</span> <span class="n">SamplingParams</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">llm</span> <span class="o">=</span> <span class="n">LLM</span><span class="p">(</span><span class="n">model</span><span class="o">=</span><span class="s2">&#34;Qwen/Qwen2.5-7B-Instruct&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">sampling_params</span> <span class="o">=</span> <span class="n">SamplingParams</span><span class="p">(</span><span class="n">temperature</span><span class="o">=</span><span class="mf">0.8</span><span class="p">,</span> <span class="n">max_tokens</span><span class="o">=</span><span class="mi">256</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 批量处理多个请求</span>
</span></span><span class="line"><span class="cl"><span class="n">prompts</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;什么是机器学习？&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;Python和Java的区别？&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;如何学习编程？&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">outputs</span> <span class="o">=</span> <span class="n">llm</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">prompts</span><span class="p">,</span> <span class="n">sampling_params</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">output</span> <span class="ow">in</span> <span class="n">outputs</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">output</span><span class="o">.</span><span class="n">outputs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="vllm-优缺点">vLLM 优缺点</h3>
<p><strong>优点</strong>：</p>
<ul>
<li>推理速度最快（PagedAttention技术）</li>
<li>吞吐量高，适合生产环境</li>
<li>支持多GPU并行</li>
<li>内存效率极高</li>
</ul>
<p><strong>缺点</strong>：</p>
<ul>
<li>安装配置较复杂</li>
<li>需要CUDA环境</li>
<li>不支持macOS（GPU加速）</li>
</ul>
<hr>
<h2 id="方案三lm-studio推荐小白">方案三：LM Studio（推荐小白）</h2>
<p>LM Studio 是带GUI的本地大模型工具，适合不想碰命令行的用户。</p>
<h3 id="安装-2">安装</h3>
<p>下载地址：https://lmstudio.ai/</p>
<p>支持 Windows / macOS / Linux。</p>
<h3 id="使用方法">使用方法</h3>
<ol>
<li>
<p><strong>下载模型</strong>：</p>
<ul>
<li>打开 LM Studio</li>
<li>搜索想要的模型（如 &ldquo;qwen2.5&rdquo;）</li>
<li>点击下载</li>
</ul>
</li>
<li>
<p><strong>对话</strong>：</p>
<ul>
<li>选择已下载的模型</li>
<li>在聊天界面直接对话</li>
</ul>
</li>
<li>
<p><strong>启动本地服务</strong>：</p>
<ul>
<li>点击 &ldquo;Local Server&rdquo;</li>
<li>启动后可在 <code>localhost:1234</code> 访问 API</li>
</ul>
</li>
</ol>
<h3 id="api-调用">API 调用</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">openai</span> <span class="kn">import</span> <span class="n">OpenAI</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">client</span> <span class="o">=</span> <span class="n">OpenAI</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">base_url</span><span class="o">=</span><span class="s1">&#39;http://localhost:1234/v1&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">api_key</span><span class="o">=</span><span class="s1">&#39;lm-studio&#39;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">response</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">chat</span><span class="o">.</span><span class="n">completions</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">model</span><span class="o">=</span><span class="s1">&#39;local-model&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">messages</span><span class="o">=</span><span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span><span class="s1">&#39;role&#39;</span><span class="p">:</span> <span class="s1">&#39;user&#39;</span><span class="p">,</span> <span class="s1">&#39;content&#39;</span><span class="p">:</span> <span class="s1">&#39;你好&#39;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">choices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="lm-studio-优缺点">LM Studio 优缺点</h3>
<p><strong>优点</strong>：</p>
<ul>
<li>图形界面，操作简单</li>
<li>模型管理方便</li>
<li>支持各种量化格式（GGUF）</li>
<li>跨平台</li>
</ul>
<p><strong>缺点</strong>：</p>
<ul>
<li>性能不如vLLM</li>
<li>高级功能受限</li>
<li>不适合生产部署</li>
</ul>
<hr>
<h2 id="推荐模型">推荐模型</h2>
<h3 id="通用对话">通用对话</h3>
<table>
  <thead>
      <tr>
          <th style="text-align: left">模型</th>
          <th style="text-align: left">大小</th>
          <th style="text-align: left">特点</th>
          <th style="text-align: left">下载命令（Ollama）</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">Qwen2.5</td>
          <td style="text-align: left">7B</td>
          <td style="text-align: left">中文最强</td>
          <td style="text-align: left"><code>ollama run qwen2.5</code></td>
      </tr>
      <tr>
          <td style="text-align: left">Llama 3.1</td>
          <td style="text-align: left">8B</td>
          <td style="text-align: left">综合均衡</td>
          <td style="text-align: left"><code>ollama run llama3.1</code></td>
      </tr>
      <tr>
          <td style="text-align: left">Mistral</td>
          <td style="text-align: left">7B</td>
          <td style="text-align: left">欧洲血统，推理强</td>
          <td style="text-align: left"><code>ollama run mistral</code></td>
      </tr>
  </tbody>
</table>
<h3 id="代码生成">代码生成</h3>
<table>
  <thead>
      <tr>
          <th style="text-align: left">模型</th>
          <th style="text-align: left">大小</th>
          <th style="text-align: left">特点</th>
          <th style="text-align: left">下载命令</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">DeepSeek Coder V2</td>
          <td style="text-align: left">16B</td>
          <td style="text-align: left">代码专精</td>
          <td style="text-align: left"><code>ollama run deepseek-coder-v2</code></td>
      </tr>
      <tr>
          <td style="text-align: left">CodeLlama</td>
          <td style="text-align: left">7B-34B</td>
          <td style="text-align: left">Meta出品</td>
          <td style="text-align: left"><code>ollama run codellama</code></td>
      </tr>
      <tr>
          <td style="text-align: left">Qwen2.5-Coder</td>
          <td style="text-align: left">7B</td>
          <td style="text-align: left">代码+中文</td>
          <td style="text-align: left"><code>ollama run qwen2.5-coder</code></td>
      </tr>
  </tbody>
</table>
<h3 id="长文本处理">长文本处理</h3>
<table>
  <thead>
      <tr>
          <th style="text-align: left">模型</th>
          <th style="text-align: left">上下文</th>
          <th style="text-align: left">特点</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">Qwen2.5</td>
          <td style="text-align: left">128K</td>
          <td style="text-align: left">超长上下文</td>
      </tr>
      <tr>
          <td style="text-align: left">Yi-1.5</td>
          <td style="text-align: left">200K</td>
          <td style="text-align: left">国产长文本王者</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="性能优化技巧">性能优化技巧</h2>
<h3 id="1-使用量化模型">1. 使用量化模型</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Q4 量化（速度快，精度略降）</span>
</span></span><span class="line"><span class="cl">ollama run qwen2.5:7b-q4_K_M
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Q5 量化（平衡选择）</span>
</span></span><span class="line"><span class="cl">ollama run qwen2.5:7b-q5_K_M
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Q8 量化（精度高，显存占用大）</span>
</span></span><span class="line"><span class="cl">ollama run qwen2.5:7b-q8_0
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="2-调整上下文长度">2. 调整上下文长度</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Ollama</span>
</span></span><span class="line"><span class="cl">ollama run qwen2.5 --num-ctx <span class="m">8192</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># vLLM</span>
</span></span><span class="line"><span class="cl">python -m vllm.entrypoints.openai.api_server <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    --model Qwen/Qwen2.5-7B-Instruct <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    --max-model-len <span class="m">8192</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="3-启用-flash-attention">3. 启用 Flash Attention</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># vLLM 自动启用</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 确保安装了 flash-attn</span>
</span></span><span class="line"><span class="cl">pip install flash-attn
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="4-使用-gpu-offloading">4. 使用 GPU Offloading</h3>
<p>对于显存不足的情况：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Ollama 自动处理</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 可通过环境变量控制</span>
</span></span><span class="line"><span class="cl"><span class="nv">OLLAMA_NUM_GPU</span><span class="o">=</span><span class="m">1</span> ollama run llama3.1:70b
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="常见问题">常见问题</h2>
<h3 id="q-显存不够怎么办">Q: 显存不够怎么办？</h3>
<p>A:</p>
<ol>
<li>使用更小的模型（7B代替13B）</li>
<li>使用量化版本（Q4/Q5）</li>
<li>减少上下文长度</li>
<li>使用CPU推理（会慢很多）</li>
</ol>
<h3 id="q-mac-能跑吗">Q: Mac 能跑吗？</h3>
<p>A: 可以！Apple Silicon（M1/M2/M3）效果很好。</p>
<ul>
<li>Ollama 原生支持</li>
<li>LM Studio 原生支持</li>
<li>vLLM 不支持Mac GPU</li>
</ul>
<h3 id="q-生成速度太慢">Q: 生成速度太慢？</h3>
<p>A:</p>
<ol>
<li>检查是否使用了GPU（而非CPU）</li>
<li>使用量化模型</li>
<li>减少生成长度</li>
<li>升级到 vLLM</li>
</ol>
<h3 id="q-如何让多人同时使用">Q: 如何让多人同时使用？</h3>
<p>A:</p>
<ol>
<li>部署在服务器上</li>
<li>使用 vLLM（支持高并发）</li>
<li>前面加一层 Nginx 做负载均衡</li>
</ol>
<hr>
<h2 id="总结">总结</h2>
<table>
  <thead>
      <tr>
          <th style="text-align: left">方案</th>
          <th style="text-align: left">适合人群</th>
          <th style="text-align: left">难度</th>
          <th style="text-align: left">性能</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left"><strong>Ollama</strong></td>
          <td style="text-align: left">开发者、个人使用</td>
          <td style="text-align: left">⭐</td>
          <td style="text-align: left">⭐⭐⭐</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>vLLM</strong></td>
          <td style="text-align: left">团队、生产环境</td>
          <td style="text-align: left">⭐⭐⭐</td>
          <td style="text-align: left">⭐⭐⭐⭐⭐</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>LM Studio</strong></td>
          <td style="text-align: left">小白、尝鲜</td>
          <td style="text-align: left">⭐</td>
          <td style="text-align: left">⭐⭐</td>
      </tr>
  </tbody>
</table>
<p><strong>我的建议</strong>：</p>
<ul>
<li>刚入门 → 先用 LM Studio 体验</li>
<li>日常开发 → Ollama 足够</li>
<li>生产部署 → vLLM 一把梭</li>
</ul>
<p>本地大模型的时代已经来临，拥抱它！</p>
]]></content:encoded></item></channel></rss>