<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Ryan&#39;s Blog</title>
  
  <subtitle>Live and Share</subtitle>
  <link href="https://yanxai.com/atom.xml" rel="self"/>
  
  <link href="https://yanxai.com/"/>
  <updated>2026-06-15T11:59:24.931Z</updated>
  <id>https://yanxai.com/</id>
  
  <author>
    <name>Ryan Guo</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>我让 AI 改代码，它悄悄删了测试、放大了 CI 权限，所以我做了 PatchBrake</title>
    <link href="https://yanxai.com/p/patchbrake/"/>
    <id>https://yanxai.com/p/patchbrake/</id>
    <published>2026-06-15T09:40:00.000Z</published>
    <updated>2026-06-15T11:59:24.931Z</updated>
    
    <content type="html"><![CDATA[<p>最近用 Claude Code、Codex、Cursor 这类工具写代码，我越来越明显地感觉到一件事：<strong>AI 写代码是真的快，但 review 并没有变轻松。</strong></p><p>现在很多人的 AI 编码流程大概是这样：先和 AI 讨论需求、拆实现方案，然后让 Codex、Claude Code、Cursor 或 Copilot 直接改本地代码。AI 改完后，如果项目能跑、页面看起来没问题，很多人就准备提交了。问题恰恰出在这里。</p><p>以前 review 代码，主要看逻辑对不对、命名清不清楚、有没有明显 bug。现在 AI 一次能改很多文件，而且改得很自然，很多风险不是“代码完全不能跑”，而是混在 diff 里，看起来没那么刺眼。</p><p>比如：代码能跑，但测试被删了；功能能过，但权限判断被弱化了；CI 还能跑，但 GitHub Actions 权限被放大了；配置文件看起来正常，但 secret 被写进了代码；甚至 AGENTS.md、CLAUDE.md、Cursor rules 这类文件被改了，后续 AI 的行为规则也跟着变了。</p><p>这些问题不一定马上炸，但很适合藏进一次普通提交里。所以我做了一个很小的工具：<strong>PatchBrake</strong>。</p><p>项目地址：<a href="https://github.com/RyanCoreAI/patchbrake">https://github.com/RyanCoreAI/patchbrake</a></p><p>Demo 在线体验：<a href="https://raw.githubusercontent.com/RyanCoreAI/patchbrake/main/assets/demo.gif">https://raw.githubusercontent.com/RyanCoreAI/patchbrake/main/assets/demo.gif</a></p><span id="more"></span><h2 id="1-PatchBrake-是什么？"><a href="#1-PatchBrake-是什么？" class="headerlink" title="1. PatchBrake 是什么？"></a>1. PatchBrake 是什么？</h2><p>PatchBrake 的定位很窄：<strong>AI 改完代码后，在提交前扫描这次 diff，看看有没有明显危险信号。</strong></p><p>它不是 AI Reviewer，也不调用 LLM。它不会上传你的代码，不会接 SaaS，不会做 Web Dashboard，也不会替你判断业务逻辑。它做的事情更像是提交前的一脚刹车：在代码进入 commit 之前，先把一些高风险 diff 提醒出来。</p><p>我反而是故意把它做得很“笨”：<strong>只看 diff、只跑本地规则、只报能解释清楚的风险。</strong> 因为很多 AI 编码带来的问题，并不需要另一个 AI 来推理，它们本来就是很直接的信号。</p><p>比如 staged diff 里出现：</p><figure class="highlight diff"><table><tbody><tr><td class="code"><pre><span class="line"><span class="addition">+ permissions: write-all</span></span><br></pre></td></tr></tbody></table></figure><p>或者测试被删掉：</p><figure class="highlight diff"><table><tbody><tr><td class="code"><pre><span class="line"><span class="deletion">- test("rejects anonymous users", () =&gt; {</span></span><br><span class="line"><span class="deletion">-   expect(() =&gt; requireAdmin(null)).toThrow("Unauthorized");</span></span><br><span class="line"><span class="deletion">- });</span></span><br></pre></td></tr></tbody></table></figure><p>再或者配置里出现：</p><figure class="highlight diff"><table><tbody><tr><td class="code"><pre><span class="line"><span class="addition">+ OPENAI_API_KEY="sk-..."</span></span><br></pre></td></tr></tbody></table></figure><p>这些不是复杂安全研究问题，而是提交前就应该被提醒的问题。</p><h2 id="2-怎么安装和使用？"><a href="#2-怎么安装和使用？" class="headerlink" title="2. 怎么安装和使用？"></a>2. 怎么安装和使用？</h2><p>先说前提：<strong>需要已经安装 Node.js 20+</strong>。</p><p><code>npx</code> 本身是 npm 附带的工具。也就是说，如果你的电脑里没有 Node.js / npm，通常也就没有 <code>npx</code>，这时直接运行下面的命令会失败：</p><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npx patchbrake scan --staged</span><br></pre></td></tr></tbody></table></figure><p>所以第一次使用前，可以先在终端里检查一下：</p><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">node --version</span><br><span class="line">npm --version</span><br><span class="line">npx --version</span><br></pre></td></tr></tbody></table></figure><p>如果这三个命令不存在，先安装 Node.js 20+。安装完成后，一般会自带 <code>node</code>、<code>npm</code> 和 <code>npx</code>。</p><p>环境没问题后，就不需要手动安装 PatchBrake 了，直接用 <code>npx</code> 运行：</p><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npx patchbrake scan --staged</span><br></pre></td></tr></tbody></table></figure><p>如果你想全局安装，也可以：</p><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npm install -g patchbrake</span><br><span class="line">patchbrake scan --staged</span><br></pre></td></tr></tbody></table></figure><p>实际使用流程很简单。AI 改完代码后，先把准备检查的改动放进 staged 区域：</p><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">git add &lt;changed-files&gt;</span><br></pre></td></tr></tbody></table></figure><p>如果你确认这次所有改动都属于同一个任务，也可以：</p><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">git add .</span><br></pre></td></tr></tbody></table></figure><p>然后运行：</p><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npx patchbrake scan --staged</span><br></pre></td></tr></tbody></table></figure><p>这里的 <code>staged</code> 不是让你必须立刻提交。它只是告诉 PatchBrake：<strong>请检查我准备提交的这批改动。</strong></p><p>如果你用的是 Codex 桌面版，也一样。PatchBrake 不关心代码是 Codex 桌面版改的、Claude Code 改的，还是 Cursor 改的。只要最后文件落在本地 Git 仓库里，就可以在项目目录打开终端，先 <code>git add</code>，再运行：</p><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npx patchbrake scan --staged</span><br></pre></td></tr></tbody></table></figure><p>如果扫出 error，就先修掉，再重新扫描；没有明显风险后，再正常提交。</p><h2 id="3-实际效果"><a href="#3-实际效果" class="headerlink" title="3. 实际效果"></a>3. 实际效果</h2><p>我做了一个测试 diff：新增一个疑似 OpenAI API key、删除一个测试文件、把 GitHub Actions 权限改成 <code>write-all</code>。PatchBrake 扫出来是这样：</p><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/patchbrake-real-test.png" alt="PatchBrake 本地真实测试输出"></p><p>这个输出里可以看到三类风险：</p><ul><li><strong>secret-leak</strong>：新增了疑似 API key，并且输出里已经脱敏</li><li><strong>deleted-tests</strong>：测试文件被删除</li><li><strong>workflow-permissions</strong>：GitHub Actions 权限被放大到 <code>write-all</code></li></ul><p>这就是我想要的效果：它不需要理解整个业务，只要能在提交前把这些明显风险拦一下，就已经很有价值。</p><h2 id="4-为什么只扫-diff？"><a href="#4-为什么只扫-diff？" class="headerlink" title="4. 为什么只扫 diff？"></a>4. 为什么只扫 diff？</h2><p>因为 AI 编码真正容易出问题的地方，经常不是“整个仓库历史上有没有漏洞”，而是：<strong>这一次 AI 到底改了什么。</strong></p><p>你让 AI 重构认证模块，它可能顺手删掉一个断言；你让 AI 改 release workflow，它可能把权限放大；你让 AI 补配置，它可能把 token 写进文件；你让 AI 整理项目规则，它可能改掉 agent 的约束。</p><p>这些变化如果进了主分支，后面再查就麻烦了。所以 PatchBrake 的位置很靠前：<strong>在 commit 前，多做一次本地 diff 质检。</strong></p><h2 id="5-现在能检查什么？"><a href="#5-现在能检查什么？" class="headerlink" title="5. 现在能检查什么？"></a>5. 现在能检查什么？</h2><p>目前 PatchBrake 主要覆盖这些风险：</p><ul><li><strong>secret-leak</strong>：新增 API key、token、private key、<code>.env</code> 风险</li><li><strong>deleted-tests</strong>：测试文件、测试用例或断言被删除</li><li><strong>workflow-permissions</strong>：GitHub Actions 权限被放大</li><li><strong>migration-risk</strong>：危险 migration，比如 <code>DROP</code>、<code>TRUNCATE</code>、无 <code>WHERE</code> 的 <code>DELETE</code></li><li><strong>prompt-config-drift</strong>：AGENTS.md、CLAUDE.md、<code>.cursor/rules</code>、prompt 配置变化</li><li><strong>beta 规则</strong>：auth guard 删除、危险 npm script、危险 shell 命令、依赖风险等</li></ul><p>它不追求覆盖所有漏洞。我更在意的是，先抓住 AI 改代码时最容易被忽略、但提交前最值得停一下的那几类问题。</p><h2 id="6-它和-Gitleaks-Semgrep-CodeQL-是什么关系？"><a href="#6-它和-Gitleaks-Semgrep-CodeQL-是什么关系？" class="headerlink" title="6. 它和 Gitleaks / Semgrep / CodeQL 是什么关系？"></a>6. 它和 Gitleaks / Semgrep / CodeQL 是什么关系？</h2><p>PatchBrake 不是用来替代这些工具的。</p><p>Gitleaks、TruffleHog 更专注 secret scanning；Semgrep、CodeQL 更接近静态分析和 SAST；zizmor 对 GitHub Actions 安全检查更深入。PatchBrake 的目标更小：<strong>把 AI 生成代码中常见的 diff 风险，用一个本地 CLI 在提交前统一拦一下。</strong></p><p>它更像是 AI coding workflow 前面的一道轻量 safety gate，而不是完整安全平台。</p><h2 id="7-现在还很早"><a href="#7-现在还很早" class="headerlink" title="7. 现在还很早"></a>7. 现在还很早</h2><p>PatchBrake 还是早期版本。我最想要的反馈不是泛泛夸奖，而是这三类：</p><ul><li><strong>false positive</strong>：它误报了什么？</li><li><strong>real bad diff</strong>：你真的遇到过哪些 AI 生成的危险 diff？</li><li><strong>rule request</strong>：你希望它多检查什么？</li></ul><p>如果你经常用 Codex、Claude Code、Cursor 或 Copilot 改代码，可以拿自己的项目跑一次：</p><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npx patchbrake scan --staged</span><br></pre></td></tr></tbody></table></figure><p>如果它帮你拦下过一次低级但严重的 diff 风险，欢迎给个 star，或者直接提 issue，把你的 bad diff case 留下来。</p>]]></content>
    
    
    <summary type="html">AI 编码工具让代码改动变快，但 review 压力没有变小。PatchBrake 是一个本地 CLI，用来在提交前扫描 staged diff，提醒 secret 泄露、测试删除、CI 权限放大等高风险改动。</summary>
    
    
    
    <category term="项目" scheme="https://yanxai.com/categories/%E9%A1%B9%E7%9B%AE/"/>
    
    <category term="PatchBrake" scheme="https://yanxai.com/categories/%E9%A1%B9%E7%9B%AE/PatchBrake/"/>
    
    <category term="AI 编程安全" scheme="https://yanxai.com/categories/%E9%A1%B9%E7%9B%AE/PatchBrake/AI-%E7%BC%96%E7%A8%8B%E5%AE%89%E5%85%A8/"/>
    
    
    <category term="AI编程" scheme="https://yanxai.com/tags/AI%E7%BC%96%E7%A8%8B/"/>
    
    <category term="PatchBrake" scheme="https://yanxai.com/tags/PatchBrake/"/>
    
    <category term="Code Review" scheme="https://yanxai.com/tags/Code-Review/"/>
    
    <category term="CLI工具" scheme="https://yanxai.com/tags/CLI%E5%B7%A5%E5%85%B7/"/>
    
    <category term="Git" scheme="https://yanxai.com/tags/Git/"/>
    
    <category term="安全" scheme="https://yanxai.com/tags/%E5%AE%89%E5%85%A8/"/>
    
  </entry>
  
  <entry>
    <title>简喵 03：产品流程——一份简历如何从&quot;能写&quot;变成&quot;能投&quot;</title>
    <link href="https://yanxai.com/p/jm-03/"/>
    <id>https://yanxai.com/p/jm-03/</id>
    <published>2026-05-21T14:00:00.000Z</published>
    <updated>2026-05-23T12:39:48.698Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>功能可以少，但路径必须清楚。功能多但路径乱，用户只会在页面里迷路。功能少但路径顺，用户至少能走到最后一步。</p></blockquote><p>我设想过一个最典型的使用场景。</p><p>晚上 10 点 40，用户刷到一个后端开发实习 JD，投递截止写着今晚 12 点。</p><p>他手里有一份简历。问题不是这份简历完全不能用，而是他不知道它现在能不能投。要不要先改项目经历？技能栈够不够？JD 里的 Redis、部署经验、AI 应用经验有没有对应上？还是先导出再说？</p><p>如果这个时候，一个简历工具上来先让他在”AI 评分””JD 匹配””模板中心””版本管理”几个入口里自己找路，那它已经输了。</p><p>因为用户缺的不是一堆功能按钮，而是一条清楚的路径：</p><p><strong>从打开工具，到拿到一份自己敢投出去的简历，中间到底应该走哪几步。</strong></p><p>这篇文章讲的就是这条路径，以及我为什么把简喵 V1 的产品流程设计成现在这样。</p><h2 id="一、上一篇压成了-10-步，这一篇把它展开"><a href="#一、上一篇压成了-10-步，这一篇把它展开" class="headerlink" title="一、上一篇压成了 10 步，这一篇把它展开"></a>一、上一篇压成了 10 步，这一篇把它展开</h2><p>上一篇需求分析里，我把简喵 V1 的核心链路压成了 10 步：</p><figure class="highlight text"><table><tbody><tr><td class="code"><pre><span class="line">进入简喵 → 创建或导入简历 → 填写基础信息 → AI 评分 → 查看诊断</span><br><span class="line">→ 优化表达 → 粘贴 JD 匹配 → 生成建议 → 确认修改 → 导出 PDF</span><br></pre></td></tr></tbody></table></figure><p>这一篇不重新发明流程，而是把这 10 步拆开。</p><p>每一步只回答四个问题：</p><p>用户看到什么？<br>系统在背后做什么？<br>AI 在什么时候介入？<br>这一步失败了，怎么办？</p><p>我设计这条流程时，心里有一个很简单的判断：</p><p><strong>功能可以少，但路径必须清楚。</strong></p><p>功能多但路径乱，用户只会在页面里迷路。功能少但路径顺，用户至少能走到最后一步。</p><p>简喵 V1 不应该一开始就做成一个大而全的求职平台。它的第一目标不是覆盖所有求职场景，而是让用户完成一件具体的事：</p><p><strong>把一份普通简历改成一份可以投递的简历。</strong></p><h2 id="二、入口：为什么是三个，而且第一个不是”上传-PDF”"><a href="#二、入口：为什么是三个，而且第一个不是”上传-PDF”" class="headerlink" title="二、入口：为什么是三个，而且第一个不是”上传 PDF”"></a>二、入口：为什么是三个，而且第一个不是”上传 PDF”</h2><p>简喵 V1 的入口，我只保留三个：</p><p>手动创建简历。<br>GitHub 导入项目。<br>继续优化已有简历。</p><p>这三个入口对应三类用户。</p><p>手动创建，适合没有现成简历，或者想从头整理内容的人。<br>GitHub 导入，适合有项目仓库，但不会写项目经历的计算机学生。<br>继续优化，适合之前已经建过简历，现在想针对新岗位修改的人。</p><p>这里有一个我反复纠结过的取舍：</p><p><strong>要不要把”上传 PDF / Word，自动解析简历”放在第一入口？</strong></p><p>上传解析当然要做。它也是简喵最初设想过的入口之一。</p><p>但我不想把它当成 V1 唯一主入口。</p><p>原因很现实：简历 PDF 的格式太杂。有的有表格，有的有分栏，有的用了图标，有的文字顺序和视觉顺序对不上。强行解析，很容易出现字段错位、模块识别错误、内容丢失。</p><p>一旦用户看到自己的”教育经历”被塞进了”项目经历”，他对后面所有 AI 分析都会失去信任。</p><p>所以我的排序是：</p><p>V1 先把结构化编辑和 GitHub 导入做稳。<br>PDF / Word 解析可以作为辅助入口。<br>等核心链路跑通后，再逐步提高文件解析准确率。</p><p>这不是说解析不重要，而是它不应该在第一版里压过主线。</p><p>简喵第一版最重要的不是”用户能不能一键上传所有格式的简历”，而是”用户能不能稳定完成一次简历优化流程”。</p><h2 id="三、GitHub-导入：它不是所有人的入口，但它是差异化入口"><a href="#三、GitHub-导入：它不是所有人的入口，但它是差异化入口" class="headerlink" title="三、GitHub 导入：它不是所有人的入口，但它是差异化入口"></a>三、GitHub 导入：它不是所有人的入口，但它是差异化入口</h2><p>GitHub 导入不是所有用户都会用。</p><p>转码用户、非技术岗位用户、已经有工作经历的人，可能不需要这个入口。但对计算机学生来说，它很关键。</p><p>很多学生不是没项目，而是项目躺在 GitHub 里，简历上写不出来。</p><p>他可能做过课程项目、练手项目、小工具、博客系统、管理后台、爬虫脚本。但一写进简历，就只剩一句：</p><blockquote><p>负责前后端开发。</p></blockquote><p>这句话太空了。</p><p>所以 GitHub 导入要解决三个问题：</p><p>第一，找到用户的公开仓库。<br>第二，判断哪些仓库可能适合写进简历。<br>第三，把项目内容整理成简历项目经历。</p><p>一个合理的 GitHub 导入流程应该是：</p><figure class="highlight text"><table><tbody><tr><td class="code"><pre><span class="line">输入 GitHub 用户名</span><br><span class="line">  ↓</span><br><span class="line">获取公开仓库列表</span><br><span class="line">  ↓</span><br><span class="line">读取仓库名称、简介、README、主要语言、更新时间</span><br><span class="line">  ↓</span><br><span class="line">筛选可能适合写进简历的项目</span><br><span class="line">  ↓</span><br><span class="line">用户手动勾选项目</span><br><span class="line">  ↓</span><br><span class="line">AI 生成项目经历初稿</span><br><span class="line">  ↓</span><br><span class="line">用户确认并修改</span><br></pre></td></tr></tbody></table></figure><p>这里最关键的一点是：</p><p><strong>不能让 AI 全自动决定哪些项目一定要写进简历。</strong></p><p>因为 AI 不知道哪个仓库是课程作业，哪个是跟教程敲的 Demo，哪个是 fork 来的，哪个是用户真正投入较多的项目。</p><p>系统可以做推荐，但最终选择权必须交给用户。</p><p>比如系统可以提示：</p><p>这个仓库 README 较完整。<br>这个仓库最近有更新。<br>这个仓库主要语言和目标岗位相关。<br>这个仓库可能是 fork 项目，需要确认本人贡献。<br>这个仓库描述过短，建议手动补充项目功能和个人职责。</p><p>这样更安全。</p><p>AI 可以帮用户整理真实信息，但不能替用户认领经历。</p><p>这是我给 GitHub 导入划的红线。</p><h2 id="四、结构化整理：所有”废话建议”都来自这一步没做好"><a href="#四、结构化整理：所有”废话建议”都来自这一步没做好" class="headerlink" title="四、结构化整理：所有”废话建议”都来自这一步没做好"></a>四、结构化整理：所有”废话建议”都来自这一步没做好</h2><p>不管用户是手动创建，还是从 GitHub 导入，进入 AI 分析之前，都要先做一件事：</p><p><strong>把简历拆成明确的结构化模块。</strong></p><p>比如：</p><figure class="highlight json"><table><tbody><tr><td class="code"><pre><span class="line"><span class="punctuation">{</span></span><br><span class="line">  <span class="attr">"projects"</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">{</span></span><br><span class="line">      <span class="attr">"name"</span><span class="punctuation">:</span> <span class="string">"简喵 AI 简历优化系统"</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">"techStack"</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">"Spring Boot"</span><span class="punctuation">,</span> <span class="string">"Vue3"</span><span class="punctuation">,</span> <span class="string">"MySQL"</span><span class="punctuation">,</span> <span class="string">"Redis"</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">"description"</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="string">"负责简历编辑、AI 评分、JD 匹配等核心模块开发"</span></span><br><span class="line">      <span class="punctuation">]</span></span><br><span class="line">    <span class="punctuation">}</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">"skills"</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">"Java"</span><span class="punctuation">,</span> <span class="string">"Spring Boot"</span><span class="punctuation">,</span> <span class="string">"Vue3"</span><span class="punctuation">,</span> <span class="string">"MySQL"</span><span class="punctuation">,</span> <span class="string">"Redis"</span><span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">}</span></span><br></pre></td></tr></tbody></table></figure><p>这一步看起来像技术细节，但其实是产品体验的基础。</p><p>如果系统不知道哪一段是项目经历，哪一段是技能栈，哪一段是教育经历，它就只能对整篇文本做泛泛分析。</p><p>于是用户会收到这种建议：</p><blockquote><p>建议增强项目亮点。<br>建议补充量化数据。<br>建议优化表达方式。</p></blockquote><p>这些建议看起来正确，但没有执行价值。</p><p>真正有用的建议应该是：</p><blockquote><p>项目「简喵 AI 简历优化系统」第 2 条描述缺少量化结果，建议补充评分维度数量、接口数量、导出耗时或真实用户反馈等指标。</p></blockquote><p>这两种建议的差别很大。</p><p>前者像废话。<br>后者能直接指导用户修改。</p><p>后者成立的前提，是系统知道这条建议对应的是哪个模块、哪个项目、哪一条描述。</p><p>所以结构化不是为了让数据看起来整齐，而是为了让 AI 建议能落到具体位置。</p><h2 id="五、AI-评分：为什么不是只给一个总分"><a href="#五、AI-评分：为什么不是只给一个总分" class="headerlink" title="五、AI 评分：为什么不是只给一个总分"></a>五、AI 评分：为什么不是只给一个总分</h2><p>结构化整理完成后，用户最想知道的问题是：</p><blockquote><p>我这份简历现在到底怎么样？</p></blockquote><p>如果系统只给一个总分，比如：</p><blockquote><p>你的简历得分：78 分。</p></blockquote><p>这个结果其实没什么用。</p><p>用户不知道为什么是 78 分，也不知道怎么从 78 分改到 85 分。</p><p>所以简喵的评分不能只给总分，而要拆成多个维度。</p><table><thead><tr><th>维度</th><th>看什么</th></tr></thead><tbody><tr><td>内容完整度</td><td>基本信息、教育经历、项目经历、技能栈是否完整</td></tr><tr><td>表达清晰度</td><td>是否存在口语化、空泛、重复表达</td></tr><tr><td>项目含金量</td><td>项目是否体现技术栈、业务场景和个人贡献</td></tr><tr><td>量化表达</td><td>是否有数据、规模、性能、数量等证明</td></tr><tr><td>岗位相关性</td><td>简历内容是否和目标岗位匹配</td></tr><tr><td>结构合理性</td><td>模块顺序、重点分布是否适合阅读</td></tr><tr><td>面试可解释性</td><td>简历内容是否经得起追问</td></tr></tbody></table><p>拆成七个维度，用户才能看到自己具体弱在哪里。</p><p>有的人内容很完整，但表达很空。<br>有的人技术栈写了一长串，但项目经历没有展开。<br>有的人项目不错，但没有任何量化数据。<br>有的人简历看起来很丰富，但和目标岗位关系不强。<br>有的人简历写得很漂亮，但里面的技术点自己讲不清楚。</p><p>这些问题不是同一种病，不能用一个总分糊过去。</p><p>简历优化的目标也不是单纯把分数顶上去，而是让用户知道：</p><p><strong>下一步应该改哪里。</strong></p><h2 id="六、JD-匹配：用户要的是行动清单，不是-AI-读后感"><a href="#六、JD-匹配：用户要的是行动清单，不是-AI-读后感" class="headerlink" title="六、JD 匹配：用户要的是行动清单，不是 AI 读后感"></a>六、JD 匹配：用户要的是行动清单，不是 AI 读后感</h2><p>评分之后，流程会进入一个分岔：</p><figure class="highlight text"><table><tbody><tr><td class="code"><pre><span class="line">不粘贴 JD → 做通用简历优化</span><br><span class="line">粘贴 JD → 做岗位匹配分析</span><br></pre></td></tr></tbody></table></figure><p>这两条路径都要保留。</p><p>因为不是所有用户一开始都有明确岗位。有的人只是想先把基础简历改好。</p><p>但对准备投递的人来说，JD 匹配才是更高价值的路径。</p><p>用户粘贴 JD 后，系统要做的不只是提取关键词，而是完成四件事：</p><p>第一，识别岗位类型。<br>比如后端开发、前端开发、AI 应用开发、测试开发等。</p><p>第二，提取核心技能。<br>比如 Spring Boot、MySQL、Redis、Vue3、TypeScript、Docker、RAG、Prompt 等。</p><p>第三，判断能力要求。<br>比如是否要求项目经验、部署经验、性能优化经验、团队协作经验、AI 应用落地经验。</p><p>第四，对比用户简历。<br>判断哪些已经覆盖，哪些表达不足，哪些完全缺失。</p><p>最后给用户看的，不应该是一大段话，而应该是一张行动表。</p><table><thead><tr><th>JD 要求</th><th>简历匹配情况</th><th>建议</th></tr></thead><tbody><tr><td>熟悉 Spring Boot</td><td>已匹配</td><td>项目中已有体现，可以保留</td></tr><tr><td>熟悉 MySQL</td><td>部分匹配</td><td>技能栈有出现，但项目经历没有展开表设计</td></tr><tr><td>了解 Redis</td><td>部分匹配</td><td>建议补充缓存使用场景</td></tr><tr><td>有部署经验</td><td>缺失</td><td>如果项目已上线，应补充服务器部署和域名配置</td></tr><tr><td>有 AI 应用经验</td><td>已匹配</td><td>建议放到项目亮点前两条</td></tr></tbody></table><p>这种展示方式比一句”你的简历与岗位匹配度较高，但仍需补充部分技能描述”有用得多。</p><p>用户需要的是行动清单，不是 AI 读后感。</p><h2 id="七、优化建议：必须具体到”哪一条该怎么改”"><a href="#七、优化建议：必须具体到”哪一条该怎么改”" class="headerlink" title="七、优化建议：必须具体到”哪一条该怎么改”"></a>七、优化建议：必须具体到”哪一条该怎么改”</h2><p>AI 评分和 JD 匹配之后，才进入真正的优化建议阶段。</p><p>这里我给自己定了一条铁律：</p><p><strong>优化建议必须具体到位置。</strong></p><p>不能只说：</p><blockquote><p>项目经历表达不够专业。</p></blockquote><p>这句话太泛了，用户不知道改哪里。</p><p>一条合格的建议，至少要包含四个部分：</p><p>问题是什么。<br>出现在什么位置。<br>为什么需要改。<br>可以怎么改。</p><p>例如：</p><figure class="highlight text"><table><tbody><tr><td class="code"><pre><span class="line">问题：项目描述过于空泛</span><br><span class="line">位置：项目经历 &gt; 简喵 AI 简历优化系统 &gt; 第 1 条</span><br><span class="line">原因：只写"完成 AI 简历优化功能"，没有体现技术实现和业务价值</span><br><span class="line">建议：改为"基于 Spring Boot 接入大模型 API，实现简历评分、项目经历润色</span><br><span class="line">和 JD 匹配诊断；通过结构化 Prompt 约束输出格式，并对 AI 返回结果进行字段</span><br><span class="line">校验和异常兜底"</span><br></pre></td></tr></tbody></table></figure><p>这样的建议，用户才能判断它到底有没有用。</p><p>他能看出来：</p><p>这个问题是不是准确。<br>这个建议是不是符合真实经历。<br>这句话能不能直接用。<br>有没有需要自己降级或修改的地方。</p><p>简喵不能只做”AI 帮你改完”。</p><p>更合理的方式是：</p><p><strong>AI 给出建议，用户确认后应用。</strong></p><p>因为简历是用户自己的，最终责任也在用户自己身上。</p><h2 id="八、Before-After：让用户看到”为什么变好了”"><a href="#八、Before-After：让用户看到”为什么变好了”" class="headerlink" title="八、Before / After：让用户看到”为什么变好了”"></a>八、Before / After：让用户看到”为什么变好了”</h2><p>用户最关心的不是 AI 说了什么，而是改完到底有没有变好。</p><p>所以每条优化建议都应该提供 Before / After 对比。</p><table><thead><tr><th>优化前</th><th>优化后</th></tr></thead><tbody><tr><td>负责后端接口开发</td><td>基于 Spring Boot 设计用户登录、简历管理、AI 评分等核心接口，使用 JWT 完成身份认证，并通过统一异常处理和参数校验提升接口稳定性</td></tr><tr><td>用 Redis 做缓存</td><td>引入 Redis 缓存热点查询结果，减少重复数据库查询，并为后续限流和任务状态管理提供基础能力</td></tr><tr><td>使用 AI 优化简历</td><td>接入大模型 API 实现简历评分、项目经历润色和 JD 匹配诊断，通过结构化 Prompt 和 JSON 校验提升输出稳定性</td></tr></tbody></table><p>这个对比很重要。</p><p>因为用户可以直观看到差距：</p><p>优化前太短。<br>优化前太泛。<br>优化前没有技术动作。<br>优化前没有业务场景。<br>优化前没有结果证明。<br>优化前没有岗位关键词。</p><p>优化后的目标不是把句子变长，而是补齐信息密度。</p><p>说清楚做了什么。<br>说清楚用了什么技术。<br>说清楚解决了什么问题。<br>说清楚结果或价值。<br>说清楚和岗位有什么关系。</p><p>这才是简喵真正要做的事情。</p><h2 id="九、确认应用：AI-给方向，用户守底线"><a href="#九、确认应用：AI-给方向，用户守底线" class="headerlink" title="九、确认应用：AI 给方向，用户守底线"></a>九、确认应用：AI 给方向，用户守底线</h2><p>AI 生成建议后，不能直接覆盖用户原文。</p><p>每条建议应该给用户三个选择：</p><p>应用。<br>编辑后应用。<br>忽略。</p><p>其中”编辑后应用”最重要。</p><p>因为 AI 经常会出现一种情况：方向是对的，但措辞过了。</p><p>比如它可能建议用户写：</p><blockquote><p>设计高并发缓存架构，显著提升系统吞吐能力。</p></blockquote><p>但如果用户只是给一个课程项目加了 Redis 缓存，这句话就明显过头了。</p><p>更真实的写法应该是：</p><blockquote><p>引入 Redis 缓存热点查询结果，减少重复数据库查询，为后续接口性能优化提供基础。</p></blockquote><p>这就是用户确认的价值。</p><p>AI 不知道用户真实的参与程度。<br>AI 不能确认所有数据是否真实。<br>AI 不知道某个技术点用户到底能不能讲清楚。<br>AI 有时会把普通项目包装得过于高级。</p><p>所以简喵宁可多一步确认，也不能把用户推向过度包装。</p><p>简历可以优化，但不能虚构。<br>表达可以专业，但不能失真。</p><p>这条边界很重要。</p><p>如果一个 AI 简历工具只追求”看起来更强”，它很容易把用户送进面试风险里。面试官顺着简历一问，用户讲不清楚，反而更糟。</p><p>简喵要做的是帮助用户表达真实经历，而不是制造虚假能力。</p><h2 id="十、再次评分：闭环比”一键生成”更重要"><a href="#十、再次评分：闭环比”一键生成”更重要" class="headerlink" title="十、再次评分：闭环比”一键生成”更重要"></a>十、再次评分：闭环比”一键生成”更重要</h2><p>很多 AI 工具的问题是：给完建议就结束了。</p><p>但真实的简历修改从来不是一次完成的。</p><p>用户通常会经历这样的过程：</p><figure class="highlight text"><table><tbody><tr><td class="code"><pre><span class="line">第一次评分</span><br><span class="line">  ↓</span><br><span class="line">发现项目经历太空</span><br><span class="line">  ↓</span><br><span class="line">应用几条建议</span><br><span class="line">  ↓</span><br><span class="line">再次评分</span><br><span class="line">  ↓</span><br><span class="line">发现 JD 匹配还不够</span><br><span class="line">  ↓</span><br><span class="line">补充岗位关键词</span><br><span class="line">  ↓</span><br><span class="line">再次评分</span><br><span class="line">  ↓</span><br><span class="line">调整表达和顺序</span><br><span class="line">  ↓</span><br><span class="line">导出 PDF</span><br></pre></td></tr></tbody></table></figure><p>所以每次用户应用建议后，系统应该支持重新分析，并展示变化。</p><p>例如：</p><table><thead><tr><th>指标</th><th>优化前</th><th>优化后</th></tr></thead><tbody><tr><td>总分</td><td>72</td><td>81</td></tr><tr><td>表达清晰度</td><td>65</td><td>78</td></tr><tr><td>JD 匹配度</td><td>62</td><td>76</td></tr><tr><td>量化表达</td><td>45</td><td>58</td></tr></tbody></table><p>这里的数字只是示意，真正重要的是反馈机制。</p><p>没有反馈的修改，很容易变成反复纠结。<br>有反馈的修改，用户才知道刚才那次调整有没有用。</p><p>这也是简喵和普通简历工具的区别。</p><p>普通简历工具是静态编辑器。<br>简喵应该是带反馈的优化系统。</p><p>它的核心不是”一键生成完美简历”，而是陪用户一轮轮把简历改清楚。</p><h2 id="十一、版本管理：不要让用户输给”最终最终版”"><a href="#十一、版本管理：不要让用户输给”最终最终版”" class="headerlink" title="十一、版本管理：不要让用户输给”最终最终版”"></a>十一、版本管理：不要让用户输给”最终最终版”</h2><p>真实投递不是只投一个岗位。</p><p>同一个人可能同时投后端、前端、AI 应用开发、测试开发。不同岗位关注的重点不同，所以简历版本也应该不同。</p><p>如果没有版本管理，用户很快就会在文件夹里看到这种东西：</p><figure class="highlight text"><table><tbody><tr><td class="code"><pre><span class="line">简历-最新版.pdf</span><br><span class="line">简历-最终版.pdf</span><br><span class="line">简历-最终最终版.pdf</span><br><span class="line">简历-字节版.pdf</span><br><span class="line">简历-字节修改版.pdf</span><br><span class="line">简历-字节真的最终版.pdf</span><br></pre></td></tr></tbody></table></figure><p>这不是用户不自律，而是投递场景本身就需要多版本。</p><p>所以针对某个岗位完成一轮优化后，系统应该保存一个版本。</p><p>版本命名可以来自三个信息：</p><p>公司名称。<br>岗位名称。<br>创建时间。</p><p>例如：</p><figure class="highlight text"><table><tbody><tr><td class="code"><pre><span class="line">基础版简历</span><br><span class="line">腾讯-后端开发实习-2026.05.21</span><br><span class="line">字节-AI应用开发实习-2026.05.22</span><br><span class="line">阿里-前端开发实习-2026.05.23</span><br></pre></td></tr></tbody></table></figure><p>但 V1 的版本管理不需要做得很复杂。</p><p>第一版只要支持：</p><p>复制基础简历生成新版本。<br>针对某个 JD 保存优化版本。<br>查看不同版本的修改时间和目标岗位。<br>导出指定版本 PDF。</p><p>这就够了。</p><p>不要一开始就做复杂的版本对比、协同编辑、权限共享、访问统计。</p><p>那些功能有价值，但不是 V1 的核心。</p><h2 id="十二、导出-PDF：流程最后必须落到”能投”"><a href="#十二、导出-PDF：流程最后必须落到”能投”" class="headerlink" title="十二、导出 PDF：流程最后必须落到”能投”"></a>十二、导出 PDF：流程最后必须落到”能投”</h2><p>前面所有评分、匹配、优化、版本管理，最后都要落到一份能投递的 PDF 上。</p><p>这里我守两条原则。</p><p>第一，<strong>导出不卡付费弹窗</strong>。</p><p>这是简喵最初的动机之一。</p><p>用户花了半天编辑和优化简历，最后一步才告诉他”导出要付费”，这种体验我自己受够了。</p><p>工具可以有使用次数限制。<br>AI 功能可以有成本控制。<br>未来也可以思考更清晰的商业模式。</p><p>但不应该靠最后一步拦截导出来制造沉没成本。</p><p>第二，<strong>版式要稳定</strong>。</p><p>简历 PDF 不需要花哨，但必须清楚、整齐、稳定。</p><p>V1 不需要做几十套模板，两套就够：</p><p>简约专业版。<br>技术强化版。</p><p>简约专业版适合大多数普通岗位投递。<br>技术强化版适合技术项目比较多的用户，把项目经历和技术栈展示得更突出。</p><p>拖拽式自由排版看起来很强，但开发成本高，也容易让用户把注意力浪费在调样式上。</p><p>简喵的重点是内容优化，不是做一个简历版 Photoshop。</p><h2 id="十三、异常路径：不能只设计理想情况"><a href="#十三、异常路径：不能只设计理想情况" class="headerlink" title="十三、异常路径：不能只设计理想情况"></a>十三、异常路径：不能只设计理想情况</h2><p>产品流程不能只设计理想路径。</p><p>真实用户一定会遇到各种问题。</p><p>GitHub 用户名输错。<br>仓库为空。<br>README 太少，AI 无法判断项目内容。<br>JD 太短，无法提取有效要求。<br>用户没有填写项目经历。<br>AI 返回结果格式异常。<br>网络中断，分析失败。<br>导出 PDF 时内容超出一页。</p><p>这些情况如果不处理，用户立刻会觉得产品”不靠谱”。</p><p>所以每个关键节点都要有异常兜底。</p><p>比如 GitHub 导入失败时，不应该只显示：</p><blockquote><p>系统错误。</p></blockquote><p>而应该告诉用户：</p><blockquote><p>没有找到这个 GitHub 用户，请检查用户名是否正确。你也可以直接手动创建简历。</p></blockquote><p>如果仓库 README 太少，可以提示：</p><blockquote><p>该仓库 README 内容较少，AI 可能无法准确生成项目描述。建议你手动补充项目功能、技术栈和个人职责。</p></blockquote><p>如果 JD 太短，可以提示：</p><blockquote><p>当前岗位描述信息不足，可能影响匹配结果。建议粘贴完整 JD，包括岗位职责和任职要求。</p></blockquote><p>如果 AI 分析失败，可以提示：</p><blockquote><p>本次 AI 分析失败，你的简历内容已经保存，可以稍后重试。</p></blockquote><p>异常提示的核心不是”报错”，而是告诉用户下一步怎么办。</p><p>用户不怕产品偶尔失败。<br>用户怕的是失败之后不知道该怎么继续。</p><h2 id="十四、简喵-V1-的完整流程图"><a href="#十四、简喵-V1-的完整流程图" class="headerlink" title="十四、简喵 V1 的完整流程图"></a>十四、简喵 V1 的完整流程图</h2><p>整理下来，简喵 V1 的完整流程可以这样表示：</p><figure class="highlight text"><table><tbody><tr><td class="code"><pre><span class="line">进入简喵</span><br><span class="line">  ↓</span><br><span class="line">选择开始方式</span><br><span class="line">  ├─ 手动创建简历</span><br><span class="line">  ├─ GitHub 导入项目</span><br><span class="line">  └─ 继续优化已有简历</span><br><span class="line">  ↓</span><br><span class="line">结构化整理简历内容</span><br><span class="line">  ↓</span><br><span class="line">AI 简历评分</span><br><span class="line">  ↓</span><br><span class="line">查看问题诊断</span><br><span class="line">  ↓</span><br><span class="line">是否粘贴目标 JD？</span><br><span class="line">  ├─ 否：生成通用优化建议</span><br><span class="line">  └─ 是：进行 JD 匹配分析</span><br><span class="line">          ↓</span><br><span class="line">      生成岗位化优化建议</span><br><span class="line">  ↓</span><br><span class="line">查看 Before / After 对比</span><br><span class="line">  ↓</span><br><span class="line">用户选择：应用 / 编辑后应用 / 忽略</span><br><span class="line">  ↓</span><br><span class="line">再次评分</span><br><span class="line">  ↓</span><br><span class="line">保存为新版本</span><br><span class="line">  ↓</span><br><span class="line">导出 PDF</span><br></pre></td></tr></tbody></table></figure><p>这个流程的核心不是”AI 生成一份简历”。</p><p>而是：</p><p><strong>用户提供真实经历，系统帮他发现问题、看清差距、优化表达，最后导出一份他自己愿意投出去的简历。</strong></p><p>这句话才是简喵 V1 的产品主线。</p><h2 id="十五、这篇文章真正想说明什么"><a href="#十五、这篇文章真正想说明什么" class="headerlink" title="十五、这篇文章真正想说明什么"></a>十五、这篇文章真正想说明什么</h2><p>产品流程不是把功能按顺序排起来。</p><p>它要回答的是：</p><p>用户第一步做什么？<br>每一步为什么存在？<br>系统在背后处理什么？<br>AI 的建议如何被用户理解？<br>用户遇到问题时怎么继续？<br>最后如何形成一份可投递的简历？</p><p>对简喵来说，产品流程的核心不是”上传简历，然后 AI 给建议”这么简单。</p><p>真正的流程应该是：</p><p>输入真实经历。<br>结构化整理。<br>发现简历问题。<br>对比目标岗位。<br>生成具体建议。<br>用户确认修改。<br>再次评分反馈。<br>保存岗位版本。<br>导出 PDF 投递。</p><p>这是一条带反馈的写作路径。</p><p>传统简历工具更像一次性编辑器：填完、排版、导出。</p><p>简喵想做的是迭代式优化工具：分析、修改、反馈、再修改，直到用户拿到一份自己愿意投出去的简历。</p><h2 id="写在最后"><a href="#写在最后" class="headerlink" title="写在最后"></a>写在最后</h2><p>如果说上一篇需求分析是在回答”简喵为什么做这些功能”，那这篇产品流程就是在回答”这些功能应该怎么串起来”。</p><p>功能孤立存在时，价值很有限。</p><p>AI 评分单独存在，只是一个分数。<br>JD 匹配单独存在，只是一份分析。<br>AI 润色单独存在，只是一段改写。<br>PDF 导出单独存在，只是一个工具按钮。</p><p>但当它们被串成一条完整路径时，产品价值才会出现：</p><p><strong>输入真实经历 → 发现问题 → 岗位匹配 → 优化表达 → 用户确认 → 导出投递。</strong></p><p>这才是简喵 V1 要优先打磨的主线。</p><p>用户提供真实经历。<br>系统帮他发现问题。<br>AI 给出可执行建议。<br>用户确认并应用。<br>系统再次反馈。<br>最后导出一份能投的 PDF。</p><p>流程确定之后，下一步不是继续加功能，而是反过来砍功能。</p><p>因为流程越清楚，越能看出哪些功能只是看起来有用，实际上会拖慢第一版。</p><p>下一篇，我会写简喵的 MVP 范围：哪些功能第一版必须做，哪些听起来合理但要先砍掉，以及我为什么这么取舍。</p>]]></content>
    
    
    <summary type="html">简喵的产品流程不是把功能按顺序排起来，而是回答用户从打开工具到导出一份敢投的简历，中间每一步应该做什么、系统在背后处理什么、AI的建议如何被理解、遇到问题时怎么继续。</summary>
    
    
    
    <category term="项目" scheme="https://yanxai.com/categories/%E9%A1%B9%E7%9B%AE/"/>
    
    <category term="简喵简历-AI驱动的求职助手平台" scheme="https://yanxai.com/categories/%E9%A1%B9%E7%9B%AE/%E7%AE%80%E5%96%B5%E7%AE%80%E5%8E%86-AI%E9%A9%B1%E5%8A%A8%E7%9A%84%E6%B1%82%E8%81%8C%E5%8A%A9%E6%89%8B%E5%B9%B3%E5%8F%B0/"/>
    
    <category term="产品决策" scheme="https://yanxai.com/categories/%E9%A1%B9%E7%9B%AE/%E7%AE%80%E5%96%B5%E7%AE%80%E5%8E%86-AI%E9%A9%B1%E5%8A%A8%E7%9A%84%E6%B1%82%E8%81%8C%E5%8A%A9%E6%89%8B%E5%B9%B3%E5%8F%B0/%E4%BA%A7%E5%93%81%E5%86%B3%E7%AD%96/"/>
    
    
    <category term="AI应用开发" scheme="https://yanxai.com/tags/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/"/>
    
    <category term="简喵" scheme="https://yanxai.com/tags/%E7%AE%80%E5%96%B5/"/>
    
    <category term="简历优化" scheme="https://yanxai.com/tags/%E7%AE%80%E5%8E%86%E4%BC%98%E5%8C%96/"/>
    
    <category term="产品决策" scheme="https://yanxai.com/tags/%E4%BA%A7%E5%93%81%E5%86%B3%E7%AD%96/"/>
    
    <category term="产品流程" scheme="https://yanxai.com/tags/%E4%BA%A7%E5%93%81%E6%B5%81%E7%A8%8B/"/>
    
  </entry>
  
  <entry>
    <title>简喵 02：需求分析——四类用户、四个场景、四个真实痛点</title>
    <link href="https://yanxai.com/p/jm-02/"/>
    <id>https://yanxai.com/p/jm-02/</id>
    <published>2026-05-20T14:00:00.000Z</published>
    <updated>2026-05-23T12:39:45.427Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>一个 AI 简历工具不应该从”我想做什么功能”开始，而应该从”用户到底卡在哪里”开始。</p></blockquote><p>写完上一篇《为什么我要做简喵：一个被付费弹窗气出来的项目》之后，有人问我：</p><blockquote><p>你做这个简历工具之前，到底有没有做过调研？还是拍脑袋就开始写代码？</p></blockquote><p>这个问题很现实。</p><p>很多学生项目最大的问题，就是一上来先想技术栈：Spring Boot、Vue3、Redis、大模型、Docker、云服务器。看起来很完整，但仔细一问：用户是谁？为什么要用？现在不用你的工具会怎么解决？第一版必须解决哪个问题？</p><p>答不上来。</p><p>然后项目就会变成一个功能堆砌现场。首页很漂亮，按钮很多，模块很多，最后没人真的用。技术上很忙，产品上很空。</p><p>所以在正式做简喵之前，我先做了一轮轻量的需求分析。</p><p>说完全靠调研，是假的。说完全拍脑袋，也不准确。</p><p>调研的部分，是我和身边一些正在改简历、投实习、准备校招的同学聊了一圈。拍脑袋的部分，是我自己本来就是目标用户之一：普通 CS 本科生，有项目经历，但也会被简历表达、投递匹配、项目包装这些问题卡住。</p><p>这篇文章不是一份教科书式的用户调研报告。我不会假装自己做了几百份问卷，也不会堆一堆看起来很专业但没什么用的图表。</p><p>这篇文章只想回答一个问题：</p><p><strong>简喵第一版到底应该做什么，又应该坚决不做什么？</strong></p><h2 id="一、需求分析不是列功能清单"><a href="#一、需求分析不是列功能清单" class="headerlink" title="一、需求分析不是列功能清单"></a>一、需求分析不是列功能清单</h2><p>很多人一想到需求分析，第一反应就是列功能。</p><p>用户登录。<br>简历上传。<br>AI 评分。<br>AI 润色。<br>PDF 导出。<br>JD 匹配。<br>面试题生成。<br>多版本管理。<br>分享链接。<br>投递追踪。<br>会员系统。<br>数据看板。</p><p>列完之后，看起来很丰富。</p><p>但这不叫需求分析，这叫愿望清单。</p><p>真正的需求分析不是问”我能做什么功能”，而是问：</p><p>用户现在为什么痛苦？<br>这个痛苦发生在什么场景？<br>用户目前怎么解决？<br>现有方案哪里不好？<br>如果第一版只做几个功能，哪几个最重要？<br>哪些功能听起来合理，但现在不该做？</p><p>简喵的需求分析也是围绕这些问题展开的。</p><p>我不想做一个”功能很多但没人用”的简历工具。第一版的目标只有一个：</p><p><strong>让用户在最短路径里，把一份普通简历改得更清楚、更专业、更适合投递。</strong></p><h2 id="二、四类核心用户"><a href="#二、四类核心用户" class="headerlink" title="二、四类核心用户"></a>二、四类核心用户</h2><p>如果只说”简喵面向大学生和求职者”，这个范围太大，最后做出来一定会失焦。</p><p>“大学生”不是一个足够具体的用户画像。</p><p>一个大一学生、一个大三找实习的计算机学生、一个跨专业转码的人、一个已经实习过准备秋招的人，他们的问题完全不一样。</p><p>所以我把简喵的核心用户拆成四类。</p><h3 id="用户-A：有项目，但不会写的计算机学生"><a href="#用户-A：有项目，但不会写的计算机学生" class="headerlink" title="用户 A：有项目，但不会写的计算机学生"></a>用户 A：有项目，但不会写的计算机学生</h3><p>这是简喵最核心的用户。</p><p>比如一个大三计算机学生，GitHub 上有几个课程项目：图书管理系统、博客系统、待办应用、爬虫脚本。项目不一定多高级，但至少是真的做过。</p><p>问题是，一到简历里，他只会写：</p><blockquote><p>负责前端页面开发和后端接口设计。</p></blockquote><p>这句话不能说错，但几乎没有价值。</p><p>它没有说明用了什么技术，没有说明具体做了什么模块，没有说明解决了什么问题，也没有说明项目结果。面试官看到这句话，很难判断这个学生到底只是跟着教程敲了一遍，还是理解了项目里的关键设计。</p><p>同样一个项目，如果换一种表达，效果就完全不同：</p><blockquote><p>基于 Vue3 和 Spring Boot 实现图书管理系统，负责用户登录、图书检索、借阅记录和后台管理等核心模块；使用 JWT 完成登录认证，基于 MySQL 设计用户表、图书表、借阅记录表等核心数据结构。</p></blockquote><p>这段话并没有把项目吹成很高级的系统，但它至少说清楚了三件事：</p><p>第一，用了什么技术。<br>第二，做了哪些模块。<br>第三，具备哪些可迁移的开发能力。</p><p>这类用户的核心问题不是没有内容，而是不会把内容翻译成简历语言。</p><p>他们需要的不是模板，而是项目经历重写能力。</p><h3 id="用户-B：有学习经历，但缺少求职化包装的转码用户"><a href="#用户-B：有学习经历，但缺少求职化包装的转码用户" class="headerlink" title="用户 B：有学习经历，但缺少求职化包装的转码用户"></a>用户 B：有学习经历，但缺少求职化包装的转码用户</h3><p>第二类用户是转码或跨专业求职的人。</p><p>比如一个金融、机械、自动化或其他专业的学生，自学了 Java、前端或 Python，刷了一些算法题，也做了几个项目。但他的简历经常有一个明显问题：学习痕迹很重，求职表达很弱。</p><p>常见写法是：</p><blockquote><p>学习了 Spring Boot 框架，完成了一个电商项目。</p></blockquote><p>问题在于，这种表达像学习笔记，不像项目经历。</p><p>企业不关心你”学习了什么”，更关心你”能用这些东西解决什么问题”。</p><p>同样是电商项目，如果只写”学习并使用 Spring Boot”，会显得很学生气；如果写清楚用户模块、商品模块、订单流程、权限认证、缓存设计、异常处理，可信度就会高很多。</p><p>这类用户的核心问题是：</p><p><strong>他们有努力痕迹，但不会把学习经历转化成岗位能力证明。</strong></p><p>他们需要的是求职化表达，而不是简单润色。</p><h3 id="用户-C：有实习或工作经历，但没时间重写简历的人"><a href="#用户-C：有实习或工作经历，但没时间重写简历的人" class="headerlink" title="用户 C：有实习或工作经历，但没时间重写简历的人"></a>用户 C：有实习或工作经历，但没时间重写简历的人</h3><p>第三类用户是已经有实习或工作经历的人。</p><p>这类人不一定不会写简历，甚至可能比学生更懂怎么表达。但他们的问题是：没时间、没精力、版本太乱。</p><p>比如一个前端实习生，去年简历写的是 Vue2 项目，今年主要做 Vue3 + TypeScript，但简历一直没更新。每次准备投递新岗位，都要重新打开旧简历、对照 JD、改项目描述、调整技能栈、导出 PDF。</p><p>不同岗位还要不同版本，最后文件夹里出现一堆类似这样的文件：</p><figure class="highlight text"><table><tbody><tr><td class="code"><pre><span class="line">简历-最新版.pdf</span><br><span class="line">简历-最新版2.pdf</span><br><span class="line">简历-字节版.pdf</span><br><span class="line">简历-腾讯修改版.pdf</span><br><span class="line">简历-最终版.pdf</span><br><span class="line">简历-最终最终版.pdf</span><br></pre></td></tr></tbody></table></figure><p>看到”最终最终版”这几个字，就知道人类已经输给文件管理了。</p><p>这类用户的核心问题不是不会写，而是维护成本太高。</p><p>他们需要的是版本管理、JD 匹配和快速改写。</p><h3 id="用户-D：面试前不知道怎么准备的人"><a href="#用户-D：面试前不知道怎么准备的人" class="headerlink" title="用户 D：面试前不知道怎么准备的人"></a>用户 D：面试前不知道怎么准备的人</h3><p>第四类用户出现在简历投递之后。</p><p>很多人以为简历优化的终点是投出去。但实际上，简历上的每一句话都会变成面试里的潜在问题。</p><p>你写了 Redis，面试官可能问缓存穿透、缓存雪崩、缓存一致性。<br>你写了 JWT，面试官可能问 Token 续期、权限校验、Refresh Token。<br>你写了 Docker 部署，面试官可能问镜像构建、容器编排、日志查看。<br>你写了 AI 接入，面试官可能问 Prompt 设计、结构化输出、异常重试、成本控制。</p><p>很多人简历写得很漂亮，但面试时讲不清楚。</p><p>这比简历写得一般更危险。</p><p>因为面试官会觉得你不是不会写，而是在包装。简历上写的东西，如果自己讲不清楚，就会从加分项变成扣分项。</p><p>这类用户的核心问题是：</p><p><strong>不知道自己的简历会被怎么追问。</strong></p><p>他们需要的是基于简历内容生成面试题，而不是通用八股题库。</p><h2 id="三、四个真实使用场景"><a href="#三、四个真实使用场景" class="headerlink" title="三、四个真实使用场景"></a>三、四个真实使用场景</h2><p>有了用户画像，还不够。</p><p>因为同一个用户，在不同时间点打开简喵，需求是不一样的。产品不能只看”用户是谁”，还要看”他在什么时候、因为什么打开这个工具”。</p><p>我把简喵的核心使用场景分成四个。</p><h3 id="场景一：投递前临时改简历"><a href="#场景一：投递前临时改简历" class="headerlink" title="场景一：投递前临时改简历"></a>场景一：投递前临时改简历</h3><p>这是最高频、也最真实的场景。</p><p>晚上九点，用户在群里看到一个实习内推。岗位 JD 写着：</p><blockquote><p>熟悉 Spring Boot、MySQL、Redis，有项目开发经验优先。</p></blockquote><p>他打开自己的简历，发现项目经历写得很空：</p><blockquote><p>使用 Spring Boot 完成图书管理系统。</p></blockquote><p>他知道这样写不够，但又不知道怎么改。投递截止时间可能就在今晚，手动对照 JD 改简历太慢，找别人帮忙也来不及。</p><p>这个时候，他打开简喵，最想完成的动作是：</p><p>上传或填写简历。<br>粘贴目标岗位 JD。<br>系统指出简历和 JD 的差距。<br>AI 给出针对该岗位的优化建议。<br>用户确认后导出 PDF。</p><p>这个场景的关键词是：快、准、能投递。</p><p>用户不是来研究简历理论的，也不是来欣赏产品交互的。他就是要在短时间内知道：我这份简历哪里不匹配，应该怎么改。</p><p>所以 JD 匹配和一键优化，在 V1 里必须优先级很高。</p><h3 id="场景二：GitHub-有项目，但简历写不出来"><a href="#场景二：GitHub-有项目，但简历写不出来" class="headerlink" title="场景二：GitHub 有项目，但简历写不出来"></a>场景二：GitHub 有项目，但简历写不出来</h3><p>很多计算机学生最真实的情况是：代码仓库里有东西，简历里写不出来。</p><p>GitHub 里可能有好几个项目，但项目名称很普通，README 也很粗糙。用户自己回头看时，甚至不知道哪个项目值得放进简历。</p><p>这个场景下，简喵要解决三个问题。</p><p>第一，帮用户从 GitHub 仓库中筛选更适合写进简历的项目。<br>第二，提取 README、技术栈、提交记录等信息，理解项目大概做了什么。<br>第三，把项目内容转化成更适合简历的表达。</p><p>这里的重点不是”AI 编一个高级项目”，而是基于用户真实仓库做结构化整理。</p><p>如果用户只是做了一个普通图书管理系统，那就不能硬写成”高并发分布式图书智能中台”。那种写法短期看很唬人，面试时也会死得很有节奏。</p><p>简喵要做的是把真实项目写清楚，而不是把普通项目吹成宇宙飞船。</p><h3 id="场景三：同一份简历要投不同岗位"><a href="#场景三：同一份简历要投不同岗位" class="headerlink" title="场景三：同一份简历要投不同岗位"></a>场景三：同一份简历要投不同岗位</h3><p>很多用户只有一份万能简历。</p><p>投前端，用这份。<br>投后端，也用这份。<br>投 AI 应用开发，还是用这份。<br>投测试开发，稍微改几个词继续用。</p><p>这其实很危险。</p><p>不同岗位关注的重点不同。</p><p>前端岗位更关心组件化、工程化、性能优化、交互体验。<br>后端岗位更关心接口设计、数据库、缓存、权限、并发和系统稳定性。<br>AI 应用岗位更关心模型接入、Prompt、RAG、工具调用、成本控制和异常处理。</p><p>同一个项目，可以根据岗位强调不同内容。</p><p>比如一个 AI 简历项目：</p><p>投后端开发时，可以重点写接口设计、鉴权、限流、缓存、异步任务和部署。<br>投前端开发时，可以重点写编辑器交互、组件复用、状态管理和导出预览。<br>投 AI 应用开发时，可以重点写 Prompt 设计、结构化输出、AI 评分、JD 匹配和成本控制。</p><p>所以简喵需要支持多版本简历。</p><p>但注意，V1 不一定要做复杂的版本协作系统。第一版只要能做到”基于同一份简历生成不同岗位优化版本”，就已经能解决主要问题。</p><p>产品第一版最怕把简单需求做成复杂系统。明明只需要一个遮雨棚，最后开始研究穹顶结构，这种事在软件开发里每天都在发生。</p><h3 id="场景四：面试前根据简历准备追问"><a href="#场景四：面试前根据简历准备追问" class="headerlink" title="场景四：面试前根据简历准备追问"></a>场景四：面试前根据简历准备追问</h3><p>简历优化之后，下一步就是面试准备。</p><p>很多用户会犯一个错误：只准备通用八股，不准备自己的简历。</p><p>但面试官最容易问的，恰恰是简历上的内容。因为这是你自己写上去的，默认你应该讲得清楚。</p><p>如果你写：</p><blockquote><p>使用 Redis 缓存热点数据，提高接口响应速度。</p></blockquote><p>那你至少要能回答：</p><p>为什么这个地方适合用缓存？<br>缓存 key 怎么设计？<br>数据更新后缓存怎么处理？<br>有没有考虑缓存穿透？<br>如果 Redis 挂了怎么办？<br>性能提升有没有具体数据？</p><p>如果这些答不上来，这句简历描述反而会变成风险。</p><p>所以简喵不应该只做”写简历”，还应该做”检查这份简历是否经得起追问”。</p><p>面试题生成功能就是为这个场景服务的。它不应该生成通用题库，而应该围绕用户简历中的项目、技术栈和具体表述生成追问。</p><p>这会让用户知道：哪些内容可以放心写，哪些内容写了但自己讲不清楚，需要补课。</p><h2 id="四、四个核心痛点"><a href="#四、四个核心痛点" class="headerlink" title="四、四个核心痛点"></a>四、四个核心痛点</h2><p>用户和场景确定之后，简喵真正要解决的痛点就清楚了。</p><h3 id="痛点一：项目经历写不具体"><a href="#痛点一：项目经历写不具体" class="headerlink" title="痛点一：项目经历写不具体"></a>痛点一：项目经历写不具体</h3><p>这是最常见的问题。</p><p>很多学生写项目经历时，停留在”我参与了什么””我负责了什么”，但没有写清楚”我具体做了什么”。</p><p>比如：</p><blockquote><p>负责后端接口开发。</p></blockquote><p>这句话太空。它没有告诉别人你设计了哪些接口，处理了哪些业务，使用了哪些技术方案，遇到了什么问题，最后实现了什么效果。</p><p>更好的写法应该是：</p><blockquote><p>基于 Spring Boot 设计用户登录、简历管理、AI 评分等核心接口，使用 JWT 完成用户身份认证，并通过统一异常处理和参数校验提升接口稳定性。</p></blockquote><p>这不是简单把句子变长，而是补齐了技术动作和业务场景。</p><p>简喵要解决的第一件事，就是帮用户把空泛表达改成具体表达。</p><h3 id="痛点二：不会量化成果"><a href="#痛点二：不会量化成果" class="headerlink" title="痛点二：不会量化成果"></a>痛点二：不会量化成果</h3><p>第二个痛点是不会量化。</p><p>简历里经常出现这些句子：</p><blockquote><p>提升了系统性能。<br>优化了用户体验。<br>提高了开发效率。<br>完成了项目核心功能。</p></blockquote><p>这些句子看起来都没错，但说服力很弱。</p><p>因为它们没有数字，也没有判断标准。</p><p>更好的表达应该是：</p><blockquote><p>将接口平均响应时间从 300ms 降至 120ms。<br>封装 15 个可复用组件，减少重复页面开发。<br>设计 8 张核心业务表，支撑用户、简历、评分记录等模块。<br>通过 Redis 缓存热点数据，降低重复查询压力。</p></blockquote><p>当然，并不是所有学生项目一开始都有真实数据。很多课程项目没有用户量，也没有压测记录。</p><p>所以简喵不能直接替用户编数字。</p><p>正确做法应该分成两层。</p><p>如果用户提供了真实数据，AI 帮他放到合适的位置，组织成更有说服力的表达。</p><p>如果用户没有数据，AI 应该提示”建议补充可量化指标”，并告诉他可以补哪些指标，比如接口响应时间、页面数量、组件数量、数据表数量、功能模块数量、测试覆盖范围等。</p><p>这点很重要。</p><p>AI 简历工具最危险的地方，就是为了让简历好看而制造虚假信息。简喵要做的是提示用户补证据，而不是替用户编证据。</p><h3 id="痛点三：不知道岗位关键词"><a href="#痛点三：不知道岗位关键词" class="headerlink" title="痛点三：不知道岗位关键词"></a>痛点三：不知道岗位关键词</h3><p>第三个痛点是用户不知道不同岗位在看什么。</p><p>很多人投递时只看岗位名称，不会认真分析 JD。看到”后端开发实习生”，就把自己的通用简历扔过去。至于 JD 里到底强调 MySQL、Redis、微服务、消息队列、Linux、Docker 还是高并发，他没有认真拆。</p><p>这样投出去，简历就很容易和岗位要求错位。</p><p>简喵的 JD 匹配功能要解决这个问题。</p><p>它应该从岗位描述中提取几个信息：</p><p>岗位核心技能。<br>高频关键词。<br>加分项。<br>隐含能力要求。<br>简历中已经覆盖的内容。<br>简历中缺失或表达不足的内容。</p><p>比如 JD 要求：</p><blockquote><p>熟悉 Spring Boot、MySQL、Redis，了解 Linux 部署，有 AI 应用开发经验优先。</p></blockquote><p>而用户简历里只写了：</p><blockquote><p>使用 Java 完成后端开发。</p></blockquote><p>那系统就应该提示：</p><p>Spring Boot 没有明确出现。<br>MySQL 相关设计没有展开。<br>Redis 没有体现。<br>Linux / 部署经验没有体现。<br>AI 应用开发经验如果有，应该放到项目亮点中。</p><p>这样用户才知道该往哪里改。</p><p>简喵不是让用户迎合 JD 编经历，而是帮助用户把已有经历中和 JD 相关的部分提出来。</p><h3 id="痛点四：表达太口语化"><a href="#痛点四：表达太口语化" class="headerlink" title="痛点四：表达太口语化"></a>痛点四：表达太口语化</h3><p>第四个痛点是表达不专业。</p><p>很多学生简历里的句子，像是在和同学聊天：</p><blockquote><p>搞定了跨域问题。<br>写了很多页面。<br>做了登录功能。<br>用 Redis 做了缓存。<br>把项目部署到了服务器。</p></blockquote><p>这些表达太口语，不适合简历。</p><p>不是因为它们不真实，而是因为它们没有形成专业表达。</p><p>可以改成：</p><table><thead><tr><th>原表达</th><th>更适合简历的表达</th></tr></thead><tbody><tr><td>搞定了跨域问题</td><td>解决前后端分离架构下的 CORS 跨域请求问题</td></tr><tr><td>写了很多页面</td><td>完成首页、简历编辑、评分结果等核心页面开发</td></tr><tr><td>做了登录功能</td><td>基于 JWT 实现用户登录认证与接口权限校验</td></tr><tr><td>用 Redis 做了缓存</td><td>引入 Redis 缓存热点数据，减少重复查询压力</td></tr><tr><td>把项目部署到了服务器</td><td>基于 Docker Compose 完成前后端服务与数据库的容器化部署</td></tr></tbody></table><p>简喵的 AI 润色不应该只是让句子变得”高级”，而应该让表达变得更准确。</p><p>这也是我不喜欢很多 AI 简历工具的原因：它们会把普通经历润色成一堆漂亮但空洞的词。看起来高级，实际没有信息量。AI 味重到像刚从提示词工厂流水线下来。</p><p>简喵要避免这种问题。</p><h2 id="五、用户、场景、痛点和功能的对应关系"><a href="#五、用户、场景、痛点和功能的对应关系" class="headerlink" title="五、用户、场景、痛点和功能的对应关系"></a>五、用户、场景、痛点和功能的对应关系</h2><p>把前面的内容整理一下，简喵的核心逻辑其实很清楚。</p><table><thead><tr><th>用户类型</th><th>使用场景</th><th>核心痛点</th><th>对应功能</th></tr></thead><tbody><tr><td>计算机学生</td><td>GitHub 有项目但写不出</td><td>项目描述空泛</td><td>GitHub 导入 + AI 项目润色</td></tr><tr><td>转码用户</td><td>投递后没有反馈</td><td>表达学生气，缺少岗位化包装</td><td>求职化表达优化 + JD 匹配</td></tr><tr><td>实习/工作用户</td><td>多岗位投递</td><td>简历版本维护成本高</td><td>多版本管理 + 针对 JD 优化</td></tr><tr><td>面试准备用户</td><td>简历已经投出，准备面试</td><td>不知道简历会被怎么追问</td><td>基于简历生成面试题</td></tr></tbody></table><p>这张表才是功能设计的基础。</p><p>不是因为”AI 评分听起来很酷”，所以我要做 AI 评分。<br>不是因为”面试题生成看起来很完整”，所以我要做面试题生成。<br>不是因为”多版本管理像专业工具”，所以我要做多版本管理。</p><p>而是因为这些功能分别对应了真实用户在真实场景里的真实卡点。</p><p>功能必须从问题里长出来，而不是从开发者脑子里冒出来。</p><h2 id="六、V1-0-功能取舍：MoSCoW-分级"><a href="#六、V1-0-功能取舍：MoSCoW-分级" class="headerlink" title="六、V1.0 功能取舍：MoSCoW 分级"></a>六、V1.0 功能取舍：MoSCoW 分级</h2><p>把用户、场景和痛点整理完之后，才能进入功能设计。</p><p>我用 MoSCoW 方法给简喵 V1.0 做了优先级划分。</p><p>MoSCoW 分成四类：</p><p>Must Have：第一版必须有，没有就跑不通核心流程。<br>Should Have：很重要，但可以在核心流程跑通后补。<br>Could Have：有了更好，但不影响第一版验证。<br>Won’t Have：当前阶段明确不做，避免范围失控。</p><h3 id="Must-Have：第一版必须做"><a href="#Must-Have：第一版必须做" class="headerlink" title="Must Have：第一版必须做"></a>Must Have：第一版必须做</h3><table><thead><tr><th>功能</th><th>解决的问题</th><th>为什么必须做</th></tr></thead><tbody><tr><td>简历内容编辑</td><td>用户需要输入和修改简历</td><td>没有编辑能力，工具无法形成闭环</td></tr><tr><td>GitHub 项目导入</td><td>用户有项目但写不出来</td><td>这是简喵区别于普通简历工具的关键入口</td></tr><tr><td>AI 项目经历润色</td><td>项目描述空泛、口语化</td><td>直接解决最高频痛点</td></tr><tr><td>七维度简历评分</td><td>用户不知道问题在哪</td><td>让用户先看到问题，再接受修改建议</td></tr><tr><td>JD 匹配诊断</td><td>简历和岗位要求错位</td><td>投递场景的核心功能</td></tr><tr><td>PDF 导出</td><td>用户最终要投递简历</td><td>没有导出，前面功能都失去落点</td></tr></tbody></table><p>V1 的核心链路应该是：</p><p>用户输入简历内容。<br>系统分析问题。<br>AI 给出优化建议。<br>用户确认修改。<br>导出可投递版本。</p><p>只要这条链路跑通，简喵就有基本价值。</p><h3 id="Should-Have：重要，但可以稍后做"><a href="#Should-Have：重要，但可以稍后做" class="headerlink" title="Should Have：重要，但可以稍后做"></a>Should Have：重要，但可以稍后做</h3><table><thead><tr><th>功能</th><th>价值</th><th>为什么不是第一优先级</th></tr></thead><tbody><tr><td>多版本管理</td><td>支持不同岗位不同简历</td><td>可以先用”复制简历”做简化版</td></tr><tr><td>面试题生成</td><td>帮用户准备简历追问</td><td>属于投递后的延伸场景</td></tr><tr><td>PDF / Word 解析</td><td>降低用户录入成本</td><td>解析准确率不稳定，容易拖慢 V1</td></tr><tr><td>历史优化记录</td><td>方便回看修改过程</td><td>有价值，但不是核心卡点</td></tr><tr><td>简历分享链接</td><td>方便发给别人查看</td><td>可以等基础编辑和导出稳定后再做</td></tr></tbody></table><p>这些功能都重要，但它们不能抢走 V1 的开发资源。</p><p>第一版最重要的是证明：用户愿不愿意用简喵来改简历内容。</p><h3 id="Could-Have：有更好，没有也能用"><a href="#Could-Have：有更好，没有也能用" class="headerlink" title="Could Have：有更好，没有也能用"></a>Could Have：有更好，没有也能用</h3><table><thead><tr><th>功能</th><th>价值</th><th>暂缓原因</th></tr></thead><tbody><tr><td>第三方登录</td><td>降低注册门槛</td><td>邮箱登录或匿名体验可以先顶住</td></tr><tr><td>投递追踪</td><td>管理投递记录</td><td>已经偏向求职 CRM，不是简历优化核心</td></tr><tr><td>分享访问统计</td><td>查看简历被打开情况</td><td>对第一版验证帮助不大</td></tr><tr><td>多模板切换</td><td>提供更多视觉风格</td><td>容易把重点带回排版，而不是内容</td></tr><tr><td>移动端编辑</td><td>手机上修改简历</td><td>简历编辑是重输入场景，桌面端优先</td></tr></tbody></table><p>Could Have 的原则是：如果顺手能做，可以做；如果要牺牲核心功能进度，直接砍。</p><h3 id="Won’t-Have：V1-明确不做"><a href="#Won’t-Have：V1-明确不做" class="headerlink" title="Won’t Have：V1 明确不做"></a>Won’t Have：V1 明确不做</h3><table><thead><tr><th>功能</th><th>不做原因</th></tr></thead><tbody><tr><td>拖拽式自由排版</td><td>开发成本高，且偏离”内容优化”核心定位</td></tr><tr><td>付费会员系统</td><td>V1 先验证价值，不急着商业化</td></tr><tr><td>在线多人协作编辑</td><td>技术复杂度高，真实需求可以先用分享链接解决</td></tr><tr><td>移动端复杂编辑器</td><td>手机不适合重排版、重输入操作</td></tr><tr><td>英文简历完整模板</td><td>英文简历不是简单翻译，涉及不同求职文化</td></tr><tr><td>自动编造项目数据</td><td>破坏真实性，面试风险很高</td></tr><tr><td>一键生成虚假经历</td><td>短期好看，长期伤害用户可信度</td></tr></tbody></table><p>这里最关键的是最后两项。</p><p>简喵可以帮用户表达真实经历，但不能替用户伪造经历。</p><p>AI 简历工具如果没有边界，很容易变成”求职包装机器”。它能让简历短期更好看，但也会让用户在面试里暴露得更快。</p><p>我希望简喵做的是增强真实表达，而不是制造虚假能力。</p><h2 id="七、判断需求优先级的三个问题"><a href="#七、判断需求优先级的三个问题" class="headerlink" title="七、判断需求优先级的三个问题"></a>七、判断需求优先级的三个问题</h2><p>为了避免功能越做越散，我给简喵设了三个判断问题。</p><h3 id="问题一：没有这个功能，核心流程能跑通吗？"><a href="#问题一：没有这个功能，核心流程能跑通吗？" class="headerlink" title="问题一：没有这个功能，核心流程能跑通吗？"></a>问题一：没有这个功能，核心流程能跑通吗？</h3><p>如果不能跑通，就是 Must Have。</p><p>比如 PDF 导出。没有它，用户即使完成了优化，也没法拿去投递。那前面的评分和润色就只是演示功能。</p><p>再比如简历内容编辑。没有编辑能力，用户就无法确认和修改 AI 建议，产品也不可能形成闭环。</p><h3 id="问题二：这个功能解决的是”卡住”，还是”锦上添花”？"><a href="#问题二：这个功能解决的是”卡住”，还是”锦上添花”？" class="headerlink" title="问题二：这个功能解决的是”卡住”，还是”锦上添花”？"></a>问题二：这个功能解决的是”卡住”，还是”锦上添花”？</h3><p>“不会写项目经历”是卡住。<br>“不知道 JD 关键词”是卡住。<br>“导出 PDF”是卡住。</p><p>但”分享链接访问统计”不是卡住。它有价值，但不是第一版必须解决的问题。</p><p>V1 应该优先解决用户卡住的地方，而不是做一堆看起来完整但不影响主流程的功能。</p><h3 id="问题三：技术复杂度会不会拖慢-V1？"><a href="#问题三：技术复杂度会不会拖慢-V1？" class="headerlink" title="问题三：技术复杂度会不会拖慢 V1？"></a>问题三：技术复杂度会不会拖慢 V1？</h3><p>有些功能价值很高，但复杂度也高。</p><p>比如 PDF / Word 解析。</p><p>用户当然希望直接上传已有简历，然后系统自动识别内容。但现实是，简历格式千奇百怪，PDF 里可能有表格、分栏、图标、文本框、特殊字体。解析出来经常顺序错乱、字段丢失、格式混乱。</p><p>如果 V1 一开始就死磕 PDF 解析，很可能会把大量时间耗在边缘问题上，最后核心的 AI 优化反而做不好。</p><p>所以我的取舍是：</p><p>V1 优先支持结构化编辑和 GitHub 导入。<br>PDF / Word 解析可以做基础版，但不把它当成唯一入口。<br>等核心流程验证后，再逐步提升解析准确率。</p><p>这是一个典型的产品取舍：不是这个功能不重要，而是现在不该让它拖慢主线。</p><h2 id="八、简喵-V1-的核心流程"><a href="#八、简喵-V1-的核心流程" class="headerlink" title="八、简喵 V1 的核心流程"></a>八、简喵 V1 的核心流程</h2><p>经过上面的分析，简喵 V1 的核心流程可以压缩成一句话：</p><blockquote><p>让用户输入真实经历，AI 帮他发现问题、优化表达、匹配岗位，并导出一份可投递简历。</p></blockquote><p>对应流程是：</p><figure class="highlight text"><table><tbody><tr><td class="code"><pre><span class="line">进入简喵</span><br><span class="line">  ↓</span><br><span class="line">创建或导入简历</span><br><span class="line">  ↓</span><br><span class="line">填写基础信息、教育经历、项目经历、技能栈</span><br><span class="line">  ↓</span><br><span class="line">AI 进行简历评分</span><br><span class="line">  ↓</span><br><span class="line">用户查看问题诊断</span><br><span class="line">  ↓</span><br><span class="line">选择项目经历或整份简历进行优化</span><br><span class="line">  ↓</span><br><span class="line">粘贴目标岗位 JD 做匹配分析</span><br><span class="line">  ↓</span><br><span class="line">生成针对岗位的优化建议</span><br><span class="line">  ↓</span><br><span class="line">用户确认修改</span><br><span class="line">  ↓</span><br><span class="line">导出 PDF</span><br></pre></td></tr></tbody></table></figure><p>这个流程不复杂，但它必须稳定。</p><p>比起做十个半成品功能，我更希望 V1 把这条链路打磨清楚。</p><h2 id="九、这篇文章真正想说明什么"><a href="#九、这篇文章真正想说明什么" class="headerlink" title="九、这篇文章真正想说明什么"></a>九、这篇文章真正想说明什么</h2><p>这篇文章不是为了证明我做了多专业的用户调研。</p><p>恰恰相反，简喵的前期调研很轻量。它更像一个学生项目在启动前应该做的最低限度思考：</p><p>用户是谁？<br>用户什么时候用？<br>用户最痛的地方是什么？<br>第一版解决哪个问题？<br>哪些需求先不做？<br>为什么不做？</p><p>只要这几个问题想清楚，项目就不会一开始失控。</p><p>很多项目不是死在技术难度上，而是死在需求膨胀上。今天加一个模板市场，明天加一个在线协作，后天加一个会员系统，大后天又想做投递管理。最后看起来像一个完整求职平台，实际每个功能都浅得像雨后积水。</p><p>简喵第一版要克制。</p><p>它不做大而全的求职平台，也不做复杂排版工具。它先解决一个最核心的问题：</p><p><strong>帮助用户把真实经历写得更清楚、更专业、更适合投递。</strong></p><p>这就是 V1 的边界。</p><h2 id="十、写在最后"><a href="#十、写在最后" class="headerlink" title="十、写在最后"></a>十、写在最后</h2><p>需求分析不是把所有想法都写下来，然后一个个塞进项目里。</p><p>真正重要的是判断：</p><p>什么是用户现在最痛的？<br>什么是第一版必须解决的？<br>什么是看起来有用但会拖慢主线的？<br>什么是绝对不能做的？</p><p>对简喵来说，第一版最重要的不是功能数量，而是核心链路能不能跑通。</p><p>用户能不能输入真实经历。<br>系统能不能指出简历问题。<br>AI 能不能给出可用的优化建议。<br>用户能不能根据目标岗位调整简历。<br>最后能不能导出一份可以投递的 PDF。</p><p>如果这些能跑通，简喵就不是一个空壳项目。</p><p>下一篇，我会继续写简喵的产品流程设计：用户从打开简喵，到拿到一份优化后的简历，中间到底要经过哪些步骤，每一步页面应该解决什么问题，以及异常情况应该怎么处理。</p>]]></content>
    
    
    <summary type="html">简喵第一版不做大而全求职平台，而是聚焦学生和求职者针对具体 JD 优化简历的真实路径——四类用户、四个场景、四个痛点，以及基于 MoSCoW 的 V1.0 功能取舍。</summary>
    
    
    
    <category term="项目" scheme="https://yanxai.com/categories/%E9%A1%B9%E7%9B%AE/"/>
    
    <category term="简喵简历-AI驱动的求职助手平台" scheme="https://yanxai.com/categories/%E9%A1%B9%E7%9B%AE/%E7%AE%80%E5%96%B5%E7%AE%80%E5%8E%86-AI%E9%A9%B1%E5%8A%A8%E7%9A%84%E6%B1%82%E8%81%8C%E5%8A%A9%E6%89%8B%E5%B9%B3%E5%8F%B0/"/>
    
    <category term="产品决策" scheme="https://yanxai.com/categories/%E9%A1%B9%E7%9B%AE/%E7%AE%80%E5%96%B5%E7%AE%80%E5%8E%86-AI%E9%A9%B1%E5%8A%A8%E7%9A%84%E6%B1%82%E8%81%8C%E5%8A%A9%E6%89%8B%E5%B9%B3%E5%8F%B0/%E4%BA%A7%E5%93%81%E5%86%B3%E7%AD%96/"/>
    
    
    <category term="AI应用开发" scheme="https://yanxai.com/tags/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/"/>
    
    <category term="简喵" scheme="https://yanxai.com/tags/%E7%AE%80%E5%96%B5/"/>
    
    <category term="简历优化" scheme="https://yanxai.com/tags/%E7%AE%80%E5%8E%86%E4%BC%98%E5%8C%96/"/>
    
    <category term="产品决策" scheme="https://yanxai.com/tags/%E4%BA%A7%E5%93%81%E5%86%B3%E7%AD%96/"/>
    
    <category term="需求分析" scheme="https://yanxai.com/tags/%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90/"/>
    
  </entry>
  
  <entry>
    <title>简喵 01：为什么我要做简喵</title>
    <link href="https://yanxai.com/p/jm-01/"/>
    <id>https://yanxai.com/p/jm-01/</id>
    <published>2026-05-19T15:00:00.000Z</published>
    <updated>2026-05-23T13:29:21.502Z</updated>
    
    <content type="html"><![CDATA[<h2 id="项目预览"><a href="#项目预览" class="headerlink" title="项目预览"></a>项目预览</h2><p>下面是简喵当前开发版本的部分界面。功能和样式还会继续迭代，但核心方向已经确定：让用户不只是”做出一份好看的简历”，而是写出一份更清楚、更专业、更适合投递的简历。</p><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/1.%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%A6%81%E5%81%9A%E7%AE%80%E5%96%B5%EF%BC%9A%E4%B8%80%E4%B8%AA%E8%A2%AB%E4%BB%98%E8%B4%B9%E5%BC%B9%E7%AA%97%E6%B0%94%E5%87%BA%E6%9D%A5%E7%9A%84%E9%A1%B9%E7%9B%AE/%E5%B7%A5%E4%BD%9C%E5%8F%B0.png" alt="简喵工作台总览"></p><p>简喵的核心工作台：围绕简历分析、AI 优化、JD 匹配和面试准备组织功能。</p><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/1.%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%A6%81%E5%81%9A%E7%AE%80%E5%96%B5%EF%BC%9A%E4%B8%80%E4%B8%AA%E8%A2%AB%E4%BB%98%E8%B4%B9%E5%BC%B9%E7%AA%97%E6%B0%94%E5%87%BA%E6%9D%A5%E7%9A%84%E9%A1%B9%E7%9B%AE/%E7%AE%80%E5%8E%86%E7%BC%96%E8%BE%91%E9%A1%B5.png" alt="简历上传与编辑"></p><p>用户可以上传简历，也可以直接编辑内容，让 AI 基于真实信息进行分析，而不是套一段通用模板。</p><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/1.%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%A6%81%E5%81%9A%E7%AE%80%E5%96%B5%EF%BC%9A%E4%B8%80%E4%B8%AA%E8%A2%AB%E4%BB%98%E8%B4%B9%E5%BC%B9%E7%AA%97%E6%B0%94%E5%87%BA%E6%9D%A5%E7%9A%84%E9%A1%B9%E7%9B%AE/%E7%AE%80%E5%8E%86%E4%B8%83%E7%BB%B4%E5%BA%A6%E8%AF%84%E5%88%86.png" alt="AI 简历评分"></p><p>系统会从多个维度分析简历问题，比如内容完整度、表达质量、项目亮点和量化表达。</p><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/1.%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%A6%81%E5%81%9A%E7%AE%80%E5%96%B5%EF%BC%9A%E4%B8%80%E4%B8%AA%E8%A2%AB%E4%BB%98%E8%B4%B9%E5%BC%B9%E7%AA%97%E6%B0%94%E5%87%BA%E6%9D%A5%E7%9A%84%E9%A1%B9%E7%9B%AE/%E7%AE%80%E5%8E%86%E8%AF%84%E5%88%86%E9%9B%B7%E8%BE%BE%E5%9B%BE.png" alt="简历评分雷达图"></p><p>简喵最核心的价值不是”帮你写漂亮话”，而是把原本模糊、平淡的经历，转化成更适合求职场景的表达。</p><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/1.%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%A6%81%E5%81%9A%E7%AE%80%E5%96%B5%EF%BC%9A%E4%B8%80%E4%B8%AA%E8%A2%AB%E4%BB%98%E8%B4%B9%E5%BC%B9%E7%AA%97%E6%B0%94%E5%87%BA%E6%9D%A5%E7%9A%84%E9%A1%B9%E7%9B%AE/%E7%AE%80%E5%8E%86%E6%A8%A1%E6%9D%BF.png" alt="简历模板"></p><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/1.%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%A6%81%E5%81%9A%E7%AE%80%E5%96%B5%EF%BC%9A%E4%B8%80%E4%B8%AA%E8%A2%AB%E4%BB%98%E8%B4%B9%E5%BC%B9%E7%AA%97%E6%B0%94%E5%87%BA%E6%9D%A5%E7%9A%84%E9%A1%B9%E7%9B%AE/AI%E9%9D%A2%E8%AF%95%E9%A2%98.png" alt="面试题生成"></p><p>简历优化不是终点。简喵还会根据简历内容生成可能被追问的面试题，帮助用户提前准备。</p><p>GitHub仓库地址：<a href="https://github.com/RyanCoreAI/AIResume">https://github.com/RyanCoreAI/AIResume</a></p><h2 id="一次很普通但很不舒服的经历"><a href="#一次很普通但很不舒服的经历" class="headerlink" title="一次很普通但很不舒服的经历"></a>一次很普通但很不舒服的经历</h2><p>去年 11 月的一个晚上，我用一款在线简历工具改简历。</p><p>基本信息、教育经历、项目经历、技能标签、自我评价，每一栏我都认真填了。项目经历改了好几遍，自我评价那段甚至来回调整了五六次。那种状态很熟悉：你明明只是想写一份简历，结果慢慢进入一种”再改一点就好了”的循环。</p><p>一个多小时后，我终于点了”导出 PDF”。</p><p>然后，弹出了付费窗口。</p><p>那一刻我第一反应不是”贵不贵”，而是”我被套路了”。</p><p>如果一开始告诉我导出要付费，我其实可以接受。工具有成本，服务要收费，这都很正常。但真正让人不舒服的是：它先让你把所有内容都填进去，让你投入时间、精力和耐心，等你已经不想重来一遍时，再在最后一步告诉你：想拿走结果，先付费。</p><p>这不是单纯的收费策略，而是在利用沉没成本。</p><p>你填的不是简历，是逃跑成本。每多填一栏，你就更不愿意放弃。等你终于走到最后一步，系统才把门关上。互联网产品把人性研究得这么熟，结果用来卡一个学生导出 PDF，属实有点荒谬。</p><p>最后我做了一件很笨但很多人可能都做过的事：截图，然后在 Word 里手动复刻版式，调整字号、行距、边距，再导出 PDF。效果不算好看，但至少能用。</p><p>那天之后，我开始想一个问题：</p><p>能不能做一个真正免费的简历工具？<br>不靠最后一步卡导出收费。<br>不只是给用户一堆模板。<br>而是认真帮用户把简历内容写清楚。</p><p>这就是简喵的起点。</p><h2 id="大学生写简历的真正问题：不是没经历，是不会翻译"><a href="#大学生写简历的真正问题：不是没经历，是不会翻译" class="headerlink" title="大学生写简历的真正问题：不是没经历，是不会翻译"></a>大学生写简历的真正问题：不是没经历，是不会翻译</h2><p>做简喵之前，我一直以为很多同学写不好简历，是因为经历太少。</p><p>后来我发现并不完全是这样。</p><p>很多计算机专业的学生，其实并不是完全没有东西可写。他们做过课程设计，写过实验室项目，参加过比赛，搭过小工具，甚至维护过自己的 GitHub 仓库。但这些经历一旦放进简历里，就会变成非常干的一句话：</p><blockquote><p>负责前端页面开发和后端接口设计。</p></blockquote><p>这句话不能说错，但几乎没有信息量。</p><p>它没有告诉别人你用了什么技术，没有告诉别人你解决了什么问题，没有告诉别人你做到了什么程度，也没有体现你在项目中的具体价值。</p><p>同样一个 Vue + Spring Boot 项目，可以写成：</p><blockquote><p>负责前端页面开发和后端接口设计。</p></blockquote><p>也可以写成：</p><blockquote><p>基于 Vue3 和 Spring Boot 实现图书管理系统，负责用户登录、权限控制、图书检索、借阅记录管理等核心模块；封装 20+ 个可复用组件，设计 RESTful 接口并完成 MySQL 表结构设计，支持多角色用户的基础权限管理。</p></blockquote><p>这两段描述背后的项目可能差不多，但给人的感觉完全不同。</p><p>前者像是在说”我参与过”。<br>后者是在说”我具体做了什么，并且能复用到真实开发中”。</p><p>这就是简历表达里的”翻译”问题。</p><p>学生做过的事情，需要被翻译成招聘方能看懂的能力语言。项目不是简单堆技术名词，而是要说明场景、职责、动作、结果和可迁移能力。</p><p>很多人不是没经历，而是没有把经历翻译成简历语言。</p><p>你调接口调到凌晨，简历上写”参与项目开发”。<br>你把一个功能从需求做到上线，简历上写”完成相关模块”。<br>你做了权限、缓存、异常处理、部署，简历上只写”熟悉后端开发”。</p><p>真正亏的不是你没做事，而是你做过的事没有被看见。</p><h2 id="市面上的简历工具，很多只解决了”排版”"><a href="#市面上的简历工具，很多只解决了”排版”" class="headerlink" title="市面上的简历工具，很多只解决了”排版”"></a>市面上的简历工具，很多只解决了”排版”</h2><p>我试过不少简历工具，最后发现它们大概可以分成两类。</p><p>第一类是排版工具。</p><p>它们提供很多模板，能让简历看起来更整齐、更漂亮。这个方向当然有价值，因为一份排版混乱的简历确实会降低阅读体验。但问题是，排版只能解决”看起来怎么样”，不能解决”到底写什么”。</p><p>第二类是模板填充工具。</p><p>你输入一个岗位名称，它给你生成一些看起来很专业的描述。短期看很方便，但问题也很明显：这些内容往往太通用。不同的人投同一个岗位，生成出来的描述可能非常接近。HR 一天看很多简历，这种模板味很容易被识别出来。</p><p>这两类工具之间，有一块很重要的空白：<strong>内容层</strong>。</p><p>也就是帮助用户判断：</p><p>我的项目里哪些内容值得写？<br>这一句话是不是太空？<br>哪里需要补充量化结果？<br>哪些技术点适合放前面？<br>这份简历和目标岗位到底匹不匹配？<br>面试官看到这段项目经历可能会追问什么？</p><p>这些问题，才是很多学生真正卡住的地方。</p><p>简喵想做的不是另一个”简历版 Word”，也不是批量制造 AI 味简历的模板机器。</p><p>我更希望它成为一个简历内容助手：帮用户看懂自己的经历，整理自己的项目，优化自己的表达，并且尽量保留真实经历本身。</p><h2 id="简喵想解决什么问题"><a href="#简喵想解决什么问题" class="headerlink" title="简喵想解决什么问题"></a>简喵想解决什么问题</h2><p>一句话概括：</p><p><strong>简喵是一个 AI 简历优化与 JD 匹配系统，帮助用户把真实经历转化成更专业、更清楚、更适合投递的简历表达。</strong></p><p>它目前围绕几个核心功能展开。</p><p><strong>第一，简历上传与内容解析。</strong></p><p>用户可以上传已有简历，也可以直接编辑简历内容。系统会尽量识别不同模块，比如教育经历、项目经历、技能栈、自我评价等，为后续分析做准备。</p><p><strong>第二，AI 简历评分。</strong></p><p>简喵会从多个维度分析简历，而不是只给一个笼统总分。比如内容是否完整，表达是否具体，项目是否有亮点，量化信息是否足够，结构是否清晰，和目标岗位是否匹配。</p><p>我不想做那种”你的简历 82 分，请继续努力”的空洞评分。分数本身没意义，真正有用的是指出哪里扣分、为什么扣分、怎么改。</p><p><strong>第三，项目经历优化。</strong></p><p>这是简喵最核心的部分。</p><p>很多学生的项目并不差，但表达非常弱。简喵会尝试把”负责后端开发”这种描述，改成更具体的项目 bullet，比如使用了什么技术、解决了什么问题、完成了什么模块、产生了什么结果。</p><p>这里的重点不是编造经历，而是把已经存在的信息表达清楚。</p><p><strong>第四，JD 匹配诊断。</strong></p><p>很多人投简历时只有一个动作：海投。</p><p>但不同岗位对关键词、项目方向和能力证明的要求并不一样。后端开发、AI 应用开发、前端工程、算法实习，它们关注的点完全不同。</p><p>所以简喵会支持用户粘贴目标岗位 JD，然后分析简历中哪些内容已经匹配，哪些内容表达不足，哪些关键词缺失，哪些项目应该被重点突出。</p><p><strong>第五，面试题生成。</strong></p><p>简历不是写完就结束了。</p><p>你写上去的每一句话，都可能在面试里被追问。比如你写 Redis，面试官可能问缓存穿透、缓存雪崩、数据一致性；你写 JWT，面试官可能问 Token 续期、权限校验、Refresh Token；你写 AI 接入，面试官可能问 Prompt 设计、异常处理、成本控制和限流。</p><p>所以简喵会根据用户简历内容生成可能的面试追问，让用户提前知道自己写上去的东西是否真的能讲清楚。</p><h2 id="为什么一定要免费导出"><a href="#为什么一定要免费导出" class="headerlink" title="为什么一定要免费导出"></a>为什么一定要免费导出</h2><p>我做简喵的第一个情绪来源，就是被”最后一步付费导出”恶心到。</p><p>所以这个项目有一个很明确的原则：<strong>不靠卡导出收费。</strong></p><p>编辑可以免费，预览可以免费，导出也应该免费。</p><p>当然，AI 功能本身有调用成本，完全无限制并不现实。后续我会通过次数限制、缓存、限流、任务队列和成本控制来处理这个问题。但这和”你都填完了，现在不给钱就不能导出”不是一回事。</p><p>我反感的不是工具收费，而是不透明地利用用户投入。</p><p>如果未来简喵真的需要商业化，也应该把边界提前说清楚，而不是把用户逼到最后一步才亮出价格。</p><p>这点对我很重要。</p><h2 id="我做这个项目，不只是为了做一个工具"><a href="#我做这个项目，不只是为了做一个工具" class="headerlink" title="我做这个项目，不只是为了做一个工具"></a>我做这个项目，不只是为了做一个工具</h2><p>说实话，简喵不只是一个工具项目。</p><p>它对我来说还有另一层意义：这是我用来训练自己完整工程能力的项目。</p><p>一个真正能上线、能被别人使用的 AI 应用，不只是调用一次大模型 API。它要考虑很多更现实的问题：</p><p>文件上传怎么做安全校验？<br>PDF 和 Word 解析失败怎么办？<br>大模型输出不是 JSON 怎么处理？<br>用户连续点击评分会不会烧掉 API 额度？<br>接口超时怎么重试？<br>AI 服务不可用时怎么降级？<br>简历数据怎么保护隐私？<br>导出 PDF 怎么保证格式稳定？<br>项目部署到服务器后怎么排查问题？<br>日志怎么记录，错误码怎么设计，成本怎么审计？</p><p>这些东西，学校不会完整教，普通教程也很少讲。很多教程只讲”如何调通一个 Demo”，但真实项目最难的部分往往在 Demo 之后。</p><p>所以我想用简喵把这些问题完整走一遍。</p><p>从需求分析到产品流程，从前端编辑器到后端接口，从 AI Prompt 到 JSON 校验，从 Redis 限流到 Docker 部署，从 README 到技术博客，我希望它最后不是一个只能截图展示的课程作业，而是一个能被认真讲清楚的作品。</p><p><strong>一个帮别人写简历的工具，自己首先要成为一个值得写进简历的项目。</strong></p><p>这句话其实就是我做简喵的核心动机。</p><h2 id="这个系列会写什么"><a href="#这个系列会写什么" class="headerlink" title="这个系列会写什么"></a>这个系列会写什么</h2><p>这篇文章只是开始。</p><p>简喵后面会整理成一个完整系列，我会尽量把产品设计、技术实现、工程取舍和项目复盘都写出来。不是只写”我用了什么技术”，而是写清楚”为什么这么做””踩了什么坑””最后怎么解决”。</p><p>这个系列大概分成几个部分。</p><p><strong>第一部分是产品决策。</strong></p><p>我会写清楚为什么选择简历优化这个方向，目标用户是谁，核心场景是什么，第一版 MVP 应该做什么，又有哪些功能暂时不该做。</p><p><strong>第二部分是系统设计。</strong></p><p>包括技术选型、整体架构、数据库设计、前后端模块拆分，以及为什么使用 Spring Boot、Vue3、MySQL、Redis 和大模型 API 组合。</p><p><strong>第三部分是 AI 工程。</strong></p><p>这是我认为最有价值的一部分。大模型接入不是简单发请求，还要处理 Prompt 稳定性、结构化输出、JSON 校验、异常重试、成本控制、限流和降级。</p><p><strong>第四部分是业务功能。</strong></p><p>包括简历评分、项目经历优化、JD 匹配、面试题生成、隐私保护、权限设计和导出能力。</p><p><strong>第五部分是部署和复盘。</strong></p><p>包括 Docker 部署、服务器配置、日志排查、项目 README、简历写法，以及这个项目如何成为一个真正能展示工程能力的作品。</p><p>我不打算把它写成”跟着我一步一步复制代码”的教程。那种文章已经太多了，而且大多数看完也只是多了一个本地 Demo。</p><p>我更想写的是，一个普通 CS 本科生如何从 0 开始，把一个 AI 应用项目做成可以展示、可以复盘、可以写进简历、也能被别人理解的完整作品。</p><h2 id="这篇文章写给谁"><a href="#这篇文章写给谁" class="headerlink" title="这篇文章写给谁"></a>这篇文章写给谁</h2><p>如果你正在找实习或准备校招，但不知道简历为什么投出去没反应，这个系列会适合你。</p><p>如果你也在做 AI 应用项目，但感觉自己只是”套了一个 API”，不知道怎么把项目做得更像真实工程，这个系列也会适合你。</p><p>如果你想写技术博客，但不知道写什么，这个系列也可以作为一个参考：一个项目不是只能写一篇总结，而是可以拆成需求、架构、功能、问题、取舍、复盘和求职表达。</p><p>我不想把简喵包装成一个宏大的产品，也不想说它能解决所有求职问题。</p><p>它现在还只是一个正在开发和打磨中的项目。它肯定会有 bug，会有不成熟的地方，也会有很多需要迭代的功能。</p><p>但至少它从一个真实问题开始。</p><p>我自己被简历工具的付费导出卡过，我也见过很多同学明明做过项目，却在简历上写得像没做过一样。我知道这个问题不是虚构出来的，也不是为了做项目硬找的选题。</p><p>这就是我愿意继续做下去的原因。</p><h2 id="结尾"><a href="#结尾" class="headerlink" title="结尾"></a>结尾</h2><p>简历写不好，不一定是你没有能力。</p><p>很多时候，是你没有把自己的经历翻译成别人能快速理解的语言。</p><p>简喵想做的，就是帮你完成这一步：把真实经历整理出来，把模糊表达改清楚，把项目价值讲明白，把简历从”我好像做过一些东西”变成”我能证明自己做成过什么”。</p><p>这也是我做这个项目的原因。</p><p>下一篇，我会写简喵的需求分析：目标用户是谁、他们在什么场景下打开这个工具、最痛的痛点是什么，以及第一版 MVP 到底应该做哪些功能。</p>]]></content>
    
    
    <summary type="html">被简历工具的付费导出弹窗气到之后，我决定做一个真正免费的 AI 简历优化工具。这篇文章记录简喵的起点——为什么做、解决什么问题、以及这个系列会写什么。</summary>
    
    
    
    <category term="项目" scheme="https://yanxai.com/categories/%E9%A1%B9%E7%9B%AE/"/>
    
    <category term="简喵简历-AI驱动的求职助手平台" scheme="https://yanxai.com/categories/%E9%A1%B9%E7%9B%AE/%E7%AE%80%E5%96%B5%E7%AE%80%E5%8E%86-AI%E9%A9%B1%E5%8A%A8%E7%9A%84%E6%B1%82%E8%81%8C%E5%8A%A9%E6%89%8B%E5%B9%B3%E5%8F%B0/"/>
    
    <category term="产品决策" scheme="https://yanxai.com/categories/%E9%A1%B9%E7%9B%AE/%E7%AE%80%E5%96%B5%E7%AE%80%E5%8E%86-AI%E9%A9%B1%E5%8A%A8%E7%9A%84%E6%B1%82%E8%81%8C%E5%8A%A9%E6%89%8B%E5%B9%B3%E5%8F%B0/%E4%BA%A7%E5%93%81%E5%86%B3%E7%AD%96/"/>
    
    
    <category term="AI应用开发" scheme="https://yanxai.com/tags/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/"/>
    
    <category term="Spring Boot" scheme="https://yanxai.com/tags/Spring-Boot/"/>
    
    <category term="简喵" scheme="https://yanxai.com/tags/%E7%AE%80%E5%96%B5/"/>
    
    <category term="简历优化" scheme="https://yanxai.com/tags/%E7%AE%80%E5%8E%86%E4%BC%98%E5%8C%96/"/>
    
    <category term="产品决策" scheme="https://yanxai.com/tags/%E4%BA%A7%E5%93%81%E5%86%B3%E7%AD%96/"/>
    
    <category term="Vue3" scheme="https://yanxai.com/tags/Vue3/"/>
    
  </entry>
  
  <entry>
    <title>2026 年我的 AI 应用开发路线：从工具使用者到项目构建者</title>
    <link href="https://yanxai.com/2026/05/18/2026-nian-wo-de-ai-ying-yong-kai-fa-lu-xian-cong-gong-ju-shi-yong-zhe-dao-xiang-mu-gou-jian-zhe/"/>
    <id>https://yanxai.com/2026/05/18/2026-nian-wo-de-ai-ying-yong-kai-fa-lu-xian-cong-gong-ju-shi-yong-zhe-dao-xiang-mu-gou-jian-zhe/</id>
    <published>2026-05-18T03:00:00.000Z</published>
    <updated>2026-05-17T17:00:56.331Z</updated>
    
    <content type="html"><![CDATA[<h2 id="写在前面"><a href="#写在前面" class="headerlink" title="写在前面"></a>写在前面</h2><p>2026 年，我想把自己的技术方向收得更清楚一点。</p><p>过去一段时间，我花了不少时间使用 AI 工具。ChatGPT、Claude、DeepSeek、Cursor、Claude Code，这些工具确实很有用。它们可以帮我解释报错、生成代码、梳理思路、改文章，也能让我更快完成一些以前需要查很久的事情。</p><p>但用得越多，我越感觉到一个问题：只会使用 AI 工具，并不能形成真正稳定的竞争力。因为工具本身会越来越普及，今天我会用，明天别人也会用。真正能拉开差距的，不是用过多少工具，而是能不能借助这些工具做出一个真实项目。</p><p>所以我今年的重点不是继续收藏更多工具，而是把 AI 能力接入到具体应用里。简单说，就是从”工具使用者”往”项目构建者”转。</p><hr><h2 id="为什么不能只停留在-AI-工具使用"><a href="#为什么不能只停留在-AI-工具使用" class="headerlink" title="为什么不能只停留在 AI 工具使用"></a>为什么不能只停留在 AI 工具使用</h2><h3 id="会用工具已经不稀缺"><a href="#会用工具已经不稀缺" class="headerlink" title="会用工具已经不稀缺"></a>会用工具已经不稀缺</h3><p>现在很多人都会用 AI 写代码、改简历、总结文章、生成方案。这当然是好事，AI 工具降低了学习和开发的门槛，也确实能提升效率。</p><p>但如果一个人的能力只停留在”我会让 AI 帮我写代码”，那其实很危险。因为这件事本身并不稀缺，而且很难证明自己真正理解项目。比如我说我会用 Claude Code 或 Cursor，这只能说明我知道这个工具。但别人真正关心的是：我用它做出了什么？项目有没有上线？核心模块怎么设计？数据库怎么设计？接口失败怎么处理？大模型输出不稳定怎么办？如果这些问题讲不清楚，工具使用经验就会显得很薄。</p><h3 id="AI-提高效率，但不替代判断"><a href="#AI-提高效率，但不替代判断" class="headerlink" title="AI 提高效率，但不替代判断"></a>AI 提高效率，但不替代判断</h3><p>AI 很适合辅助学习和开发，但它不能替我做判断。</p><p>它可以给我生成一段代码，但这段代码是否适合当前项目，需要我判断。它可以给我几个技术方案，但最终选择哪个方案，需要我承担后果。它可以帮我写 Prompt，但用户到底需要什么，还是要我自己想清楚。它可以解释报错，但项目结构、数据流和权限设计，不能完全交给它。</p><p>我现在对 AI 工具的理解是：它是放大器，不是方向盘。如果我有清楚的目标，它能帮我更快推进；如果我自己方向不清楚，它只会帮我更快制造一堆碎片。所以今年我会继续用 AI，但不会把”会用 AI”当成终点。</p><hr><h2 id="我的技术定位"><a href="#我的技术定位" class="headerlink" title="我的技术定位"></a>我的技术定位</h2><h3 id="我更适合先做-AI-应用开发"><a href="#我更适合先做-AI-应用开发" class="headerlink" title="我更适合先做 AI 应用开发"></a>我更适合先做 AI 应用开发</h3><p>我现在不会把自己定位成大模型底层研究者，也不会假装自己在做算法突破。对我目前的阶段来说，更实际的方向是 AI 应用开发，也就是把大模型能力接入到具体场景里，做成用户可以使用的功能。比如简历优化、知识库问答、内容生成、文档分析、面试辅助、学习规划、个人效率工具。</p><p>这些方向不一定听起来最硬核，但它们很贴近实际产品，也适合我现在用项目来训练综合能力。我现在最需要的不是空谈 AI 趋势，而是把一个 AI 应用项目从 0 做到上线。</p><h3 id="技术主线：AI-应用开发-Java-后端工程化"><a href="#技术主线：AI-应用开发-Java-后端工程化" class="headerlink" title="技术主线：AI 应用开发 + Java 后端工程化"></a>技术主线：AI 应用开发 + Java 后端工程化</h3><p>我今年的技术主线会放在两个方向上。</p><p>第一个是 AI 应用开发，重点是需求分析、Prompt 设计、大模型 API 接入、结构化输出、异常兜底、成本控制和隐私保护。第二个是 Java 后端工程化，重点是 Spring Boot、MySQL、Redis、JWT、接口设计、权限控制、异常处理、日志、限流、Docker、Nginx 和服务器部署。</p><p>这两个方向必须结合起来。如果只有 AI，没有后端工程能力，项目很容易变成一个临时 demo；如果只有后端，没有 AI 应用场景，项目又容易变成普通管理系统。我希望做的是二者结合：用后端工程能力支撑 AI 应用，让项目真正可用、可部署、可展示。</p><hr><h2 id="今年的第一个重点项目：简喵"><a href="#今年的第一个重点项目：简喵" class="headerlink" title="今年的第一个重点项目：简喵"></a>今年的第一个重点项目：简喵</h2><h3 id="为什么选择-AI-简历项目"><a href="#为什么选择-AI-简历项目" class="headerlink" title="为什么选择 AI 简历项目"></a>为什么选择 AI 简历项目</h3><p>我今年准备重点做的项目叫”简喵”，一个 AI 简历优化项目。选择这个方向不是因为它最热门，而是因为我自己确实遇到过类似问题。</p><p>有一次我在网上用简历模板，填了很久，最后导出 PDF 的时候才提示要付费。当时的体验很差。后来我就想，能不能做一个对学生更友好的免费简历工具。但真正开始思考这个项目后，我发现问题不只是”免费导出”。</p><p>很多大学生写简历的难点，其实是不会表达自己的经历：做过项目，但写得很平；学过技术，但不知道怎么写进项目描述；有一些成果，但不会量化；投不同岗位，也不知道简历应该怎么调整。所以简喵的核心不只是模板，而是帮助用户把已有经历整理成更适合求职场景的表达。</p><h3 id="第一版想做到什么程度"><a href="#第一版想做到什么程度" class="headerlink" title="第一版想做到什么程度"></a>第一版想做到什么程度</h3><p>简喵第一版不会一上来做得很复杂。我希望先完成一个基本闭环：用户注册登录；上传 PDF 或 Word 简历；系统解析简历文本；用户输入目标岗位；AI 分析简历内容；输出评分、问题和优化建议；生成项目经历改写示例；保存历史分析记录；部署到服务器，能够在线访问。</p><p>这个版本不一定完美，但要真实可用。我不想做一个只能截图展示的项目，至少要能让别人打开链接体验，能看到功能流程，能通过文章了解背后的技术设计。</p><hr><h2 id="我需要补的后端能力"><a href="#我需要补的后端能力" class="headerlink" title="我需要补的后端能力"></a>我需要补的后端能力</h2><h3 id="不只写接口"><a href="#不只写接口" class="headerlink" title="不只写接口"></a>不只写接口</h3><p>以前我有时候会把后端理解成写接口、查数据库、返回结果。但真正做项目以后，会发现后端需要考虑的问题更多：用户有没有登录？接口有没有权限校验？用户能不能访问别人的简历？上传文件有没有格式和大小限制？AI 调用失败时怎么提示？日志会不会记录用户隐私？大模型 API 会不会被刷爆？数据库表以后能不能扩展？上线后出问题怎么排查？这些问题才是项目真正容易暴露短板的地方。</p><p>所以我今年会重点补后端工程化，而不是只追求功能表面能跑。</p><h3 id="围绕项目补技术"><a href="#围绕项目补技术" class="headerlink" title="围绕项目补技术"></a>围绕项目补技术</h3><p>我不打算孤立地学一堆技术名词，而是围绕简喵这个项目去补。</p><p>Spring Boot 用来搭建后端接口和业务模块；MySQL 用来保存用户、简历、岗位和分析记录；Redis 用来做限流、验证码、缓存或调用次数控制；JWT 或 Session 用来处理登录和接口鉴权；Docker 用来保证部署环境一致；Nginx 用来做反向代理和静态资源访问；阿里云服务器用来让项目真正上线；大模型 API 用来完成简历分析和优化建议生成。</p><p>这些技术只有放进具体项目里，才不会停留在”我学过”的层面。以后我写技术文章，也会尽量从项目问题出发，而不是单独写概念。比如我更想写：简喵为什么需要 Redis 限流；大模型 API 为什么不能暴露在前端；简历上传为什么要做文件校验；Prompt 为什么要要求结构化输出；日志为什么不能打印完整简历内容。这种写法对我自己也更有帮助。</p><hr><h2 id="AI-应用开发真正要解决的问题"><a href="#AI-应用开发真正要解决的问题" class="headerlink" title="AI 应用开发真正要解决的问题"></a>AI 应用开发真正要解决的问题</h2><h3 id="调-API-只是第一步"><a href="#调-API-只是第一步" class="headerlink" title="调 API 只是第一步"></a>调 API 只是第一步</h3><p>很多 AI 项目看起来像是”接入一个模型接口”。但我现在越来越觉得，调用 API 只是最简单的一步。真正困难的是让模型能力变成稳定的产品功能。</p><p>以简喵为例，如果我只是把用户简历直接丢给大模型，然后让它”帮我优化一下”，这个功能可能偶尔能用，但很难稳定。它可能输出很空泛的建议，可能格式每次都不一样，可能编造用户没有的经历，可能忽略目标岗位，可能返回太长前端不好展示，也可能超时、失败、成本失控。所以 AI 应用开发要考虑的不只是”能不能回答”，还要考虑结果是否稳定、可解析、可保存、可展示、可追踪。</p><h3 id="Prompt、结构化输出和兜底"><a href="#Prompt、结构化输出和兜底" class="headerlink" title="Prompt、结构化输出和兜底"></a>Prompt、结构化输出和兜底</h3><p>我需要在项目里重点处理几个问题。</p><p>第一是 Prompt 设计。模型需要知道它的角色、任务、输入内容、评分维度、输出格式和限制条件。第二是结构化输出。如果模型只返回一大段文字，前端展示和后端保存都会很麻烦，所以最好让它输出固定字段，比如总分、优势、问题、修改建议、项目经历改写等。第三是异常兜底。模型不一定每次都按要求返回，它可能输出非法 JSON，也可能缺字段，还可能调用失败，后端必须能处理这些情况，而不是直接让用户看到一堆错误。</p><p>这些内容会是我做简喵时重点记录的部分。</p><hr><h2 id="项目必须上线"><a href="#项目必须上线" class="headerlink" title="项目必须上线"></a>项目必须上线</h2><h3 id="本地能跑不算结束"><a href="#本地能跑不算结束" class="headerlink" title="本地能跑不算结束"></a>本地能跑不算结束</h3><p>今年我给自己定了一个比较硬的要求：项目尽量都要上线。因为本地能跑，只能说明功能初步完成，真正部署到服务器以后，才会遇到更多实际问题：环境变量怎么配置、数据库连接怎么处理、前后端跨域怎么解决、Nginx 怎么配置、HTTPS 证书怎么申请、服务器端口怎么开放、日志怎么查看、移动端访问是否正常。这些问题不一定复杂，但如果没有亲自部署过，就很难真正理解。</p><h3 id="上线后项目才更像作品"><a href="#上线后项目才更像作品" class="headerlink" title="上线后项目才更像作品"></a>上线后项目才更像作品</h3><p>如果一个项目只有代码仓库，没有在线地址，没有截图，没有 README，没有部署说明，也没有复盘文章，别人很难判断它的完成度。我希望简喵最后至少具备这些东西：在线体验地址、GitHub 仓库、项目截图、功能说明、技术栈说明、系统架构说明、部署文档、项目复盘、面试问答整理。这样它才不只是一个练手项目，而是一个能被展示、能被理解、能被追问的作品。</p><hr><h2 id="博客在这条路线里的作用"><a href="#博客在这条路线里的作用" class="headerlink" title="博客在这条路线里的作用"></a>博客在这条路线里的作用</h2><h3 id="写博客不是额外任务"><a href="#写博客不是额外任务" class="headerlink" title="写博客不是额外任务"></a>写博客不是额外任务</h3><p>我以前会觉得，项目先做，文章以后有空再写。但现在我觉得，博客本身就是项目的一部分。因为项目完成以后，如果没有文档和复盘，很多价值是展示不出来的。尤其是对普通本科生来说，项目文章可以补充简历里写不下的内容。</p><p>简历只能写几行，博客可以把背后的思考写清楚：为什么做这个项目、技术选型怎么定、数据库怎么设计、Prompt 怎么写、权限怎么处理、上线遇到什么问题、项目有哪些不足。这些内容写出来后，项目会更可信，自己也会更清楚。</p><h3 id="博客、GitHub、在线地址要形成闭环"><a href="#博客、GitHub、在线地址要形成闭环" class="headerlink" title="博客、GitHub、在线地址要形成闭环"></a>博客、GitHub、在线地址要形成闭环</h3><p>我希望最后形成一个比较完整的证据链：博客文章说明我理解项目；GitHub 仓库说明我写了代码；在线地址说明项目可以访问；README 说明我能整理文档；项目复盘说明我能总结问题；简历 bullet 说明我能把项目价值表达出来。这几个东西合在一起，才是一个项目真正对求职有帮助的地方。</p><hr><h2 id="2026-年的几个目标"><a href="#2026-年的几个目标" class="headerlink" title="2026 年的几个目标"></a>2026 年的几个目标</h2><h3 id="经营好-yanxai-com"><a href="#经营好-yanxai-com" class="headerlink" title="经营好 yanxai.com"></a>经营好 yanxai.com</h3><p>第一个目标是把 yanxai.com 持续更新起来。不是追求一开始有多少访问量，而是先把内容结构搭好。我会先写博客定位、技术路线、简喵项目开篇，然后围绕项目继续写需求分析、技术选型、系统架构、数据库设计、Prompt 设计、部署上线和复盘文章。</p><h3 id="完成简喵-MVP"><a href="#完成简喵-MVP" class="headerlink" title="完成简喵 MVP"></a>完成简喵 MVP</h3><p>第二个目标是完成简喵的第一版。第一版不追求功能非常多，但必须有完整流程：注册登录、简历上传、文本解析、目标岗位输入、AI 分析、结果展示、历史记录和部署上线。只要这个闭环跑通，后面才能继续优化。</p><h3 id="补齐工程细节"><a href="#补齐工程细节" class="headerlink" title="补齐工程细节"></a>补齐工程细节</h3><p>第三个目标是把项目做得更像真实系统。包括权限校验、统一异常处理、日志脱敏、Redis 限流、接口文档、部署文档、项目截图、测试账号和 README。这些细节可能不会让项目看起来更炫，但会让它更可靠。</p><h3 id="转化成简历和面试材料"><a href="#转化成简历和面试材料" class="headerlink" title="转化成简历和面试材料"></a>转化成简历和面试材料</h3><p>第四个目标是把简喵整理成能真正放进简历的项目。这包括项目描述、技术栈、亮点 bullet、1 分钟项目介绍、3 分钟项目介绍，以及一套常见面试问题。项目不是写完代码就结束，能不能讲清楚也很重要。</p><hr><h2 id="我会怎样使用-AI-工具"><a href="#我会怎样使用-AI-工具" class="headerlink" title="我会怎样使用 AI 工具"></a>我会怎样使用 AI 工具</h2><p>我不会减少使用 AI 工具，相反我会更系统地用。我会用它们辅助查问题、写代码、解释框架、分析方案、优化文章、模拟面试。但我会尽量避免直接把 AI 的输出当成自己的理解——AI 生成的代码，我要能看懂；AI 给出的方案，我要能判断；AI 写出的解释，我要能验证；AI 帮我整理的文章，我要加入自己的真实经历。否则很容易出现一种假象：内容看起来很完整，但其实自己没有真正掌握。</p><p>这也是我写博客时需要注意的地方。文章可以参考 AI 的帮助，但最终必须写成自己的表达，写出自己真实做项目时遇到的问题。</p><hr><h2 id="写在最后"><a href="#写在最后" class="headerlink" title="写在最后"></a>写在最后</h2><p>2026 年，我不想只停留在会用 AI 工具。</p><p>工具当然重要，但它不是终点。对我来说，更重要的是借助工具做出真实项目，把功能部署上线，把过程写清楚，把项目转化成简历和面试里能讲得明白的材料。</p><p>所以今年的路线会比较明确：围绕 AI 应用开发做项目；用 Java 后端补工程能力；把项目部署到线上；用博客记录过程和复盘；最后把这些内容变成可以展示的作品集。</p><p>这条路不一定很快，也不会一开始就很漂亮。但至少我现在知道自己要往哪里走。后面，yanxai.com 会持续记录这个过程。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;写在前面&quot;&gt;&lt;a href=&quot;#写在前面&quot; class=&quot;headerlink&quot; title=&quot;写在前面&quot;&gt;&lt;/a&gt;写在前面&lt;/h2&gt;&lt;p&gt;2026 年，我想把自己的技术方向收得更清楚一点。&lt;/p&gt;
&lt;p&gt;过去一段时间，我花了不少时间使用 AI 工具。ChatGPT、Claude、DeepSeek、Cursor、Claude Code，这些工具确实很有用。它们可以帮我解释报错、生成</summary>
      
    
    
    
    <category term="技术路线" scheme="https://yanxai.com/categories/%E6%8A%80%E6%9C%AF%E8%B7%AF%E7%BA%BF/"/>
    
    
    <category term="AI应用开发" scheme="https://yanxai.com/tags/AI%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/"/>
    
    <category term="Java后端" scheme="https://yanxai.com/tags/Java%E5%90%8E%E7%AB%AF/"/>
    
    <category term="Spring Boot" scheme="https://yanxai.com/tags/Spring-Boot/"/>
    
    <category term="项目实战" scheme="https://yanxai.com/tags/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/"/>
    
    <category term="技术成长" scheme="https://yanxai.com/tags/%E6%8A%80%E6%9C%AF%E6%88%90%E9%95%BF/"/>
    
  </entry>
  
  <entry>
    <title>Claude Code 接入 DeepSeek V4 Pro 保姆级教程</title>
    <link href="https://yanxai.com/2026/05/10/claude-code-jie-ru-deepseek-v4-pro-bao-mu-ji-jiao-cheng/"/>
    <id>https://yanxai.com/2026/05/10/claude-code-jie-ru-deepseek-v4-pro-bao-mu-ji-jiao-cheng/</id>
    <published>2026-05-10T08:00:00.000Z</published>
    <updated>2026-05-17T16:40:59.308Z</updated>
    
    <content type="html"><![CDATA[<h2 id="为什么要用-Claude-Code-并接入-DeepSeek-V4-Pro？"><a href="#为什么要用-Claude-Code-并接入-DeepSeek-V4-Pro？" class="headerlink" title="为什么要用 Claude Code 并接入 DeepSeek V4 Pro？"></a>为什么要用 Claude Code 并接入 DeepSeek V4 Pro？</h2><ul><li><strong>Claude Code</strong>：Anthropic 出的<strong>终端 AI 编程神器</strong>，公认最好用的代码 Agent 界面：能读整个项目、改文件、跑命令、Git 操作、多轮思考，<strong>体验顶级、但锁死 Claude 官方模型，贵且容易封号</strong>。</li><li><strong>DeepSeek V4 Pro</strong>：国产顶级大模型，<strong>代码能力接近 Claude Opus，中文更强、价格极低、国内直连、不封号</strong>，而且<strong>原生兼容 Claude 协议</strong>，换个地址就能用。</li></ul><p>两者结合，等于白嫖顶级编程体验。</p><span id="more"></span><hr><h2 id="一、前置准备"><a href="#一、前置准备" class="headerlink" title="一、前置准备"></a>一、前置准备</h2><h3 id="1-安装-Git（没有必须装）"><a href="#1-安装-Git（没有必须装）" class="headerlink" title="1. 安装 Git（没有必须装）"></a>1. 安装 Git（没有必须装）</h3><ol><li>打开浏览器访问 Git 官网下载：<a href="https://git-scm.com/download/win">https://git-scm.com/download/win</a></li><li>下载完成后双击安装包，<strong>全部默认下一步</strong>，不用改任何配置。</li><li>安装结束后<strong>不用打开 Git</strong>，直接关闭安装窗口即可。</li></ol><h3 id="2-安装-Node-js"><a href="#2-安装-Node-js" class="headerlink" title="2. 安装 Node.js"></a>2. 安装 Node.js</h3><ol><li>浏览器打开 Node.js 官网：<a href="https://nodejs.org/">https://nodejs.org/</a></li><li>下载 <strong>LTS 长期稳定版</strong>（推荐）。</li><li>双击安装包，全程<strong>默认下一步</strong>，勾选 Add to PATH（默认已勾选）。</li><li>安装验证：右键开始菜单 → 打开 <strong>Windows PowerShell</strong>，依次输入两条命令，能输出版本号就是安装成功：</li></ol><figure class="highlight powershell"><table><tbody><tr><td class="code"><pre><span class="line">node <span class="literal">-v</span></span><br><span class="line">npm <span class="literal">-v</span></span><br></pre></td></tr></tbody></table></figure><h3 id="3-申请-DeepSeek-官方-API-Key"><a href="#3-申请-DeepSeek-官方-API-Key" class="headerlink" title="3. 申请 DeepSeek 官方 API Key"></a>3. 申请 DeepSeek 官方 API Key</h3><ol><li>浏览器打开 DeepSeek 官网：<a href="https://www.deepseek.com/">https://www.deepseek.com/</a></li><li>右上角登录 / 注册账号（手机号登录即可）。</li><li>进入<strong>个人控制台</strong> → 找到「API 密钥管理」。</li><li>点击「创建密钥」，<strong>复制生成的 sk- 开头密钥</strong>，粘贴到记事本保存（只显示一次，关掉就看不到）。</li></ol><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/Claudedeepseekv4pro/%E5%88%9B%E5%BB%BAdeepseekApikey.webp" alt="创建 DeepSeek API Key"></p><h3 id="4-新建专属工作文件夹"><a href="#4-新建专属工作文件夹" class="headerlink" title="4. 新建专属工作文件夹"></a>4. 新建专属工作文件夹</h3><p>随便找一个磁盘，比如 D 盘，新建文件夹：<code>D:\AI\ClaudeCode</code>。进入这个文件夹，<strong>空白处右键</strong> → 选择 <strong>在此处打开 Windows PowerShell</strong>，后续所有命令都在这个窗口执行。</p><hr><h2 id="二、完整安装-Claude-Code-官方客户端"><a href="#二、完整安装-Claude-Code-官方客户端" class="headerlink" title="二、完整安装 Claude Code 官方客户端"></a>二、完整安装 Claude Code 官方客户端</h2><blockquote><p>Claude Code 项目文档：<a href="https://code.claude.com/docs/en/overview">https://code.claude.com/docs/en/overview</a></p></blockquote><h3 id="1-PowerShell-全局安装-Claude-Code"><a href="#1-PowerShell-全局安装-Claude-Code" class="headerlink" title="1. PowerShell 全局安装 Claude Code"></a>1. PowerShell 全局安装 Claude Code</h3><p>在刚才打开的 PowerShell 里，直接复制粘贴回车：</p><figure class="highlight powershell"><table><tbody><tr><td class="code"><pre><span class="line">npm install <span class="literal">-g</span> @anthropic<span class="literal">-ai</span>/claude<span class="literal">-code</span></span><br></pre></td></tr></tbody></table></figure><p>等待下载安装完成（出现一堆 ok、version 即完成）。</p><h3 id="2-验证是否安装成功"><a href="#2-验证是否安装成功" class="headerlink" title="2. 验证是否安装成功"></a>2. 验证是否安装成功</h3><p>继续输入命令回车：</p><figure class="highlight powershell"><table><tbody><tr><td class="code"><pre><span class="line">claude <span class="literal">--version</span></span><br></pre></td></tr></tbody></table></figure><p><strong>能输出版本号</strong> = 安装成功。</p><h3 id="3-初次初始化（只看流程，不登录）"><a href="#3-初次初始化（只看流程，不登录）" class="headerlink" title="3. 初次初始化（只看流程，不登录）"></a>3. 初次初始化（只看流程，不登录）</h3><p>输入命令进入 Claude Code 终端界面：</p><figure class="highlight powershell"><table><tbody><tr><td class="code"><pre><span class="line">claude</span><br></pre></td></tr></tbody></table></figure><p>会进入官方欢迎初始化页面，<strong>不用登录、不用绑定账号</strong>，直接放着就行，后面配置会跳过登录。</p><hr><h2 id="三、安装-CCswitch-模型切换插件（核心关键）"><a href="#三、安装-CCswitch-模型切换插件（核心关键）" class="headerlink" title="三、安装 CCswitch 模型切换插件（核心关键）"></a>三、安装 CCswitch 模型切换插件（核心关键）</h2><blockquote><p>作用：一键切换 Claude Code 底层模型，换成 DeepSeek V4 Pro</p></blockquote><h3 id="方式一：Git-克隆安装（推荐，无多余软件）"><a href="#方式一：Git-克隆安装（推荐，无多余软件）" class="headerlink" title="方式一：Git 克隆安装（推荐，无多余软件）"></a>方式一：Git 克隆安装（推荐，无多余软件）</h3><p>依旧在刚才的 PowerShell 窗口，逐行复制执行：</p><figure class="highlight powershell"><table><tbody><tr><td class="code"><pre><span class="line">git clone https://github.com/op7418/guizang<span class="literal">-ppt-skill</span>.git ~/.claude/skills/guizang<span class="literal">-ppt-skill</span></span><br></pre></td></tr></tbody></table></figure><p>克隆完成无报错，就是安装成功。</p><h3 id="方式二：不会用-Git-就手动下载"><a href="#方式二：不会用-Git-就手动下载" class="headerlink" title="方式二：不会用 Git 就手动下载"></a>方式二：不会用 Git 就手动下载</h3><ol><li>浏览器打开 GitHub 搜索：<code>op7418/guizang-ppt-skill</code></li><li>进入仓库 → Code → Download ZIP 下载压缩包。</li><li>解压后把整个文件夹放到路径：<code>C:\Users\你电脑用户名\.claude\skills\</code>，没有 skills 文件夹就自己新建一个。</li></ol><hr><h2 id="四、图形化-CCswitch-配置-DeepSeek-V4-Pro（一步一步照着填）"><a href="#四、图形化-CCswitch-配置-DeepSeek-V4-Pro（一步一步照着填）" class="headerlink" title="四、图形化 CCswitch 配置 DeepSeek V4 Pro（一步一步照着填）"></a>四、图形化 CCswitch 配置 DeepSeek V4 Pro（一步一步照着填）</h2><ol><li>回到 PowerShell，输入命令打开 CCswitch 面板：</li></ol><figure class="highlight powershell"><table><tbody><tr><td class="code"><pre><span class="line">/skills</span><br></pre></td></tr></tbody></table></figure><p>找到 <code>guizang-ppt-skill</code> 启用，打开可视化配置面板。</p><ol start="2"><li><p>面板右上角点击 <strong>+ 添加提供商</strong></p></li><li><p>提供商预设选择：<strong>DeepSeek</strong>，自动填充：请求地址、协议格式，不用手动改。</p></li></ol><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/Claudedeepseekv4pro/deepseek%E6%A8%A1%E5%9E%8B%E9%85%8D%E7%BD%AE.webp" alt="DeepSeek 模型配置"></p><ol start="4"><li>手动填写以下内容（严格照抄）：</li></ol><ul><li>提供商名称：<code>DeepSeek-V4Pro</code></li><li>API Key：粘贴你之前复制的 <strong>sk-xxxx</strong> 完整密钥</li><li>模型名称填写：<code>deepseek-v4-pro</code></li></ul><ol start="5"><li>高级设置（必勾）：</li></ol><ul><li>API 兼容格式：选择 <strong>Anthropic Message 原生兼容</strong></li><li>勾选：<strong>跳过 Claude 官方初次登录引导</strong></li><li>勾选：<strong>强制替换默认模型</strong></li></ul><ol start="6"><li><p>点击 <strong>测试供应商</strong>，提示「测试连接成功、模型响应正常」再下一步。</p></li><li><p>点击 <strong>设为默认启用</strong>，此时 Claude Code 底层已经换成 DeepSeek V4 Pro。</p></li></ol><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/Claudedeepseekv4pro/CCswithch%E9%85%8D%E7%BD%AEdeepseek.webp" alt="CCswitch 配置 DeepSeek"></p><p>JSON 配置如下（记得填写 API Key）：</p><figure class="highlight json"><table><tbody><tr><td class="code"><pre><span class="line"><span class="punctuation">{</span></span><br><span class="line">  <span class="attr">"env"</span><span class="punctuation">:</span> <span class="punctuation">{</span></span><br><span class="line">    <span class="attr">"ANTHROPIC_BASE_URL"</span><span class="punctuation">:</span> <span class="string">"https://api.deepseek.com/anthropic"</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">"ANTHROPIC_AUTH_TOKEN"</span><span class="punctuation">:</span> <span class="string">""</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">"ANTHROPIC_MODEL"</span><span class="punctuation">:</span> <span class="string">"Deepseek-V4-Pro"</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">"ANTHROPIC_DEFAULT_HAIKU_MODEL"</span><span class="punctuation">:</span> <span class="string">"DeepSeek-V4-Flash"</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">"ANTHROPIC_DEFAULT_SONNET_MODEL"</span><span class="punctuation">:</span> <span class="string">"Deepseek-V4-Pro"</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">"ANTHROPIC_DEFAULT_OPUS_MODEL"</span><span class="punctuation">:</span> <span class="string">"Deepseek-V4-Pro"</span></span><br><span class="line">  <span class="punctuation">}</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">"hooks"</span><span class="punctuation">:</span> <span class="punctuation">{</span></span><br><span class="line">    <span class="attr">"Stop"</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">{</span></span><br><span class="line">        <span class="attr">"matcher"</span><span class="punctuation">:</span> <span class="string">"*"</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">"hooks"</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="punctuation">{</span></span><br><span class="line">            <span class="attr">"type"</span><span class="punctuation">:</span> <span class="string">"command"</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">"async"</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">"command"</span><span class="punctuation">:</span> <span class="string">"powershell -Command \"(New-Object Media.SoundPlayer 'C:\\Windows\\Media\\Windows Notify.wav').PlaySync(); Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('Claude 任务已完成/中断', 'Claude Code', 'OK', 'Information')\""</span></span><br><span class="line">          <span class="punctuation">}</span></span><br><span class="line">        <span class="punctuation">]</span></span><br><span class="line">      <span class="punctuation">}</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">"Notification"</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">{</span></span><br><span class="line">        <span class="attr">"matcher"</span><span class="punctuation">:</span> <span class="string">"permission_prompt|idle_prompt"</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">"hooks"</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="punctuation">{</span></span><br><span class="line">            <span class="attr">"type"</span><span class="punctuation">:</span> <span class="string">"command"</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">"async"</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">"command"</span><span class="punctuation">:</span> <span class="string">"powershell -Command \"(New-Object Media.SoundPlayer 'C:\\Windows\\Media\\Windows Exclamation.wav').PlaySync(); Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.MessageBox]::Show('Claude 需要你输入/授权', 'Claude Code', 'OK', 'Warning')\""</span></span><br><span class="line">          <span class="punctuation">}</span></span><br><span class="line">        <span class="punctuation">]</span></span><br><span class="line">      <span class="punctuation">}</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">}</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">"includeCoAuthoredBy"</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span></span><br><span class="line"><span class="punctuation">}</span></span><br></pre></td></tr></tbody></table></figure><hr><h2 id="五、无工具手动配置兜底方案（不用-CCswitch-也能用）"><a href="#五、无工具手动配置兜底方案（不用-CCswitch-也能用）" class="headerlink" title="五、无工具手动配置兜底方案（不用 CCswitch 也能用）"></a>五、无工具手动配置兜底方案（不用 CCswitch 也能用）</h2><h3 id="1-找到用户配置目录"><a href="#1-找到用户配置目录" class="headerlink" title="1. 找到用户配置目录"></a>1. 找到用户配置目录</h3><p>打开此电脑，地址栏直接粘贴：</p><figure class="highlight plaintext"><table><tbody><tr><td class="code"><pre><span class="line">C:\Users\%USERNAME%\.claude</span><br></pre></td></tr></tbody></table></figure><h3 id="2-新建-编辑-settings-json-文件"><a href="#2-新建-编辑-settings-json-文件" class="headerlink" title="2. 新建 / 编辑 settings.json 文件"></a>2. 新建 / 编辑 settings.json 文件</h3><p>在 <code>.claude</code> 文件夹里，新建文本文档，改名为 <code>settings.json</code>。<strong>注意：后缀从 .txt 改成 .json。</strong></p><p>右键用记事本打开，粘贴下面内容，把 <code>sk-你的DeepSeek-API-Key</code> 换成你自己的：</p><figure class="highlight json"><table><tbody><tr><td class="code"><pre><span class="line"><span class="punctuation">{</span></span><br><span class="line">  <span class="attr">"env"</span><span class="punctuation">:</span> <span class="punctuation">{</span></span><br><span class="line">    <span class="attr">"ANTHROPIC_BASE_URL"</span><span class="punctuation">:</span> <span class="string">"https://api.deepseek.com/anthropic"</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">"ANTHROPIC_AUTH_TOKEN"</span><span class="punctuation">:</span> <span class="string">"sk-你的DeepSeek-API-Key"</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">"ANTHROPIC_MODEL"</span><span class="punctuation">:</span> <span class="string">"deepseek-v4-pro"</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">"ANTHROPIC_DEFAULT_OPUS_MODEL"</span><span class="punctuation">:</span> <span class="string">"deepseek-v4-pro"</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">"ANTHROPIC_DEFAULT_SONNET_MODEL"</span><span class="punctuation">:</span> <span class="string">"deepseek-v4-pro"</span></span><br><span class="line">  <span class="punctuation">}</span></span><br><span class="line"><span class="punctuation">}</span></span><br></pre></td></tr></tbody></table></figure><p>保存关闭。</p><h3 id="3-跳过官方登录强制引导"><a href="#3-跳过官方登录强制引导" class="headerlink" title="3. 跳过官方登录强制引导"></a>3. 跳过官方登录强制引导</h3><p>回到 <code>C:\Users\你的用户名</code> 根目录，新建文件 <code>.claude.json</code>，粘贴内容：</p><figure class="highlight json"><table><tbody><tr><td class="code"><pre><span class="line"><span class="punctuation">{</span></span><br><span class="line">  <span class="attr">"hasCompletedOnboarding"</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line"><span class="punctuation">}</span></span><br></pre></td></tr></tbody></table></figure><p>保存，彻底跳过登录步骤。</p><hr><h2 id="六、完整验证是否真正接入-DeepSeek-V4-Pro"><a href="#六、完整验证是否真正接入-DeepSeek-V4-Pro" class="headerlink" title="六、完整验证是否真正接入 DeepSeek V4 Pro"></a>六、完整验证是否真正接入 DeepSeek V4 Pro</h2><ol><li><strong>关闭所有 PowerShell 窗口</strong>，彻底关掉。</li><li>重新进入文件夹 <code>D:\AI\ClaudeCode</code>，空白右键 → 在此处打开 PowerShell。</li><li>输入命令进入 Claude Code：</li></ol><figure class="highlight powershell"><table><tbody><tr><td class="code"><pre><span class="line">claude</span><br></pre></td></tr></tbody></table></figure><ol start="4"><li>在 Claude Code 内部输入查看模型命令：</li></ol><figure class="highlight plaintext"><table><tbody><tr><td class="code"><pre><span class="line">/model</span><br></pre></td></tr></tbody></table></figure><p><strong>显示 deepseek-v4-pro</strong> = 切换成功。</p><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/Claudedeepseekv4pro/%E6%8E%A5%E5%85%A5%E6%88%90%E5%8A%9F.webp" alt="接入成功"></p><ol start="5"><li>实测发消息测试，输入：</li></ol><figure class="highlight plaintext"><table><tbody><tr><td class="code"><pre><span class="line">帮我用Java SpringBoot写一个简单的Controller示例，带完整注释</span><br></pre></td></tr></tbody></table></figure><p>能正常生成代码、响应流畅，就是完全配置好了。</p><hr><h2 id="七、常见报错超详细解决"><a href="#七、常见报错超详细解决" class="headerlink" title="七、常见报错超详细解决"></a>七、常见报错超详细解决</h2><h3 id="1-输入-claude-不是内部命令"><a href="#1-输入-claude-不是内部命令" class="headerlink" title="1. 输入 claude 不是内部命令"></a>1. 输入 claude 不是内部命令</h3><p>原因：Node.js 没装 / 没加到系统环境变量。<br>解决：重装 Node.js 并重启电脑。</p><h3 id="2-一直弹窗要求登录-Anthropic-账号"><a href="#2-一直弹窗要求登录-Anthropic-账号" class="headerlink" title="2. 一直弹窗要求登录 Anthropic 账号"></a>2. 一直弹窗要求登录 Anthropic 账号</h3><p>解决：检查 C 盘用户目录下 <code>.claude.json</code> 是否写了：<code>"hasCompletedOnboarding": true</code></p><h3 id="3-测试供应商失败、接口报错"><a href="#3-测试供应商失败、接口报错" class="headerlink" title="3. 测试供应商失败、接口报错"></a>3. 测试供应商失败、接口报错</h3><ol><li>API Key 不要有空格、不要多复制字符</li><li>Base URL 必须严格是：<code>https://api.deepseek.com/anthropic</code></li><li>关掉科学上网、代理，用本地网络</li></ol><h3 id="4-Git-克隆不是内部命令"><a href="#4-Git-克隆不是内部命令" class="headerlink" title="4. Git 克隆不是内部命令"></a>4. Git 克隆不是内部命令</h3><p>原因：Git 没装或没加到环境变量。<br>解决：重装 Git，安装时默认勾选 Add to PATH。</p><h3 id="5-模型切过去还是-Claude-原版"><a href="#5-模型切过去还是-Claude-原版" class="headerlink" title="5. 模型切过去还是 Claude 原版"></a>5. 模型切过去还是 Claude 原版</h3><p>解决：重启终端 → 重新 <code>/model</code> 查看 → CCswitch 重新设为默认。</p><hr><h2 id="八、日常固定使用流程（以后每次都这么开）"><a href="#八、日常固定使用流程（以后每次都这么开）" class="headerlink" title="八、日常固定使用流程（以后每次都这么开）"></a>八、日常固定使用流程（以后每次都这么开）</h2><ol><li>打开 <code>D:\AI\ClaudeCode</code> 文件夹</li><li>空白右键 → 在此处打开 PowerShell</li><li>输入：<code>claude</code> 回车</li><li>直接发需求：写 Java、写 Vue3、写项目架构、写简历，全部自动走 DeepSeek V4 Pro。</li></ol><hr><h2 id="九、接入-PPT-skill-能力"><a href="#九、接入-PPT-skill-能力" class="headerlink" title="九、接入 PPT-skill 能力"></a>九、接入 PPT-skill 能力</h2><p>GitHub 仓库：<a href="https://github.com/op7418/guizang-ppt-skill">https://github.com/op7418/guizang-ppt-skill</a></p><p>手动 Git 克隆：</p><figure class="highlight powershell"><table><tbody><tr><td class="code"><pre><span class="line">git clone https://github.com/op7418/guizang<span class="literal">-ppt-skill</span>.git ~/.claude/skills/guizang<span class="literal">-ppt-skill</span></span><br></pre></td></tr></tbody></table></figure><p>安装好后就有制作 PPT 的能力了。之后说”一份杂志风PPT”就会自动触发。</p><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/Claudedeepseekv4pro/PPT%E9%A2%84%E8%A7%88.webp" alt="PPT 预览效果"></p><hr><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>整套流程走完，你拥有了：</p><ul><li><strong>顶级编程交互体验</strong>（Claude Code 界面）</li><li><strong>国产模型的价格和速度</strong>（DeepSeek V4 Pro 国内直连）</li><li><strong>PPT 自动生成能力</strong>（guizang-ppt-skill）</li></ul><p>两句话总结：<strong>Claude Code 的壳，DeepSeek 的脑，PPT 随手搞。</strong></p>]]></content>
    
    
    <summary type="html">手把手教你用 CCswitch 插件给 Claude Code 换上 DeepSeek V4 Pro 模型，保留顶级编程交互体验的同时享受国产模型的低价和中文优势。</summary>
    
    
    
    <category term="AI教程" scheme="https://yanxai.com/categories/AI%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Claude Code" scheme="https://yanxai.com/tags/Claude-Code/"/>
    
    <category term="DeepSeek" scheme="https://yanxai.com/tags/DeepSeek/"/>
    
    <category term="AI编程" scheme="https://yanxai.com/tags/AI%E7%BC%96%E7%A8%8B/"/>
    
    <category term="开发工具" scheme="https://yanxai.com/tags/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/"/>
    
  </entry>
  
  <entry>
    <title>Hexo + Matery 主题从零搭建个人博客完整教程（GitHub Pages 部署 + 美化优化全流程）</title>
    <link href="https://yanxai.com/2026/05/10/hexo-matery-blog-jian-zhan-jiao-cheng/"/>
    <id>https://yanxai.com/2026/05/10/hexo-matery-blog-jian-zhan-jiao-cheng/</id>
    <published>2026-05-10T04:00:00.000Z</published>
    <updated>2026-05-14T15:40:02.175Z</updated>
    
    <content type="html"><![CDATA[<h2 id="为什么选-Hexo-Matery？"><a href="#为什么选-Hexo-Matery？" class="headerlink" title="为什么选 Hexo + Matery？"></a>为什么选 Hexo + Matery？</h2><p><strong>Hexo</strong> 是一个基于 Node.js 的静态博客框架，一条命令就能把 Markdown 文章生成完整的 HTML 站点。<strong>Matery</strong> 是 Hexo 生态中最受欢迎的 Material Design 风格主题之一，自带响应式布局、暗黑模式、代码高亮、相册灯箱、搜索、评论等全套功能。</p><p>相比 WordPress 需要服务器和数据库，Hexo 的纯静态方案配合 GitHub Pages <strong>零成本、免运维、加载快</strong>，非常适合个人博客。</p><span id="more"></span><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/hexo-matery-blog-jian-zhan-jiao-cheng/hexo%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%E5%9B%BE%E7%89%87.webp" alt="Hexo + Matery 搭建个人博客"></p><blockquote><p>本教程最终效果预览：<a href="https://ryancoreai.github.io/">https://ryancoreai.github.io</a></p></blockquote><p>读完这篇教程，你将拥有一个<strong>完全免费、加载飞快、可深度定制</strong>的个人博客站点。</p><hr><h2 id="一、环境准备"><a href="#一、环境准备" class="headerlink" title="一、环境准备"></a>一、环境准备</h2><h3 id="1-1-安装-Node-js"><a href="#1-1-安装-Node-js" class="headerlink" title="1.1 安装 Node.js"></a>1.1 安装 Node.js</h3><ul><li>官网：<a href="https://nodejs.org/">https://nodejs.org/</a></li><li>下载 <strong>LTS（长期支持版）</strong>，一路 Next 默认安装即可</li><li>验证安装（打开终端或 Git Bash）：</li></ul><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">node -v</span><br><span class="line">npm -v</span><br></pre></td></tr></tbody></table></figure><h3 id="1-2-安装-Git"><a href="#1-2-安装-Git" class="headerlink" title="1.2 安装 Git"></a>1.2 安装 Git</h3><ul><li>官网：<a href="https://git-scm.com/">https://git-scm.com/</a></li><li>默认安装，验证：</li></ul><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">git --version</span><br></pre></td></tr></tbody></table></figure><h3 id="1-3-注册-GitHub-账号"><a href="#1-3-注册-GitHub-账号" class="headerlink" title="1.3 注册 GitHub 账号"></a>1.3 注册 GitHub 账号</h3><ul><li>注册地址：<a href="https://github.com/">https://github.com/</a></li></ul><hr><h2 id="二、创建-GitHub-仓库（关键：命名规则）"><a href="#二、创建-GitHub-仓库（关键：命名规则）" class="headerlink" title="二、创建 GitHub 仓库（关键：命名规则）"></a>二、创建 GitHub 仓库（关键：命名规则）</h2><ol><li>登录 GitHub → 右上角 <code>+</code> → New repository</li><li><strong>仓库名必须严格写</strong>：<code>你的用户名.github.io</code><ul><li>例：用户名是 <code>peter-create-ai</code> → 仓库名 <code>peter-create-ai.github.io</code></li></ul></li><li>选 <strong>Public</strong></li><li>其他默认 → Create repository</li></ol><p>这个仓库就是你的博客站点入口，GitHub 会自动把它识别为 GitHub Pages 站点。</p><hr><h2 id="三、安装-Hexo-并初始化博客"><a href="#三、安装-Hexo-并初始化博客" class="headerlink" title="三、安装 Hexo 并初始化博客"></a>三、安装 Hexo 并初始化博客</h2><h3 id="3-1-换国内镜像（下载提速）"><a href="#3-1-换国内镜像（下载提速）" class="headerlink" title="3.1 换国内镜像（下载提速）"></a>3.1 换国内镜像（下载提速）</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npm config <span class="built_in">set</span> registry https://registry.npmmirror.com</span><br></pre></td></tr></tbody></table></figure><h3 id="3-2-全局安装-Hexo"><a href="#3-2-全局安装-Hexo" class="headerlink" title="3.2 全局安装 Hexo"></a>3.2 全局安装 Hexo</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npm install -g hexo-cli</span><br></pre></td></tr></tbody></table></figure><p>验证：</p><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">hexo -v</span><br></pre></td></tr></tbody></table></figure><h3 id="3-3-创建博客项目"><a href="#3-3-创建博客项目" class="headerlink" title="3.3 创建博客项目"></a>3.3 创建博客项目</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">hexo init blog</span><br><span class="line"><span class="built_in">cd</span> blog</span><br><span class="line">npm install</span><br></pre></td></tr></tbody></table></figure><p>完成后目录结构：</p><figure class="highlight plaintext"><table><tbody><tr><td class="code"><pre><span class="line">blog/</span><br><span class="line">├── _config.yml        # 全局配置文件（核心）</span><br><span class="line">├── source/</span><br><span class="line">│   └── _posts/        # 文章 Markdown 放这里</span><br><span class="line">├── themes/            # 主题目录</span><br><span class="line">├── scaffolds/         # 文章模板</span><br><span class="line">└── package.json       # 插件依赖</span><br></pre></td></tr></tbody></table></figure><hr><h2 id="四、安装必备插件"><a href="#四、安装必备插件" class="headerlink" title="四、安装必备插件"></a>四、安装必备插件</h2><p>在博客根目录 (<code>blog/</code>) 执行以下命令：</p><h3 id="4-1-部署插件"><a href="#4-1-部署插件" class="headerlink" title="4.1 部署插件"></a>4.1 部署插件</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npm install hexo-deployer-git --save</span><br></pre></td></tr></tbody></table></figure><p>将生成的静态文件推送至 GitHub Pages。</p><h3 id="4-2-搜索插件"><a href="#4-2-搜索插件" class="headerlink" title="4.2 搜索插件"></a>4.2 搜索插件</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npm install hexo-generator-search --save</span><br></pre></td></tr></tbody></table></figure><p>生成 <code>search.xml</code>，供 Matery 主题的本地搜索功能使用。</p><h3 id="4-3-中文链接转拼音"><a href="#4-3-中文链接转拼音" class="headerlink" title="4.3 中文链接转拼音"></a>4.3 中文链接转拼音</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npm i hexo-permalink-pinyin --save</span><br></pre></td></tr></tbody></table></figure><p>文章标题包含中文时，URL 自动转为拼音，避免链接中出现乱码。</p><h3 id="4-4-RSS-订阅-站点地图（SEO-优化）"><a href="#4-4-RSS-订阅-站点地图（SEO-优化）" class="headerlink" title="4.4 RSS 订阅 + 站点地图（SEO 优化）"></a>4.4 RSS 订阅 + 站点地图（SEO 优化）</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npm install hexo-generator-feed --save</span><br><span class="line">npm install hexo-generator-sitemap --save</span><br></pre></td></tr></tbody></table></figure><p>这两个插件为搜索引擎提供标准化的内容索引，利于收录。</p><h3 id="4-5-静态资源压缩（加载速度优化）"><a href="#4-5-静态资源压缩（加载速度优化）" class="headerlink" title="4.5 静态资源压缩（加载速度优化）"></a>4.5 静态资源压缩（加载速度优化）</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npm install hexo-all-minifier --save</span><br></pre></td></tr></tbody></table></figure><p>自动压缩 HTML、CSS、JS、图片，显著减少页面体积。</p><hr><h2 id="五、配置-config-yml（核心步骤）"><a href="#五、配置-config-yml（核心步骤）" class="headerlink" title="五、配置 _config.yml（核心步骤）"></a>五、配置 <code>_config.yml</code>（核心步骤）</h2><p>用编辑器打开 <code>blog/_config.yml</code>，按以下内容修改：</p><h3 id="5-1-网站基本信息"><a href="#5-1-网站基本信息" class="headerlink" title="5.1 网站基本信息"></a>5.1 网站基本信息</h3><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="attr">title:</span> <span class="string">我的博客</span></span><br><span class="line"><span class="attr">subtitle:</span> <span class="string">''</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">'记录学习与思考'</span></span><br><span class="line"><span class="attr">keywords:</span> <span class="string">blog,</span> <span class="string">tech,</span> <span class="string">AI</span></span><br><span class="line"><span class="attr">author:</span> <span class="string">你的名字</span></span><br><span class="line"><span class="attr">language:</span> <span class="string">zh-CN</span></span><br><span class="line"><span class="attr">timezone:</span> <span class="string">''</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># URL 配置</span></span><br><span class="line"><span class="attr">url:</span> <span class="string">https://peter-create-ai.github.io</span></span><br><span class="line"><span class="attr">root:</span> <span class="string">/</span></span><br><span class="line"><span class="attr">permalink:</span> <span class="string">:year/:month/:day/:title/</span></span><br><span class="line"><span class="attr">permalink_defaults:</span></span><br><span class="line"><span class="attr">pretty_urls:</span></span><br><span class="line">  <span class="attr">trailing_index:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">trailing_html:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure><h3 id="5-2-文章与分页"><a href="#5-2-文章与分页" class="headerlink" title="5.2 文章与分页"></a>5.2 文章与分页</h3><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="attr">new_post_name:</span> <span class="string">:title.md</span></span><br><span class="line"><span class="attr">default_layout:</span> <span class="string">post</span></span><br><span class="line"><span class="attr">titlecase:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">external_link:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">field:</span> <span class="string">site</span></span><br><span class="line"><span class="attr">filename_case:</span> <span class="number">0</span></span><br><span class="line"><span class="attr">render_drafts:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">post_asset_folder:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">relative_link:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">future:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">highlight:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">prism_plugin:</span></span><br><span class="line">  <span class="attr">mode:</span> <span class="string">'preprocess'</span></span><br><span class="line">  <span class="attr">theme:</span> <span class="string">'tomorrow'</span></span><br><span class="line">  <span class="attr">line_number:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">index_generator:</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">''</span></span><br><span class="line">  <span class="attr">per_page:</span> <span class="number">12</span></span><br><span class="line">  <span class="attr">order_by:</span> <span class="string">-date</span></span><br></pre></td></tr></tbody></table></figure><p>关键点：</p><ul><li><code>post_asset_folder: false</code> —— 图片统一管理更方便（见下文图片管理章节）</li><li><code>highlight.enable: false</code> —— 关闭 Hexo 默认高亮，改用主题自带的 Prism</li></ul><h3 id="5-3-搜索配置"><a href="#5-3-搜索配置" class="headerlink" title="5.3 搜索配置"></a>5.3 搜索配置</h3><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="attr">search:</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">search.xml</span></span><br><span class="line">  <span class="attr">field:</span> <span class="string">post</span></span><br></pre></td></tr></tbody></table></figure><h3 id="5-4-中文链接转拼音配置"><a href="#5-4-中文链接转拼音配置" class="headerlink" title="5.4 中文链接转拼音配置"></a>5.4 中文链接转拼音配置</h3><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="attr">permalink_pinyin:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">separator:</span> <span class="string">'-'</span></span><br></pre></td></tr></tbody></table></figure><h3 id="5-5-RSS-配置"><a href="#5-5-RSS-配置" class="headerlink" title="5.5 RSS 配置"></a>5.5 RSS 配置</h3><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="attr">feed:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">type:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">atom</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">rss2</span></span><br><span class="line">  <span class="attr">path:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">atom.xml</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">rss.xml</span></span><br><span class="line">  <span class="attr">limit:</span> <span class="number">20</span></span><br><span class="line">  <span class="attr">content:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">content_limit:</span> <span class="number">200</span></span><br><span class="line">  <span class="attr">order_by:</span> <span class="string">-date</span></span><br><span class="line">  <span class="attr">autodiscovery:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure><h3 id="5-6-Sitemap-配置"><a href="#5-6-Sitemap-配置" class="headerlink" title="5.6 Sitemap 配置"></a>5.6 Sitemap 配置</h3><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="attr">sitemap:</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">sitemap.xml</span></span><br><span class="line">  <span class="attr">template:</span></span><br><span class="line">  <span class="attr">rel:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">tags:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">categories:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure><h3 id="5-7-部署配置（到你的-GitHub-仓库）"><a href="#5-7-部署配置（到你的-GitHub-仓库）" class="headerlink" title="5.7 部署配置（到你的 GitHub 仓库）"></a>5.7 部署配置（到你的 GitHub 仓库）</h3><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="attr">deploy:</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">git</span></span><br><span class="line">  <span class="attr">repo:</span> <span class="string">https://github.com/peter-create-ai/peter-create-ai.github.io.git</span></span><br><span class="line">  <span class="attr">branch:</span> <span class="string">main</span></span><br></pre></td></tr></tbody></table></figure><p>把所有 <code>peter-create-ai</code> 替换成你自己的 GitHub 用户名。</p><hr><h2 id="六、安装并启用-Matery-主题"><a href="#六、安装并启用-Matery-主题" class="headerlink" title="六、安装并启用 Matery 主题"></a>六、安装并启用 Matery 主题</h2><h3 id="6-1-下载主题"><a href="#6-1-下载主题" class="headerlink" title="6.1 下载主题"></a>6.1 下载主题</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line"><span class="built_in">cd</span> themes</span><br><span class="line">git <span class="built_in">clone</span> https://github.com/blinkfox/hexo-theme-matery.git</span><br><span class="line"><span class="built_in">cd</span> ..</span><br></pre></td></tr></tbody></table></figure><h3 id="6-2-启用主题"><a href="#6-2-启用主题" class="headerlink" title="6.2 启用主题"></a>6.2 启用主题</h3><p>在 <code>_config.yml</code> 中修改：</p><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="attr">theme:</span> <span class="string">hexo-theme-matery</span></span><br></pre></td></tr></tbody></table></figure><hr><h2 id="七、配置-Matery-主题（themes-matery-config-yml）"><a href="#七、配置-Matery-主题（themes-matery-config-yml）" class="headerlink" title="七、配置 Matery 主题（themes/matery/_config.yml）"></a>七、配置 Matery 主题（<code>themes/matery/_config.yml</code>）</h2><p>Matery 主题有自己的配置文件 <code>themes/matery/_config.yml</code>，<strong>一定要改</strong>，否则首页显示的是默认信息。</p><h3 id="7-1-首页个人信息"><a href="#7-1-首页个人信息" class="headerlink" title="7.1 首页个人信息"></a>7.1 首页个人信息</h3><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="comment"># 首页大图轮播</span></span><br><span class="line"><span class="attr">cover:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">length:</span> <span class="number">5</span>           <span class="comment"># 展示文章数</span></span><br><span class="line">  <span class="attr">showTitle:</span> <span class="literal">true</span>     <span class="comment"># 显示文章标题</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 头像 &amp; 社交链接</span></span><br><span class="line"><span class="attr">profile:</span></span><br><span class="line">  <span class="attr">avatar:</span> <span class="string">/medias/avatar.jpg</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">Ryan</span> <span class="string">Guo</span>      <span class="comment"># 你的名字</span></span><br><span class="line">  <span class="attr">socialLinks:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">icon:</span> <span class="string">fab</span> <span class="string">fa-github</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">https://github.com/你的用户名</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">icon:</span> <span class="string">fas</span> <span class="string">fa-envelope</span></span><br><span class="line">      <span class="attr">url:</span> <span class="string">mailto:你的邮箱@gmail.com</span></span><br></pre></td></tr></tbody></table></figure><h3 id="7-2-导航菜单"><a href="#7-2-导航菜单" class="headerlink" title="7.2 导航菜单"></a>7.2 导航菜单</h3><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="attr">menu:</span></span><br><span class="line">  <span class="attr">Home:</span> <span class="string">/</span></span><br><span class="line">  <span class="attr">Archives:</span> <span class="string">/archives</span></span><br><span class="line">  <span class="attr">Categories:</span> <span class="string">/categories</span></span><br><span class="line">  <span class="attr">Tags:</span> <span class="string">/tags</span></span><br><span class="line">  <span class="attr">About:</span> <span class="string">/about</span></span><br><span class="line">  <span class="attr">Friends:</span> <span class="string">/friends</span></span><br><span class="line">  <span class="comment"># 不需要的注释掉即可</span></span><br></pre></td></tr></tbody></table></figure><h3 id="7-3-文章与代码块配置"><a href="#7-3-文章与代码块配置" class="headerlink" title="7.3 文章与代码块配置"></a>7.3 文章与代码块配置</h3><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="comment"># 文章展示</span></span><br><span class="line"><span class="attr">postInfo:</span></span><br><span class="line">  <span class="attr">date:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">update:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">wordCount:</span> <span class="literal">true</span>      <span class="comment"># 需 hexo-wordcount 插件</span></span><br><span class="line">  <span class="attr">totalCount:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">min2read:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">readCount:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 代码块功能</span></span><br><span class="line"><span class="attr">code:</span></span><br><span class="line">  <span class="attr">break:</span> <span class="literal">false</span>         <span class="comment"># 是否强制折行</span></span><br><span class="line">  <span class="attr">lang:</span> <span class="literal">true</span>           <span class="comment"># 显示语言标签</span></span><br><span class="line">  <span class="attr">copy:</span> <span class="literal">true</span>           <span class="comment"># 一键复制按钮</span></span><br><span class="line">  <span class="attr">shrink:</span> <span class="literal">false</span>        <span class="comment"># 代码块折叠</span></span><br></pre></td></tr></tbody></table></figure><h3 id="7-4-评论系统（推荐-Giscus）"><a href="#7-4-评论系统（推荐-Giscus）" class="headerlink" title="7.4 评论系统（推荐 Giscus）"></a>7.4 评论系统（推荐 Giscus）</h3><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="comment"># Giscus —— 基于 GitHub Discussions，免费、无广告、开源</span></span><br><span class="line"><span class="attr">giscus:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">repo:</span> <span class="string">你的用户名/你的用户名.github.io</span></span><br><span class="line">  <span class="attr">repoID:</span> <span class="string">你的仓库ID</span></span><br><span class="line">  <span class="attr">category:</span> <span class="string">Announcements</span></span><br><span class="line">  <span class="attr">categoryID:</span> <span class="string">你的分类ID</span></span><br></pre></td></tr></tbody></table></figure><blockquote><p>申请 Giscus 非常简单：访问 <a href="https://giscus.app/">giscus.app</a>，填入仓库名，自动生成配置。</p></blockquote><h3 id="7-5-搜索-打赏"><a href="#7-5-搜索-打赏" class="headerlink" title="7.5 搜索 &amp; 打赏"></a>7.5 搜索 &amp; 打赏</h3><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="comment"># 本地搜索（需 hexo-generator-search 插件）</span></span><br><span class="line"><span class="attr">search:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 打赏</span></span><br><span class="line"><span class="attr">reward:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">false</span>        <span class="comment"># 需要时改为 true</span></span><br><span class="line">  <span class="attr">QRCode:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">/medias/reward/wechat.png</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">/medias/reward/alipay.jpg</span></span><br></pre></td></tr></tbody></table></figure><h3 id="7-6-首页文章摘要"><a href="#7-6-首页文章摘要" class="headerlink" title="7.6 首页文章摘要"></a>7.6 首页文章摘要</h3><p>Matery 默认在首页显示文章全文，建议配合 <code>&lt;!-- more --&gt;</code> 使用摘要截断：</p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line">这是文章开头，会显示在首页卡片中。</span><br><span class="line"></span><br><span class="line">&lt;!-- more --&gt;</span><br><span class="line"></span><br><span class="line">从这里开始的内容，需要点击文章进去才能看到。</span><br></pre></td></tr></tbody></table></figure><hr><h2 id="八、创建-Matery-必需的页面"><a href="#八、创建-Matery-必需的页面" class="headerlink" title="八、创建 Matery 必需的页面"></a>八、创建 Matery 必需的页面</h2><p>Matery 主题依赖以下页面结构，逐个创建：</p><h3 id="7-1-分类页"><a href="#7-1-分类页" class="headerlink" title="7.1 分类页"></a>7.1 分类页</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">hexo new page categories</span><br></pre></td></tr></tbody></table></figure><p>编辑 <code>source/categories/index.md</code>：</p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line">---</span><br><span class="line">title: categories</span><br><span class="line">type: "categories"</span><br><span class="line"><span class="section">layout: "categories"</span></span><br><span class="line"><span class="section">---</span></span><br></pre></td></tr></tbody></table></figure><h3 id="7-2-标签页"><a href="#7-2-标签页" class="headerlink" title="7.2 标签页"></a>7.2 标签页</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">hexo new page tags</span><br></pre></td></tr></tbody></table></figure><p>编辑 <code>source/tags/index.md</code>：</p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line">---</span><br><span class="line">title: tags</span><br><span class="line">type: "tags"</span><br><span class="line"><span class="section">layout: "tags"</span></span><br><span class="line"><span class="section">---</span></span><br></pre></td></tr></tbody></table></figure><h3 id="7-3-关于页"><a href="#7-3-关于页" class="headerlink" title="7.3 关于页"></a>7.3 关于页</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">hexo new page about</span><br></pre></td></tr></tbody></table></figure><p>编辑 <code>source/about/index.md</code>：</p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line">---</span><br><span class="line">title: about</span><br><span class="line">type: "about"</span><br><span class="line"><span class="section">layout: "about"</span></span><br><span class="line"><span class="section">---</span></span><br></pre></td></tr></tbody></table></figure><p>内容自由发挥，放自我介绍、联系方式等。</p><h3 id="7-4-友链页"><a href="#7-4-友链页" class="headerlink" title="7.4 友链页"></a>7.4 友链页</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">hexo new page friends</span><br></pre></td></tr></tbody></table></figure><p>编辑 <code>source/friends/index.md</code>：</p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line">---</span><br><span class="line">title: friends</span><br><span class="line">type: "friends"</span><br><span class="line"><span class="section">layout: "friends"</span></span><br><span class="line"><span class="section">---</span></span><br></pre></td></tr></tbody></table></figure><hr><h2 id="九、文章图片管理方案（推荐）"><a href="#九、文章图片管理方案（推荐）" class="headerlink" title="九、文章图片管理方案（推荐）"></a>九、文章图片管理方案（推荐）</h2><p>在 <code>source/</code> 下创建 <code>images/</code> 文件夹，<strong>所有图片统一放在这里</strong>：</p><figure class="highlight plaintext"><table><tbody><tr><td class="code"><pre><span class="line">source/</span><br><span class="line">├── images/</span><br><span class="line">│   ├── avatar.png</span><br><span class="line">│   └── blog01.jpg</span><br><span class="line">└── _posts/</span><br><span class="line">    └── 你的文章.md</span><br></pre></td></tr></tbody></table></figure><h3 id="文章内引用图片"><a href="#文章内引用图片" class="headerlink" title="文章内引用图片"></a>文章内引用图片</h3><p>格式固定：</p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line">![<span class="string">图片描述</span>](<span class="link">/images/图片名.jpg</span>)</span><br></pre></td></tr></tbody></table></figure><p>示例：</p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line">![<span class="string">博客配图</span>](<span class="link">/images/blog01.jpg</span>)</span><br></pre></td></tr></tbody></table></figure><h3 id="建议分类管理"><a href="#建议分类管理" class="headerlink" title="建议分类管理"></a>建议分类管理</h3><p>图片多了可以建子目录：</p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line">![<span class="string">生活照</span>](<span class="link">/images/life/001.jpg</span>)</span><br><span class="line">![<span class="string">学习笔记</span>](<span class="link">/images/study/note01.webp</span>)</span><br></pre></td></tr></tbody></table></figure><h3 id="图片命名规则"><a href="#图片命名规则" class="headerlink" title="图片命名规则"></a>图片命名规则</h3><ul><li>使用英文 + 数字命名，如 <code>blog01.jpg</code></li><li>避免中文和空格</li><li>建议压缩后再上传（推荐在线工具 TinyPNG 或 squoosh）</li></ul><blockquote><p>为什么不用 <code>post_asset_folder</code>？<br>每次新建文章自动创建同名文件夹会分散图片管理。统一放在 <code>/images/</code> 下，路径固定、好找、可复用。</p></blockquote><hr><h2 id="十、写第一篇完整文章"><a href="#十、写第一篇完整文章" class="headerlink" title="十、写第一篇完整文章"></a>十、写第一篇完整文章</h2><h3 id="9-1-新建文章"><a href="#9-1-新建文章" class="headerlink" title="9.1 新建文章"></a>9.1 新建文章</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">hexo new <span class="string">"我的第一篇博客"</span></span><br></pre></td></tr></tbody></table></figure><p>生成文件：<code>source/_posts/我的第一篇博客.md</code></p><h3 id="9-2-文章-Front-matter-完整写法"><a href="#9-2-文章-Front-matter-完整写法" class="headerlink" title="9.2 文章 Front-matter 完整写法"></a>9.2 文章 Front-matter 完整写法</h3><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line">---</span><br><span class="line">title: 我的第一篇博客</span><br><span class="line">date: 2026-05-10 12:00:00</span><br><span class="line">categories: 生活</span><br><span class="line">tags:</span><br><span class="line"><span class="bullet">  -</span> 随笔</span><br><span class="line"><span class="bullet">  -</span> 日常</span><br><span class="line">top: true       # 置顶，放在首页最上面</span><br><span class="line">cover: true     # 首页轮播大图展示</span><br><span class="line"><span class="section">toc: true       # 显示文章目录（默认就是 true）</span></span><br><span class="line"><span class="section">---</span></span><br></pre></td></tr></tbody></table></figure><h3 id="9-3-Matery-文章专属配置项"><a href="#9-3-Matery-文章专属配置项" class="headerlink" title="9.3 Matery 文章专属配置项"></a>9.3 Matery 文章专属配置项</h3><table><thead><tr><th>配置项</th><th>作用</th><th>可选值</th></tr></thead><tbody><tr><td><code>top: true</code></td><td>文章置顶到首页最前</td><td>true / false</td></tr><tr><td><code>hide: true</code></td><td>隐藏文章，不在首页列表显示</td><td>true / false</td></tr><tr><td><code>cover: true</code></td><td>首页轮播图展示</td><td>true / false</td></tr><tr><td><code>toc: false</code></td><td>关闭文章右侧目录</td><td>true / false</td></tr><tr><td><code>mathjax: true</code></td><td>启用数学公式渲染</td><td>true / false</td></tr><tr><td><code>img: /images/xxx.jpg</code></td><td>指定文章封面图</td><td>图片路径</td></tr><tr><td><code>summary: 摘要文字</code></td><td>自定义文章摘要</td><td>任意文字</td></tr></tbody></table><h3 id="9-4-Markdown-正文示例"><a href="#9-4-Markdown-正文示例" class="headerlink" title="9.4 Markdown 正文示例"></a>9.4 Markdown 正文示例</h3><p>以下是文章正文的常见写法，直接复制模板修改即可：</p><p><strong>二级标题和段落</strong></p><p><code>## 二级标题</code> 后用空行分隔正文。正文直接写，无需额外标记。</p><p><strong>列表</strong></p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line"><span class="bullet">-</span> 列表项 1</span><br><span class="line"><span class="bullet">-</span> 列表项 2</span><br><span class="line"><span class="bullet">  -</span> 嵌套子项</span><br></pre></td></tr></tbody></table></figure><p><strong>插入图片</strong></p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line">![<span class="string">插图</span>](<span class="link">/images/blog01.jpg</span>)</span><br></pre></td></tr></tbody></table></figure><p><strong>文字样式</strong></p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line"><span class="strong">**加粗文字**</span> 和 <span class="emphasis">*斜体文字*</span></span><br></pre></td></tr></tbody></table></figure><p><strong>引用块</strong></p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line"><span class="quote">&gt; 学而不思则罔，思而不学则殆</span></span><br></pre></td></tr></tbody></table></figure><p><strong>行内代码</strong></p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line">用 <span class="code">`hexo server`</span> 命令启动本地预览。</span><br></pre></td></tr></tbody></table></figure><p><strong>Java 代码块</strong></p><figure class="highlight markdown"><table><tbody><tr><td class="code"><pre><span class="line"><span class="code">```java</span></span><br><span class="line"><span class="code">public class Hello {</span></span><br><span class="line"><span class="code">    public static void main(String[] args) {</span></span><br><span class="line"><span class="code">        System.out.println("Hello, World!");</span></span><br><span class="line"><span class="code">    }</span></span><br><span class="line"><span class="code">}</span></span><br><span class="line"><span class="code">```</span></span><br></pre></td></tr></tbody></table></figure><blockquote><p>提示：展示 “如何在 Markdown 里写代码块” 时，外层用四个反引号 ```` `````` ` 包裹，内层的三个反引号就不会被解析为结束标记。</p></blockquote><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/hexo-matery-blog-jian-zhan-jiao-cheng/blog-article-preview.webp" alt="文章页面效果"></p><p>写好文章后，配合 Matery 的目录导航和代码高亮，阅读体验就是上面这样。</p><hr><h2 id="十一、本地预览"><a href="#十一、本地预览" class="headerlink" title="十一、本地预览"></a>十一、本地预览</h2><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">hexo server</span><br></pre></td></tr></tbody></table></figure><p>浏览器打开 <a href="http://localhost:4000/">http://localhost:4000</a></p><p>边写边预览，修改保存后页面自动刷新。按 <code>Ctrl+C</code> 停止服务。</p><hr><h2 id="十二、发布上线"><a href="#十二、发布上线" class="headerlink" title="十二、发布上线"></a>十二、发布上线</h2><h3 id="11-1-一键部署命令"><a href="#11-1-一键部署命令" class="headerlink" title="11.1 一键部署命令"></a>11.1 一键部署命令</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">hexo clean &amp;&amp; hexo g &amp;&amp; hexo d</span><br></pre></td></tr></tbody></table></figure><p>命令含义：</p><ul><li><code>hexo clean</code> —— 清空旧生成的静态文件</li><li><code>hexo g</code> (generate) —— 生成新的静态 HTML</li><li><code>hexo d</code> (deploy) —— 推送至 GitHub Pages</li></ul><h3 id="11-2-访问博客"><a href="#11-2-访问博客" class="headerlink" title="11.2 访问博客"></a>11.2 访问博客</h3><figure class="highlight plaintext"><table><tbody><tr><td class="code"><pre><span class="line">https://你的用户名.github.io</span><br></pre></td></tr></tbody></table></figure><p>部署后等待 1-2 分钟，GitHub Pages 会自动刷新。</p><p><img loading="lazy" decoding="async" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDI0IDI0Ij48Y2lyY2xlIGN4PSI0IiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgaWQ9InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAiIGF0dHJpYnV0ZU5hbWU9InIiIGJlZ2luPSIwO3N2Z1NwaW5uZXJzM0RvdHNTY2FsZTEuZW5kLTAuMjVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiIGZpbGw9ImN1cnJlbnRDb2xvciI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNnMiIGR1cj0iMC43NXMiIHZhbHVlcz0iMzsuMjszIi8+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMjAiIGN5PSIxMiIgcj0iMyIgZmlsbD0iY3VycmVudENvbG9yIj48YW5pbWF0ZSBpZD0ic3ZnU3Bpbm5lcnMzRG90c1NjYWxlMSIgYXR0cmlidXRlTmFtZT0iciIgYmVnaW49InN2Z1NwaW5uZXJzM0RvdHNTY2FsZTAuZW5kLTAuNDVzIiBkdXI9IjAuNzVzIiB2YWx1ZXM9IjM7LjI7MyIvPjwvY2lyY2xlPjwvc3ZnPg==" data-original="/images/hexo-matery-blog-jian-zhan-jiao-cheng/blog-homepage.webp" alt="博客主页效果"></p><p>部署成功后，你的博客主页大概长这样。Matery 的大图轮播 + Material Design 卡片布局，颜值在线。</p><hr><h2 id="十三、部署英文作品集（进阶：单仓库多站点）"><a href="#十三、部署英文作品集（进阶：单仓库多站点）" class="headerlink" title="十三、部署英文作品集（进阶：单仓库多站点）"></a>十三、部署英文作品集（进阶：单仓库多站点）</h2><p>如果你的英文作品集（Portfolio）也需要上线，可以和博客共用一个 GitHub Pages 仓库：</p><ol><li>单独创建一个 Portfolio 项目，使用 Cactus 或其他主题</li><li>Portfolio 的 <code>_config.yml</code> 中设置 <code>root: /portfolio/</code></li><li>在博客部署前，把 Portfolio 的 <code>public/</code> 复制到博客的 <code>public/portfolio/</code> 下</li></ol><p>这样就能同时拥有：</p><ul><li>中文博客：<code>https://用户名.github.io</code></li><li>英文作品集：<code>https://用户名.github.io/portfolio/</code></li></ul><hr><h2 id="十四、主题美化：统一配色方案"><a href="#十四、主题美化：统一配色方案" class="headerlink" title="十四、主题美化：统一配色方案"></a>十四、主题美化：统一配色方案</h2><p>Matery 默认使用<strong>绿色</strong>作为主题色。以下是以紫色（<code>#8b5cf6</code>）为例的替代方案。</p><h3 id="13-1-修改的完整文件清单"><a href="#13-1-修改的完整文件清单" class="headerlink" title="13.1 修改的完整文件清单"></a>13.1 修改的完整文件清单</h3><table><thead><tr><th>文件</th><th>说明</th></tr></thead><tbody><tr><td><code>themes/matery/source/css/my.css</code></td><td>自定义样式（卡片、侧边栏、归档）</td></tr><tr><td><code>themes/matery/source/css/matery.css</code></td><td>主题核心样式（进度条、标签、分页、链接）</td></tr><tr><td><code>themes/matery/source/css/dark.css</code></td><td>暗黑模式配色</td></tr><tr><td><code>themes/matery/source/css/post.css</code></td><td>文章页 TOC 目录样式</td></tr><tr><td><code>themes/matery/source/css/gitment.css</code></td><td>Gitment 评论区样式</td></tr><tr><td><code>themes/matery/source/css/my-gitalk.css</code></td><td>Gitalk 评论区样式</td></tr><tr><td><code>themes/matery/layout/_partial/github-link.ejs</code></td><td>GitHub 角标</td></tr><tr><td><code>themes/matery/layout/_widget/recommend.ejs</code></td><td>推荐文章卡片</td></tr><tr><td><code>themes/matery/layout/contact.ejs</code></td><td>联系页按钮</td></tr><tr><td><code>themes/matery/layout/friends.ejs</code></td><td>友链卡片背景</td></tr><tr><td><code>themes/matery/layout/_widget/category-radar.ejs</code></td><td>分类雷达图</td></tr><tr><td><code>themes/matery/layout/_widget/post-charts.ejs</code></td><td>文章统计图表</td></tr></tbody></table><h3 id="13-2-颜色映射表"><a href="#13-2-颜色映射表" class="headerlink" title="13.2 颜色映射表"></a>13.2 颜色映射表</h3><table><thead><tr><th>原颜色</th><th>说明</th><th>替换为</th></tr></thead><tbody><tr><td><code>#42b983</code></td><td>绿色主题色（约 45 处）</td><td><code>#8b5cf6</code></td></tr><tr><td><code>#0f9d58</code></td><td>深绿色（GitHub 角标等）</td><td><code>#8b5cf6</code></td></tr><tr><td><code>#4cbf30</code></td><td>浅绿色（渐变起点）</td><td><code>#a78bfa</code></td></tr><tr><td><code>#38a274</code></td><td>绿色深色变体</td><td><code>#7c4dff</code></td></tr><tr><td><code>#3ecf8e</code></td><td>青绿色（图表）</td><td><code>#8b5cf6</code></td></tr><tr><td><code>#0ba360</code> / <code>#3cba92</code></td><td>联系页/友链绿色</td><td><code>#7c4dff</code> / <code>#a78bfa</code></td></tr><tr><td><code>rgba(66,185,131,0.1)</code></td><td>绿色半透明背景</td><td><code>rgba(139,92,246,0.1)</code></td></tr></tbody></table><h3 id="13-3-批量查找替换命令（Bash）"><a href="#13-3-批量查找替换命令（Bash）" class="headerlink" title="13.3 批量查找替换命令（Bash）"></a>13.3 批量查找替换命令（Bash）</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line"><span class="comment"># 在 themes/matery 目录下查找所有绿色残留</span></span><br><span class="line">grep -rn <span class="string">"42b983\|0f9d58\|4cbf30\|38a274\|3ecf8e\|0ba360\|3cba92"</span> \</span><br><span class="line">  --include=<span class="string">"*.css"</span> --include=<span class="string">"*.ejs"</span> .</span><br></pre></td></tr></tbody></table></figure><hr><h2 id="十五、关闭不需要的功能"><a href="#十五、关闭不需要的功能" class="headerlink" title="十五、关闭不需要的功能"></a>十五、关闭不需要的功能</h2><h3 id="14-1-统计与分析"><a href="#14-1-统计与分析" class="headerlink" title="14.1 统计与分析"></a>14.1 统计与分析</h3><p>编辑 <code>themes/matery/_config.yml</code>：</p><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="comment"># 关闭百度统计</span></span><br><span class="line"><span class="attr">baiduAnalytics:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">id:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 关闭 Google Analytics</span></span><br><span class="line"><span class="attr">googleAnalytics:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">id:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 关闭百度推送</span></span><br><span class="line"><span class="attr">baiduPush:</span> <span class="literal">false</span></span><br></pre></td></tr></tbody></table></figure><h3 id="14-2-移除不用的插件"><a href="#14-2-移除不用的插件" class="headerlink" title="14.2 移除不用的插件"></a>14.2 移除不用的插件</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">npm uninstall hexo-theme-landscape hexo-renderer-pug</span><br></pre></td></tr></tbody></table></figure><p><code>hexo-theme-landscape</code> 是 Hexo 默认主题，已用 Matery 就不需要了。<code>hexo-renderer-pug</code> 是 Pug 模板引擎，Matery 用的是 EJS。</p><hr><h2 id="十六、日常写作工作流"><a href="#十六、日常写作工作流" class="headerlink" title="十六、日常写作工作流"></a>十六、日常写作工作流</h2><h3 id="新文章"><a href="#新文章" class="headerlink" title="新文章"></a>新文章</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">hexo new <span class="string">"文章标题"</span></span><br></pre></td></tr></tbody></table></figure><h3 id="本地预览"><a href="#本地预览" class="headerlink" title="本地预览"></a>本地预览</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">hexo server</span><br></pre></td></tr></tbody></table></figure><p>访问 <a href="http://localhost:4000/">http://localhost:4000</a> 实时查看效果。</p><h3 id="发布上线"><a href="#发布上线" class="headerlink" title="发布上线"></a>发布上线</h3><figure class="highlight bash"><table><tbody><tr><td class="code"><pre><span class="line">hexo clean &amp;&amp; hexo g &amp;&amp; hexo d</span><br></pre></td></tr></tbody></table></figure><h3 id="一句话总结"><a href="#一句话总结" class="headerlink" title="一句话总结"></a>一句话总结</h3><blockquote><p>写 Markdown → <code>hexo server</code> 预览 → <code>hexo clean &amp;&amp; hexo g &amp;&amp; hexo d</code> 发布</p></blockquote><hr><h2 id="十七、常见问题排查"><a href="#十七、常见问题排查" class="headerlink" title="十七、常见问题排查"></a>十七、常见问题排查</h2><h3 id="Q1：部署后页面空白-404？"><a href="#Q1：部署后页面空白-404？" class="headerlink" title="Q1：部署后页面空白 / 404？"></a>Q1：部署后页面空白 / 404？</h3><p>检查 <code>_config.yml</code> 中的 <code>url</code> 和 <code>root</code>：</p><ul><li>根站点：<code>root: /</code></li><li>子目录站点：<code>root: /子目录名/</code></li></ul><h3 id="Q2：图片显示不出来（裂图）？"><a href="#Q2：图片显示不出来（裂图）？" class="headerlink" title="Q2：图片显示不出来（裂图）？"></a>Q2：图片显示不出来（裂图）？</h3><ol><li>确认图片放在了 <code>source/images/</code> 下</li><li>引用路径必须以 <code>/images/</code> 开头，如 <code>![图](/images/xxx.jpg)</code></li><li>不要用相对路径 <code>../images/</code></li></ol><h3 id="Q3：部署后网站没变化？"><a href="#Q3：部署后网站没变化？" class="headerlink" title="Q3：部署后网站没变化？"></a>Q3：部署后网站没变化？</h3><ul><li>GitHub Pages 有 1-5 分钟缓存，等一等</li><li>强制刷新浏览器：<code>Ctrl+Shift+R</code></li><li>检查 GitHub 仓库的 Actions 页面是否显示绿色对勾</li></ul><h3 id="Q4：想要自定义域名？"><a href="#Q4：想要自定义域名？" class="headerlink" title="Q4：想要自定义域名？"></a>Q4：想要自定义域名？</h3><ol><li>在 <code>source/</code> 下创建 <code>CNAME</code> 文件，写入你的域名（如 <code>blog.example.com</code>）</li><li>去域名 DNS 服务商添加 CNAME 记录指向 <code>你的用户名.github.io</code></li><li>GitHub 仓库 Settings → Pages → Custom domain 填写域名</li></ol><h3 id="Q5：如何添加评论系统？"><a href="#Q5：如何添加评论系统？" class="headerlink" title="Q5：如何添加评论系统？"></a>Q5：如何添加评论系统？</h3><p><strong>推荐 Giscus</strong>（基于 GitHub Discussions），比 Gitalk 更简单，无需申请 OAuth App：</p><ol><li>访问 <a href="https://giscus.app/">giscus.app</a>，填入仓库名</li><li>在 GitHub 仓库 Settings → Features 中开启 Discussions</li><li>把生成的配置填入 <code>themes/matery/_config.yml</code>：</li></ol><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="attr">giscus:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">repo:</span> <span class="string">你的用户名/你的用户名.github.io</span></span><br><span class="line">  <span class="attr">repoID:</span> <span class="string">从</span> <span class="string">giscus.app</span> <span class="string">获取</span></span><br><span class="line">  <span class="attr">category:</span> <span class="string">Announcements</span></span><br><span class="line">  <span class="attr">categoryID:</span> <span class="string">从</span> <span class="string">giscus.app</span> <span class="string">获取</span></span><br><span class="line">  <span class="attr">mapping:</span> <span class="string">pathname</span></span><br><span class="line">  <span class="attr">lang:</span> <span class="string">zh-CN</span></span><br></pre></td></tr></tbody></table></figure><p>Matery 还支持 Gitalk、Valine、Waline、Twikoo 等，按需选择即可。</p><h3 id="Q6：代码块没有语法高亮？"><a href="#Q6：代码块没有语法高亮？" class="headerlink" title="Q6：代码块没有语法高亮？"></a>Q6：代码块没有语法高亮？</h3><p>确认 <code>_config.yml</code> 中启用了 Prism.js：</p><figure class="highlight yaml"><table><tbody><tr><td class="code"><pre><span class="line"><span class="attr">prismjs:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">preprocess:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure><p>Matery 主题内置了 Prism.js 的支持，开启后代码块会自动应用 Okaidia 暗色主题 + 行号。</p><h3 id="Q7：首页显示文章全文而不是摘要？"><a href="#Q7：首页显示文章全文而不是摘要？" class="headerlink" title="Q7：首页显示文章全文而不是摘要？"></a>Q7：首页显示文章全文而不是摘要？</h3><p>在文章中加入 <code>&lt;!-- more --&gt;</code> 标签，前面的内容作为摘要显示在首页卡片中，后面的内容只有点进去才能看到。</p><hr><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>这篇保姆级教程从一个空仓库开始，手把手带你完成了：</p><ol><li><strong>环境搭建</strong> → Node.js + Git + GitHub 仓库</li><li><strong>博客创建</strong> → Hexo 初始化 + 必备插件</li><li><strong>核心配置</strong> → <code>_config.yml</code> 网站配置 + Matery 主题配置</li><li><strong>内容写作</strong> → Front-matter 配置 + Markdown 规范 + 图片管理</li><li><strong>主题美化</strong> → 全站配色统一（紫/蓝/任意色）</li><li><strong>功能增强</strong> → 评论系统（Giscus）+ 搜索 + RSS + Sitemap</li><li><strong>部署发布</strong> → 一键推送到 GitHub Pages</li><li><strong>进阶扩展</strong> → 多站点部署、自定义域名、代码高亮（Prism.js 暗色主题）</li></ol><p>如果你已经跟着教程做完了所有步骤，恭喜——你现在拥有的是一个<strong>零成本、完全自定义、加载飞速、好看又好用的个人博客</strong>。</p><p>写吧。写得越多，收获越多。</p>]]></content>
    
    
    <summary type="html">从零开始手把手带你搭建一个完全免费、加载飞快、可深度定制的 Hexo + Matery 个人博客，涵盖环境搭建、主题配置、评论系统、SEO 优化、配色美化等全流程。</summary>
    
    
    
    <category term="个人博客" scheme="https://yanxai.com/categories/%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/"/>
    
    
    <category term="Hexo" scheme="https://yanxai.com/tags/Hexo/"/>
    
    <category term="GitHub Pages" scheme="https://yanxai.com/tags/GitHub-Pages/"/>
    
    <category term="博客建站" scheme="https://yanxai.com/tags/%E5%8D%9A%E5%AE%A2%E5%BB%BA%E7%AB%99/"/>
    
    <category term="Matery" scheme="https://yanxai.com/tags/Matery/"/>
    
  </entry>
  
  <entry>
    <title>我的第一篇博客</title>
    <link href="https://yanxai.com/2025/05/07/wo-de-di-yi-pian-bo-ke/"/>
    <id>https://yanxai.com/2025/05/07/wo-de-di-yi-pian-bo-ke/</id>
    <published>2025-05-07T08:00:00.000Z</published>
    <updated>2026-05-14T15:40:05.989Z</updated>
    
    <content type="html"><![CDATA[<h1 id="欢迎来到我的博客"><a href="#欢迎来到我的博客" class="headerlink" title="欢迎来到我的博客"></a>欢迎来到我的博客</h1><p>时光辗转，终于拥有了属于自己的一方小天地 —— 这个简简单单的个人博客，算是我在网络世界里留下的专属角落。不用迎合繁杂的社交节奏，不用刻意伪装情绪，只想在这里记录生活、沉淀心情，把日常里的点滴感悟、细碎美好都好好珍藏。</p><span id="more"></span><p>一路走来，总觉得生活需要一个可以安放思绪的地方。平日里忙碌于日常琐事，被学习和生活的节奏推着往前走，很多瞬间的感慨、突然冒出的想法，往往转瞬即逝，来不及细细回味。而搭建这个博客，于我而言，不仅是一次尝试新鲜事物的体验，更是给自己留一份慢下来的底气。在这里，我可以随心所欲写下所见所闻、所思所感，不用拘泥格式，不用纠结文笔，只以最真实的状态与自己对话。<br>生活本就是由无数平凡的瞬间拼凑而成。清晨推开窗扑面而来的清风，午后窗边洒落的一缕暖阳，傍晚天边渐变的晚霞，还有闲暇时安静看书、放空发呆的时光，这些看似微不足道的小美好，其实都是生活赠予我们的温柔。往后我想在博客里，记录下这些温柔片刻：偶尔是生活里的小确幸，偶尔是成长路上的小迷茫，偶尔是读到好书的心得体会，也会分享一些日常感悟与细碎心事。<br>人总要学会和自己独处，学会在喧嚣中守住内心的平静。现在的我们总是被短视频、碎片化信息包围，很难静下心来好好沉淀。而写作与记录，是最好的沉淀方式。敲下文字的过程，也是梳理情绪、理清思绪的过程，那些想不通的烦恼、藏在心底的情绪，落笔之后往往会豁然开朗。<br>这个博客没有华丽的修饰，没有刻意的迎合，只有最真实的自我表达。往后的日子里，我会坚持在这里更新，把生活的烟火气、成长的点点滴滴都一一记录。不求有人刻意驻足，只愿多年后回头翻看，能清晰记得此刻的心境与时光。<br>也愿每一个偶然闯入这里的人，都能在文字里找到一丝共鸣，卸下疲惫，收获一份平静与治愈。往后余生，以文字为伴，以时光为笺，慢慢记录，慢慢成长，不负生活，不负自己。</p>]]></content>
    
    
    <summary type="html">欢迎来到我的个人博客，这里记录生活、沉淀心情，把日常里的点滴感悟、细碎美好都好好珍藏。</summary>
    
    
    
    <category term="生活" scheme="https://yanxai.com/categories/%E7%94%9F%E6%B4%BB/"/>
    
    
    <category term="随笔" scheme="https://yanxai.com/tags/%E9%9A%8F%E7%AC%94/"/>
    
  </entry>
  
</feed>
