<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>软件试用 on 扎塔-Zata</title><link>https://www.zata.cc/categories/%E8%BD%AF%E4%BB%B6%E8%AF%95%E7%94%A8/</link><description>Recent content in 软件试用 on 扎塔-Zata</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>Example Person</copyright><lastBuildDate>Thu, 24 Sep 2026 17:09:06 +0800</lastBuildDate><atom:link href="https://www.zata.cc/categories/%E8%BD%AF%E4%BB%B6%E8%AF%95%E7%94%A8/index.xml" rel="self" type="application/rss+xml"/><item><title>everything-claude-code</title><link>https://www.zata.cc/p/everything-claude-code/</link><pubDate>Tue, 17 Mar 2026 10:53:29 +0800</pubDate><guid>https://www.zata.cc/p/everything-claude-code/</guid><description>&lt;img src="https://www.zata.cc/p/everything-claude-code/images/index/index.png" alt="Featured image of post everything-claude-code" />&lt;h1 id="安装和配置">安装和配置
&lt;/h1>&lt;h1 id="注意事项">注意事项
&lt;/h1>&lt;h2 id="概念">概念
&lt;/h2>&lt;p>更准确地说，它是把一整套 AI 开发工作流打包成仓库和插件，主要包括：&lt;/p>
&lt;ul>
&lt;li>agents：子代理角色，比如规划、架构、代码审查、安全审查&lt;/li>
&lt;li>skills：可复用工作流，比如 TDD、持续学习、搜索优先、安全检查、前后端模式&lt;/li>
&lt;li>commands：斜杠命令，比如 /plan、/verify、/code-review、/multi-execute&lt;/li>
&lt;li>hooks / rules / mcp-configs：自动化钩子、规范规则、MCP 外部工具接入&lt;/li>
&lt;/ul>
&lt;p>它的核心目标是把 AI 编码助手从“会聊天的工具”变成“更像工程团队的系统”：更会规划、记忆上下文、做验证循环、自动审查、安全扫
描和多代理协作。&lt;/p>
&lt;p>如果你问“适合拿来干嘛”，答案是：&lt;/p>
&lt;ul>
&lt;li>搭一套更强的 Claude Code/Codex 开发环境&lt;/li>
&lt;li>复用现成的 agent/skill/rule&lt;/li>
&lt;li>给团队统一 AI 编码规范和自动化流程
如果你问“它是不是一个能直接运行的产品”，答案是否。它更像一个 AI coding workflow toolkit，不是 SaaS/后端/前端业务项目。&lt;/li>
&lt;/ul>
&lt;p>补充一点：截至 2026-03-17，GitHub 页面显示它已经定位成 “AI agent harness performance optimization system”，英文 README
写的是 21 agents / 102 skills / 52 commands；我看到中文 README 里还是较早的 13 / 43 / 31，推测中文文档有些滞后。&lt;/p>
&lt;p>来源：
GitHub 仓库 (&lt;a class="link" href="https://github.com/affaan-m/everything-claude-code" target="_blank" rel="noopener"
>https://github.com/affaan-m/everything-claude-code&lt;/a>)
README.md (&lt;a class="link" href="https://github.com/affaan-m/everything-claude-code/blob/main/README.md" target="_blank" rel="noopener"
>https://github.com/affaan-m/everything-claude-code/blob/main/README.md&lt;/a>)
package.json (&lt;a class="link" href="https://raw.githubusercontent.com/affaan-m/everything-claude-code/main/package.json" target="_blank" rel="noopener"
>https://raw.githubusercontent.com/affaan-m/everything-claude-code/main/package.json&lt;/a>)&lt;/p></description></item><item><title>cherry-studio</title><link>https://www.zata.cc/p/cherry-studio/</link><pubDate>Mon, 09 Mar 2026 10:16:47 +0800</pubDate><guid>https://www.zata.cc/p/cherry-studio/</guid><description>&lt;img src="https://www.zata.cc/p/cherry-studio/images/index/index.png" alt="Featured image of post cherry-studio" />&lt;h1 id="cherry-studio-详细使用教程">Cherry Studio 详细使用教程
&lt;/h1>&lt;p>Cherry Studio 是一款备受推崇的桌面端跨平台 AI 客户端，被誉为&amp;quot;AI 领域的瑞士军刀”[1]。它本身不提供大模型算力，而是作为一个统一的图形界面，让你能够将各大云端 API（如 DeepSeek、OpenAI、Claude、Gemini）以及本地模型（如 Ollama）汇聚在一起使用 [1]。&lt;/p>
&lt;p>它主打隐私安全（数据保存在本地）、多模型对比、内置 300+ 智能助手以及强大的**知识库和代码助手（Code Agent）**功能 [2][3][4][5]。&lt;/p>
&lt;p>以下是一份从零开始的 Cherry Studio 详细使用教程：&lt;/p>
&lt;p>&lt;strong>第一步：下载与安装&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>支持系统&lt;/strong>：Windows (64 位)、macOS (10.15+)、Linux[1][6]。&lt;/li>
&lt;li>&lt;strong>下载途径&lt;/strong>：
&lt;ul>
&lt;li>前往官方网站 (&lt;a class="link" href="https://cherry-ai.com" target="_blank" rel="noopener"
>cherry-ai.com&lt;/a>) 或 GitHub 仓库 (&lt;a class="link" href="https://github.com/CherryHQ/cherry-studio" target="_blank" rel="noopener"
>CherryHQ/cherry-studio&lt;/a>) 的 Releases 页面下载对应的安装包 [3][6][7]。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>安装&lt;/strong>：双击下载的安装包，按提示“下一步”即可完成，开箱即用 [6]。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>第二步：核心配置——接入 AI 模型&lt;/strong>&lt;/p>
&lt;p>因为 Cherry Studio 是一个“客户端”，你需要为它配置 API 密钥（API Key）或连接本地模型才能开始对话 [6][8]。&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>接入云端模型（以 DeepSeek 或第三方 API 为例）&lt;/strong>
如果你有官方的 API Key，或者使用中转平台（如硅基流动、海鲸 AI 等）的 API：&lt;/p>
&lt;ul>
&lt;li>打开 Cherry Studio，点击左下角的“设置”（齿轮图标 ⚙️）[6][9]。&lt;/li>
&lt;li>在左侧菜单中选择“模型服务” (Providers)[9]。&lt;/li>
&lt;li>你会看到许多内置的服务商列表。你可以直接点击对应的服务商（如 OpenAI、Anthropic），或者点击“添加”创建一个**“自定义服务商” (Custom)**[9]。&lt;/li>
&lt;li>&lt;strong>填写关键参数&lt;/strong>（以自定义 OpenAI 兼容接口为例）：
&lt;ul>
&lt;li>&lt;strong>API 地址 (Base URL)&lt;/strong>：填入服务商提供的地址（例如 &lt;code>https://api.deepseek.com/v1&lt;/code> 或你的中转 API 地址）。注意通常需以 &lt;code>/v1&lt;/code> 结尾。&lt;/li>
&lt;li>&lt;strong>API 密钥 (API Key)&lt;/strong>：填入你的 &lt;code>sk-xxxxxx&lt;/code> 密钥 [9]。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>添加模型&lt;/strong>：
&lt;ul>
&lt;li>在配置界面的下方，找到“模型列表”或“管理模型”[6]。&lt;/li>
&lt;li>手动输入需要使用的模型 ID（例如 &lt;code>deepseek-chat&lt;/code>, &lt;code>gpt-4o&lt;/code>, &lt;code>claude-3-5-sonnet&lt;/code>），点击添加或回车 [6][9]。&lt;/li>
&lt;li>勾选这些模型使其生效，并可以将最常用的设为“默认模型”[6]。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>接入本地模型（通过 Ollama 或 LM Studio）&lt;/strong>
如果你的电脑配置较好，想免费且断网使用 AI：&lt;/p>
&lt;ul>
&lt;li>确保电脑上已安装并运行 Ollama，并且已经拉取了模型（如 &lt;code>ollama run qwen2.5&lt;/code>）。&lt;/li>
&lt;li>在 Cherry Studio 设置 -&amp;gt; 模型服务中，找到 Ollama。&lt;/li>
&lt;li>默认 API 地址通常为 &lt;code>http://127.0.0.1:11434&lt;/code>。&lt;/li>
&lt;li>软件会自动拉取你本地已安装的模型列表，勾选即可使用 [4][6]。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>第三步：日常基础使用&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>基础对话与多模型同开（对比模式）&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>基础对话&lt;/strong>：回到主界面，点击左侧导航栏的“聊天”图标，在顶部下拉菜单选择你刚才配置好的模型，即可在下方输入框提问。&lt;/li>
&lt;li>&lt;strong>多模型同开（强烈推荐）&lt;/strong>：如果你想看同一问题不同 AI 的回答哪个更好。在聊天界面，点击聊天框顶部的&amp;quot;+&amp;ldquo;号或模型图标，可以同时勾选 2 个或更多的模型（比如同时勾选 GPT-4o 和 Claude 3.5）。发送一句话，屏幕会分栏同时展示不同模型的回答 [1][6][7]。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>文件解析与多模态对话&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>如果你选择的模型支持多模态（如 &lt;code>gpt-4o&lt;/code> 或 &lt;code>claude-3-5-sonnet&lt;/code> 等），你可以直接将 PDF、Word、Excel 文档或图片拖拽到输入框中 [3][6]。&lt;/li>
&lt;li>软件会自动解析文档内容，你可以针对文档进行提问、总结和提取信息 [3][6]。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>使用内置的 300+ 智能助手（Agent）&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>不想每次都写长长的 Prompt（提示词）？&lt;/li>
&lt;li>点击左侧导航栏的“助手” (Assistants/Agents) 模块 [8]。&lt;/li>
&lt;li>里面内置了涵盖编程、写作、翻译、学术、营销等领域的 300 多种设定好的助手 [4]。&lt;/li>
&lt;li>找到你需要的助手（例如“小红书爆款文案生成器”或&amp;quot;Python 专家”），点击它并选择对应的运行模型，即可直接进入专用对话流 [4]。&lt;/li>
&lt;li>&lt;strong>自定义助手&lt;/strong>：你也可以点击“新建助手”，输入你自己的系统提示词（System Prompt），为其设置特定图标并保存，打造专属助理 [6][7]。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>第四步：进阶功能探索&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>构建个人本地知识库 (Knowledge Base)&lt;/strong>
Cherry Studio 最受欢迎的特性之一是其本地知识库功能，适合处理超大型私人文档集，不会把你的机密数据随意传给第三方云端：&lt;/p>
&lt;ul>
&lt;li>在左侧菜单找到“知识库”[2][9]。&lt;/li>
&lt;li>新建一个知识库，选择一个用于进行向量化的 Embedding 模型（通常各 API 服务商都有提供，如 OpenAI 的 &lt;code>text-embedding-3-small&lt;/code>）。&lt;/li>
&lt;li>导入你的文件夹、PDF 论文库或纯文本 [2]。&lt;/li>
&lt;li>处理完成后，在聊天界面可以关联该知识库，AI 的回答就会基于你的文档进行检索和生成，实现完美的私有知识问答 [2][9]。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Code Tools（AI 编程助手 Agent）&lt;/strong>
自 1.5.7 版本起，Cherry Studio 深度整合了 AI 程序员工具：&lt;/p>
&lt;ul>
&lt;li>点击界面左侧或顶部的&amp;quot;Code Tool&amp;rdquo;[5]。&lt;/li>
&lt;li>你可以在这里直接调用像 Claude Code、Gemini CLI、Qwen Code 等原生终端 AI 编程工具 [5]。&lt;/li>
&lt;li>指定你的本地代码项目文件夹，授予权限后，AI 可以直接读取你的项目代码，甚至帮你自动修改文件和执行终端命令（相当于拥有了类似 Cursor 的项目级编辑能力）[5]。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>MCP 服务器接入 (Model Context Protocol)&lt;/strong>
MCP 是一种让大模型能够使用外部工具的协议。&lt;/p>
&lt;ul>
&lt;li>在设置中找到 MCP 服务器 [9]。&lt;/li>
&lt;li>你可以配置并启动不同的 MCP 插件，比如让 AI 具备联网搜索网页、查询本地数据库、或者调用外部 API 的能力 [9]。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>WebDAV 云端同步与备份&lt;/strong>
因为 Cherry Studio 是本地客户端，更换电脑时聊天记录不在云端。&lt;/p>
&lt;ul>
&lt;li>在“设置 -&amp;gt; 数据同步”中，你可以配置 WebDAV（如坚果云，或自带 NAS 的 WebDAV）。配置后，你的所有配置、助手和聊天记录都可以安全地加密备份并多端同步 [6]。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>💡 实用小贴士 (Tips)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>显示 Token 消耗&lt;/strong>：在“设置 -&amp;gt; 界面/显示”中，可以开启“显示预估 Token 数”，这能帮你清楚地知道每次提问花费了多少 API 额度 [8]。&lt;/li>
&lt;li>&lt;strong>快捷唤醒全局搜索&lt;/strong>：可以使用快捷键唤出全局搜索或全局翻译小窗口，不打断你当前在其他软件（如浏览器、Word）中的工作流 [3]。&lt;/li>
&lt;li>&lt;strong>快捷键换行&lt;/strong>：通常 Enter 是发送，Shift + Enter 是换行（可在设置中修改）。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>总结&lt;/strong>&lt;/p>
&lt;p>Cherry Studio 的使用逻辑是：“下载软件” -&amp;gt; “填好 API Key&amp;quot; -&amp;gt; “选择模型开始聊天或建知识库”[6][8]。当你把基础配置跑通后，它将是你提高生产力的最强桌面工具 [7][9]。&lt;/p>
&lt;p>&lt;strong>资料来源&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>help&lt;/li>
&lt;li>skywork.ai&lt;/li>
&lt;li>jimmysong.io&lt;/li>
&lt;li>cherry-ai.com&lt;/li>
&lt;li>medium.com&lt;/li>
&lt;li>cherry-ai.com&lt;/li>
&lt;li>github.io&lt;/li>
&lt;li>github.com&lt;/li>
&lt;li>wanjiedata.com&lt;/li>
&lt;li>atalk-ai.com&lt;/li>
&lt;/ul>
&lt;h2 id="注意事项">注意事项
&lt;/h2>&lt;p>&lt;img src="https://www.zata.cc/p/cherry-studio/images/index/image.png"
width="1146"
height="758"
srcset="https://www.zata.cc/p/cherry-studio/images/index/image_hu9059234813721056590.png 480w, https://www.zata.cc/p/cherry-studio/images/index/image_hu3107548062758636679.png 1024w"
loading="lazy"
alt="webdva需要加上/ "
class="gallery-image"
data-flex-grow="151"
data-flex-basis="362px"
>&lt;/p></description></item><item><title>alist</title><link>https://www.zata.cc/p/alist/</link><pubDate>Sat, 07 Mar 2026 17:50:08 +0800</pubDate><guid>https://www.zata.cc/p/alist/</guid><description>&lt;img src="https://www.zata.cc/p/alist/images/index/index.png" alt="Featured image of post alist" />&lt;h1 id="alist-v3-详细使用教程安装配置与-webdav-挂载">AList V3 详细使用教程：安装、配置与 WebDAV 挂载
&lt;/h1>&lt;p>&lt;strong>AList&lt;/strong> 是一款支持多种存储（阿里云盘、百度网盘、OneDrive、Google Drive 等）的文件列表程序。它可以把你的各种网盘聚合在一起，不仅可以直接在网页端预览、下载文件，还能通过 &lt;strong>WebDAV&lt;/strong> 协议挂载到本地电脑或第三方播放器（如 Infuse、PotPlayer）上直接看原画视频。&lt;/p>
&lt;p>以下是一份保姆级的 AList V3 版本详细使用教程，分为&lt;strong>安装、初始化、添加网盘&lt;/strong>和 &lt;strong>WebDAV 挂载&lt;/strong>四个主要部分。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>一、安装 AList&lt;/strong>&lt;/p>
&lt;p>AList 支持全平台安装。这里提供最常用的两种安装方式：&lt;strong>Docker（推荐给 NAS/Linux 用户）&lt;/strong> 和 &lt;strong>Windows（适合小白和普通电脑）&lt;/strong>。&lt;/p>
&lt;p>&lt;strong>1. 使用 Docker 安装（最推荐，稳定且干净）&lt;/strong>&lt;/p>
&lt;p>如果你有云服务器、NAS 或安装了 Docker 的电脑，直接在终端运行以下命令：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run -d --restart&lt;span class="o">=&lt;/span>always -v /etc/alist:/opt/alist/data -p 5244:5244 --name&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;alist&amp;#34;&lt;/span> xhofe/alist:latest
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;strong>5244&lt;/strong> 是默认端口，如果你想换成别的，可以把前一个 &lt;code>5244&lt;/code> 改掉（例如 &lt;code>-p 8080:5244&lt;/code>）。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>2. 在 Windows 上安装&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>前往 AList 的 &lt;a class="link" href="https://github.com/alist-org/alist/releases" target="_blank" rel="noopener"
>GitHub Releases 页面&lt;/a>。&lt;/li>
&lt;li>下载名为 &lt;code>alist-windows-amd64.zip&lt;/code> 的文件。&lt;/li>
&lt;li>解压到一个文件夹（例如 &lt;code>D:\AList\&lt;/code>）。&lt;/li>
&lt;li>在文件夹路径栏输入 &lt;code>cmd&lt;/code> 并回车，打开命令提示符。&lt;/li>
&lt;li>输入运行命令：&lt;code>alist.exe server&lt;/code>，看到 &lt;code>start server @ 0.0.0.0:5244&lt;/code> 就代表运行成功了。（注意：这个 CMD 窗口不能关，关了 AList 就停了）。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;p>&lt;strong>二、初始化与登录&lt;/strong>&lt;/p>
&lt;p>AList 第一次运行会生成默认密码（或需要你自己设置）。&lt;/p>
&lt;p>&lt;strong>1. 获取/设置管理员密码&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Docker 用户&lt;/strong>：在终端输入以下命令随机生成一个密码，或者手动设置。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>手动设置密码（推荐，把 &lt;code>YOUR_PASSWORD&lt;/code> 换成你的密码）：
&lt;code>docker exec -it alist ./alist admin set YOUR_PASSWORD&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Windows 用户&lt;/strong>：在刚刚那个没关的 CMD 窗口按 &lt;code>Ctrl+C&lt;/code> 停止运行，然后输入：&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>alist.exe admin set YOUR_PASSWORD&lt;/code>（设置好后，再重新输入 &lt;code>alist.exe server&lt;/code> 启动服务）。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>2. 登录后台&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>在浏览器输入：&lt;code>http://你的 IP 地址:5244&lt;/code>（如果你是在本机安装的，就是 &lt;code>http://127.0.0.1:5244&lt;/code>）。&lt;/li>
&lt;li>点击底部的 &lt;strong>“登录”&lt;/strong>（或者管理）。&lt;/li>
&lt;li>账号输入 &lt;code>admin&lt;/code>，密码输入你刚刚设置的密码。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;p>&lt;strong>三、添加网盘（以阿里云盘为例）&lt;/strong>&lt;/p>
&lt;p>进入后台管理后，你就可以把各大网盘“装”进 AList 了。&lt;/p>
&lt;ol>
&lt;li>在左侧菜单点击 &lt;strong>存储 (Storage)&lt;/strong> -&amp;gt; &lt;strong>添加 (Add)&lt;/strong>。&lt;/li>
&lt;li>&lt;strong>驱动 (Driver)&lt;/strong> 选择你要添加的网盘（例如：&lt;code>阿里云盘 Open&lt;/code>）。&lt;/li>
&lt;li>&lt;strong>挂载路径 (Mount Path)&lt;/strong>：输入你想要在首页显示的文件夹名字，比如 &lt;code>/阿里云盘&lt;/code>。&lt;/li>
&lt;li>&lt;strong>填写网盘授权信息 (Token)&lt;/strong>：&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>由于大部分网盘需要授权，你需要获取 Token 或 Refresh Token。&lt;/li>
&lt;li>AList 官方提供了一个非常方便的获取工具：访问 &lt;code>https://alist.nn.ci/zh/guide/drivers/aliyundrive_open.html&lt;/code>（官方文档），里面有获取 Token 的二维码或按钮。&lt;/li>
&lt;li>用阿里云盘 App 扫码后，网页会显示一串 &lt;strong>Refresh Token&lt;/strong>。&lt;/li>
&lt;li>把这串 Token 复制，回到 AList 后台，粘贴到 &lt;strong>刷新令牌 (Refresh Token)&lt;/strong> 这一栏。&lt;/li>
&lt;/ul>
&lt;ol start="5">
&lt;li>其他选项保持默认即可，点击底部 &lt;strong>保存 (Save)&lt;/strong>。&lt;/li>
&lt;li>回到“存储”列表，如果状态显示为 &lt;code>work&lt;/code>，说明挂载成功！点击左侧的“主页”，你就能看到你的网盘文件了。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;p>&lt;strong>四、进阶玩法：使用 WebDAV 挂载到播放器/电脑&lt;/strong>&lt;/p>
&lt;p>这是 AList 最强大的功能。你可以把云盘当成本地硬盘用，直接看高清电影，不占用本地空间。&lt;/p>
&lt;p>&lt;strong>WebDAV 连接信息：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>服务器地址&lt;/strong>：&lt;code>http://你的 IP:5244/dav&lt;/code> （注意后面一定要加 &lt;code>/dav&lt;/code>）&lt;/li>
&lt;li>&lt;strong>账号&lt;/strong>：你的 AList 登录账号（例如 &lt;code>admin&lt;/code>）&lt;/li>
&lt;li>&lt;strong>密码&lt;/strong>：你的 AList 登录密码&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>应用场景：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>手机/平板看剧 (Infuse / nPlayer / Fileball)&lt;/strong>：在播放器里添加网络服务器，选择 WebDAV 协议，填入上面的连接信息，你网盘里的电影立刻变成精美的海报墙，并且可以直接原画播放。&lt;/li>
&lt;li>&lt;strong>电脑看剧 (PotPlayer / VLC)&lt;/strong>：在播放器里打开“打开链接”或“添加 FTP/WebDAV&amp;quot;，填入信息即可无缝播放。&lt;/li>
&lt;li>&lt;strong>挂载为电脑本地磁盘&lt;/strong>：Windows 用户可以使用 &lt;code>RaiDrive&lt;/code> 软件，Mac 用户可以使用系统自带的“连接服务器”或 &lt;code>CloudMounter&lt;/code>，将 AList 映射为一个电脑的本地盘符（比如 Z: 盘），像操作本地文件一样操作网盘。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;strong>你想先从哪个网盘开始挂载呢？如果需要获取特定网盘（如百度网盘、OneDrive、夸克网盘）的具体配置方法，我可以为你提供详细步骤。&lt;/strong>&lt;/p></description></item><item><title>wrap.dev</title><link>https://www.zata.cc/p/wrap.dev/</link><pubDate>Tue, 03 Mar 2026 21:40:54 +0800</pubDate><guid>https://www.zata.cc/p/wrap.dev/</guid><description>&lt;img src="https://www.zata.cc/p/wrap.dev/images/index/index.png" alt="Featured image of post wrap.dev" />&lt;h1 id="warp-终端使用教程与功能详解">Warp 终端使用教程与功能详解
&lt;/h1>&lt;p>warp.dev（官方名称为 Warp）是一款基于 Rust 编写、GPU 加速的现代终端工具。它不仅是一个更快的命令行界面，更被定位为&amp;quot;Agentic Development Environment&amp;quot; (ADE)，即集成了 AI 智能体（Agents）和 IDE 功能的下一代开发环境。&lt;/p>
&lt;p>以下是 Warp 的详细使用教程，涵盖从基础安装到高级 AI 工作流的操作。&lt;/p>
&lt;p>&lt;strong>一、安装与环境准备 [1]&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>下载安装&lt;/strong>：
&lt;ul>
&lt;li>官网下载：访问 warp.dev 点击下载。&lt;/li>
&lt;li>MacOS (Homebrew)：&lt;code>brew install --cask warp&lt;/code>[1]&lt;/li>
&lt;li>Windows (WinGet)：&lt;code>winget install Warp.Warp&lt;/code>[1]&lt;/li>
&lt;li>Linux：支持 .deb、.rpm 以及 AppImage 格式。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>账号登录&lt;/strong>：Warp 需要登录（支持 GitHub/Google 登录），这主要是为了云端同步你的工作流（Workflows）和 AI 偏好。&lt;/li>
&lt;li>&lt;strong>Shell 支持&lt;/strong>：Warp 默认支持 zsh、bash、fish 和 PowerShell。它会自动读取你现有的 shell 配置（如 .zshrc），无缝迁移。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>二、核心概念：块（Blocks）[2][3]&lt;/strong>&lt;/p>
&lt;p>不同于传统终端那种“流式”的纯文本，Warp 引入了 Blocks（块）的概念：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>独立性&lt;/strong>：每一条命令及其输出都被封装成一个独立的方块。[3]&lt;/li>
&lt;li>&lt;strong>操作&lt;/strong>：你可以单独对某个 Block 进行操作（点击右上角），例如：
&lt;ul>
&lt;li>&lt;strong>Copy Output&lt;/strong>：只复制该命令的输出结果。&lt;/li>
&lt;li>&lt;strong>Share Block&lt;/strong>：生成一个永久链接，直接把出错的日志分享给同事。&lt;/li>
&lt;li>&lt;strong>AI Explain&lt;/strong>：让 AI 解释为什么这条命令报错了。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>三、核心功能与 AI 操作指南&lt;/strong>&lt;/p>
&lt;p>Warp 的精髓在于它将 AI 深度集成到了命令行中。[4]&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>AI 命令搜寻（Natural Language to Shell）&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>快捷键：输入 &lt;code>#&lt;/code> 或按下 &lt;code>Ctrl&lt;/code> + &lt;code>`&lt;/code>（反引号）。[5]&lt;/li>
&lt;li>用法：直接输入中文或英文需求，例如 &lt;code># 查找所有大于 100MB 的文件&lt;/code>。&lt;/li>
&lt;li>效果：Warp 会实时生成对应的 shell 命令（如 &lt;code>find . -type f -size +100M&lt;/code>），按回车即可填入输入框。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Warp AI 聊天（上下文感知的 AI 助手）&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>快捷键：&lt;code>Ctrl&lt;/code> + &lt;code>Space&lt;/code>（或点击侧边栏 AI 图标）。&lt;/li>
&lt;li>用法：它不同于网页版 ChatGPT，它知道你的终端上下文（当前目录、上个命令的错误、文件结构）。&lt;/li>
&lt;li>场景：你可以问“为什么刚才的 build 失败了？”或“在这个项目里如何配置 Redis？”&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Agentic Development（智能体开发模式）&lt;/strong>
这是 Warp 最新的方向，利用内置的 Oz 智能体处理复杂任务。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Warp Dispatch (&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>I&lt;/code>)&lt;/strong>：你可以下达一个宏观指令（如：“将这个项目所有的图片压缩并移动到 assets 文件夹”）。AI 会制定计划，请求你授权运行一系列终端命令，并自动完成。&lt;/li>
&lt;li>&lt;strong>Warp Pair (&lt;code>Ctrl&lt;/code> + &lt;code>I&lt;/code>)&lt;/strong>：类似结对编程，AI 会读取你的代码和报错，辅助你实时调试。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Warp Drive（工作流同步）&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>功能：你可以将常用的、难记的命令（带参数）保存为 Workflows。[3][5]&lt;/li>
&lt;li>团队协作：你可以创建团队文件夹，将常用的部署脚本、数据库迁移命令共享给全组人使用，大家直接搜关键词就能运行。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>四、像 IDE 一样编辑命令&lt;/strong>&lt;/p>
&lt;p>Warp 的输入框（Input Area）不是简单的文本行，而是一个功能完备的编辑器：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>光标操作&lt;/strong>：支持鼠标点击定位。&lt;/li>
&lt;li>&lt;strong>多行编辑&lt;/strong>：按 &lt;code>Shift&lt;/code> + &lt;code>Enter&lt;/code> 换行，支持语法高亮。&lt;/li>
&lt;li>&lt;strong>补全系统&lt;/strong>：基于历史记录和 AI 预测的智能补全。输入命令时，按 &lt;code>Tab&lt;/code> 键可以快速选择建议。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>五、必备快捷键清单&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">功能&lt;/th>
&lt;th style="text-align: left">快捷键 (Mac)&lt;/th>
&lt;th style="text-align: left">快捷键 (Win/Linux)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">打开命令面板&lt;/td>
&lt;td style="text-align: left">&lt;code>Cmd&lt;/code> + &lt;code>P&lt;/code>&lt;/td>
&lt;td style="text-align: left">&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>P&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">AI 自然语言搜寻&lt;/td>
&lt;td style="text-align: left">&lt;code>#&lt;/code>&lt;/td>
&lt;td style="text-align: left">&lt;code>#&lt;/code> 或 &lt;code>Ctrl&lt;/code> + &lt;code>`&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">侧边栏 AI 聊天&lt;/td>
&lt;td style="text-align: left">&lt;code>Ctrl&lt;/code> + &lt;code>Space&lt;/code>&lt;/td>
&lt;td style="text-align: left">&lt;code>Ctrl&lt;/code> + &lt;code>Space&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">Agent 智能体模式&lt;/td>
&lt;td style="text-align: left">&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>I&lt;/code>&lt;/td>
&lt;td style="text-align: left">&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>I&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">向上/下跳转 Block&lt;/td>
&lt;td style="text-align: left">&lt;code>Cmd&lt;/code> + &lt;code>Up&lt;/code> / &lt;code>Down&lt;/code>&lt;/td>
&lt;td style="text-align: left">&lt;code>Ctrl&lt;/code> + &lt;code>Up&lt;/code> / &lt;code>Down&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">清理屏幕&lt;/td>
&lt;td style="text-align: left">&lt;code>Cmd&lt;/code> + &lt;code>K&lt;/code>&lt;/td>
&lt;td style="text-align: left">&lt;code>Ctrl&lt;/code> + &lt;code>L&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">新建标签页&lt;/td>
&lt;td style="text-align: left">&lt;code>Cmd&lt;/code> + &lt;code>T&lt;/code>&lt;/td>
&lt;td style="text-align: left">&lt;code>Ctrl&lt;/code> + &lt;code>T&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>六、进阶技巧&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>分屏（Split Panes）&lt;/strong>：&lt;code>Cmd&lt;/code> + &lt;code>D&lt;/code> (垂直分屏)，&lt;code>Cmd&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>D&lt;/code> (水平分屏)。方便一边看日志，一边运行命令。&lt;/li>
&lt;li>&lt;strong>主题自定义&lt;/strong>：输入 &lt;code>Cmd&lt;/code> + &lt;code>P&lt;/code> 搜索 &amp;ldquo;Themes&amp;rdquo;，Warp 内置了非常多精美的渐变色和极客风格主题。&lt;/li>
&lt;li>&lt;strong>SSH 增强&lt;/strong>：当你 SSH 到远程服务器时，Warp 依然能保持 Block 功能和部分 AI 特性（通过 Warpify 功能）。&lt;/li>
&lt;li>&lt;strong>MCP 支持&lt;/strong>：最新版 Warp 支持 Model Context Protocol (MCP)，允许你连接外部工具（如 Linear、Figma、Slack）作为 AI 的背景上下文。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>总结&lt;/strong>&lt;/p>
&lt;p>Warp 适合那些觉得传统终端（如 iTerm2 或 CMD）太“简陋”、不想死记硬背复杂 Shell 语法的开发者。它将“查文档 -&amp;gt; 复制命令 -&amp;gt; 粘贴执行 -&amp;gt; 出错搜报错”的循环，直接缩减成了在终端里“问 AI -&amp;gt; 执行”的极简流程。&lt;/p>
&lt;p>&lt;strong>资料来源&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>warp.dev&lt;/li>
&lt;li>thenewstack.io&lt;/li>
&lt;li>youtube.com&lt;/li>
&lt;li>medium.com&lt;/li>
&lt;/ul></description></item><item><title>ccNexus</title><link>https://www.zata.cc/p/ccnexus/</link><pubDate>Mon, 02 Mar 2026 17:43:36 +0800</pubDate><guid>https://www.zata.cc/p/ccnexus/</guid><description>&lt;img src="https://www.zata.cc/p/ccnexus/images/index/index.png" alt="Featured image of post ccNexus" />&lt;p>&lt;a class="link" href="https://github.com/lich0821/ccNexus/releases" target="_blank" rel="noopener"
>ccNexus 下载地址&lt;/a>&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/ccnexus/images/index/image.png"
width="1008"
height="729"
srcset="https://www.zata.cc/p/ccnexus/images/index/image_hu17427354120233050841.png 480w, https://www.zata.cc/p/ccnexus/images/index/image_hu4405628468462632772.png 1024w"
loading="lazy"
alt="端点设置"
class="gallery-image"
data-flex-grow="138"
data-flex-basis="331px"
>&lt;/p>
&lt;p>&lt;strong>ccNexus 项目介绍&lt;/strong>&lt;br>
（基于 GitHub 仓库 &lt;a class="link" href="https://github.com/lich0821/ccNexus" target="_blank" rel="noopener"
>https://github.com/lich0821/ccNexus&lt;/a> 官方描述与 README 整理）&lt;/p>
&lt;p>&lt;strong>项目全称&lt;/strong>：ccNexus&lt;br>
&lt;strong>官方描述&lt;/strong>：Intelligent API gateway for Claude Code and Codex CLI —— 一个专为 &lt;strong>Claude Code&lt;/strong> 和 &lt;strong>Codex CLI&lt;/strong> 打造的智能 API 网关。&lt;br>
它能实现&lt;strong>端点自动轮换&lt;/strong>、&lt;strong>API 格式转换&lt;/strong>、&lt;strong>实时使用量监控&lt;/strong>，并无缝对接 OpenAI、Gemini 等多种平台。&lt;/p>
&lt;h3 id="核心功能亮点">核心功能亮点
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>多端点智能轮换&lt;/strong>：添加多个 API 地址，自动故障转移（一个挂了立刻切下一个）&lt;/li>
&lt;li>&lt;strong>API 格式转换&lt;/strong>：支持 Claude / OpenAI / Gemini 之间相互转换&lt;/li>
&lt;li>&lt;strong>实时统计面板&lt;/strong>：请求数、错误数、Token 消耗一目了然&lt;/li>
&lt;li>&lt;strong>WebDAV 多设备同步&lt;/strong>：配置和数据跨电脑、手机同步&lt;/li>
&lt;li>&lt;strong>纯后端 + Docker 支持&lt;/strong>：可作为 HTTP 服务运行，也支持容器化部署&lt;/li>
&lt;li>&lt;strong>跨平台原生支持&lt;/strong>：Windows、macOS、Linux 均有对应可执行文件&lt;/li>
&lt;/ul>
&lt;h3 id="支持平台与安装方式超简单">支持平台与安装方式（超简单）
&lt;/h3>&lt;ol>
&lt;li>去 &lt;strong>Releases 页面&lt;/strong> 下载最新版本（你直接点的就是这个页面）：&lt;br>
&lt;a class="link" href="https://github.com/lich0821/ccNexus/releases" target="_blank" rel="noopener"
>https://github.com/lich0821/ccNexus/releases&lt;/a>&lt;/li>
&lt;li>解压后运行即可：
&lt;ul>
&lt;li>Windows：直接双击 &lt;code>ccNexus.exe&lt;/code>&lt;/li>
&lt;li>macOS：拖到「应用程序」文件夹，第一次右键 →「打开」&lt;/li>
&lt;li>Linux：&lt;code>tar -xzf ccNexus-linux-amd64.tar.gz &amp;amp;&amp;amp; ./ccNexus&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h3 id="快速配置两步搞定-claude-code--codex-cli">快速配置（两步搞定 Claude Code / Codex CLI）
&lt;/h3>&lt;ol>
&lt;li>启动 ccNexus（默认监听 &lt;code>http://127.0.0.1:3000&lt;/code>）&lt;/li>
&lt;li>添加端点（填 API 地址 + Key + 选择转换器）&lt;/li>
&lt;li>Claude Code 配置（&lt;code>~/.claude/settings.json&lt;/code>）：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;anthropic&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;base_url&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;http://127.0.0.1:3000&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>Codex CLI 配置（&lt;code>~/.codex/config.toml&lt;/code>）：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-toml" data-lang="toml">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">model_provider&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;ccNexus&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">base_url&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;http://localhost:3000/v1&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h3 id="最新版本信息截至目前">最新版本信息（截至目前）
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>最新稳定版&lt;/strong>：v4.11.1（2026 年 2 月发布）&lt;/li>
&lt;li>包含 Mac Docker 菜单栏修复、标签兼容性优化、终端 Launcher 自定义等更新&lt;/li>
&lt;li>项目非常活跃，持续在迭代（已发布 60+ 个版本）&lt;/li>
&lt;/ul>
&lt;h3 id="项目数据一览">项目数据一览
&lt;/h3>&lt;ul>
&lt;li>语言：主要 Go + 前端（JavaScript/CSS）&lt;/li>
&lt;li>开源协议：MIT&lt;/li>
&lt;li>Star：743+｜Fork：89+&lt;/li>
&lt;li>标签：&lt;code>ai-coding&lt;/code>、&lt;code>claude-code-proxy&lt;/code>、&lt;code>claude-code-router&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>一句话总结&lt;/strong>：&lt;br>
如果你在用 Claude Code 或 Codex CLI，但苦于 API 限流、地区限制、多账号切换麻烦，&lt;strong>ccNexus 就是专门为你打造的“智能中转站”&lt;/strong> —— 一键轮换、格式转换、监控全都有，安装后几分钟就能用上。&lt;/p></description></item><item><title>Coolify vs Dokploy</title><link>https://www.zata.cc/p/coolify-vs-dokploy/</link><pubDate>Sun, 22 Feb 2026 15:37:12 +0800</pubDate><guid>https://www.zata.cc/p/coolify-vs-dokploy/</guid><description>&lt;img src="https://www.zata.cc/p/coolify-vs-dokploy/images/index/index.png" alt="Featured image of post Coolify vs Dokploy" />&lt;h1 id="coolify-vs-dokploy-深度对比">Coolify vs Dokploy 深度对比
&lt;/h1>&lt;p>个人来说用Dokploy可能会更加好一点&lt;/p>
&lt;p>&lt;strong>参考&lt;/strong>&lt;/p>
&lt;p>&lt;a class="link" href="https://www.bilibili.com/video/BV1ssWMzrEKi/?spm_id_from=333.337.search-card.all.click&amp;amp;vd_source=8959fbd41c2e8381a3b4e2af6d154617" target="_blank" rel="noopener"
>[中英熟肉] Coolify vs Dokploy：我为何选择其中一个而不是另一个 | Dreams of Code&lt;/a>&lt;/p>
&lt;p>我将从12个关键维度进行全面对比，让你彻底了解两者的差异和适用场景。&lt;/p>
&lt;p>&lt;strong>架构与技术栈对比&lt;/strong>&lt;/p>
&lt;p>Coolify 采用单体应用结合微服务组件的架构，后端基于 PHP 8.1+ 和 Laravel 框架，前端使用 Livewire、Alpine.js 和 Blade 模板，数据库为 PostgreSQL，实时通信依赖 Laravel Echo 与 Pusher，部署方式为 Docker 容器 + Docker Compose，安装复杂度为中等。&lt;/p>
&lt;p>Dokploy 采用纯粹的微服务架构，后端由 Go（Gin 框架）主导并辅以部分 Node.js 服务，前端基于 React 18、TypeScript 和 Tailwind CSS，数据库同样为 PostgreSQL，实时通信使用 Server-Sent Events（SSE），部署方式为 Docker 容器 + Docker Compose，安装复杂度极简。&lt;/p>
&lt;p>在技术层面，Go 相较于 PHP 具有先天性能优势；SSE 虽比 WebSocket 轻量，但 Coolify 的 WebSocket 实现提供更强的双向通信能力；Dokploy 的前端技术栈更现代化，开发体验更流畅；而微服务架构使 Dokploy 更具扩展潜力，Coolify 的单体结构则更易维护和调试。&lt;/p>
&lt;p>&lt;strong>资源消耗对比（基于 1GB RAM VPS）&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>资源类型&lt;/th>
&lt;th>Coolify（空闲时）&lt;/th>
&lt;th>Dokploy（空闲时）&lt;/th>
&lt;th>Coolify（部署时）&lt;/th>
&lt;th>Dokploy（部署时）&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>内存占用&lt;/td>
&lt;td>450–600 MB&lt;/td>
&lt;td>120–200 MB&lt;/td>
&lt;td>800 MB+&lt;/td>
&lt;td>300–400 MB&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>CPU 使用&lt;/td>
&lt;td>2–5%&lt;/td>
&lt;td>1–3%&lt;/td>
&lt;td>15–30%&lt;/td>
&lt;td>5–15%&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>磁盘占用&lt;/td>
&lt;td>1.5–2 GB&lt;/td>
&lt;td>300–500 MB&lt;/td>
&lt;td>随应用增长&lt;/td>
&lt;td>随应用增长&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>启动时间&lt;/td>
&lt;td>30–45 秒&lt;/td>
&lt;td>8–12 秒&lt;/td>
&lt;td>N/A&lt;/td>
&lt;td>N/A&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Dokploy 在资源效率上表现显著优异，尤其适合内存和 CPU 资源有限的低配服务器，而 Coolify 的资源开销较大，更适合拥有充足资源的生产环境。&lt;/p>
&lt;p>&lt;strong>功能特性详细对比&lt;/strong>&lt;/p>
&lt;p>&lt;strong>部署能力&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>静态站点&lt;/strong>：Coolify 支持完整部署，Dokploy 仅基础支持 → Coolify 胜出&lt;/li>
&lt;li>&lt;strong>Node.js、Python、PHP、Go/Rust、Dockerfile&lt;/strong>：两者均支持，但 Dokploy 在 Go 应用部署上更具原生优势&lt;/li>
&lt;li>&lt;strong>Java 应用&lt;/strong>：Coolify 支持，Dokploy 有限支持 → Coolify 胜出&lt;/li>
&lt;li>&lt;strong>docker-compose.yml&lt;/strong>：Coolify 完全支持，Dokploy 仅部分支持 → Coolify 胜出&lt;/li>
&lt;li>&lt;strong>构建缓存&lt;/strong>：Dokploy 优化更好 → Dokploy 胜出&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>数据库与服务&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>PostgreSQL、MySQL/MariaDB、Redis、MongoDB&lt;/strong>：两者均支持，但 Coolify 提供更完整的管理界面&lt;/li>
&lt;li>&lt;strong>CouchDB、MinIO&lt;/strong>：仅 Coolify 支持&lt;/li>
&lt;li>&lt;strong>WordPress、Ghost&lt;/strong>：仅 Coolify 支持一键部署&lt;/li>
&lt;li>&lt;strong>监控服务&lt;/strong>：Coolify 内置更全面，支持 Prometheus 集成&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Git 集成&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>GitHub、GitLab、Bitbucket&lt;/strong>：两者均完整支持&lt;/li>
&lt;li>&lt;strong>Gitea&lt;/strong>：仅 Coolify 支持&lt;/li>
&lt;li>&lt;strong>预览部署（PR 部署）&lt;/strong>：仅 Coolify 支持&lt;/li>
&lt;li>&lt;strong>部署历史记录&lt;/strong>：Coolify 记录更完整&lt;/li>
&lt;li>&lt;strong>自动部署与钩子&lt;/strong>：两者功能相当&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>网络与安全&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>自动 SSL（Let’s Encrypt）、自定义域名、HTTP/2&lt;/strong>：两者均支持&lt;/li>
&lt;li>&lt;strong>端口映射&lt;/strong>：Coolify 更灵活&lt;/li>
&lt;li>&lt;strong>IP 限制、基础认证&lt;/strong>：仅 Coolify 支持&lt;/li>
&lt;li>&lt;strong>防火墙规则、DDoS 防护&lt;/strong>：两者均不支持&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>用户体验对比&lt;/strong>&lt;/p>
&lt;p>Coolify 的控制面板功能组织清晰，左侧导航结构成熟，状态指示明确，适合复杂场景，但界面稍显臃肿，操作步骤较多，响应速度有时较慢，新手需要一定学习成本。&lt;/p>
&lt;p>Dokploy 的界面极简、响应迅捷、动画流畅，移动端体验优秀，几乎无学习曲线，但高级功能入口较隐蔽，信息展示不够详尽，适合追求“开箱即用”的用户。&lt;/p>
&lt;p>&lt;strong>部署流程体验&lt;/strong>&lt;/p>
&lt;p>Coolify 的部署流程包括：添加资源 → 选择类型 → 连接 Git → 自动检测 → 配置构建 → 设置环境变量 → 配置域名/SSL → 部署 → 查看日志，首次配置通常需 2–3 分钟，流程透明可控，适合需要精细调整的用户。&lt;/p>
&lt;p>Dokploy 仅需：点击“New Application” → 连接 Git → 自动识别 → 一键部署 → 查看日志，1 分钟内即可启动，流程高度自动化，更像“魔法”操作。&lt;/p>
&lt;p>&lt;strong>多服务器管理对比&lt;/strong>&lt;/p>
&lt;p>Coolify 支持中心化管理，一个主实例可统一管理多个远程服务器，支持分组、标签、资源调度、集中监控、统一证书和跨服务器网络通信，是多服务器运维的理想选择。&lt;/p>
&lt;p>Dokploy 为分布式架构，每个实例独立运行，无集中控制能力，需分别登录管理，更适合单服务器或孤立环境。&lt;/p>
&lt;p>&lt;strong>监控与日志&lt;/strong>&lt;/p>
&lt;p>Coolify 提供企业级监控：实时资源图表（CPU、内存、磁盘、网络）、容器状态、健康检查、报警机制、部署历史、访问日志，并支持 Prometheus 集成。&lt;/p>
&lt;p>Dokploy 仅提供基础监控：资源使用概览、容器状态、简单健康检查、实时日志查看，缺乏历史趋势图和深入分析能力。&lt;/p>
&lt;p>&lt;strong>备份与恢复&lt;/strong>&lt;/p>
&lt;p>Coolify 支持应用与数据库的自动/手动备份、本地或 S3 存储、一键恢复、加密备份、保留策略管理，适合对数据安全要求高的场景。&lt;/p>
&lt;p>Dokploy 仅支持手动备份应用和基础数据库备份，无计划任务、无云端存储、无加密机制，备份能力有限。&lt;/p>
&lt;p>&lt;strong>团队协作&lt;/strong>&lt;/p>
&lt;p>Coolify 提供多用户账户、角色权限管理（管理员、开发者等）、项目共享、操作审计日志、团队邀请系统，是团队协作的首选。&lt;/p>
&lt;p>Dokploy 仅支持基础多账户，权限控制极其有限，无团队管理功能，不适合协作场景。&lt;/p>
&lt;p>&lt;strong>社区与生态&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>GitHub Stars&lt;/strong>：Coolify 约 7k+，Dokploy 约 2k+&lt;/li>
&lt;li>&lt;strong>首次发布&lt;/strong>：Coolify 2021 年，Dokploy 2023 年&lt;/li>
&lt;li>&lt;strong>活跃度&lt;/strong>：Coolify 极高，Dokploy 高&lt;/li>
&lt;li>&lt;strong>Discord 成员&lt;/strong>：Coolify 10k+，Dokploy 2k+&lt;/li>
&lt;li>&lt;strong>问题响应&lt;/strong>：Coolify 数小时内，Dokploy 1–2 天&lt;/li>
&lt;li>&lt;strong>文档完整度&lt;/strong>：Coolify 85%，Dokploy 60%&lt;/li>
&lt;li>&lt;strong>教程与插件&lt;/strong>：Coolify 丰富，Dokploy 极少&lt;/li>
&lt;li>&lt;strong>第三方集成&lt;/strong>：Coolify 更多&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>未来发展&lt;/strong>&lt;/p>
&lt;p>Coolify 路线图聚焦企业级功能：Kubernetes 集成、高级 CI/CD、应用市场、集群支持、增强监控。&lt;/p>
&lt;p>Dokploy 路线图聚焦核心体验：完善多服务器管理、增补服务支持、性能优化、UI/UX 改进、API 增强。&lt;/p>
&lt;p>&lt;strong>故障恢复与稳定性&lt;/strong>&lt;/p>
&lt;p>Coolify 经过大量生产验证，错误处理完善，日志详尽，社区有大量解决方案，可自动修复部分问题，但复杂系统偶发难排查问题。&lt;/p>
&lt;p>Dokploy 架构简单，错误信息清晰，重启恢复快，但因较新，可能存在未知缺陷，修复依赖社区或自行排查。&lt;/p>
&lt;p>&lt;strong>使用场景建议&lt;/strong>&lt;/p>
&lt;p>&lt;strong>选择 Coolify 如果&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>需要团队协作与权限管理&lt;/li>
&lt;li>用于企业级生产环境&lt;/li>
&lt;li>部署复杂应用（含多种数据库、MinIO、WordPress 等）&lt;/li>
&lt;li>管理多台服务器或集群&lt;/li>
&lt;li>重视数据备份与恢复机制&lt;/li>
&lt;li>需要扩展性与第三方集成&lt;/li>
&lt;li>要求稳定可靠与长期维护&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>选择 Dokploy 如果&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>服务器资源有限（&amp;lt;2GB RAM）&lt;/li>
&lt;li>追求极速部署与极简体验&lt;/li>
&lt;li>个人项目或小型实验&lt;/li>
&lt;li>主要部署标准 Web 应用&lt;/li>
&lt;li>喜欢现代化技术栈（Go/React）&lt;/li>
&lt;li>频繁创建/销毁测试环境&lt;/li>
&lt;li>经常通过移动设备管理&lt;/li>
&lt;li>偏好轻量、无负担的工具&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>综合评分（满分10分）&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>维度&lt;/th>
&lt;th>Coolify&lt;/th>
&lt;th>Dokploy&lt;/th>
&lt;th>说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>功能完整性&lt;/td>
&lt;td>9.0&lt;/td>
&lt;td>6.5&lt;/td>
&lt;td>Coolify 功能全面深入&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>性能效率&lt;/td>
&lt;td>7.0&lt;/td>
&lt;td>9.5&lt;/td>
&lt;td>Dokploy 明显更轻量&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>易用性&lt;/td>
&lt;td>8.0&lt;/td>
&lt;td>9.0&lt;/td>
&lt;td>Dokploy 更直观&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>稳定性&lt;/td>
&lt;td>8.5&lt;/td>
&lt;td>7.0&lt;/td>
&lt;td>Coolify 更成熟可靠&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>扩展性&lt;/td>
&lt;td>9.0&lt;/td>
&lt;td>7.0&lt;/td>
&lt;td>Coolify 生态更强&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>团队协作&lt;/td>
&lt;td>9.5&lt;/td>
&lt;td>5.0&lt;/td>
&lt;td>Coolify 完胜&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>学习曲线&lt;/td>
&lt;td>7.0&lt;/td>
&lt;td>9.0&lt;/td>
&lt;td>Dokploy 更易上手&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>社区支持&lt;/td>
&lt;td>9.0&lt;/td>
&lt;td>7.0&lt;/td>
&lt;td>Coolify 社区更大&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>文档质量&lt;/td>
&lt;td>8.5&lt;/td>
&lt;td>7.0&lt;/td>
&lt;td>Coolify 更完善&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>适合初学者&lt;/td>
&lt;td>7.5&lt;/td>
&lt;td>8.5&lt;/td>
&lt;td>Dokploy 更友好&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>适合生产&lt;/td>
&lt;td>9.0&lt;/td>
&lt;td>7.5&lt;/td>
&lt;td>Coolify 更可靠&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>总分&lt;/strong>&lt;/td>
&lt;td>&lt;strong>8.6&lt;/strong>&lt;/td>
&lt;td>&lt;strong>7.4&lt;/strong>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>最终建议&lt;/strong>&lt;/p>
&lt;p>两者均支持 Docker 安装，推荐在同一台服务器上并行测试：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Dokploy（端口 3000）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/dokploy/dokploy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> dokploy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker-compose up -d &lt;span class="c1"># 访问 http://server:3000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Coolify（端口 8000）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -fsSL https://cdn.coollabs.io/coolify/install.sh &lt;span class="p">|&lt;/span> sudo bash &lt;span class="c1"># 访问 https://server:8000&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>决策树&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>你的主要需求是什么？&lt;/strong>
&lt;ul>
&lt;li>团队使用、多服务器、企业功能 → &lt;strong>Coolify&lt;/strong>&lt;/li>
&lt;li>个人项目、追求性能、简单快速 → &lt;strong>Dokploy&lt;/strong>&lt;/li>
&lt;li>不确定，两者需求都有：
&lt;ul>
&lt;li>服务器资源充足（&amp;gt;2GB） → &lt;strong>Coolify&lt;/strong>&lt;/li>
&lt;li>服务器资源有限（&amp;lt;2GB） → &lt;strong>Dokploy&lt;/strong>&lt;/li>
&lt;li>长期项目 → &lt;strong>Coolify&lt;/strong>，短期实验 → &lt;strong>Dokploy&lt;/strong>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>特别需求：
&lt;ul>
&lt;li>需要 MinIO、WordPress → &lt;strong>Coolify&lt;/strong>&lt;/li>
&lt;li>重视 Go/React 技术栈 → &lt;strong>Dokploy&lt;/strong>&lt;/li>
&lt;li>已使用且满意 → 无需切换&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>我的观点&lt;/strong>：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>对于大多数生产项目&lt;/strong>：选择 &lt;strong>Coolify&lt;/strong>，功能全面、生态成熟、稳定可靠&lt;/li>
&lt;li>&lt;strong>对于个人项目或实验&lt;/strong>：选择 &lt;strong>Dokploy&lt;/strong>，体验流畅、启动飞快、无负担&lt;/li>
&lt;li>&lt;strong>如果只能选一个长期方案&lt;/strong>：选择 &lt;strong>Coolify&lt;/strong>，功能与生态决定长远价值&lt;/li>
&lt;li>&lt;strong>如果你极度在意资源占用&lt;/strong>：选择 &lt;strong>Dokploy&lt;/strong>，尤其适用于 1GB VPS&lt;/li>
&lt;/ol>
&lt;p>发展趋势上，Dokploy 正在快速追赶 Coolify 的功能边界，而 Coolify 也在持续优化性能和轻量化&lt;/p></description></item><item><title>新电脑快速配置-scoop</title><link>https://www.zata.cc/p/%E6%96%B0%E7%94%B5%E8%84%91%E5%BF%AB%E9%80%9F%E9%85%8D%E7%BD%AE-scoop/</link><pubDate>Tue, 10 Feb 2026 11:59:09 +0800</pubDate><guid>https://www.zata.cc/p/%E6%96%B0%E7%94%B5%E8%84%91%E5%BF%AB%E9%80%9F%E9%85%8D%E7%BD%AE-scoop/</guid><description>&lt;img src="https://www.zata.cc/p/%E6%96%B0%E7%94%B5%E8%84%91%E5%BF%AB%E9%80%9F%E9%85%8D%E7%BD%AE-scoop/images/index/index.png" alt="Featured image of post 新电脑快速配置-scoop" />&lt;h1 id="windows-注意要最好打开clash的tun模式">windows (注意要最好打开clash的TUN模式)
&lt;/h1>&lt;ol>
&lt;li>
&lt;p>必备开发工具安装：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Set-ExecutionPolicy&lt;/span> &lt;span class="n">RemoteSigned&lt;/span> &lt;span class="n">-Scope&lt;/span> &lt;span class="n">CurrentUser&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">irm &lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">scoop&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">sh&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">iex
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">scoop&lt;/span> &lt;span class="n">install&lt;/span> &lt;span class="n">git&lt;/span> &lt;span class="n">uv&lt;/span> &lt;span class="n">just&lt;/span> &lt;span class="n">nvm&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>安装wsl,执行命令,然后重启电脑,使用管理员打开powershell,输入wsl &amp;mdash;- &lt;a class="link" href="https://learn.microsoft.com/en-us/windows/wsl/install" target="_blank" rel="noopener"
>官方教程&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-install&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>进入wsl后必须安装&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo apt update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install git just -y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -LsSf https://astral.sh/uv/install.sh &lt;span class="p">|&lt;/span> sh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh &lt;span class="p">|&lt;/span> bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>必安装软件&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://code.visualstudio.com/insiders" target="_blank" rel="noopener"
>vscode下载地址&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.docker.com/get-started/" target="_blank" rel="noopener"
>docker下载地址&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/clash-verge-rev/clash-verge-rev" target="_blank" rel="noopener"
>clash下载地址&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://docs.cherry-ai.com/cherry-studio/download" target="_blank" rel="noopener"
>cherry studio下载地址&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/farion1231/cc-switch/releases" target="_blank" rel="noopener"
>cc-swith下载地址&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://code.claude.com/docs/en/overview" target="_blank" rel="noopener"
>claude code下载地址 &amp;mdash; 最好开tun模式或者设置代理端口环境变量&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://developers.openai.com/codex/cli/" target="_blank" rel="noopener"
>codex下载地址&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>额外插件安装&lt;/p>
&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>
&lt;p>智能桌面助手&amp;ndash;主要功能是查看当前输入法是中/英文&lt;/p>
&lt;p>&lt;a class="link" href="https://github.com/aardio/ImTip" target="_blank" rel="noopener"
>ImTip 智能桌面助手&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul></description></item><item><title>多台电脑环境变量(.env)同步方案</title><link>https://www.zata.cc/p/%E5%A4%9A%E5%8F%B0%E7%94%B5%E8%84%91%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.env%E5%90%8C%E6%AD%A5%E6%96%B9%E6%A1%88/</link><pubDate>Sat, 07 Feb 2026 15:06:19 +0800</pubDate><guid>https://www.zata.cc/p/%E5%A4%9A%E5%8F%B0%E7%94%B5%E8%84%91%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.env%E5%90%8C%E6%AD%A5%E6%96%B9%E6%A1%88/</guid><description>&lt;img src="https://www.zata.cc/p/%E5%A4%9A%E5%8F%B0%E7%94%B5%E8%84%91%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.env%E5%90%8C%E6%AD%A5%E6%96%B9%E6%A1%88/images/index/index.png" alt="Featured image of post 多台电脑环境变量(.env)同步方案" />&lt;h1 id="多台电脑环境变量env同步方案">多台电脑环境变量(.env)同步方案
&lt;/h1>&lt;p>在多台电脑之间同步环境变量（&lt;code>.env&lt;/code>）确实是一个痛点，因为我们既要保证&lt;strong>方便&lt;/strong>（换台电脑就能跑），又要保证&lt;strong>安全&lt;/strong>（不上传到 Git）。&lt;/p>
&lt;p>以下是目前行业内主流的几种管理方案，按&lt;strong>推荐程度&lt;/strong>排序：&lt;/p>
&lt;p>&lt;strong>方案一：手动同步 + 密码管理器（最安全、最通用）&lt;/strong>&lt;/p>
&lt;p>这是最基础也最稳妥的做法，适合个人或小型项目。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>操作&lt;/strong>：在 Git 中只保留 &lt;code>.env.example&lt;/code>。&lt;/li>
&lt;li>&lt;strong>同步&lt;/strong>：将真实的 &lt;code>.env&lt;/code> 内容存放在 &lt;strong>1Password、Bitwarden 或 飞书文档/Notion&lt;/strong> 的加密笔记中。&lt;/li>
&lt;li>&lt;strong>流程&lt;/strong>：在新电脑上：&lt;/li>
&lt;/ul>
&lt;ol>
&lt;li>&lt;code>git clone&lt;/code> 项目。&lt;/li>
&lt;li>从密码管理器复制配置。&lt;/li>
&lt;li>&lt;code>vi .env&lt;/code> 粘贴进去。&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>方案二：使用 1Password / Doppler 等专业工具（最优雅）&lt;/strong>&lt;/p>
&lt;p>如果你不想手动复制粘贴，现在有很多专业的 &lt;strong>Secrets Management (秘密管理)&lt;/strong> 工具。&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Doppler (推荐)&lt;/strong>：它像是一个云端的 &lt;code>.env&lt;/code> 管理器。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>你在云端配置变量。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>在不同电脑上安装 Doppler CLI。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>运行 &lt;code>doppler run -- python main.py&lt;/code>，它会自动把云端的变量注入到进程中，本地根本不需要 &lt;code>.env&lt;/code> 文件。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>1Password CLI&lt;/strong>：如果你用 1Password，它支持直接将变量注入到本地环境。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>方案三：私有的&amp;quot;配置仓库&amp;quot;（进阶方案）&lt;/strong>&lt;/p>
&lt;p>如果你有很多项目，每个项目都有 &lt;code>.env&lt;/code>，你可以创建一个&lt;strong>私有的 Git 仓库&lt;/strong>（比如叫 &lt;code>my-secrets&lt;/code>）专门存这些文件。&lt;/p>
&lt;ol>
&lt;li>创建一个私有仓库（只有你自己能访问）。&lt;/li>
&lt;li>按照项目名存放文件：&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">/my-secrets
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> /project-a/.env
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> /project-b/.env
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>在不同电脑上拉取这个私有仓库。&lt;/li>
&lt;li>使用软链接（Symbolic Link）把文件连过去：
&lt;code>ln -s ~/my-secrets/project-a/.env ~/projects/project-a/.env&lt;/code>&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>方案四：云端网盘同步（最简单但有风险）&lt;/strong>&lt;/p>
&lt;p>使用 iCloud、Dropbox 或 Google Drive 同步一个专门的配置文件夹。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>注意&lt;/strong>：&lt;strong>千万不要&lt;/strong>直接同步整个项目文件夹（会导致 node_modules 或 git 冲突）。&lt;/li>
&lt;li>&lt;strong>做法&lt;/strong>：只同步一个 &lt;code>EnvBackups&lt;/code> 文件夹。换电脑时，从网盘拷贝到项目目录下。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>核心逻辑对比表&lt;/strong>&lt;/p>
&lt;p>为了帮你决定，参考下表：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>方案&lt;/th>
&lt;th>便捷性&lt;/th>
&lt;th>安全性&lt;/th>
&lt;th>适用场景&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>密码管理器&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;td>个人项目、密钥不频繁变动&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Doppler/Vault&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;td>⭐⭐⭐⭐⭐&lt;/td>
&lt;td>自动化要求高、多服务、团队协作&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>私有配置库&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐&lt;/td>
&lt;td>⭐⭐⭐⭐&lt;/td>
&lt;td>深度 Git 用户、多项目管理&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>云网盘&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐⭐&lt;/td>
&lt;td>⭐⭐&lt;/td>
&lt;td>个人开发者、非极其敏感数据&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>我的建议&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>&lt;strong>首选&lt;/strong>：使用 &lt;strong>&lt;code>.env.example&lt;/code>&lt;/strong> 记录结构，真实内容存在 &lt;strong>密码管理器&lt;/strong>。这能养成良好的安全习惯。&lt;/li>
&lt;li>&lt;strong>次选&lt;/strong>：如果你项目非常多，尝试 &lt;strong>Doppler&lt;/strong>。它可以跨平台（Windows/Mac/Linux）同步，且免费额度对个人开发者非常友好。&lt;/li>
&lt;li>&lt;strong>禁止&lt;/strong>：绝对不要为了图方便把 &lt;code>.env&lt;/code> 传到公共仓库，哪怕是私有仓库，也要确保没有包含生产环境的最核心密钥（如银行支付接口等）。&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>你想尝试配置一下 Doppler 这种云端同步方案，还是想看如何写一个脚本自动从私有目录同步配置？&lt;/strong>&lt;/p></description></item><item><title>nvm</title><link>https://www.zata.cc/p/nvm/</link><pubDate>Thu, 05 Feb 2026 16:53:23 +0800</pubDate><guid>https://www.zata.cc/p/nvm/</guid><description>&lt;img src="https://www.zata.cc/p/nvm/images/index/index.png" alt="Featured image of post nvm" />&lt;h1 id="安装使用">安装使用
&lt;/h1>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> ~ &lt;span class="c1"># Switch to Linux Home Directory&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh &lt;span class="p">|&lt;/span> bash &lt;span class="c1"># Install Node.js via NVM (Recommended)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#或者如果网络不行，使用下面的国内镜像去拉取&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># curl -o- https://cdn.jsdelivr.net/gh/nvm-sh/nvm@v0.40.3/install.sh | bash&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 如果还是不行，应该是解析的问题&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看raw.githubusercontent.com的解析地址，如果是0.0.0.0就是有问题的，使用sudo apt install dnsutils 安装nslookup&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#nslookup raw.githubusercontent.com&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 如果是解析问题，使用 Google DNS（8.8.8.8）, 修改好解析之后在进行上一步&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#echo &amp;#34;nameserver 8.8.8.8&amp;#34; | tee /etc/resolv.conf &lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">. &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$HOME&lt;/span>&lt;span class="s2">/.nvm/nvm.sh&amp;#34;&lt;/span> &lt;span class="c1"># Activate NVM without restarting:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">nvm install &lt;span class="m">20&lt;/span> &lt;span class="c1"># Install Node.js version 20 (LTS):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">node --version &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> npm --version &lt;span class="c1"># Verify Installation&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>cc-switch</title><link>https://www.zata.cc/p/cc-switch/</link><pubDate>Tue, 03 Feb 2026 10:27:23 +0800</pubDate><guid>https://www.zata.cc/p/cc-switch/</guid><description>&lt;img src="https://www.zata.cc/p/cc-switch/images/index/index.png" alt="Featured image of post cc-switch" />&lt;h1 id="cc-switch-使用">cc-switch 使用
&lt;/h1>&lt;h2 id="公开教程">公开教程
&lt;/h2>&lt;p>&lt;a class="link" href="https://www.bilibili.com/read/cv44051635/?opus_fallback=1" target="_blank" rel="noopener"
>bili&lt;/a>&lt;/p>
&lt;p>&lt;a class="link" href="https://github.com/farion1231/cc-switch/issues/814" target="_blank" rel="noopener"
>github issue &amp;mdash; vscode里面使用claude code for vscode免登录 &lt;/a>&lt;/p>
&lt;p>&lt;a class="link" href="https://zhuanlan.zhihu.com/p/1992351805414334464" target="_blank" rel="noopener"
>zhihu&lt;/a>&lt;/p>
&lt;h2 id="安装">安装
&lt;/h2>&lt;ol>
&lt;li>入到仓库,这里以wsl-ubuntu为例,下载deb包&lt;/li>
&lt;/ol>
&lt;p>&lt;a class="link" href="https://github.com/farion1231/cc-switch" target="_blank" rel="noopener"
>cc-switch github地址&lt;/a>&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/cc-switch/images/index/image.png"
width="1715"
height="943"
srcset="https://www.zata.cc/p/cc-switch/images/index/image_hu12304345250513976806.png 480w, https://www.zata.cc/p/cc-switch/images/index/image_hu16535709286724172263.png 1024w"
loading="lazy"
alt="github"
class="gallery-image"
data-flex-grow="181"
data-flex-basis="436px"
>
2. 使用sudo apt install ./&amp;hellip; 命令去安装&lt;/p>
&lt;ul>
&lt;li>配置&lt;/li>
&lt;/ul>
&lt;ol>
&lt;li>创建统一供应商
&lt;img src="https://www.zata.cc/p/cc-switch/images/index/image-1.png"
width="1002"
height="642"
srcset="https://www.zata.cc/p/cc-switch/images/index/image-1_hu6668096221410667128.png 480w, https://www.zata.cc/p/cc-switch/images/index/image-1_hu17946163445970801270.png 1024w"
loading="lazy"
alt="新建"
class="gallery-image"
data-flex-grow="156"
data-flex-basis="374px"
>&lt;/li>
&lt;li>一键同步
&lt;img src="https://www.zata.cc/p/cc-switch/images/index/image-2.png"
width="1011"
height="643"
srcset="https://www.zata.cc/p/cc-switch/images/index/image-2_hu7422586070124843964.png 480w, https://www.zata.cc/p/cc-switch/images/index/image-2_hu17037751206308267715.png 1024w"
loading="lazy"
alt="同步"
class="gallery-image"
data-flex-grow="157"
data-flex-basis="377px"
>&lt;/li>
&lt;li>把设置里面的一些东西打开, 但是不需要开代理
&lt;img src="https://www.zata.cc/p/cc-switch/images/index/image-3.png"
width="1023"
height="673"
srcset="https://www.zata.cc/p/cc-switch/images/index/image-3_hu2810676463438421115.png 480w, https://www.zata.cc/p/cc-switch/images/index/image-3_hu2220274287635026480.png 1024w"
loading="lazy"
alt="设置,尤其是."
class="gallery-image"
data-flex-grow="152"
data-flex-basis="364px"
>&lt;/li>
&lt;/ol>
&lt;h2 id="配置-claude-供应商">配置 claude 供应商
&lt;/h2>&lt;hr>
&lt;ol>
&lt;li>
&lt;p>配置支持Anthropic协议的提供商&lt;/p>
&lt;p>1.1 配置kimi模型&lt;/p>
&lt;p>kimi 有两种供应方式,需要注意一下&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/cc-switch/images/index/image-4.png"
width="999"
height="645"
srcset="https://www.zata.cc/p/cc-switch/images/index/image-4_hu2242902476095737500.png 480w, https://www.zata.cc/p/cc-switch/images/index/image-4_hu10709808864810098904.png 1024w"
loading="lazy"
alt="kimi"
class="gallery-image"
data-flex-grow="154"
data-flex-basis="371px"
>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;hr>
&lt;ol start="2">
&lt;li>
&lt;p>配置只支持openai协议的提供商&lt;/p>
&lt;p>2.1 需要设置里面开启本地代理&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/cc-switch/images/index/image-5.png"
width="997"
height="652"
srcset="https://www.zata.cc/p/cc-switch/images/index/image-5_hu16512917823219246461.png 480w, https://www.zata.cc/p/cc-switch/images/index/image-5_hu2451860088890842709.png 1024w"
loading="lazy"
alt="设置-高级-本地代理"
class="gallery-image"
data-flex-grow="152"
data-flex-basis="366px"
>&lt;/p>
&lt;p>2.2 需要将api格式改成openai,当然api接口也是openai格式对应的接口,这里也是以kimi为例
&lt;img src="https://www.zata.cc/p/cc-switch/images/index/image-6.png"
width="1000"
height="648"
srcset="https://www.zata.cc/p/cc-switch/images/index/image-6_hu7522774455329725260.png 480w, https://www.zata.cc/p/cc-switch/images/index/image-6_hu17689311226567257414.png 1024w"
loading="lazy"
alt="修改对应的api格式"
class="gallery-image"
data-flex-grow="154"
data-flex-basis="370px"
>&lt;/p>
&lt;/li>
&lt;/ol></description></item><item><title>homebrew</title><link>https://www.zata.cc/p/homebrew/</link><pubDate>Sun, 01 Feb 2026 19:57:49 +0800</pubDate><guid>https://www.zata.cc/p/homebrew/</guid><description>&lt;img src="https://www.zata.cc/p/homebrew/images/index/index.png" alt="Featured image of post homebrew" />&lt;h1 id="homebrew-完全指南从安装到高效使用2026-最新版">Homebrew 完全指南：从安装到高效使用（2026 最新版）
&lt;/h1>&lt;blockquote>
&lt;p>本文全面介绍 macOS 和 Linux 下最流行的包管理器 Homebrew，涵盖安装、配置、常用命令、实战技巧及常见问题排查，助你成为命令行效率大师。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>Homebrew（昵称 &lt;em>brew&lt;/em>）是 macOS 和 Linux 上开源的包管理器，被誉为 &amp;ldquo;The Missing Package Manager for macOS&amp;rdquo;。它允许你用一行命令安装数千款开发工具、应用和库，无需手动编译或处理依赖。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 传统方式（繁琐）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">./configure &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> make &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> sudo make install
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Homebrew（优雅）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew install node
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Homebrew 的优势在于其简单直观的操作方式，无需管理员权限即可安装软件，能够自动解决软件依赖关系，支持大量可用软件包（formulae），同时还能支持 macOS 和 Linux 平台。此外，它还提供了 Cask 来安装图形界面应用，以及 Bottles 来使用预编译二进制文件。&lt;/p>
&lt;hr>
&lt;p>从 Homebrew 4.0 起，官方在 &lt;a class="link" href="https://brew.sh" target="_blank" rel="noopener"
>brew.sh&lt;/a> 首页主推 &lt;code>.pkg&lt;/code> 安装方式，更适合新手。&lt;/p>
&lt;p>&lt;strong>安装步骤：&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>
&lt;p>访问 GitHub Releases：
👉 &lt;a class="link" href="https://github.com/Homebrew/brew/releases/latest" target="_blank" rel="noopener"
>https://github.com/Homebrew/brew/releases/latest&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>下载最新 &lt;code>.pkg&lt;/code> 文件（如 &lt;code>homebrew-4.6.1.pkg&lt;/code>）&lt;/p>
&lt;/li>
&lt;li>
&lt;p>双击安装包，按向导完成安装（需输入密码）&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>自动配置 PATH&lt;/strong>（4.6.0+ 版本已内置，无需手动操作）&lt;/p>
&lt;/li>
&lt;li>
&lt;p>验证安装：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">brew --version
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 输出示例：Homebrew 4.6.1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>💡 安装路径自动选择：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Apple Silicon (M1/M2/M3/M4)&lt;/strong> → &lt;code>/opt/homebrew&lt;/code>&lt;/li>
&lt;li>&lt;strong>Intel Mac&lt;/strong> → &lt;code>/usr/local&lt;/code>&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>如果需要，也可以使用传统脚本方法进行安装：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装前确保已安装 Xcode 命令行工具&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">xcode-select --install
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 执行官方安装脚本&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">/bin/bash -c &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>⚠️ 安装后若 &lt;code>brew&lt;/code> 命令不可用，请按终端提示配置 PATH：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Apple Silicon&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;eval &amp;#34;$(/opt/homebrew/bin/brew shellenv)&amp;#34;&amp;#39;&lt;/span> &amp;gt;&amp;gt; ~/.zprofile
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">eval&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>/opt/homebrew/bin/brew shellenv&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/blockquote>
&lt;hr>
&lt;p>为了进一步提升 Homebrew 的使用体验，可进行一些基础配置和优化。例如，配置国内镜像源以大幅提升下载速度：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 替换 brew.git 仓库&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git -C &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>brew --repo&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 替换 formulae 源（Apple Silicon）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git -C &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>brew --repo homebrew/core&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Intel Mac 额外替换：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># git -C &amp;#34;$(brew --repo homebrew/cask)&amp;#34; remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 重置并更新&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew update-reset
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew update
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>🌐 常用镜像源：&lt;/p>
&lt;ul>
&lt;li>清华大学：&lt;code>https://mirrors.tuna.tsinghua.edu.cn&lt;/code>&lt;/li>
&lt;li>中科大：&lt;code>https://mirrors.ustc.edu.cn&lt;/code>&lt;/li>
&lt;li>阿里云：&lt;code>https://mirrors.aliyun.com&lt;/code>&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>此外，启用自动补全功能可以让你更高效地使用 Homebrew：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Zsh（macOS Catalina 及以上默认）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;autoload -Uz compinit &amp;amp;&amp;amp; compinit&amp;#39;&lt;/span> &amp;gt;&amp;gt; ~/.zshrc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew shellenv &amp;gt;&amp;gt; ~/.zshrc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">source&lt;/span> ~/.zshrc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Bash&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew shellenv &amp;gt;&amp;gt; ~/.bash_profile
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">source&lt;/span> ~/.bash_profile
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>Homebrew 提供了一些核心命令来管理软件包。以下是常用的命令速查表：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>命令&lt;/th>
&lt;th>说明&lt;/th>
&lt;th>示例&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>brew install &amp;lt;pkg&amp;gt;&lt;/code>&lt;/td>
&lt;td>安装软件&lt;/td>
&lt;td>&lt;code>brew install git&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>brew uninstall &amp;lt;pkg&amp;gt;&lt;/code>&lt;/td>
&lt;td>卸载软件&lt;/td>
&lt;td>&lt;code>brew uninstall node&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>brew reinstall &amp;lt;pkg&amp;gt;&lt;/code>&lt;/td>
&lt;td>重装软件&lt;/td>
&lt;td>&lt;code>brew reinstall python@3.12&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>brew upgrade &amp;lt;pkg&amp;gt;&lt;/code>&lt;/td>
&lt;td>升级指定软件&lt;/td>
&lt;td>&lt;code>brew upgrade curl&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>brew upgrade&lt;/code>&lt;/td>
&lt;td>升级所有软件&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>brew cleanup&lt;/code>&lt;/td>
&lt;td>清理旧版本&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>brew list&lt;/code>&lt;/td>
&lt;td>列出已安装软件&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>brew info &amp;lt;pkg&amp;gt;&lt;/code>&lt;/td>
&lt;td>查看软件信息&lt;/td>
&lt;td>&lt;code>brew info nginx&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>brew search &amp;lt;keyword&amp;gt;&lt;/code>&lt;/td>
&lt;td>搜索软件包&lt;/td>
&lt;td>&lt;code>brew search postgres&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>对于 GUI 应用管理，使用 &lt;code>brew install --cask&lt;/code> 命令可以安装图形界面应用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装图形界面应用&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew install --cask google-chrome
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew install --cask visual-studio-code
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 卸载&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew uninstall --cask iterm2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看所有已安装 Cask&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew list --cask
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>💡 Cask 支持的应用包括：Chrome、VS Code、Docker、Obsidian、Raycast 等。&lt;/p>
&lt;/blockquote>
&lt;p>使用 &lt;code>brew search&lt;/code> 和 &lt;code>brew deps&lt;/code> 可以进行软件包的搜索及查看依赖关系：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 搜索软件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew search python
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看可安装的版本&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew search /python@/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看软件依赖树&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew deps --tree node
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>在实际使用中，Homebrew 可以帮助你快速搭建开发环境。例如，以下命令可以用于配置一个前端开发环境：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. 安装核心工具链&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew install node yarn pnpm git coreutils
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. 安装 GUI 工具&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew install --cask visual-studio-code iterm2 docker
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. 安装数据库&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew install postgresql redis
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. 启动服务（后台运行）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew services start postgresql
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew services start redis
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 5. 验证安装&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">node -v &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> npm -v &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> psql --version
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>对于需要管理多个版本 Python 的场景，可以安装特定版本并切换路径：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 安装特定版本&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew install python@3.11 python@3.12
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 切换版本（通过 PATH 优先级）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;export PATH=&amp;#34;/opt/homebrew/opt/python@3.11/bin:$PATH&amp;#34;&amp;#39;&lt;/span> &amp;gt;&amp;gt; ~/.zshrc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">source&lt;/span> ~/.zshrc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">python3 --version &lt;span class="c1"># 输出 3.11.x&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>Homebrew 还提供了一些高级技巧，例如使用 &lt;code>brew bundle&lt;/code> 管理项目依赖：&lt;/p>
&lt;p>在项目根目录创建 &lt;code>Brewfile&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-ruby" data-lang="ruby">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Brewfile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">brew&lt;/span> &lt;span class="s2">&amp;#34;git&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">brew&lt;/span> &lt;span class="s2">&amp;#34;node&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">brew&lt;/span> &lt;span class="s2">&amp;#34;redis&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">cask&lt;/span> &lt;span class="s2">&amp;#34;visual-studio-code&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>一键安装/同步环境：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">brew bundle &lt;span class="c1"># 安装所有依赖&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew bundle cleanup &lt;span class="c1"># 卸载未在 Brewfile 中声明的软件&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>✅ 适合团队协作、新机器快速配置、云开发环境复现&lt;/p>
&lt;/blockquote>
&lt;p>同时还可查看软件安装位置与配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看安装路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew --prefix node
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看配置文件位置&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew --prefix redis
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 输出：/opt/homebrew/opt/redis&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 配置文件通常在：/opt/homebrew/etc/redis.conf&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>遇到问题时，可使用以下命令进行诊断与修复：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 检查环境健康状态&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew doctor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 修复常见问题（如权限、PATH 错误）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew cleanup
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo chown -R &lt;span class="k">$(&lt;/span>whoami&lt;span class="k">)&lt;/span> &lt;span class="k">$(&lt;/span>brew --prefix&lt;span class="k">)&lt;/span>/*
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>在实际使用过程中，可能会遇到一些常见问题。以下是一些问题及其解决方案的汇总：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>问题&lt;/th>
&lt;th>解决方案&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>command not found: brew&lt;/code>&lt;/td>
&lt;td>重启终端，或执行 &lt;code>eval &amp;quot;$(/opt/homebrew/bin/brew shellenv)&amp;quot;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>权限错误 &lt;code>/opt/homebrew&lt;/code>&lt;/td>
&lt;td>&lt;code>sudo chown -R $(whoami):admin /opt/homebrew&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>安装卡在 &lt;code>Updating Homebrew...&lt;/code>&lt;/td>
&lt;td>按 &lt;code>Ctrl+C&lt;/code> 取消，配置国内镜像源后重试&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Error: Cannot install under Rosetta 2&lt;/code>&lt;/td>
&lt;td>确保终端以原生 ARM 模式运行（非 Rosetta）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>卸载 Homebrew&lt;/td>
&lt;td>&lt;code>/bin/bash -c &amp;quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)&amp;quot;&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;p>为了更好地使用 Homebrew，建议遵循以下最佳实践：&lt;/p>
&lt;p>✅ &lt;strong>推荐做法：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>优先使用 &lt;code>.pkg&lt;/code> 安装器，减少配置烦恼&lt;/li>
&lt;li>定期执行 &lt;code>brew update &amp;amp;&amp;amp; brew upgrade &amp;amp;&amp;amp; brew cleanup&lt;/code>&lt;/li>
&lt;li>用 &lt;code>Brewfile&lt;/code> 管理个人/团队开发环境&lt;/li>
&lt;li>遇到问题先运行 &lt;code>brew doctor&lt;/code> 诊断&lt;/li>
&lt;/ul>
&lt;p>❌ &lt;strong>避免做法：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>不要混用 &lt;code>sudo brew&lt;/code>（Homebrew 设计为无 sudo 运行）&lt;/li>
&lt;li>不要手动修改 &lt;code>/opt/homebrew&lt;/code> 下的文件结构&lt;/li>
&lt;li>不要同时使用多个镜像源（易导致冲突）&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>如需了解更多 Homebrew 的信息，可以参考以下资源：&lt;/p>
&lt;ul>
&lt;li>官方文档：https://docs.brew.sh&lt;/li>
&lt;li>公式仓库：https://github.com/Homebrew/homebrew-core&lt;/li>
&lt;li>Cask 仓库：https://github.com/Homebrew/homebrew-cask&lt;/li>
&lt;li>社区论坛：https://github.com/Homebrew/discussions&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Homebrew 不仅是软件安装工具，更是现代开发者的工作流基石。掌握它，意味着你能在几分钟内搭建起完整的开发环境，告别繁琐的手动配置。&lt;/p>
&lt;blockquote>
&lt;p>🚀 &lt;strong>行动建议&lt;/strong>：现在就打开终端，执行 &lt;code>brew install just&lt;/code>，用 justfile 管理你的常用命令，体验效率飞跃！&lt;/p>
&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建你的第一个 justfile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;hello:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> echo &amp;#34;Hello from Homebrew!&amp;#34;&amp;#39;&lt;/span> &amp;gt; justfile
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">just hello
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Happy Brewing! 🍻&lt;/p>
&lt;h1 id="homebrew-为什么它是-macos-上的必备工具">Homebrew 为什么它是 macOS 上的必备工具
&lt;/h1>&lt;p>Homebrew 是一款 macOS（现在也支持 Linux）的&lt;strong>包管理器&lt;/strong>（Package Manager），它的口号是“macOS 缺失的软件包的管理器”。对于任何想要深度掌握 macOS 的用户（尤其是开发者、设计师或极客）来说，Homebrew 几乎是“必装”的神器。&lt;/p>
&lt;p>你可以把 &lt;strong>Homebrew&lt;/strong> 理解为 macOS 上的“软件管家”或“应用商店”，但它是通过**命令行（Terminal）**来运作的，而且比普通的 App Store 强大得多。以下是关于 Homebrew 的全方位解读，包括你提到的一系列问题，以及我认为你需要知道的额外信息。&lt;/p>
&lt;p>Homebrew 的特点包括：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>极简操作：&lt;/strong> 不需要去浏览器搜索官网、下载 &lt;code>.dmg&lt;/code> 文件、拖拽到 Applications 文件夹。一行命令搞定一切。&lt;/li>
&lt;li>&lt;strong>依赖管理（杀手级特性）：&lt;/strong> 很多软件需要依赖其他的小程序库才能运行。如果你手动安装，经常会遇到“缺少 xxx 库”的报错。Homebrew 会自动把这些“依赖包”全部帮你下载并配置好。&lt;/li>
&lt;li>&lt;strong>沙盒安装：&lt;/strong> Homebrew 会将软件包安装到独立目录（Apple Silicon 芯片在 &lt;code>/opt/homebrew&lt;/code>，Intel 芯片在 &lt;code>/usr/local/Cellar&lt;/code>），然后通过“软链接”整合到系统里。这意味着它不会弄乱你的系统核心文件，删除时也能删得很干净。&lt;/li>
&lt;li>&lt;strong>开源免费：&lt;/strong> 它完全由社区驱动，配方（Formulae）更新速度极快。&lt;/li>
&lt;/ul>
&lt;p>如果你只是偶尔装个微信或 Word，可能不需要它。但如果你有以下需求，它是必须的：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>安装开发者工具：&lt;/strong> 比如 Python, Node.js, Git, MySQL 等。这些工具在 App Store 里找不到，去官网下载配置环境变量又非常麻烦，Homebrew 能一键搞定。&lt;/li>
&lt;li>&lt;strong>统一管理与更新：&lt;/strong> 你的电脑里装了50个软件，怎么更新？一个一个打开检查更新吗？用 Homebrew，只需要输入 &lt;code>brew upgrade&lt;/code>，所有通过它安装的软件都会自动升级到最新版。&lt;/li>
&lt;li>&lt;strong>脚本化部署：&lt;/strong> 如果你换了新 Mac，不需要花一天时间重新下载软件。你可以导出一个 Homebrew 列表文件，在新电脑上运行一行命令，所有软件自动装好。&lt;/li>
&lt;/ol>
&lt;p>虽然 Homebrew 是目前 macOS 上最主流的选择，但也有其他替代品：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>替代品&lt;/th>
&lt;th>特点&lt;/th>
&lt;th>评价&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>MacPorts&lt;/strong>&lt;/td>
&lt;td>历史悠久，模仿 FreeBSD 的 Ports 系统。&lt;/td>
&lt;td>&lt;strong>更严谨&lt;/strong>。它在完全独立的目录中编译和安装软件，不依赖 macOS 自带的库。这使得它更稳定，但占用空间更大，编译时间更长。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Nix&lt;/strong>&lt;/td>
&lt;td>跨平台，基于纯函数式语言的包管理器。&lt;/td>
&lt;td>&lt;strong>更极客&lt;/strong>。它非常强大，支持回滚版本、多版本共存，能保证环境绝对一致。但学习曲线极陡峭，适合高级开发者。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>App Store&lt;/strong>&lt;/td>
&lt;td>苹果官方商店。&lt;/td>
&lt;td>&lt;strong>更安全但受限&lt;/strong>。适合普通用户下载日常 App，但不仅没有开发工具，且很多开源软件因为审核原因无法上架。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>手动安装&lt;/strong>&lt;/td>
&lt;td>下载 DMG/PKG 文件。&lt;/td>
&lt;td>&lt;strong>最原始&lt;/strong>。难以管理更新，卸载往往残留垃圾文件。&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>结论：&lt;/strong> 对于 95% 的 macOS 用户，&lt;strong>Homebrew 是最佳选择&lt;/strong>，因为它的社区最活跃，软件库最全。&lt;/p>
&lt;p>除了基础功能，Homebrew 还有几个关键概念，理解它们能让你成为真正的“高阶用户”。&lt;/p>
&lt;p>什么是 Cask？（Homebrew 的 GUI 扩展）&lt;/p>
&lt;p>很多人以为 Homebrew 只能装黑底白字的命令行工具（如 Git）。其实不是！Homebrew 有一个扩展叫 &lt;strong>Homebrew Cask&lt;/strong>。&lt;/p>
&lt;ul>
&lt;li>&lt;code>brew install python&lt;/code> -&amp;gt; 安装的是&lt;strong>命令行工具&lt;/strong>（配方 Formula）。&lt;/li>
&lt;li>&lt;code>brew install --cask google-chrome&lt;/code> -&amp;gt; 安装的是&lt;strong>图形界面软件&lt;/strong>（比如 Chrome, VS Code, IINA, Discord, 微信等）。
&lt;strong>这意味着你可以用 Homebrew 管理你电脑上几乎所有的软件。&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>如何维护和清理？&lt;/p>
&lt;p>Homebrew 下载安装包后，默认会保留旧版本的缓存。时间久了会占用几十 GB 空间。&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>常用命令：&lt;/strong> &lt;code>brew cleanup&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>这个命令会删除所有过期的下载缓存和旧版本软件，瞬间释放大量磁盘空间。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>常用命令：&lt;/strong> &lt;code>brew doctor&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>如果你发现 Homebrew 报错，运行这个命令，它会像医生一样自动诊断问题并告诉你怎么修复。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Apple Silicon (M1/M2/M3) 的路径变化&lt;/p>
&lt;p>如果你使用的是新款 Mac（M系列芯片），Homebrew 的安装路径发生了变化：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>旧款 Intel Mac:&lt;/strong> &lt;code>/usr/local&lt;/code>&lt;/li>
&lt;li>&lt;strong>新款 M 芯片 Mac:&lt;/strong> &lt;code>/opt/homebrew&lt;/code>
这主要是为了避免与 macOS 自带的 Rosetta 转译机制冲突。虽然使用上没区别，但在配置环境变量时需要注意。&lt;/li>
&lt;/ul>
&lt;p>Brewfile (备份你的 Mac)&lt;/p>
&lt;p>这是最酷的功能。你可以创建一个名为 &lt;code>Brewfile&lt;/code> 的文本文件，里面写上：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-ruby" data-lang="ruby">&lt;span class="line">&lt;span class="cl">&lt;span class="n">brew&lt;/span> &lt;span class="s2">&amp;#34;git&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">brew&lt;/span> &lt;span class="s2">&amp;#34;node&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">cask&lt;/span> &lt;span class="s2">&amp;#34;google-chrome&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">cask&lt;/span> &lt;span class="s2">&amp;#34;visual-studio-code&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后运行 &lt;code>brew bundle&lt;/code>。Homebrew 就会按照这个清单自动把所有软件装好。这被称为 &lt;strong>&amp;ldquo;Infrastructure as Code&amp;rdquo; (基础设施即代码)&lt;/strong>，是很多工程师配置新电脑的秘诀。&lt;/p>
&lt;p>Homebrew 是 macOS 的&lt;strong>外挂级&lt;/strong>装备。它让软件安装变得像手机应用商店一样简单，同时又保留了极高的可控性和专业性。&lt;/p>
&lt;p>&lt;strong>想现在尝试一下吗？&lt;/strong>
你只需要打开你的终端（Terminal），粘贴官方的一行安装代码即可开始。&lt;/p></description></item><item><title>软件工程的范式转移：基于 Claude Code 与智能体协作的高效编程实践</title><link>https://www.zata.cc/p/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B%E7%9A%84%E8%8C%83%E5%BC%8F%E8%BD%AC%E7%A7%BB%E5%9F%BA%E4%BA%8E-claude-code-%E4%B8%8E%E6%99%BA%E8%83%BD%E4%BD%93%E5%8D%8F%E4%BD%9C%E7%9A%84%E9%AB%98%E6%95%88%E7%BC%96%E7%A8%8B%E5%AE%9E%E8%B7%B5/</link><pubDate>Sun, 01 Feb 2026 18:23:03 +0800</pubDate><guid>https://www.zata.cc/p/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B%E7%9A%84%E8%8C%83%E5%BC%8F%E8%BD%AC%E7%A7%BB%E5%9F%BA%E4%BA%8E-claude-code-%E4%B8%8E%E6%99%BA%E8%83%BD%E4%BD%93%E5%8D%8F%E4%BD%9C%E7%9A%84%E9%AB%98%E6%95%88%E7%BC%96%E7%A8%8B%E5%AE%9E%E8%B7%B5/</guid><description>&lt;img src="https://www.zata.cc/p/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B%E7%9A%84%E8%8C%83%E5%BC%8F%E8%BD%AC%E7%A7%BB%E5%9F%BA%E4%BA%8E-claude-code-%E4%B8%8E%E6%99%BA%E8%83%BD%E4%BD%93%E5%8D%8F%E4%BD%9C%E7%9A%84%E9%AB%98%E6%95%88%E7%BC%96%E7%A8%8B%E5%AE%9E%E8%B7%B5/images/index/index.png" alt="Featured image of post 软件工程的范式转移：基于 Claude Code 与智能体协作的高效编程实践" />&lt;h1 id="一人开发文档何去何从ai-时代我用-4-份文档搞定整个项目">一人开发，文档何去何从？AI 时代，我用 4 份文档搞定整个项目
&lt;/h1>&lt;blockquote>
&lt;p>曾经，我对着国标“十三类文档”头皮发麻；如今，一个 README + 3 份轻量文档，撑起年更 5 个项目的开发节奏。AI 不是替代文档，而是帮我们找回文档的本质：&lt;strong>为解决问题而生，而非为流程而写&lt;/strong>。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>刚入行时，我曾花 3 天写《详细设计说明书》，结果上线前需求一改，文档直接报废。更讽刺的是——&lt;strong>没人看它&lt;/strong>。开发同事直接翻代码，产品经理盯着原型图，测试同学只关心用例。&lt;/p>
&lt;p>传统软件工程推崇的“十三类文档”（需求规格、概要设计、详细设计……），诞生于瀑布模型时代，核心假设是：&lt;/p>
&lt;blockquote>
&lt;p>✅ 需求稳定 ✅ 团队分工明确 ✅ 文档是交付物&lt;/p>
&lt;/blockquote>
&lt;p>但今天的现实是：&lt;/p>
&lt;blockquote>
&lt;p>❌ 需求周周变 ❌ 一人身兼数职 ❌ 代码才是唯一真相&lt;/p>
&lt;/blockquote>
&lt;p>当文档沦为“流程合规”的仪式，它就从资产变成了负债。&lt;/p>
&lt;hr>
&lt;p>经过 3 年独立开发实践 + AI 工具深度使用，我将文档体系压缩为 &lt;strong>4 份核心文档&lt;/strong>。它们不是“简化版传统文档”，而是&lt;strong>重构了文档的存在形式&lt;/strong>：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>文档&lt;/th>
&lt;th>传统对应&lt;/th>
&lt;th>核心价值&lt;/th>
&lt;th>存储位置&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>&lt;code>README.md&lt;/code>&lt;/strong>&lt;/td>
&lt;td>需求+用户手册&lt;/td>
&lt;td>5 分钟让任何人跑起来&lt;/td>
&lt;td>代码库根目录&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>&lt;code>DESIGN.md&lt;/code>&lt;/strong>&lt;/td>
&lt;td>概要+详细设计&lt;/td>
&lt;td>回答“为什么这样设计”&lt;/td>
&lt;td>代码库 &lt;code>/docs&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>可执行文档&lt;/strong>&lt;/td>
&lt;td>接口文档+数据库设计&lt;/td>
&lt;td>代码即文档，永不脱节&lt;/td>
&lt;td>嵌入代码/配置文件&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>&lt;code>DEPLOY.md&lt;/code>&lt;/strong>&lt;/td>
&lt;td>部署+运维手册&lt;/td>
&lt;td>一键恢复服务&lt;/td>
&lt;td>代码库根目录&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>💡 关键转变：&lt;strong>从“写文档”到“让系统自动生成文档”&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>&lt;strong>&lt;code>README.md&lt;/code>&lt;/strong> —— 项目的“电梯演讲”&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># TodoFlow 🚀
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>极简任务流工具，3 命令启动，无数据库依赖
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## ✨ 为什么需要它？
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>&lt;span class="k">-&lt;/span> 现有工具太重（Notion/Jira）→ 本项目单文件 200 行 Python
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 需要可视化流程 → 内置 Mermaid 流程图渲染
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">⚡ 快速开始
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">```bash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/xxx/todoflow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pip install -r requirements.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">python app.py # 访问 http://localhost:8000
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>📡 核心 API&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -X POST /tasks -d &lt;span class="s1">&amp;#39;{&amp;#34;title&amp;#34;:&amp;#34;写博客&amp;#34;}&amp;#39;&lt;/span> &lt;span class="c1"># 创建任务&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl /flow &lt;span class="c1"># 生成 Mermaid 流程图&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>❓ 常见问题
Q: 如何持久化数据？
A: 默认内存存储，加 &lt;code>--persist file.json&lt;/code> 启用 JSON 持久化&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; ✅ 价值：新协作者/未来的你，5 分钟内理解项目价值并跑起来
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">**`DESIGN.md`** —— 决策的“时间胶囊”
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">```markdown
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># 架构设计决策
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 为什么不用数据库？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需求：单机使用，数据量 &amp;lt; 1000 条
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 决策：JSON 文件持久化，避免 Docker 部署复杂度
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 代价：不支持并发写入 → 接受，本项目为个人工具
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 为什么选 FastAPI 而非 Flask？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 需求：需要自动生成 OpenAPI 文档
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 决策：FastAPI 内置 Swagger UI，省去手写 API 文档
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 验证：`/docs` 路径直接访问交互式文档
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>✅ 价值：3 个月后回看，秒懂“当初为啥这么设计”，避免重复踩坑&lt;/p>
&lt;/blockquote>
&lt;p>&lt;strong>可执行文档&lt;/strong> —— 永不过期的“活文档”&lt;/p>
&lt;ul>
&lt;li>&lt;strong>API 文档&lt;/strong>：用 FastAPI 写代码 → 自动生成 &lt;code>/docs&lt;/code> Swagger UI&lt;/li>
&lt;li>&lt;strong>数据库 Schema&lt;/strong>：SQLAlchemy 模型 + 注释 → &lt;code>alembic&lt;/code> 自动生成迁移脚本&lt;/li>
&lt;li>&lt;strong>环境变量&lt;/strong>：&lt;code>.env.example&lt;/code> 文件即文档：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-env" data-lang="env">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 必填：邮件服务配置&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">SMTP_HOST&lt;/span>&lt;span class="o">=&lt;/span>smtp.example.com
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">SMTP_PORT&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">587&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 选填：调试模式（默认 false）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">DEBUG&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>✅ 价值：文档与代码同生命周期，改代码即改文档&lt;/p>
&lt;/blockquote>
&lt;p>&lt;strong>&lt;code>DEPLOY.md&lt;/code>&lt;/strong> —— 运维的“急救包”&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># 部署指南
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 云服务器部署（Ubuntu 22.04）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>```bash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># 1. 安装依赖
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>sudo apt install python3-pip nginx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># 2. 配置 systemd 服务
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>sudo cp todoflow.service /etc/systemd/system/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo systemctl start todoflow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># 3. 配置 Nginx 反向代理（见 nginx.conf）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>sudo nginx -s reload
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>故障恢复&lt;/p>
&lt;ul>
&lt;li>服务挂了：&lt;code>sudo systemctl restart todoflow&lt;/code>&lt;/li>
&lt;li>磁盘满：&lt;code>rm -rf /var/log/todoflow/*.log&lt;/code>&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; ✅ 价值：半夜报警时，照着步骤 5 分钟恢复服务
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">---
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文档整合的核心不是“少写”，而是 **“让机器生成，人只校对”**。我的工作流：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 场景 | 传统做法 | AI 增强做法 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|------|----------|-------------|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 写 API 文档 | 手写 Markdown 表格 | 用 Copilot 从函数签名生成 OpenAPI YAML |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 写 Changelog | 翻 Git Log 人工总结 | `git log --oneline v1.0..v1.1 \| cursor &amp;#34;生成用户友好的更新日志&amp;#34;` |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 写部署步骤 | 回忆上次操作 | 让 AI 分析 Dockerfile + docker-compose.yml 生成部署命令 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 写设计决策 | 事后补文档 | 开发时对 Cursor 说：“解释为什么用 Redis 而不用 Memcached”，直接生成 DESIGN.md 片段 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; 🌰 案例：我让 Cursor 分析一段异步队列代码，10 秒生成：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">```markdown
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; ## 为什么用 asyncio.Queue 而非 Celery？
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; - 项目规模：单进程任务调度，无需分布式
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; - 依赖成本：避免引入 RabbitMQ/Redis
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; - 性能需求：任务量 &amp;lt; 1000/天，内存队列足够
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;gt; - 代价：进程重启丢失队列 → 接受，任务可重试
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>给独立开发者的 3 条建议：&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>起步期（&amp;lt;1 周项目）&lt;/strong>
→ 只维护 &lt;code>README.md&lt;/code>，包含：核心功能 + 3 条启动命令 + 1 个 curl 示例&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>成长期（持续维护项目）&lt;/strong>
→ 拆出 &lt;code>DESIGN.md&lt;/code>（记录关键决策） + &lt;code>DEPLOY.md&lt;/code>（记录部署细节）&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>拒绝“文档洁癖”&lt;/strong>
→ 不追求格式精美，追求&lt;strong>关键时刻能救命&lt;/strong>。一段能复制粘贴的命令，胜过 10 页精美 PDF&lt;/p>
&lt;/li>
&lt;/ol>
&lt;hr>
&lt;p>&lt;strong>最高级的文档，是“无需文档”&lt;/strong>&lt;/p>
&lt;p>代码自解释 + 系统自描述：&lt;/p>
&lt;ul>
&lt;li>用 &lt;code>--help&lt;/code> 输出清晰的 CLI 帮助&lt;/li>
&lt;li>用 &lt;code>/health&lt;/code> 提供服务状态自检&lt;/li>
&lt;li>用 OpenAPI 让前端直接调试后端&lt;/li>
&lt;li>用 &lt;code>.env.example&lt;/code> 告诉用户需要哪些配置&lt;/li>
&lt;/ul>
&lt;p>当工具链足够智能，文档将退化为“异常路径的注解”——只在人类需要理解“为什么”时出现。&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>AI 时代，我们不再为流程写文档，而是为“未来的自己”留线索。&lt;/strong>
4 份文档，不是妥协，而是聚焦：把时间留给创造，把记忆交给工具。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>&lt;strong>延伸阅读&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://github.com/xxx/project-template" target="_blank" rel="noopener"
>我的开源项目文档模板&lt;/a>（含 DESIGN.md / DEPLOY.md 实例）&lt;/li>
&lt;li>《Software Engineering at Google》Chapter 19: Documentation&lt;/li>
&lt;li>工具推荐：MkDocs（轻量文档站）、Mermaid（代码画图）、Docusaurus（React 驱动文档）&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;em>本文首发于个人博客，欢迎转发。独立开发不易，文档减负，从今天开始。&lt;/em> ✨&lt;/p>
&lt;h1 id="软件工程的范式转移基于-claude-code-与智能体协作的高效编程实践">软件工程的范式转移：基于 Claude Code 与智能体协作的高效编程实践
&lt;/h1>&lt;p>在软件开发工具演进的十年周期中，我们正见证一场深刻的范式转移：人工智能的角色从“行内补全助手”跃迁为“具备工具调用能力的协作智能体”。GitHub Copilot 等早期工具聚焦于提升单行代码的编写速度，而 Anthropic 推出的 &lt;strong>Claude Code&lt;/strong> 则重新定义了人机协作的边界——它不再局限于预测下一个 token，而是能够理解整个代码库、规划多步任务、并在人类监督下执行具有真实副作用的操作。&lt;/p>
&lt;p>本文将基于 Anthropic 官方文档与经验证的工程实践，系统阐述如何构建一套安全、高效、可扩展的智能体协作编程体系，并重点探讨如何将文档维护无缝融入开发工作流。&lt;/p>
&lt;h2 id="一claude-code终端原生的协作智能体">一、Claude Code：终端原生的协作智能体
&lt;/h2>&lt;p>Claude Code 是 Anthropic 官方推出的命令行工具，其设计哲学根植于 Unix 的“组合性”原则：&lt;strong>每个工具做好一件事，通过管道组合解决复杂问题&lt;/strong>。与 IDE 插件不同，Claude Code 以终端为第一交互界面，天然支持文件系统操作、Shell 命令执行与 Git 集成。&lt;/p>
&lt;h3 id="核心能力矩阵">核心能力矩阵
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>能力维度&lt;/th>
&lt;th>具体表现&lt;/th>
&lt;th>安全约束&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>代码库理解&lt;/td>
&lt;td>通过 200K+ tokens 上下文窗口分析整个项目结构&lt;/td>
&lt;td>仅访问用户授权的目录&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>工具调用&lt;/td>
&lt;td>在批准后执行文件编辑、Shell 命令、Git 操作&lt;/td>
&lt;td>&lt;strong>默认需人工批准&lt;/strong>，无静默执行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>任务规划&lt;/td>
&lt;td>将模糊需求拆解为可验证的原子步骤&lt;/td>
&lt;td>关键节点自动暂停等待审查&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>持续对话&lt;/td>
&lt;td>会话中保持对项目状态的长期记忆&lt;/td>
&lt;td>企业版支持 Zero-Retention（不保留对话用于训练）&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>💡 关键认知：Claude Code 是 &lt;strong>human-in-the-loop 的增强型代理&lt;/strong>，而非全自动机器人。所有修改操作默认需用户显式批准，这是 Anthropic 安全架构的基石。&lt;/p>
&lt;/blockquote>
&lt;h3 id="性能基准真实世界表现">性能基准：真实世界表现
&lt;/h3>&lt;p>在 SWE-bench Verified（评估真实 GitHub issue 修复能力的权威基准）中，Claude Sonnet 4.5（2025 年 9 月发布）达到 &lt;strong>77.2%–80.9%&lt;/strong> 的解决率，显著超越前代模型。在 OSWorld 基准（评估操作系统级多步任务）中，其得分从 Sonnet 3.5 的 42.2% 提升至 &lt;strong>61.4%&lt;/strong>，证明其在复杂工作流中的实用性。&lt;/p>
&lt;h2 id="二规则系统claudemd-的工程化实践">二、规则系统：CLAUDE.md 的工程化实践
&lt;/h2>&lt;p>&lt;code>CLAUDE.md&lt;/code> 是 Claude Code 的核心配置机制——一个位于项目根目录的 Markdown 文件，会在会话启动时自动加载为系统提示词。它将团队的架构决策、编码规范与工作流知识转化为 AI 可理解的指令。&lt;/p>
&lt;h3 id="21-文件加载逻辑">2.1 文件加载逻辑
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>位置&lt;/th>
&lt;th>行为&lt;/th>
&lt;th>说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>./CLAUDE.md&lt;/code>&lt;/td>
&lt;td>✅ 官方原生支持，自动加载&lt;/td>
&lt;td>项目级规范的唯一标准位置&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>./subdir/CLAUDE.md&lt;/code>&lt;/td>
&lt;td>✅ 当工作目录进入子目录时自动激活&lt;/td>
&lt;td>适用于 Monorepo 的模块级规范&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>~/.claude/CLAUDE.md&lt;/code>&lt;/td>
&lt;td>⚠️ 非官方标准，需社区工具支持&lt;/td>
&lt;td>个人全局偏好（如 claude-flow）&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>⚠️ 重要澄清：&lt;strong>不存在 &lt;code>.clauderules&lt;/code> 文件格式&lt;/strong>。所有规则应通过 &lt;code>CLAUDE.md&lt;/code> 表达，或通过 Skills 机制封装为可复用工作流。&lt;/p>
&lt;/blockquote>
&lt;h3 id="22-内容设计原则简洁可操作聚焦">2.2 内容设计原则：简洁、可操作、聚焦
&lt;/h3>&lt;p>Anthropic 官方建议 &lt;code>CLAUDE.md&lt;/code> 保持在 &lt;strong>500 行以内&lt;/strong>，社区实践共识为 &lt;strong>100–300 行&lt;/strong>。关键在于传递“必须知道”的规则，而非复制完整技术文档。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># 项目概览
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>电商平台后端服务，基于 FastAPI + PostgreSQL，遵循领域驱动设计（DDD）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 技术栈
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>&lt;span class="k">-&lt;/span> 语言：Python 3.11+
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 依赖管理：Poetry
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 数据库迁移：Alembic
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 测试：pytest + factory_boy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 文档：MkDocs + mkdocstrings（自动从 docstrings 生成 API 参考）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 代码规范
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>&lt;span class="k">-&lt;/span> 类型注解：所有函数必须包含完整类型提示（含返回值）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 异常处理：业务异常继承自 &lt;span class="sb">`DomainError`&lt;/span> 基类
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 日志：使用 structlog，禁止使用 print()
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 测试：新功能必须附带单元测试（覆盖率 ≥80%）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 文档：公共 API 必须包含 Google 风格 docstrings，变更后同步更新用户指南
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 关键命令
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>&lt;span class="k">-&lt;/span> 启动开发服务器：&lt;span class="sb">`poetry run uvicorn app.main:app --reload`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 运行测试：&lt;span class="sb">`poetry run pytest tests/ -xvs`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 生成数据库迁移：&lt;span class="sb">`poetry run alembic revision --autogenerate -m &amp;#34;描述&amp;#34;`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 构建文档站点：&lt;span class="sb">`poetry run mkdocs build`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 本地预览文档：&lt;span class="sb">`poetry run mkdocs serve`&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="三文档即代码mkdocs-与-ai-协作的工程实践">三、文档即代码：MkDocs 与 AI 协作的工程实践
&lt;/h2>&lt;p>文档滞后于代码是技术债的主要来源。通过将 MkDocs 与 Claude Code 深度集成，我们可以构建“代码变更即触发文档更新”的闭环工作流，实现文档与实现的实时对齐。&lt;/p>
&lt;h3 id="31-自动化参考文档mkdocstrings--动态生成">3.1 自动化参考文档：mkdocstrings + 动态生成
&lt;/h3>&lt;p>&lt;code>mkdocstrings&lt;/code> 插件可自动从 Python docstrings 提取 API 文档，但需配合生成脚本实现模块级页面的自动创建：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># scripts/gen_ref_pages.py&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;自动生成 MkDocs 参考文档页面&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pathlib&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Path&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">mkdocs_gen_files&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">nav&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mkdocs_gen_files&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Nav&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 递归遍历源代码&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">path&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">sorted&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Path&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;src&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rglob&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;*.py&amp;#34;&lt;/span>&lt;span class="p">)):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 跳过 __init__.py 和测试文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">startswith&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;__&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="s2">&amp;#34;test&amp;#34;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parts&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">continue&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">module_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">relative_to&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;src&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">with_suffix&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">doc_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">relative_to&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;src&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">with_suffix&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;.md&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">full_doc_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Path&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;reference&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">doc_path&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 构建导航层级&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">parts&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">list&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">module_path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parts&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nav&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">parts&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">full_doc_path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">as_posix&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 为每个模块创建引用页面&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="n">mkdocs_gen_files&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">full_doc_path&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;w&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">fd&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">identifier&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;.&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">module_path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parts&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;# `&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">identifier&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">`&lt;/span>&lt;span class="se">\n\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;::: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">identifier&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34; options:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34; show_root_heading: false&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">fd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34; show_source: true&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成 SUMMARY.md 导航&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">with&lt;/span> &lt;span class="n">mkdocs_gen_files&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;reference/SUMMARY.md&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;w&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">nav_file&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">nav_file&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">writelines&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">nav&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">build_literate_nav&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>mkdocs.yml&lt;/code> 配置示例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">plugins&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">search&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">gen-files&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">scripts&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">scripts/gen_ref_pages.py&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">literate-nav&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">nav_file&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">SUMMARY.md&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">mkdocstrings&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">handlers&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">python&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">options&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">docstring_style&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">google&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">show_signature&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">show_source&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">merge_init_into_class&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">nav&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">概览&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">index.md&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">用户指南&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">guides/&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">API 参考&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">reference/&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">架构设计&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">architecture/&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="32-claude-code-驱动的文档维护工作流">3.2 Claude Code 驱动的文档维护工作流
&lt;/h3>&lt;p>Claude Code 无法“自动”维护文档，但可通过 &lt;strong>Hooks + Git 集成&lt;/strong>构建半自动化工作流：&lt;/p>
&lt;h4 id="步骤-1检测代码变更并触发文档任务">步骤 1：检测代码变更并触发文档任务
&lt;/h4>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ~/.claude/settings.json
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;hooks&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;postToolUse&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;command&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;bash .github/scripts/check-doc-impact.sh {file}&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;onTool&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;edit&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>&lt;span class="c1"># .github/scripts/check-doc-impact.sh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">FILE&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nv">$1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 检测是否修改了公共 API&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> git diff HEAD -- &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$FILE&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> grep -q &lt;span class="s2">&amp;#34;^+.*def \|^-.*def \|^\+.*class \|^-.*class &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34;⚠️ 检测到公共 API 变更，请同步更新文档：&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34; 1. 检查 docstrings 是否完整&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34; 2. 运行: poetry run python scripts/gen_ref_pages.py&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34; 3. 如需更新用户指南，运行: claude code &amp;#39;根据新功能更新 guides/ 目录下的相关文档&amp;#39;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="步骤-2ai-辅助生成用户指南内容">步骤 2：AI 辅助生成用户指南内容
&lt;/h4>&lt;p>当开发者执行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">claude code &lt;span class="s2">&amp;#34;根据新添加的 PaymentService.refund() 方法，更新 guides/payments.md 中的退款流程说明&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Claude Code 将：&lt;/p>
&lt;ol>
&lt;li>读取 &lt;code>src/services/payment.py&lt;/code> 中的实现与 docstrings&lt;/li>
&lt;li>分析现有 &lt;code>guides/payments.md&lt;/code> 结构&lt;/li>
&lt;li>生成包含以下要素的更新建议：
&lt;ul>
&lt;li>新方法的使用场景与参数说明&lt;/li>
&lt;li>与现有流程的集成点（Mermaid 序列图）&lt;/li>
&lt;li>常见错误处理示例&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>在应用前请求人工审查&lt;/strong>（默认 &lt;code>ask&lt;/code> 模式）&lt;/li>
&lt;/ol>
&lt;h4 id="步骤-3文档质量保障">步骤 3：文档质量保障
&lt;/h4>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># .github/workflows/docs.yml&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Documentation Quality Gate&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">pull_request&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">paths&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s1">&amp;#39;src/**&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s1">&amp;#39;docs/**&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s1">&amp;#39;mkdocs.yml&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">jobs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">validate-docs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">runs-on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ubuntu-latest&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">steps&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">actions/checkout@v4&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Set up Python&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">actions/setup-python@v5&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">with&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">python-version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;3.11&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Install dependencies&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">run&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">|&lt;/span>&lt;span class="sd">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> pip install poetry
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> poetry install --with docs&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Build documentation (strict mode)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">run&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">poetry run mkdocs build --strict&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># --strict 会在发现 broken links 或 warnings 时失败&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Check for stale docstrings&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">run&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">|&lt;/span>&lt;span class="sd">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> # 检测有实现但无 docstrings 的公共函数
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> poetry run pylint --load-plugins pylint.extensions.docparams \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> --disable=all --enable=missing-param-doc,missing-return-doc \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> src/ || true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="33-ai-生成架构可视化mermaid-集成">3.3 AI 生成架构可视化：Mermaid 集成
&lt;/h3>&lt;p>现代 MkDocs（配合 &lt;code>mkdocs-material&lt;/code> 主题）原生支持 Mermaid，Claude Code 可生成精确的架构图：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 认证流程
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">```mermaid
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sequenceDiagram
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> participant U as User
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> participant F as Frontend
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> participant A as AuthService
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> participant T as TokenService
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> participant DB as PostgreSQL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> U-&amp;gt;&amp;gt;F: POST /login (email, password)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> F-&amp;gt;&amp;gt;A: validate_credentials(email, password)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> A-&amp;gt;&amp;gt;DB: SELECT password_hash FROM users WHERE email=?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> DB--&amp;gt;&amp;gt;A: password_hash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> A-&amp;gt;&amp;gt;A: bcrypt.verify(password, password_hash)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> alt valid
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> A-&amp;gt;&amp;gt;T: generate_jwt(user_id, roles)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> T--&amp;gt;&amp;gt;A: access_token, refresh_token
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> A--&amp;gt;&amp;gt;F: {access_token, refresh_token}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> F--&amp;gt;&amp;gt;U: 200 OK
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> else invalid
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> A--&amp;gt;&amp;gt;F: 401 Unauthorized
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> F--&amp;gt;&amp;gt;U: 错误提示
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> end
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">开发者只需提示：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">```bash
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude code &amp;#34;为新实现的 OAuth2 授权码流程生成 Mermaid 序列图，放入 docs/guides/auth.md&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Claude Code 将基于代码实现生成符合 Mermaid 语法的图表，并在插入前展示预览供审查。&lt;/p>
&lt;h2 id="四能力扩展skills-机制与按需加载">四、能力扩展：Skills 机制与按需加载
&lt;/h2>&lt;p>Skills 是 Claude Code 官方支持的模块化扩展系统，用于封装重复性工作流（如代码解释、测试生成、文档更新）。其独特价值在于&lt;strong>支持真正的按需加载&lt;/strong>——这是整个生态中唯一实现“渐进式披露”的机制。&lt;/p>
&lt;h3 id="41-目录结构">4.1 目录结构
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">~/.claude/skills/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── update-docs/ &lt;span class="c1"># 文档更新专用技能&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── SKILL.md
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── templates/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── guide-template.md
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── api-changelog.md
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── examples/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── payment-refund-doc.md
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── explain-code/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── SKILL.md
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="42-文档更新技能示例">4.2 文档更新技能示例
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">update-docs&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;根据代码变更同步更新 MkDocs 文档，包括 API 参考与用户指南&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">disable-model-invocation&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># 适用场景&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>- &lt;span class="l">新增/修改公共 API 后更新参考文档&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>- &lt;span class="l">功能迭代后更新用户指南&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>- &lt;span class="l">重构后更新架构图&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># 工作流程&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="l">. 分析变更文件的 diff，识别影响范围&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="m">2&lt;/span>&lt;span class="l">. 检查相关模块的 docstrings 完整性&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="m">3&lt;/span>&lt;span class="l">. 更新或创建对应的 MkDocs Markdown 页面&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="m">4&lt;/span>&lt;span class="l">. 如涉及流程变更，生成 Mermaid 序列图/流程图&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="m">5&lt;/span>&lt;span class="l">. 在提交前运行 `mkdocs build --strict` 验证&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># 禁止行为&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>- &lt;span class="l">不得删除现有文档内容（除非确认已废弃）&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>- &lt;span class="l">不得修改未受影响的文档章节&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>- &lt;span class="l">所有图表必须基于实际代码逻辑生成&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="五自动化防护hooks-与权限模式">五、自动化防护：Hooks 与权限模式
&lt;/h2>&lt;h3 id="51-hooks确定性生命周期脚本">5.1 Hooks：确定性生命周期脚本
&lt;/h3>&lt;p>Hooks 是运行在 AI 智能体循环之外的确定性脚本，用于在关键节点执行强制性操作：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>事件&lt;/th>
&lt;th>触发时机&lt;/th>
&lt;th>典型用途&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>PreToolUse&lt;/code>&lt;/td>
&lt;td>工具执行前&lt;/td>
&lt;td>拦截危险命令（如 &lt;code>rm -rf&lt;/code>）、验证权限&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>PostToolUse&lt;/code>&lt;/td>
&lt;td>工具执行后&lt;/td>
&lt;td>运行 linter、格式化、单元测试、&lt;strong>文档影响检测&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>UserPromptSubmit&lt;/code>&lt;/td>
&lt;td>用户提交请求前&lt;/td>
&lt;td>自动附加上下文（如当前 Git 分支）&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="52-权限模式三重安全护栏">5.2 权限模式：三重安全护栏
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>模式&lt;/th>
&lt;th>行为&lt;/th>
&lt;th>适用场景&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>ask&lt;/code>（默认）&lt;/td>
&lt;td>每次操作前请求用户批准&lt;/td>
&lt;td>日常开发，平衡效率与安全&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>auto&lt;/code>&lt;/td>
&lt;td>自动执行（&lt;strong>生产环境禁用&lt;/strong>）&lt;/td>
&lt;td>受控的 CI/CD 流水线&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>plan&lt;/code>&lt;/td>
&lt;td>仅生成操作计划，不执行修改&lt;/td>
&lt;td>代码审查、安全审计、&lt;strong>文档更新预览&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 预览文档更新计划（无副作用）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude code --permission-mode plan &lt;span class="s2">&amp;#34;根据新 PaymentService.refund() 方法更新用户指南&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 执行文档更新（需人工批准每步操作）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude code &lt;span class="s2">&amp;#34;更新 guides/payments.md 中的退款流程说明，包含 Mermaid 序列图&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="六外部系统集成mcp-协议">六、外部系统集成：MCP 协议
&lt;/h2>&lt;p>&lt;strong>Model Context Protocol (MCP)&lt;/strong> 是 Anthropic 于 2024 年 11 月推出的开放标准，用于安全地连接 AI 与外部工具（数据库、API、私有文档库）。&lt;/p>
&lt;h3 id="典型集成场景">典型集成场景
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>工具类型&lt;/th>
&lt;th>MCP 服务器&lt;/th>
&lt;th>能力示例&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>代码托管&lt;/td>
&lt;td>&lt;code>github-mcp&lt;/code>&lt;/td>
&lt;td>查询 issue 状态、拉取 PR 历史&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>数据库&lt;/td>
&lt;td>&lt;code>pg-mcp&lt;/code>&lt;/td>
&lt;td>安全查询 schema、执行只读诊断 SQL&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>浏览器自动化&lt;/td>
&lt;td>&lt;code>playwright-mcp&lt;/code>&lt;/td>
&lt;td>在真实浏览器中运行端到端测试&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>文档系统&lt;/td>
&lt;td>&lt;code>notion-mcp&lt;/code>&lt;/td>
&lt;td>同步技术设计文档至 Notion 知识库&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>⚠️ 安全提示：使用第三方 MCP 服务器需自行评估风险。Anthropic 不验证所有社区服务器的安全性，建议在隔离环境中测试。&lt;/p>
&lt;/blockquote>
&lt;h2 id="七跨工具协作github-copilot-指令文件">七、跨工具协作：GitHub Copilot 指令文件
&lt;/h2>&lt;p>&lt;code>.github/copilot-instructions.md&lt;/code> 是 GitHub 官方标准，被 Copilot Chat/Agents/CLI 自动识别。在混合工具环境中，建议分工如下：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>CLAUDE.md&lt;/code>&lt;/strong>：聚焦架构级规范、复杂工作流与&lt;strong>文档维护策略&lt;/strong>&lt;/li>
&lt;li>&lt;strong>&lt;code>.github/copilot-instructions.md&lt;/code>&lt;/strong>：聚焦行内补全相关的微观约束&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">&lt;span class="gh"># 项目规范（Copilot 专用）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 架构约束
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>&lt;span class="k">-&lt;/span> 所有 API 路由必须通过 &lt;span class="sb">`@auth_required`&lt;/span> 装饰器
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 数据库查询必须使用 SQLAlchemy ORM，禁止原生 SQL
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">## 文档要求
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gu">&lt;/span>&lt;span class="k">-&lt;/span> 公共函数必须包含 Google 风格 docstrings
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">-&lt;/span> 参数描述需包含类型与业务含义（如 &amp;#34;user_id: int - 已认证用户的唯一标识&amp;#34;）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="八安全治理框架">八、安全治理框架
&lt;/h2>&lt;p>随着 AI 获得工具调用能力，安全风险从“数据泄露”扩展至“操作风险”。企业应实施分层防御：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>风险类型&lt;/th>
&lt;th>缓解措施&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>代码/文档泄露&lt;/td>
&lt;td>选择企业版（Zero-Retention 策略），禁用内容用于模型训练&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>包幻觉&lt;/td>
&lt;td>Hooks 集成依赖验证（&lt;code>poetry check&lt;/code>），禁止直接 &lt;code>pip install&lt;/code> 未知包&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>权限过载&lt;/td>
&lt;td>始终使用 &lt;code>--permission-mode ask&lt;/code>，关键操作要求二次确认&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>文档失真&lt;/td>
&lt;td>所有 AI 生成文档必须经人工审核，CI 中启用 &lt;code>mkdocs build --strict&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>审计缺失&lt;/td>
&lt;td>启用 &lt;code>claude code --log-to-file&lt;/code> 记录所有操作，满足合规要求&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>🌍 合规提示：根据 2025 年生效的《欧盟 AI 法案》，高风险决策必须保留 human-in-the-loop 覆盖权，所有 AI 生成内容（包括文档）需标记来源（如 Git commit message 包含 &lt;code>[AI-assisted]&lt;/code>）。&lt;/p>
&lt;/blockquote>
&lt;h2 id="九实战工作流从代码变更到文档更新">九、实战工作流：从代码变更到文档更新
&lt;/h2>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 步骤 1：实现新功能（支付退款）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude code &lt;span class="s2">&amp;#34;在 PaymentService 中实现 refund(transaction_id, reason) 方法，包含完整类型注解与 Google 风格 docstrings&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 步骤 2：运行测试验证功能&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">poetry run pytest tests/services/test_payment.py -xvs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 步骤 3：检测文档影响（Hooks 自动触发）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 输出: &amp;#34;⚠️ 检测到公共 API 变更，请同步更新文档&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 步骤 4：预览文档更新计划&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude code --permission-mode plan &lt;span class="s2">&amp;#34;根据新 refund() 方法更新 guides/payments.md 中的退款流程&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 步骤 5：执行文档更新（人工批准每步）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude code &lt;span class="s2">&amp;#34;更新 guides/payments.md：1) 添加 refund() 使用示例 2) 生成退款流程 Mermaid 序列图 3) 补充错误处理说明&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 步骤 6：验证文档构建&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">poetry run mkdocs build --strict
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 步骤 7：提交变更（标记 AI 参与）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git add src/services/payment.py docs/guides/payments.md
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git commit -m &lt;span class="s2">&amp;#34;[AI-assisted] 实现 PaymentService.refund() 并同步更新用户指南&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="十结语文档作为一等公民">十、结语：文档作为一等公民
&lt;/h2>&lt;p>在智能体协作时代，文档不应是开发完成后的“补作业”，而应成为与代码、测试同等重要的&lt;strong>一等公民&lt;/strong>。通过将 MkDocs 深度融入开发工作流，配合 Claude Code 的辅助能力，我们能够构建：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>自动化参考文档&lt;/strong>：通过 mkdocstrings + 动态生成脚本，确保 API 参考与代码实现零延迟同步&lt;/li>
&lt;li>&lt;strong>AI 辅助用户指南&lt;/strong>：在功能迭代时，由 Claude Code 生成初稿并插入精确的架构可视化&lt;/li>
&lt;li>&lt;strong>质量门禁&lt;/strong>：通过 &lt;code>mkdocs build --strict&lt;/code> 与 CI 集成，将文档完整性纳入合并门槛&lt;/li>
&lt;/ul>
&lt;p>这一实践的核心哲学是：&lt;strong>AI 负责执行重复性文档任务，人类负责审核与价值判断&lt;/strong>。当文档维护的成本显著降低，团队才能真正践行“文档即代码”的工程文化，将知识沉淀转化为可持续的竞争优势。&lt;/p>
&lt;hr>
&lt;h2 id="参考资源">参考资源
&lt;/h2>&lt;ol>
&lt;li>&lt;a class="link" href="https://code.claude.com/docs/en/overview" target="_blank" rel="noopener"
>Claude Code 官方文档&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.mkdocs.org/" target="_blank" rel="noopener"
>MkDocs 官方指南&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://mkdocstrings.github.io/" target="_blank" rel="noopener"
>mkdocstrings 插件文档&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://squidfunk.github.io/mkdocs-material/reference/diagrams/" target="_blank" rel="noopener"
>Mermaid 集成示例（mkdocs-material）&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://modelcontextprotocol.io/" target="_blank" rel="noopener"
>Model Context Protocol 规范&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://docs.github.com/en/copilot/tutorials/customization-library/custom-instructions/your-first-custom-instructions" target="_blank" rel="noopener"
>GitHub Copilot 自定义指令指南&lt;/a>&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>本文基于 Anthropic 官方文档与 MkDocs 社区实践（截至 2026 年 2 月）编写。技术持续演进，建议定期查阅官方资源获取最新功能与安全实践。&lt;/p>
&lt;/blockquote></description></item><item><title>数据集标注工具</title><link>https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/</link><pubDate>Mon, 29 Dec 2025 15:05:31 +0800</pubDate><guid>https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/</guid><description>&lt;img src="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/index.png" alt="Featured image of post 数据集标注工具" />&lt;h2 id="ubiai">ubiai
&lt;/h2>&lt;p>&lt;img src="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image-2.png"
width="1897"
height="954"
srcset="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image-2_hu6349620373133293598.png 480w, https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image-2_hu10539449810666814483.png 1024w"
loading="lazy"
alt="ubiai"
class="gallery-image"
data-flex-grow="198"
data-flex-basis="477px"
>&lt;/p>
&lt;h2 id="labelstudio">LabelStudio
&lt;/h2>&lt;p>&lt;img src="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image-1.png"
width="1902"
height="954"
srcset="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image-1_hu6195940971100767588.png 480w, https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image-1_hu234587087617983565.png 1024w"
loading="lazy"
alt="LabelStudio"
class="gallery-image"
data-flex-grow="199"
data-flex-basis="478px"
>&lt;/p>
&lt;h3 id="install">install
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sh" data-lang="sh">&lt;span class="line">&lt;span class="cl">docker run -it -p 8080:8080 -v %cd%/mydata:/label-studio/data heartexlabs/label-studio:latest label-studio --log-level DEBUG
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>-v %cd%/mydata:/label-studio/data
挂载本地目录到容器中，实现数据持久化。
%cd%：这是 Windows 命令行中的变量，表示当前目录（在 Linux/macOS 中应写作 $(pwd)）。
所以 %cd%/mydata 指的是你当前文件夹下的 mydata 子目录。
它被挂载到容器内的 /label-studio/data 路径。&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image.png"
width="1113"
height="626"
srcset="https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image_hu6367888544225471471.png 480w, https://www.zata.cc/p/%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/images/index/image_hu6089378773352114304.png 1024w"
loading="lazy"
alt="在我的指定目录下安装"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="426px"
>&lt;/p></description></item><item><title>实用软件工具｜好用软件推荐</title><link>https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/</link><pubDate>Fri, 11 Jul 2025 15:07:54 +0800</pubDate><guid>https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/</guid><description>&lt;img src="https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/images/index/index.png" alt="Featured image of post 实用软件工具｜好用软件推荐" />&lt;h3 id="ide插件">IDE插件
&lt;/h3>&lt;h4 id="material-icon-theme--好看的图标主题">Material Icon Theme 好看的图标主题
&lt;/h4>&lt;p>&lt;img src="https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/images/index/image-3.png"
width="1008"
height="737"
srcset="https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/images/index/image-3_hu656562438297908566.png 480w, https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/images/index/image-3_hu4019678045722750397.png 1024w"
loading="lazy"
alt="Material Icon Theme"
class="gallery-image"
data-flex-grow="136"
data-flex-basis="328px"
>&lt;/p>
&lt;h3 id="浏览器插件">浏览器插件
&lt;/h3>&lt;h4 id="飞书文档下载为md文件-cloud-document-converter">飞书文档下载为md文件 Cloud Document Converter
&lt;/h4>&lt;p>&lt;img src="https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/images/index/image.png"
width="3404"
height="1968"
srcset="https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/images/index/image_hu5594920773723764745.png 480w, https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/images/index/image_hu8989907962339275266.png 1024w"
loading="lazy"
alt="Cloud Document Converter"
class="gallery-image"
data-flex-grow="172"
data-flex-basis="415px"
>
&lt;img src="https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/images/index/image-1.png"
width="2698"
height="316"
srcset="https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/images/index/image-1_hu1454056803106209874.png 480w, https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/images/index/image-1_hu17435453806163837566.png 1024w"
loading="lazy"
alt="下载为md"
class="gallery-image"
data-flex-grow="853"
data-flex-basis="2049px"
>&lt;/p>
&lt;p>注意：只能下载飞书文档，飞书表格不行&lt;/p>
&lt;h3 id="macos-工具">macOS 工具
&lt;/h3>&lt;h4 id="clipy---剪贴板管理器">Clipy - 剪贴板管理器
&lt;/h4>&lt;p>&lt;strong>官网：&lt;/strong> &lt;a class="link" href="https://clipy-app.com/" target="_blank" rel="noopener"
>https://clipy-app.com/&lt;/a>&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/images/index/image-2.png"
width="344"
height="422"
srcset="https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/images/index/image-2_hu3076062133853891440.png 480w, https://www.zata.cc/p/%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%E5%A5%BD%E7%94%A8%E8%BD%AF%E4%BB%B6%E6%8E%A8%E8%8D%90/images/index/image-2_hu1838700794771773062.png 1024w"
loading="lazy"
alt="Use screenshots"
class="gallery-image"
data-flex-grow="81"
data-flex-basis="195px"
>&lt;/p>
&lt;p>免费开源的 macOS 剪贴板历史管理工具，支持：&lt;/p>
&lt;ul>
&lt;li>📋 自动保存剪贴板历史记录&lt;/li>
&lt;li>✂️ 快捷文本片段管理&lt;/li>
&lt;li>⌨️ 快捷键快速访问（默认 &lt;code>⌘ + Shift + V&lt;/code>）&lt;/li>
&lt;li>🖼️ 支持文本和图像格式&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>安装方式：&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">brew install --cask clipy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>使用场景：&lt;/strong> 开发者复制代码片段、办公人员管理常用文本、提高复制粘贴效率&lt;/p></description></item><item><title>wsl使用教程</title><link>https://www.zata.cc/p/wsl%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</link><pubDate>Mon, 30 Jun 2025 15:04:11 +0800</pubDate><guid>https://www.zata.cc/p/wsl%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</guid><description>&lt;img src="https://www.zata.cc/p/wsl%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/index.png" alt="Featured image of post wsl使用教程" />&lt;h2 id="基础知识">基础知识
&lt;/h2>&lt;h3 id="安装">安装
&lt;/h3>&lt;p>相关教程：&lt;/p>
&lt;p>&lt;a class="link" href="https://learn.microsoft.com/zh-cn/windows/wsl/install" target="_blank" rel="noopener"
>windows官方&lt;/a>&lt;/p>
&lt;p>安装相关软件&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">apt install git
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">apt install just
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># 安装uv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -LsSf https://astral.sh/uv/install.sh | sh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>安装nvm&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh &lt;span class="p">|&lt;/span> bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="配置">配置
&lt;/h3>&lt;p>&lt;img src="https://www.zata.cc/p/wsl%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/image-2.png"
width="1284"
height="791"
srcset="https://www.zata.cc/p/wsl%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/image-2_hu13578863898626238918.png 480w, https://www.zata.cc/p/wsl%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/image-2_hu12141046485350929521.png 1024w"
loading="lazy"
alt="网络设置为镜像模式,nat很麻烦"
class="gallery-image"
data-flex-grow="162"
data-flex-basis="389px"
>&lt;/p>
&lt;p>配置中文字体&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo apt update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install fonts-noto-cjk fonts-wqy-microhei fonts-wqy-zenhei
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo locale-gen zh_CN.UTF-8
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果从windows复制过来的.sh需要修改字符&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sed -i &lt;span class="s1">&amp;#39;s/\r$//&amp;#39;&lt;/span> ./zata.sh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="问题解决">问题解决
&lt;/h3>&lt;h4 id="wsl和docker冲突--表现为wsl无法联网------把docker关了或者使用docker里面的linux容器">wsl和docker冲突 表现为wsl无法联网 &amp;mdash; 把docker关了，或者使用docker里面的linux容器
&lt;/h4>&lt;p>&lt;img src="https://www.zata.cc/p/wsl%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/image.png"
width="1157"
height="464"
srcset="https://www.zata.cc/p/wsl%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/image_hu8185382552746628334.png 480w, https://www.zata.cc/p/wsl%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/image_hu12648800005716954328.png 1024w"
loading="lazy"
alt="docker打开一会wsl断开连接"
class="gallery-image"
data-flex-grow="249"
data-flex-basis="598px"
>
&lt;img src="https://www.zata.cc/p/wsl%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/image-1.png"
width="580"
height="450"
srcset="https://www.zata.cc/p/wsl%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/image-1_hu13618605369311275544.png 480w, https://www.zata.cc/p/wsl%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/image-1_hu12590515238191052810.png 1024w"
loading="lazy"
alt="docker报错"
class="gallery-image"
data-flex-grow="128"
data-flex-basis="309px"
>&lt;/p>
&lt;p>&lt;span style="color:red;">下面不要用了，会把网络设置搞乱&lt;/span>&lt;/p>
&lt;p>&lt;del>使用下面命令之后重启可以恢复，但是当再次打开docker又会出现问题,主要就是关了docker就行&lt;/del>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">wsl --shutdown
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">netsh winsock reset
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>claude-code&amp;codex&amp;Gemini-cli</title><link>https://www.zata.cc/p/claude-codecodexgemini-cli/</link><pubDate>Mon, 23 Jun 2025 19:57:52 +0800</pubDate><guid>https://www.zata.cc/p/claude-codecodexgemini-cli/</guid><description>&lt;img src="https://www.zata.cc/p/claude-codecodexgemini-cli/images/index/index.png" alt="Featured image of post claude-code&amp;codex&amp;Gemini-cli" />&lt;p>注意 : 不可或缺的一个工具是 cc-switch 可以查看cc-switch教程&lt;/p>
&lt;h2 id="claude-code">claude code
&lt;/h2>&lt;h3 id="使用教程">使用教程
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS&amp;#34;&lt;/span>: &lt;span class="s2">&amp;#34;1&amp;#34;&lt;/span> &lt;span class="c1"># agent teams&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 无需确认&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 如果用户是root&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">IS_SANDBOX&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span> claude --dangerously-skip-permissions
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 如果用户不是root&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude --dangerously-skip-permissions
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 别名，方便使用，加入到zshrc中&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">clauded&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;claude --dangerously-skip-permissions&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;a class="link" href="https://itecsonline.com/post/how-to-install-claude-code-on-windows" target="_blank" rel="noopener"
>非常好用，在windows通过wsl使用claude，我就是看的这个&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://docs.anthropic.com/en/docs/claude-code/overview" target="_blank" rel="noopener"
>claude code 官方实战&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/anthropics/claude-code" target="_blank" rel="noopener"
>claude code 仓库&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://vocus.cc/article/6854309dfd89780001335549" target="_blank" rel="noopener"
>Claude Code 實戰教學：三大超好用功能公開！【2025年6月更新】【AI寫程式】&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://gaccode.com/document/claude-code-best-practices-zh" target="_blank" rel="noopener"
>Claude Code 最佳实践&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://itecsonline.com/post/claude-code-tips-tricks" target="_blank" rel="noopener"
>让claude更加好用&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://zhuanlan.zhihu.com/p/1928918331810886674" target="_blank" rel="noopener"
>Claude Code 用法全面拆解！26 项核心功能 + 实战技巧&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="安装">安装
&lt;/h3>&lt;h4 id="maclinuxwsl">mac/linux/wsl
&lt;/h4>&lt;ul>
&lt;li>安装&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 注意，要吧下面的端口设置成你自己的vpn端口，为什么先要设置代理环境变量？ 因为curl默认不会走代理&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 设置代理环境变量，这个是socks5代理&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">export&lt;/span> &lt;span class="nv">all_proxy&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;socks5://127.0.0.1:7897&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 或者
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">export&lt;/span> &lt;span class="nv">https_proxy&lt;/span>&lt;span class="o">=&lt;/span>http://127.0.0.1:7897 &lt;span class="nv">http_proxy&lt;/span>&lt;span class="o">=&lt;/span>http://127.0.0.1:7897
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> curl -fsSL https://claude.ai/install.sh &lt;span class="p">|&lt;/span> bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>卸载
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rm -f ~/.local/bin/claude
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rm -rf ~/.local/share/claude
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;h4 id="windows">windows
&lt;/h4>&lt;p>推荐通过wsl安装&lt;/p>
&lt;p>&lt;a class="link" href="https://itecsonline.com/post/how-to-install-claude-code-on-windows" target="_blank" rel="noopener"
>安装参考&lt;/a>&lt;/p>
&lt;ol>
&lt;li>wsl &amp;ndash;install # 如果出现问题就要去 &lt;a class="link" href="https://blog.csdn.net/no1xium/article/details/131285182" target="_blank" rel="noopener"
>https://blog.csdn.net/no1xium/article/details/131285182&lt;/a>&lt;/li>
&lt;li>wsl &amp;ndash;list &amp;ndash;online # 查看有哪些可用的镜像,如果没有Ubuntu-24.04进行第三步&lt;/li>
&lt;li>wsl &amp;ndash;install -d Ubuntu-24.04&lt;/li>
&lt;/ol>
&lt;p>进入到wsl里面&lt;/p>
&lt;p>sudo apt update
sudo apt full-upgrade -y&lt;/p>
&lt;p>目前claude支持原生安装（2026/02） &lt;a class="link" href="https://code.claude.com/docs/en/overview" target="_blank" rel="noopener"
>claude code&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -fsSL https://claude.ai/install.sh &lt;span class="p">|&lt;/span> bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>安装cc-switch， 参考 本网站的 cc-switch 教程&lt;/p>
&lt;p>Install Additional Dependencies&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo apt install python3 python3-pip -y &lt;span class="c1"># Install Python (if needed)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install git ripgrep -y &lt;span class="c1"># Install Git and Ripgrep (Recommended)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir -p ~/.npm-global
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="配置其他模型api以使用claude_code-----20260228">配置其他模型api以使用claude_code &amp;mdash; 20260228
&lt;/h3>&lt;p>参考cc-swith&lt;/p>
&lt;h3 id="使用技巧">使用技巧
&lt;/h3>&lt;ol>
&lt;li>CLAUDE.md 文件管理&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/claude-codecodexgemini-cli/images/index/image-8.png"
width="692"
height="797"
srcset="https://www.zata.cc/p/claude-codecodexgemini-cli/images/index/image-8_hu15659282894349763342.png 480w, https://www.zata.cc/p/claude-codecodexgemini-cli/images/index/image-8_hu18230032320047788358.png 1024w"
loading="lazy"
alt="claude.md管理"
class="gallery-image"
data-flex-grow="86"
data-flex-basis="208px"
>&lt;/p>
&lt;hr>
&lt;ol start="2">
&lt;li>claude code 使用git worktree 开启多线程工作&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>
&lt;ol>
&lt;li>创建 Git Worktree
为每个任务创建独立工作目录和分支。例如，开发 &lt;code>feature-auth&lt;/code> 和 &lt;code>feature-ui&lt;/code>：&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git worktree add ../my-project-auth -b feature-auth
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git worktree add ../my-project-ui -b feature-ui
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>验证：&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git worktree list
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>
&lt;ol start="2">
&lt;li>配置环境
复制配置文件（如 &lt;code>.env&lt;/code>）并设置不同端口以避免冲突：&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">cp .env ../my-project-auth/.env
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cp .env ../my-project-ui/.env
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>my-project-auth/.env&lt;/code>：&lt;code>PORT=3000&lt;/code>&lt;/li>
&lt;li>&lt;code>my-project-ui/.env&lt;/code>：&lt;code>PORT=3001&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>安装依赖：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> ../my-project-auth &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> npm install
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> ../my-project-ui &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> npm install
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>
&lt;ol start="3">
&lt;li>启动 Claude Code&lt;/li>
&lt;/ol>
&lt;p>在每个 Worktree 中运行 Claude Code：&lt;/p>
&lt;ul>
&lt;li>终端 1：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> ../my-project-auth
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude &lt;span class="s2">&amp;#34;Implement JWT-based authentication with refresh tokens&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>终端 2：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> ../my-project-ui
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude &lt;span class="s2">&amp;#34;Redesign UI with responsive Tailwind CSS layout&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;ol start="4">
&lt;li>提交和合并
提交代码：&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> ../my_search-project-auth
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git add .
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git commit -m &lt;span class="s2">&amp;#34;Add JWT authentication&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> ../my-project-ui
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git add .
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git commit -m &lt;span class="s2">&amp;#34;Update UI with Tailwind CSS&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>合并到主分支：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> ../my-project
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git checkout main
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git merge feature-auth
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git merge feature-ui
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>
&lt;ol start="5">
&lt;li>清理
删除 Worktree 和分支：&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git worktree remove ../my-project-auth
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git worktree remove ../my-project-ui
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git branch -d feature-auth
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git branch -d feature-ui
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>
&lt;p>优化技巧&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>自动化脚本&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="k">function&lt;/span> wt&lt;span class="o">()&lt;/span> &lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> git worktree add ../worktrees/&lt;span class="nv">$1&lt;/span> -b &lt;span class="nv">$1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">cd&lt;/span> ../worktrees/&lt;span class="nv">$1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> cp ../my-project/.env .env
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> npm install
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> claude
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>使用：&lt;code>wt feature-auth&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>任务文件&lt;/strong>：在每个 Worktree 创建 &lt;code>CLAUDE.md&lt;/code> 记录指令，调用 &lt;code>claude @CLAUDE.md&lt;/code>。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>IDE 集成&lt;/strong>：使用 VS Code 的 Git Worktrees 扩展切换 Worktree。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>注意事项&lt;/p>
&lt;/li>
&lt;li>
&lt;p>确保不同 Worktree 使用不同分支。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>为数据库任务配置独立实例（如 Docker 容器）。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>监控资源使用，避免并行任务过多导致过载。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;ol start="3">
&lt;li>The Permission System Hack That Changes Everything&lt;/li>
&lt;/ol>
&lt;p>Tips: &lt;code>--dangerously-skip-permissions&lt;/code> 这个参数只能执行在非root用户下执行，因此如果只有root用户需要创建一个账户&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo useradd -m -s /bin/bash username &lt;span class="c1"># 创建新用户&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">su - username &lt;span class="c1"># 切换用户&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl --resolve raw.githubusercontent.com:443:185.199.108.133 -fsSL https://raw.githubusercontent.com/mklement0/n-install/stable/bin/n-install &lt;span class="p">|&lt;/span> bash -s &lt;span class="m">22&lt;/span> &lt;span class="c1"># 安装 node 其中--resolve表示自动去找可用的地址， 也可以安装nvm&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">npm install -g https://gaccode.com/claudecode/install --registry&lt;span class="o">=&lt;/span>https://registry.npmmirror.com &lt;span class="c1"># 安装gac站的claude code&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude --dangerously-skip-permissions
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>在容器中开发时&amp;ndash;dangerously-skip-permissions指令让它自动执行&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 如果用户是root&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">IS_SANDBOX&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="m">1&lt;/span> claude --dangerously-skip-permissions
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 如果用户不是root&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">claude --dangerously-skip-permissions
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="claude-code-plugin-系统终极指南-最新版------20260228">Claude Code Plugin 系统终极指南 (最新版) &amp;mdash; 20260228
&lt;/h3>&lt;p>Claude Code 是 Anthropic 官方推出的 AI 编码助手（CLI + IDE 集成）。其 &lt;strong>Plugin（插件）系统&lt;/strong> 是最强大的扩展机制，允许通过 &lt;strong>Skills、Agents、Hooks、MCP Servers、LSP&lt;/strong> 等组件扩展功能，实现一键安装、版本管理和团队共享，告别手动复制 &lt;code>.claude/&lt;/code> 配置。&lt;/p>
&lt;p>本教程结合官方文档与最佳实践，覆盖 &lt;strong>环境搭建 → 发现使用 → 管理维护 → 开发创建&lt;/strong> 全流程。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>一、环境搭建：安装 Claude Code&lt;/strong>&lt;/p>
&lt;p>在使用插件前，需确保已安装最新版本的 Claude Code。&lt;/p>
&lt;p>&lt;strong>1.1 安装 CLI 工具&lt;/strong>&lt;/p>
&lt;p>适用于 macOS / Linux / WSL（推荐）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -fsSL https://claude.ai/install.sh &lt;span class="p">|&lt;/span> bash
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>适用于 Windows PowerShell：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">irm https://claude.ai/install.ps1 &lt;span class="p">|&lt;/span> iex
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>验证安装 (建议版本 1.0.33+)：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">claude --version
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>首次运行 &lt;code>claude&lt;/code> 需登录 Anthropic 账号（需要 Claude Pro / Team / Max 订阅）。&lt;/em>&lt;/p>
&lt;p>&lt;strong>1.2 安装 IDE 插件（可选但推荐）&lt;/strong>&lt;/p>
&lt;p>插件系统在 IDE 中同样可用，且体验更佳：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>VS Code&lt;/strong>：扩展市场搜索 &lt;strong>&amp;ldquo;Claude Code&amp;rdquo;&lt;/strong> 安装官方插件。&lt;/li>
&lt;li>&lt;strong>JetBrains&lt;/strong>：市场搜索 &lt;strong>&amp;ldquo;Claude Code [Beta]&amp;rdquo;&lt;/strong> 安装。&lt;/li>
&lt;li>&lt;em>效果&lt;/em>：编辑器右侧可直接聊天，支持 Diff 查看、自动打开文件，所有插件命令无缝集成。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;strong>二、核心概念：插件由什么组成？&lt;/strong>&lt;/p>
&lt;p>插件不仅仅是命令，它是一个功能包。理解组件有助于你选择合适的插件。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>组件&lt;/th>
&lt;th>功能描述&lt;/th>
&lt;th>调用方式&lt;/th>
&lt;th>典型用途&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>Skills / Commands&lt;/strong>&lt;/td>
&lt;td>自定义 slash 命令&lt;/td>
&lt;td>&lt;code>/plugin-name:command&lt;/code>&lt;/td>
&lt;td>快捷操作（如 &lt;code>/commit:commit&lt;/code>）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Agents&lt;/strong>&lt;/td>
&lt;td>专用子代理&lt;/td>
&lt;td>&lt;code>/agents&lt;/code> 列表中选择&lt;/td>
&lt;td>特定任务专家（如安全审查员）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Hooks&lt;/strong>&lt;/td>
&lt;td>自动化钩子&lt;/td>
&lt;td>自动触发&lt;/td>
&lt;td>文件保存后自动 lint/format&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>MCP Servers&lt;/strong>&lt;/td>
&lt;td>连接外部工具&lt;/td>
&lt;td>自动出现在工具列表&lt;/td>
&lt;td>连接 GitHub、Slack、数据库&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>LSP Servers&lt;/strong>&lt;/td>
&lt;td>代码智能服务&lt;/td>
&lt;td>自动启用&lt;/td>
&lt;td>代码跳转、类型提示、诊断&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>&lt;strong>注意&lt;/strong>：安装插件后，命令通常带有 &lt;strong>命名空间&lt;/strong> 以避免冲突，例如 &lt;code>/commit-commands:commit&lt;/code>。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>&lt;strong>三、用户指南：发现与安装插件&lt;/strong>&lt;/p>
&lt;p>&lt;strong>3.1 打开插件管理器&lt;/strong>&lt;/p>
&lt;p>在 Claude Code 会话中输入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">/plugin
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>进入交互式界面，包含四个 Tab：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>发现 (Discover)&lt;/strong>：浏览所有可用插件。&lt;/li>
&lt;li>&lt;strong>已安装 (Installed)&lt;/strong>：管理已装插件。&lt;/li>
&lt;li>&lt;strong>市场 (Marketplaces)&lt;/strong>：添加/删除插件源。&lt;/li>
&lt;li>&lt;strong>错误 (Errors)&lt;/strong>：查看加载失败详情。&lt;/li>
&lt;/ul>
&lt;p>&lt;em>操作提示：使用 &lt;code>Tab&lt;/code> 切换选项卡，方向键选择，&lt;code>Enter&lt;/code> 确认。&lt;/em>&lt;/p>
&lt;p>&lt;strong>3.2 添加插件市场&lt;/strong>&lt;/p>
&lt;p>官方市场 &lt;code>claude-plugins-official&lt;/code> 通常自动可用。如需添加第三方市场：&lt;/p>
&lt;p>添加 Anthropic 演示市场：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">/plugin marketplace add anthropics/claude-code
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>添加 GitHub 仓库市场：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">/plugin marketplace add owner/repo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>添加本地路径：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">/plugin marketplace add ./my-marketplace
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>3.3 安装插件（三种方式）&lt;/strong>&lt;/p>
&lt;p>&lt;strong>方式 A：交互式（最简单）&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>输入 &lt;code>/plugin&lt;/code> → 切换到“发现”Tab。&lt;/li>
&lt;li>找到插件 → &lt;code>Enter&lt;/code>。&lt;/li>
&lt;li>&lt;strong>选择安装范围&lt;/strong>（关键步骤）：
&lt;ul>
&lt;li>&lt;code>user&lt;/code>：仅当前用户，所有项目可用（默认）。&lt;/li>
&lt;li>&lt;code>project&lt;/code>：写入 &lt;code>.claude/settings.json&lt;/code>，团队共享（推荐）。&lt;/li>
&lt;li>&lt;code>local&lt;/code>：写入 &lt;code>.claude/settings.local.json&lt;/code>，不提交 git。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>方式 B：命令行一键安装&lt;/strong>&lt;/p>
&lt;p>官方市场安装：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">/plugin install typescript-lsp@claude-plugins-official
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>指定范围安装（团队共享）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">claude plugin install pr-review-toolkit@anthropics-claude-code --scope project
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>方式 C：热门插件推荐&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>插件名&lt;/th>
&lt;th>功能&lt;/th>
&lt;th>推荐场景&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>typescript-lsp&lt;/code> / &lt;code>pyright-lsp&lt;/code>&lt;/td>
&lt;td>代码智能&lt;/td>
&lt;td>所有开发项目&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>commit-commands&lt;/code>&lt;/td>
&lt;td>智能提交&lt;/td>
&lt;td>Git 工作流&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pr-review-toolkit&lt;/code>&lt;/td>
&lt;td>PR 审查&lt;/td>
&lt;td>代码合并前&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>security-guidance&lt;/code>&lt;/td>
&lt;td>安全审查&lt;/td>
&lt;td>敏感代码处理&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>context7&lt;/code>&lt;/td>
&lt;td>API 文档&lt;/td>
&lt;td>查阅最新文档&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;p>&lt;strong>四、管理插件：更新与维护&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>操作&lt;/th>
&lt;th>命令 / 路径&lt;/th>
&lt;th>说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>查看已安装&lt;/strong>&lt;/td>
&lt;td>&lt;code>/plugin&lt;/code> → 已安装 Tab&lt;/td>
&lt;td>查看版本与状态&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>禁用/启用&lt;/strong>&lt;/td>
&lt;td>&lt;code>/plugin disable &amp;lt;name&amp;gt;&lt;/code>&lt;/td>
&lt;td>暂时停用但不卸载&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>卸载&lt;/strong>&lt;/td>
&lt;td>&lt;code>/plugin uninstall &amp;lt;name&amp;gt;&lt;/code>&lt;/td>
&lt;td>完全移除&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>更新单个&lt;/strong>&lt;/td>
&lt;td>&lt;code>/plugin update &amp;lt;name&amp;gt;&lt;/code>&lt;/td>
&lt;td>升级到最新版本&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>更新市场&lt;/strong>&lt;/td>
&lt;td>&lt;code>/plugin marketplace update &amp;lt;name&amp;gt;&lt;/code>&lt;/td>
&lt;td>刷新插件列表&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>配置文件&lt;/strong>&lt;/td>
&lt;td>&lt;code>.claude/settings.json&lt;/code>&lt;/td>
&lt;td>手动编辑项目级配置&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>自动更新配置&lt;/strong>&lt;/p>
&lt;p>可通过环境变量控制更新行为：&lt;/p>
&lt;p>禁用所有自动更新：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">DISABLE_AUTOUPDATER&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>仅保留插件更新，禁用 CLI 更新：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">FORCE_AUTOUPDATE_PLUGINS&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>&lt;strong>五、开发者指南：创建自己的插件&lt;/strong>&lt;/p>
&lt;p>&lt;strong>5.1 标准目录结构&lt;/strong>&lt;/p>
&lt;p>创建一个文件夹，结构如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">my-awesome-plugin/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── .claude-plugin/ # 元数据目录
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── plugin.json # 插件清单（必需）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── skills/ # 技能命令
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── greet/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── SKILL.md
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── agents/ # 子代理
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── security-reviewer.md
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── hooks/ # 钩子配置
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── hooks.json
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── .mcp.json # MCP 服务器定义
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── .lsp.json # LSP 服务器配置
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── scripts/ # 可执行脚本
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── format.sh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>5.2 编写 plugin.json&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;my-awesome-plugin&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;version&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;1.0.0&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;我的第一个插件&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;author&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nt">&amp;#34;name&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Your Name&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nt">&amp;#34;email&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;you@example.com&amp;#34;&lt;/span> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;license&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;MIT&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;skills&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;./skills/&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;agents&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;./agents/&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;hooks&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;./hooks/hooks.json&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>5.3 创建 Skill 示例&lt;/strong>&lt;/p>
&lt;p>&lt;code>skills/greet/SKILL.md&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">---
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">description: 向用户问好
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">---
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">你好！我是你的专属助手，今天有什么可以帮你的吗？
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>5.4 配置 Hooks 示例&lt;/strong>&lt;/p>
&lt;p>&lt;code>hooks/hooks.json&lt;/code> (实现保存后自动格式化):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;hooks&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;PostToolUse&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;matcher&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Write|Edit&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;hooks&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;command&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;command&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;${CLAUDE_PLUGIN_ROOT}/scripts/format.sh&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>5.5 本地调试与测试&lt;/strong>&lt;/p>
&lt;p>无需发布即可测试插件：&lt;/p>
&lt;p>指定插件目录启动：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">claude --plugin-dir ./my-awesome-plugin
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>调试模式查看加载详情：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">claude --debug
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>进入会话后输入 &lt;code>/my-awesome-plugin:greet&lt;/code> 验证功能。&lt;/p>
&lt;p>&lt;strong>5.6 发布到市场&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>将代码上传至 GitHub 公共仓库。&lt;/li>
&lt;li>创建 &lt;code>marketplace.json&lt;/code> 索引文件。&lt;/li>
&lt;li>通过 Claude.ai 设置 → Plugins → Submit 提交至官方市场，或分享给团队直接使用 Git URL 安装。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;p>&lt;strong>六、故障排除 (Troubleshooting)&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>问题现象&lt;/th>
&lt;th>可能原因&lt;/th>
&lt;th>解决方案&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>/plugin&lt;/code> 命令不识别&lt;/td>
&lt;td>版本过低&lt;/td>
&lt;td>升级 CLI：`curl -fsSL &lt;a class="link" href="https://claude.ai/install.sh" target="_blank" rel="noopener"
>https://claude.ai/install.sh&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>插件未加载&lt;/td>
&lt;td>缓存问题&lt;/td>
&lt;td>删除缓存：&lt;code>rm -rf ~/.claude/plugins/cache&lt;/code> 后重启&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>命令未出现&lt;/td>
&lt;td>目录结构错误&lt;/td>
&lt;td>确保 &lt;code>skills/&lt;/code> 或 &lt;code>commands/&lt;/code> 在插件根目录&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hooks 未触发&lt;/td>
&lt;td>脚本无权限&lt;/td>
&lt;td>运行 &lt;code>chmod +x scripts/*.sh&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>LSP 报错&lt;/td>
&lt;td>语言服务器缺失&lt;/td>
&lt;td>安装对应二进制（如 &lt;code>npm i -g typescript-language-server&lt;/code>）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>安装失败&lt;/td>
&lt;td>网络/权限问题&lt;/td>
&lt;td>检查 GitHub 仓库是否公开，或切换网络环境&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>命令冲突&lt;/td>
&lt;td>命名空间重复&lt;/td>
&lt;td>使用完整命名空间 &lt;code>/plugin-name:cmd&lt;/code> 调用&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;p>&lt;strong>七、最佳实践与建议&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>&lt;strong>版本管理&lt;/strong>：遵循语义版本控制（MAJOR.MINOR.PATCH），便于回滚。&lt;/li>
&lt;li>&lt;strong>团队共享&lt;/strong>：使用 &lt;code>--scope project&lt;/code> 将插件配置提交到 &lt;code>.claude/settings.json&lt;/code>，确保团队成员环境一致。&lt;/li>
&lt;li>&lt;strong>安全优先&lt;/strong>：安装第三方插件前，检查其 &lt;code>plugin.json&lt;/code> 和脚本内容，确认来源可信。&lt;/li>
&lt;li>&lt;strong>路径规范&lt;/strong>：插件内部所有路径必须相对于插件根目录，以 &lt;code>./&lt;/code> 开头，或使用 &lt;code>${CLAUDE_PLUGIN_ROOT}&lt;/code> 变量。&lt;/li>
&lt;li>&lt;strong>结合规范&lt;/strong>：在项目根目录放置 &lt;code>CLAUDE.md&lt;/code> 定义编码规范，插件会自动遵守。&lt;/li>
&lt;/ol>
&lt;hr>
&lt;p>&lt;strong>八、官方资源&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>官方文档 (中文)&lt;/strong>： &lt;code>https://code.claude.com/docs/zh-CN/&lt;/code>&lt;/li>
&lt;li>&lt;strong>插件开发文档&lt;/strong>： &lt;code>https://code.claude.com/docs/zh-CN/plugins&lt;/code>&lt;/li>
&lt;li>&lt;strong>官方演示仓库&lt;/strong>： &lt;code>https://github.com/anthropics/claude-code&lt;/code>&lt;/li>
&lt;li>&lt;strong>社区讨论&lt;/strong>：Claude 官方 Discord 频道&lt;/li>
&lt;/ul>
&lt;p>掌握插件系统后，Claude Code 的生产力将显著提升。通过团队统一安装核心插件（如 LSP、Commit、Security），可实现「一键 PR 审查 + 自动部署 + 安全扫描」的现代化开发全流程。&lt;/p>
&lt;h2 id="codex">codex
&lt;/h2>&lt;p>&lt;a class="link" href="https://developers.openai.com/codex/cli/" target="_blank" rel="noopener"
>codex 官方&lt;/a>&lt;/p>
&lt;h3 id="安装和配置">安装和配置
&lt;/h3>&lt;p>｀安装｀&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">npm i -g @openai/codex
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>｀配置｀&lt;/p>
&lt;p>&lt;strong>设置默认agent full模式&lt;/strong>&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/claude-codecodexgemini-cli/images/index/image-9.png"
width="1178"
height="802"
srcset="https://www.zata.cc/p/claude-codecodexgemini-cli/images/index/image-9_hu13838779268736693344.png 480w, https://www.zata.cc/p/claude-codecodexgemini-cli/images/index/image-9_hu5599974891247110815.png 1024w"
loading="lazy"
alt="windows 下的agent full"
class="gallery-image"
data-flex-grow="146"
data-flex-basis="352px"
>&lt;/p>
&lt;p>&lt;strong>设置$env:PYTHONUTF8 = &amp;ldquo;1&amp;rdquo;&lt;/strong>&lt;/p>
&lt;p>不设置的话会出现乱码,因为python代码默认是utf8但是命令行默认是ascii&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/claude-codecodexgemini-cli/images/index/image-10.png"
width="611"
height="185"
srcset="https://www.zata.cc/p/claude-codecodexgemini-cli/images/index/image-10_hu8509914624282466064.png 480w, https://www.zata.cc/p/claude-codecodexgemini-cli/images/index/image-10_hu973013388776446223.png 1024w"
loading="lazy"
alt="pythonutf8"
class="gallery-image"
data-flex-grow="330"
data-flex-basis="792px"
>&lt;/p></description></item><item><title>cursor使用教程</title><link>https://www.zata.cc/p/cursor%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</link><pubDate>Wed, 04 Jun 2025 10:16:56 +0800</pubDate><guid>https://www.zata.cc/p/cursor%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</guid><description>&lt;img src="https://www.zata.cc/p/cursor%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/images/index/index.png" alt="Featured image of post cursor使用教程" />&lt;p>参考：&lt;/p>
&lt;p>&lt;a class="link" href="https://finance.sina.com.cn/tech/csj/2025-06-05/doc-ineyyvph3632905.shtml" target="_blank" rel="noopener"
>cursor1.0版本来袭&lt;/a>
&lt;a class="link" href="https://dev-life.online/blog/cursor" target="_blank" rel="noopener"
>cursor二次大项目开发&lt;/a>&lt;/p>
&lt;h2 id="agent开发技巧">agent开发技巧
&lt;/h2>&lt;p>1.先让AI熟悉代码，生成项目文档&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">请分析整个代码库，生成一份项目结构文档，包括：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 项目架构概览
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 主要目录结构及其职责
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 关键模块的依赖关系图
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 核心类和接口的功能说明
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">5. 数据流向图
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">6. API接口清单
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">7. 常见的代码模式和约定
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>2.一个chat只开发一个功能&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">我现在要开发一个新功能：给商品添加批量导入功能。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">以下是项目的结构文档，请先阅读以熟悉代码库：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[粘贴前面生成的项目文档]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>功能开发后总结成Guide文档&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">请总结一下我们刚才添加新接口的过程，生成一个&amp;#34;如何添加新接口&amp;#34;的指南文档，包括：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 需要修改哪些文件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 代码结构和注意事项
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 测试方法
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 潜在的坑和解决方案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="4">
&lt;li>持续维护和更新文档&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">我们刚才解决了权限系统的几个问题，请将以下内容更新到权限系统指南文档中：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 修改角色权限时需要同步更新缓存
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 权限检查顺序应该是：特殊权限 -&amp;gt; 角色权限 -&amp;gt; 默认权限
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 前端权限组件需要处理异步加载状态
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Tavily-搜索引擎api</title><link>https://www.zata.cc/p/tavily-%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8Eapi/</link><pubDate>Tue, 20 May 2025 15:34:00 +0800</pubDate><guid>https://www.zata.cc/p/tavily-%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8Eapi/</guid><description>&lt;img src="https://www.zata.cc/p/tavily-%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8Eapi/images/index/index.png" alt="Featured image of post Tavily-搜索引擎api" />&lt;h1 id="tavily-api-python-sdk-详细使用教程">Tavily API Python SDK 详细使用教程
&lt;/h1>&lt;p>Tavily API 旨在为 AI 应用和开发者提供一个强大、快速且相关的搜索引擎。它可以直接返回针对查询的总结性答案，并附带相关的源信息。本教程将引导你完成 Tavily Python SDK 的安装和使用。&lt;/p>
&lt;h2 id="目录">目录
&lt;/h2>&lt;ol>
&lt;li>&lt;a class="link" href="#1-%e7%ae%80%e4%bb%8b" >简介&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="#2-%e5%ae%89%e8%a3%85" >安装&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="#3-api-%e5%af%86%e9%92%a5%e8%ae%be%e7%bd%ae" >API 密钥设置&lt;/a>
&lt;ul>
&lt;li>&lt;a class="link" href="#%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f%e6%8e%a8%e8%8d%90" >环境变量（推荐）&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="#%e7%9b%b4%e6%8e%a5%e5%9c%a8%e4%bb%a3%e7%a0%81%e4%b8%ad%e8%ae%be%e7%bd%ae" >直接在代码中设置&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a class="link" href="#4-%e5%9f%ba%e6%9c%ac%e6%90%9c%e7%b4%a2" >基本搜索&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="#5-search-%e6%96%b9%e6%b3%95%e8%af%a6%e8%a7%a3" >&lt;code>search&lt;/code> 方法详解&lt;/a>
&lt;ul>
&lt;li>&lt;a class="link" href="#%e5%b8%b8%e7%94%a8%e5%8f%82%e6%95%b0" >常用参数&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="#%e7%a4%ba%e4%be%8b%e4%bd%bf%e7%94%a8%e4%b8%8d%e5%90%8c%e5%8f%82%e6%95%b0" >示例：使用不同参数&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a class="link" href="#6-%e7%90%86%e8%a7%a3%e8%bf%94%e5%9b%9e%e7%bb%93%e6%9e%9c" >理解返回结果&lt;/a>
&lt;ul>
&lt;li>&lt;a class="link" href="#%e6%95%b4%e4%bd%93%e5%93%8d%e5%ba%94%e7%bb%93%e6%9e%84" >整体响应结构&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="#%e7%bb%93%e6%9e%9c%e6%9d%a1%e7%9b%ae-results-%e7%bb%93%e6%9e%84" >结果条目 (&lt;code>results&lt;/code>) 结构&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a class="link" href="#7-%e9%ab%98%e7%ba%a7%e6%90%9c%e7%b4%a2%e5%8a%9f%e8%83%bd-%e5%9f%ba%e4%ba%8e-search-%e6%96%b9%e6%b3%95%e7%9a%84%e5%8f%82%e6%95%b0%e7%bb%84%e5%90%88" >高级搜索功能 (基于 &lt;code>search&lt;/code> 方法的参数组合)&lt;/a>
&lt;ul>
&lt;li>&lt;a class="link" href="#%e8%8e%b7%e5%8f%96%e7%89%b9%e5%ae%9a%e4%b8%bb%e9%a2%98%e4%bf%a1%e6%81%af" >获取特定主题信息&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="#%e7%bb%93%e5%90%88-include_domains-%e5%92%8c-exclude_domains" >结合 &lt;code>include_domains&lt;/code> 和 &lt;code>exclude_domains&lt;/code>&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a class="link" href="#8-%e9%94%99%e8%af%af%e5%a4%84%e7%90%86" >错误处理&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="#9-%e5%ae%8c%e6%95%b4%e7%a4%ba%e4%be%8b%e4%bb%a3%e7%a0%81" >完整示例代码&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="#10-%e4%bd%bf%e7%94%a8%e6%8a%80%e5%b7%a7" >使用技巧&lt;/a>&lt;/li>
&lt;/ol>
&lt;h2 id="1-简介">1. 简介
&lt;/h2>&lt;p>Tavily API 通过其 Python SDK &lt;code>tavily-python&lt;/code>，可以轻松集成到你的 Python 项目中。它不仅返回传统的搜索结果列表，还能提供一个由 AI 生成的、针对用户查询的直接答案，这对于构建 RAG (Retrieval Augmented Generation) 系统或需要快速获取信息的 AI 应用非常有用。&lt;/p>
&lt;h2 id="2-安装">2. 安装
&lt;/h2>&lt;p>你可以使用 pip 来安装 Tavily Python SDK：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install tavily-python
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="3-api-密钥设置">3. API 密钥设置
&lt;/h2>&lt;p>要使用 Tavily API，你需要一个 API 密钥。你可以从 &lt;a class="link" href="https://tavily.com/" target="_blank" rel="noopener"
>Tavily AI 官网&lt;/a> 注册并获取。&lt;/p>
&lt;p>获取密钥后，有两种主要方式进行设置：&lt;/p>
&lt;h3 id="环境变量推荐">环境变量（推荐）
&lt;/h3>&lt;p>将 API 密钥设置为环境变量 &lt;code>TAVILY_API_KEY&lt;/code>。SDK 会自动检测并使用它。&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Linux/macOS&lt;/strong>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">TAVILY_API_KEY&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;你的API密钥&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>为了永久生效，可以将这行代码添加到你的 &lt;code>.bashrc&lt;/code>, &lt;code>.zshrc&lt;/code> 或其他 shell 配置文件中。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Windows&lt;/strong>:
在系统环境变量中添加一个新变量，名称为 &lt;code>TAVILY_API_KEY&lt;/code>，值为你的 API 密钥。或者在 PowerShell 中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$env:TAVILY_API_KEY&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;你的API密钥&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;h3 id="直接在代码中设置">直接在代码中设置
&lt;/h3>&lt;p>你也可以在初始化 &lt;code>TavilyClient&lt;/code> 时直接传入 API 密钥：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">tavily&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">TavilyClient&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">tavily_client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">TavilyClient&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">api_key&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;你的API密钥&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果同时设置了环境变量并显式传入密钥，则代码中显式传入的密钥会优先使用。&lt;/p>
&lt;h2 id="4-基本搜索">4. 基本搜索
&lt;/h2>&lt;p>进行一次基本搜索非常简单：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">tavily&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">TavilyClient&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 假设 TAVILY_API_KEY 环境变量已设置&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 如果没有设置环境变量，则使用: client = TavilyClient(api_key=&amp;#34;YOUR_API_KEY&amp;#34;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">TavilyClient&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;2024年人工智能的最新进展是什么？&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 打印总结性答案 (如果请求并获得)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="s2">&amp;#34;answer&amp;#34;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">response&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;answer&amp;#34;&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;总结性回答:&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;answer&amp;#34;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;-&amp;#34;&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 打印搜索结果&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="s2">&amp;#34;results&amp;#34;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">response&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;results&amp;#34;&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">搜索结果:&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;results&amp;#34;&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;标题: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;title&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;链接: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;url&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;内容摘要: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;content&amp;#39;&lt;/span>&lt;span class="p">][:&lt;/span>&lt;span class="mi">200&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 打印内容的前200个字符&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;-&amp;#34;&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mi">20&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;搜索过程中发生错误: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="5-search-方法详解">5. &lt;code>search&lt;/code> 方法详解
&lt;/h2>&lt;p>&lt;code>TavilyClient.search()&lt;/code> 是核心方法，它接受多个参数来定制你的搜索请求。&lt;/p>
&lt;h3 id="常用参数">常用参数
&lt;/h3>&lt;ul>
&lt;li>&lt;code>query&lt;/code> (str, 必需): 你的搜索查询语句。&lt;/li>
&lt;li>&lt;code>search_depth&lt;/code> (str, 可选): 搜索深度。
&lt;ul>
&lt;li>&lt;code>&amp;quot;basic&amp;quot;&lt;/code>: 速度更快，结果可能不那么全面。适用于需要快速获取初步信息的场景。（默认值）&lt;/li>
&lt;li>&lt;code>&amp;quot;advanced&amp;quot;&lt;/code>: 进行更深入的搜索，可能会检索更多信息并进行更复杂的分析，结果更全面，但耗时和消耗的信用点数可能更多。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>include_answer&lt;/code> (bool, 可选): 是否在结果中包含一个由 AI 生成的总结性答案。默认为 &lt;code>False&lt;/code>（但通常建议设为 &lt;code>True&lt;/code> 以充分利用 Tavily 的特性）。&lt;/li>
&lt;li>&lt;code>include_raw_content&lt;/code> (bool, 可选): 是否在每个搜索结果中包含原始的、未经处理的网页文本内容。默认为 &lt;code>False&lt;/code>。如果为 &lt;code>True&lt;/code>，结果中的 &lt;code>raw_content&lt;/code> 字段将被填充。&lt;/li>
&lt;li>&lt;code>max_results&lt;/code> (int, 可选): 返回的最大搜索结果数量。默认通常是 5 个左右。你可以根据需要调整。&lt;/li>
&lt;li>&lt;code>time_range&lt;/code> （[none,&amp;lsquo;day&amp;rsquo;,&amp;lsquo;week&amp;rsquo;,&amp;lsquo;month&amp;rsquo;,&amp;lsquo;year&amp;rsquo;],可选），默认是none&lt;/li>
&lt;li>&lt;code>include_domains&lt;/code> (list[str], 可选): 一个域名列表。Tavily 会尝试优先从这些域名中查找结果。例如：&lt;code>[&amp;quot;wikipedia.org&amp;quot;, &amp;quot;github.com&amp;quot;]&lt;/code>。&lt;/li>
&lt;li>&lt;code>exclude_domains&lt;/code> (list[str], 可选): 一个域名列表。Tavily 会尝试排除这些域名中的结果。例如：&lt;code>[&amp;quot;pinterest.com&amp;quot;]&lt;/code>。&lt;/li>
&lt;li>&lt;code>topic&lt;/code> (str, 可选): 指定搜索的主题领域，帮助Tavily更好地聚焦结果。可选值包括 (但不限于，具体请参考Tavily官方文档是否有更新)：
&lt;ul>
&lt;li>&lt;code>&amp;quot;general&amp;quot;&lt;/code> (默认)&lt;/li>
&lt;li>&lt;code>&amp;quot;news&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>&amp;quot;finance&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>&amp;quot;tech&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>&amp;quot;academic&amp;quot;&lt;/code> (或 &lt;code>&amp;quot;research_paper&amp;quot;&lt;/code>) - 尤其适合查找学术论文&lt;/li>
&lt;li>&lt;code>&amp;quot;code&amp;quot;&lt;/code> - 专注于代码相关的结果&lt;/li>
&lt;li>&lt;em>注意&lt;/em>：&lt;code>topic&lt;/code> 的具体可用值和效果可能会随 API 更新而变化，请查阅最新的 Tavily 文档。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="示例使用不同参数">示例：使用不同参数
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">tavily&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">TavilyClient&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">TavilyClient&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="c1"># 假设API密钥已通过环境变量设置&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 示例 1: 高级搜索，包含答案和原始内容，限定结果数量&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response_advanced&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">query&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;什么是量子计算及其潜在应用？&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">search_depth&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;advanced&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">include_answer&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">include_raw_content&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_results&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">--- 高级搜索示例 ---&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">response_advanced&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;answer&amp;#34;&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;AI 回答: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">response_advanced&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;answer&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">res&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">response_advanced&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;results&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[]):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; 标题: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;title&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; 链接: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;url&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;raw_content&amp;#34;&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; 原始内容片段: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;raw_content&amp;#39;&lt;/span>&lt;span class="p">][:&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 截取前100字符&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 示例 2: 搜索特定主题（例如，新闻）并指定域名&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response_news&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">query&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;最新的AI芯片发布&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">topic&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;news&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 或 &amp;#34;tech&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">include_domains&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;theverge.com&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;techcrunch.com&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_results&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">include_answer&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">--- 新闻主题与域名限定搜索示例 ---&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">response_news&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;answer&amp;#34;&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;AI 回答: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">response_news&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;answer&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">res&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">response_news&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;results&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[]):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; 标题: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;title&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; 链接: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;url&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;发生错误: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="6-理解返回结果">6. 理解返回结果
&lt;/h2>&lt;p>Tavily API 的 &lt;code>search&lt;/code> 方法返回一个 JSON 对象 (在 Python SDK 中是字典)。&lt;/p>
&lt;h3 id="整体响应结构">整体响应结构
&lt;/h3>&lt;p>一个典型的响应字典可能包含以下键：&lt;/p>
&lt;ul>
&lt;li>&lt;code>query&lt;/code> (str): 你原始的搜索查询。&lt;/li>
&lt;li>&lt;code>answer&lt;/code> (str, 可选): 如果 &lt;code>include_answer=True&lt;/code> 并且 API 能够生成一个总结性答案，这里会包含该答案。&lt;/li>
&lt;li>&lt;code>results&lt;/code> (list[dict]): 一个包含搜索结果条目的列表。每个条目都是一个字典。&lt;/li>
&lt;li>&lt;code>images&lt;/code> (list[str], 可选): 如果搜索与图片相关且Tavily找到图片，可能会包含图片URL列表 (较少见于主要文本搜索场景，更多特定于图片搜索功能，如果Tavily支持)。&lt;/li>
&lt;li>&lt;code>response_time&lt;/code> (float, 可选): API 处理请求所用的时间（秒）。&lt;/li>
&lt;li>&lt;code>error&lt;/code> (str, 可选): 如果发生错误，这里可能包含错误信息。&lt;/li>
&lt;/ul>
&lt;h3 id="结果条目-results-结构">结果条目 (&lt;code>results&lt;/code>) 结构
&lt;/h3>&lt;p>&lt;code>results&lt;/code> 列表中的每个字典代表一个搜索结果，通常包含：&lt;/p>
&lt;ul>
&lt;li>&lt;code>title&lt;/code> (str): 搜索结果的标题。&lt;/li>
&lt;li>&lt;code>url&lt;/code> (str): 结果的来源 URL。&lt;/li>
&lt;li>&lt;code>content&lt;/code> (str): Tavily 提取或生成的与查询相关的该页面的内容摘要或片段。这是非常有用的字段，通常比传统的搜索引擎片段更丰富。&lt;/li>
&lt;li>&lt;code>score&lt;/code> (float, 可选): 一个表示结果与查询相关性的分数。分数越高，相关性越强。&lt;/li>
&lt;li>&lt;code>raw_content&lt;/code> (str, 可选): 如果请求了 &lt;code>include_raw_content=True&lt;/code> 并且 Tavily 成功提取，这里会包含来自源 URL 的原始（或接近原始）文本内容。&lt;/li>
&lt;/ul>
&lt;h2 id="7-高级搜索功能-基于-search-方法的参数组合">7. 高级搜索功能 (基于 &lt;code>search&lt;/code> 方法的参数组合)
&lt;/h2>&lt;p>通过组合 &lt;code>search&lt;/code> 方法的不同参数，可以实现更高级的搜索策略。&lt;/p>
&lt;h3 id="获取特定主题信息">获取特定主题信息
&lt;/h3>&lt;p>使用 &lt;code>topic&lt;/code> 参数可以帮助Tavily更好地理解你的意图并返回更相关的结果。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">query&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;最新的Python异步编程库有哪些？&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">topic&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;code&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 或者 &amp;#34;tech&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">include_answer&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_results&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 处理 response...&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="结合-include_domains-和-exclude_domains">结合 &lt;code>include_domains&lt;/code> 和 &lt;code>exclude_domains&lt;/code>
&lt;/h3>&lt;p>这对于从特定权威来源获取信息或排除已知低质量来源非常有用。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">query&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;气候变化对农业的影响 site:gov OR site:edu&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 也可以在query中使用高级搜索操作符&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">search_depth&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;advanced&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">include_domains&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;nasa.gov&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;epa.gov&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;nature.com&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="c1"># 进一步强调优先域名&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">exclude_domains&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;personalblog.com&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="c1"># 排除不想要的域名&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">include_answer&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_results&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 处理 response...&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;em>注意&lt;/em>: &lt;code>site:&lt;/code> 操作符在 &lt;code>query&lt;/code> 字符串中是许多搜索引擎支持的标准语法，Tavily 也可能支持。与 &lt;code>include_domains&lt;/code> 结合使用可以增强效果。&lt;/p>
&lt;h2 id="8-错误处理">8. 错误处理
&lt;/h2>&lt;p>在使用 API 时，进行适当的错误处理非常重要。Tavily SDK 可能会因为网络问题、无效的 API 密钥、请求超限等原因抛出异常。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">tavily&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">TavilyClient&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">tavily.errors&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">TavilyApiError&lt;/span> &lt;span class="c1"># 可以捕获特定的Tavily错误&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">TavilyClient&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;一个可能会失败的查询&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># ...处理响应...&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">except&lt;/span> &lt;span class="n">TavilyApiError&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Tavily API 错误: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 例如，处理API密钥无效、超出配额等特定错误&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">except&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">exceptions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">RequestException&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="c1"># requests库是底层依赖&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;网络请求错误: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;发生了未知错误: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="9-完整示例代码">9. 完整示例代码
&lt;/h2>&lt;p>下面是一个结合了多个特性的完整示例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">tavily&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">TavilyClient&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">tavily.errors&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">TavilyApiError&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">json&lt;/span> &lt;span class="c1"># 用于美化打印JSON&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">perform_tavily_search&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">query_text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">num_results&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">depth&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;basic&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">include_ans&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">include_raw&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">False&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 执行 Tavily 搜索并打印结果。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 推荐从环境变量获取 API 密钥&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># api_key = os.getenv(&amp;#34;TAVILY_API_KEY&amp;#34;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># if not api_key:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># print(&amp;#34;错误: TAVILY_API_KEY 环境变量未设置。&amp;#34;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># return&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># client = TavilyClient(api_key=api_key)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 或者，如果你在脚本开头设置了全局的 client 实例：&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">client&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">TavilyClient&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="c1"># 确保API密钥已通过某种方式提供&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">正在搜索 (深度: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">depth&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, 结果数: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">num_results&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">): &amp;#39;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">query_text&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#39;&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">response_data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">client&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">query&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">query_text&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">search_depth&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">depth&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">include_answer&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">include_ans&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">include_raw_content&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">include_raw&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">max_results&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">num_results&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">--- API 响应 (JSON 格式) ---&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">response_data&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">indent&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ensure_ascii&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">False&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1"># 美化打印&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">response_data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;answer&amp;#34;&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">--- 总结性回答 ---&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">response_data&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;answer&amp;#34;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">--- 搜索结果 (&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">response_data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;results&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[]))&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> 条) ---&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">enumerate&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">response_data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;results&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">[])):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">结果 &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">:&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; 标题: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;title&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;N/A&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; URL: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;url&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;N/A&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; Tavily 内容摘要:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;content&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;N/A&amp;#39;&lt;/span>&lt;span class="p">)[:&lt;/span>&lt;span class="mi">300&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 摘要的前300字符&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;raw_content&amp;#34;&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; 原始页面内容 (片段):&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2"> &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;raw_content&amp;#39;&lt;/span>&lt;span class="p">][:&lt;/span>&lt;span class="mi">200&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">...&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 原始内容的前200字符&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; 相关性分数: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;score&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;N/A&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="s2">&amp;#34;=&amp;#34;&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">50&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="n">TavilyApiError&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Tavily API 错误: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;执行搜索时发生意外错误: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 确保你已经设置了 TAVILY_API_KEY 环境变量，或者在 TavilyClient() 中直接提供&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 例如: TavilyClient(api_key=&amp;#34;YOUR_TAVILY_API_KEY&amp;#34;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">getenv&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;TAVILY_API_KEY&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="s2">&amp;#34;YOUR_TAVILY_API_KEY&amp;#34;&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;YOUR_TAVILY_API_KEY&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="c1"># 检查是否已设置&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;请设置 TAVILY_API_KEY 环境变量或在代码中直接提供 API 密钥。&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">perform_tavily_search&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">query_text&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Python在数据科学中的应用&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_results&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">depth&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;basic&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">include_ans&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">perform_tavily_search&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">query_text&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;解释一下Transformer模型的工作原理&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_results&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">depth&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;advanced&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">include_ans&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">include_raw&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span> &lt;span class="c1"># 请求原始文本内容&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">perform_tavily_search&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">query_text&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;最新发布的宇宙学研究论文&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">num_results&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">topic&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;academic&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 尝试使用主题参数&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">depth&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;advanced&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">include_ans&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="10-使用技巧">10. 使用技巧
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>明确的查询&lt;/strong>: 查询语句越明确，Tavily 返回的结果就越相关。&lt;/li>
&lt;li>&lt;strong>利用 &lt;code>search_depth&lt;/code>&lt;/strong>: 对于快速概览，&lt;code>&amp;quot;basic&amp;quot;&lt;/code> 可能足够；对于需要深入信息的研究，&lt;code>&amp;quot;advanced&amp;quot;&lt;/code> 更佳。&lt;/li>
&lt;li>&lt;strong>&lt;code>include_answer&lt;/code>&lt;/strong>: 这个参数是 Tavily 的核心优势之一，尽量使用它来获取直接的答案。&lt;/li>
&lt;li>&lt;strong>&lt;code>include_raw_content&lt;/code> 与自定义抓取&lt;/strong>: 如果 &lt;code>include_raw_content=True&lt;/code> 能满足需求，可以减少你自己编写网页抓取逻辑的需要。但如果需要非常特定的元素或有复杂的网站结构，你可能仍需要结合你自己的抓取工具（如教程开头提到的 &lt;code>get_page_content&lt;/code> 函数）。&lt;/li>
&lt;li>&lt;strong>迭代和优化&lt;/strong>: 根据返回结果调整你的查询和参数，以获得最佳效果。&lt;/li>
&lt;li>&lt;strong>查阅官方文档&lt;/strong>: API 和 SDK 可能会更新，定期查阅 &lt;a class="link" href="https://www.google.com/search?q=https://docs.tavily.com/docs/python-sdk/introduction" target="_blank" rel="noopener"
>Tavily 官方文档&lt;/a> 以获取最新信息、参数和最佳实践。&lt;/li>
&lt;li>&lt;strong>管理信用点数&lt;/strong>: 注意不同类型的查询（特别是 &lt;code>search_depth=&amp;quot;advanced&amp;quot;&lt;/code> 或请求大量结果）可能会消耗不同的信用点数。&lt;/li>
&lt;/ul>
&lt;p>希望这篇教程能帮助你有效地使用 Tavily API Python SDK！&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>tmux简易使用</title><link>https://www.zata.cc/p/tmux%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/</link><pubDate>Fri, 09 May 2025 11:32:28 +0800</pubDate><guid>https://www.zata.cc/p/tmux%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/</guid><description>&lt;img src="https://www.zata.cc/p/tmux%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/index.png" alt="Featured image of post tmux简易使用" />&lt;h2 id="安装">安装
&lt;/h2>&lt;h3 id="macos">macOS
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 用 Homebrew（推荐）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">brew install tmux
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 用 MacPorts&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo port install tmux
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="ubuntu--debian">Ubuntu / Debian
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo apt update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install tmux
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>Ubuntu 自带的 tmux 版本通常较老（1.8），功能受限。需要新版（如 3.x 的 true color 支持等）可以加 PPA：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo add-apt-repository ppa:tmux-stable/ppa
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install tmux
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/blockquote>
&lt;h3 id="windows">Windows
&lt;/h3>&lt;p>Windows 原生没有 tmux，常见方案：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>WSL（推荐）&lt;/strong>：在 WSL（Ubuntu 等发行版）里 &lt;code>sudo apt install tmux&lt;/code>，然后通过 Windows Terminal 使用。&lt;/li>
&lt;li>&lt;strong>MSYS2&lt;/strong>：自带包管理器：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pacman -S tmux
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>不愿用 Linux 子系统的话，可考虑 Windows Terminal 自带的 panes/tabs 作为替代。&lt;/li>
&lt;/ul>
&lt;h3 id="验证安装">验证安装
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">tmux -V
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出形如 &lt;code>tmux 3.4&lt;/code> 即安装成功。&lt;/p>
&lt;hr>
&lt;h2 id="什么是-tmux">什么是 tmux
&lt;/h2>&lt;p>tmux（Terminal Multiplexer）是一个终端复用器。它允许你在一个终端窗口里运行多个会话（session），每个会话里又能打开多个窗口（window）和窗格（pane）。最实用的好处是：&lt;strong>关闭 SSH 连接或终端窗口后，tmux 会话里的程序仍在后台运行，下次可以原样恢复&lt;/strong>。&lt;/p>
&lt;h2 id="为什么用-tmux">为什么用 tmux
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>会话持久化&lt;/strong>：远程服务器上跑长任务，断开 SSH 也不会中断。&lt;/li>
&lt;li>&lt;strong>一屏多用&lt;/strong>：把屏幕拆成多个窗格，同时看日志、跑测试、编辑代码。&lt;/li>
&lt;li>&lt;strong>环境快速恢复&lt;/strong>：一套窗口/窗格布局保存后，下次一键还原。&lt;/li>
&lt;li>&lt;strong>协作/演示&lt;/strong>：多人 attach 到同一会话，方便结对调试。&lt;/li>
&lt;/ul>
&lt;h2 id="常用命令速查">常用命令速查
&lt;/h2>&lt;p>最常用的几条命令，记住它们就能应付日常 80% 的场景：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建并进入会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux new -s mysession
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 列出所有会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux ls
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 重新进入会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux attach -t mysession
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 临时退出会话（后台运行）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 快捷键：Ctrl-b 松开后按 d&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 重命名当前会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux rename-session 新名字
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 重命名指定会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux rename-session -t 旧名字 新名字
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 彻底关闭某个会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux kill-session -t mysession
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>快捷键速记：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>快捷键&lt;/th>
&lt;th>作用&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Ctrl-b d&lt;/code>&lt;/td>
&lt;td>退出会话（ detach，程序继续在后台跑）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl-b $&lt;/code>&lt;/td>
&lt;td>重命名当前会话&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl-b c&lt;/code>&lt;/td>
&lt;td>新建窗口&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl-b n&lt;/code> / &lt;code>Ctrl-b p&lt;/code>&lt;/td>
&lt;td>下一个 / 上一个窗口&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl-b %&lt;/code>&lt;/td>
&lt;td>垂直分屏&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl-b &amp;quot;&lt;/code>&lt;/td>
&lt;td>水平分屏&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl-b o&lt;/code>&lt;/td>
&lt;td>切换到下一个窗格&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl-b x&lt;/code>&lt;/td>
&lt;td>关闭当前窗格&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="基础概念">基础概念
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>概念&lt;/th>
&lt;th>说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>会话（session）&lt;/td>
&lt;td>最高级容器，通常对应一个完整的工作场景，例如“前端开发”“服务器运维”。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>窗口（window）&lt;/td>
&lt;td>会话内的标签页，类似浏览器标签。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>窗格（pane）&lt;/td>
&lt;td>窗口内的分屏区域，一个窗口可分成多个窗格。&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>默认**前缀键（prefix）**是 &lt;code>Ctrl-b&lt;/code>，所有快捷键都要先按 prefix，松开后按功能键。&lt;/p>
&lt;h2 id="会话管理">会话管理
&lt;/h2>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建无名称会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建带名称的会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux new -s mysession
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 在创建时直接执行命令（命令结束会话不关闭）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux new -s build -d &lt;span class="s2">&amp;#34;npm run build&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 列出所有会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux ls
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 附加到已有会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux attach -t mysession
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 简写&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux a -t mysession
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 从外部重命名会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux rename-session -t oldname newname
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 分离当前会话（后台运行，不关闭）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 快捷键：prefix + d&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux detach
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 杀死指定会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux kill-session -t mysession
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 杀死所有会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux kill-server
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="会话快捷键">会话快捷键
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>快捷键&lt;/th>
&lt;th>作用&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>prefix d&lt;/code>&lt;/td>
&lt;td>分离当前会话&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix $&lt;/code>&lt;/td>
&lt;td>重命名当前会话&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix s&lt;/code>&lt;/td>
&lt;td>列出所有会话，用方向键选择切换&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix (&lt;/code>&lt;/td>
&lt;td>切换到上一个会话&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix )&lt;/code>&lt;/td>
&lt;td>切换到下一个会话&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="窗口管理">窗口管理
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>快捷键&lt;/th>
&lt;th>作用&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>prefix c&lt;/code>&lt;/td>
&lt;td>新建窗口&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix ,&lt;/code>&lt;/td>
&lt;td>重命名当前窗口&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix n&lt;/code>&lt;/td>
&lt;td>切换到下一窗口&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix p&lt;/code>&lt;/td>
&lt;td>切换到上一窗口&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix 0~9&lt;/code>&lt;/td>
&lt;td>切换到对应编号窗口&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix w&lt;/code>&lt;/td>
&lt;td>可视化选择窗口&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix &amp;amp;&lt;/code>&lt;/td>
&lt;td>关闭当前窗口&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix .&lt;/code>&lt;/td>
&lt;td>修改当前窗口编号&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>命令行操作：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建窗口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux new-window -t mysession -n &lt;span class="s2">&amp;#34;logs&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 关闭窗口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux kill-window -t mysession:1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="窗格管理">窗格管理
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>快捷键&lt;/th>
&lt;th>作用&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>prefix %&lt;/code>&lt;/td>
&lt;td>垂直分割窗格&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix &amp;quot;&lt;/code>&lt;/td>
&lt;td>水平分割窗格&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix o&lt;/code>&lt;/td>
&lt;td>切换到下一个窗格&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix 方向键&lt;/code>&lt;/td>
&lt;td>切换到对应方向窗格&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix x&lt;/code>&lt;/td>
&lt;td>关闭当前窗格&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix z&lt;/code>&lt;/td>
&lt;td>最大化/还原当前窗格&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix 空格&lt;/code>&lt;/td>
&lt;td>切换窗格布局&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix {&lt;/code> / &lt;code>prefix }&lt;/code>&lt;/td>
&lt;td>移动当前窗格位置&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix !&lt;/code>&lt;/td>
&lt;td>把当前窗格拆成独立窗口&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>调整窗格大小：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>快捷键&lt;/th>
&lt;th>作用&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>prefix Ctrl+方向键&lt;/code>&lt;/td>
&lt;td>以 1 格为单位调整&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix Alt+方向键&lt;/code>&lt;/td>
&lt;td>以 5 格为单位调整&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="复制模式">复制模式
&lt;/h2>&lt;p>tmux 自带复制/滚动模式，方便查看历史输出。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>快捷键&lt;/th>
&lt;th>作用&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>prefix [&lt;/code>&lt;/td>
&lt;td>进入复制模式&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix ]&lt;/code>&lt;/td>
&lt;td>粘贴缓冲区内容&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix =&lt;/code>&lt;/td>
&lt;td>列出粘贴历史&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>复制模式下常用操作：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>按键&lt;/th>
&lt;th>作用&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Ctrl-c&lt;/code> / &lt;code>q&lt;/code>&lt;/td>
&lt;td>退出复制模式&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl-f&lt;/code> / &lt;code>Ctrl-b&lt;/code>&lt;/td>
&lt;td>向下/向上翻页&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>/&lt;/code>&lt;/td>
&lt;td>向下搜索&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>?&lt;/code>&lt;/td>
&lt;td>向上搜索&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>v&lt;/code>&lt;/td>
&lt;td>开始选区（vi 模式下）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>y&lt;/code>&lt;/td>
&lt;td>复制选区（vi 模式下）&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>让 tmux 使用 vi 风格键位：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ~/.tmux.conf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">setw -g mode-keys vi
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="常用配置">常用配置
&lt;/h2>&lt;p>创建或编辑 &lt;code>~/.tmux.conf&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 重新加载配置的快捷键&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">bind&lt;/span> r source-file ~/.tmux.conf &lt;span class="se">\;&lt;/span> display-message &lt;span class="s2">&amp;#34;Config reloaded!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 启用鼠标支持（滚轮、拖拽调整窗格、点击选择窗格）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g mouse on
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 把前缀键改成 Ctrl-a（更接近 GNU Screen 习惯）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">unbind C-b
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g prefix C-a
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">bind&lt;/span> C-a send-prefix
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 使用 vi 风格复制模式&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">setw -g mode-keys vi
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 窗口编号从 1 开始&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g base-index &lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">setw -g pane-base-index &lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 重新编号窗口（删除中间窗口后自动补齐）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g renumber-windows on
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 状态栏显示时间&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g status-right &lt;span class="s1">&amp;#39;%Y-%m-%d %H:%M&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 窗格边框颜色&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g pane-border-style &lt;span class="nv">fg&lt;/span>&lt;span class="o">=&lt;/span>colour240
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g pane-active-border-style &lt;span class="nv">fg&lt;/span>&lt;span class="o">=&lt;/span>colour33
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>配置修改后，可以在 tmux 里按 &lt;code>prefix r&lt;/code> 重新加载，或执行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">tmux source-file ~/.tmux.conf
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="推荐插件">推荐插件
&lt;/h2>&lt;p>使用 &lt;a class="link" href="https://github.com/tmux-plugins/tpm" target="_blank" rel="noopener"
>Tmux Plugin Manager（TPM）&lt;/a> 管理插件更方便。&lt;/p>
&lt;p>安装 TPM：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在 &lt;code>~/.tmux.conf&lt;/code> 末尾加入：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 插件列表&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g @plugin &lt;span class="s1">&amp;#39;tmux-plugins/tpm&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g @plugin &lt;span class="s1">&amp;#39;tmux-plugins/tmux-sensible&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g @plugin &lt;span class="s1">&amp;#39;tmux-plugins/tmux-resurrect&amp;#39;&lt;/span> &lt;span class="c1"># 保存/恢复会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g @plugin &lt;span class="s1">&amp;#39;tmux-plugins/tmux-continuum&amp;#39;&lt;/span> &lt;span class="c1"># 自动保存&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 初始化 TPM（必须放在文件最后）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">run &lt;span class="s1">&amp;#39;~/.tmux/plugins/tpm/tpm&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>常用插件说明：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>插件&lt;/th>
&lt;th>作用&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>tmux-sensible&lt;/code>&lt;/td>
&lt;td>一组合理的默认配置&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tmux-resurrect&lt;/code>&lt;/td>
&lt;td>保存和恢复会话、窗口、窗格布局及运行程序&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tmux-continuum&lt;/code>&lt;/td>
&lt;td>自动定时保存，开机后自动恢复&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tmux-yank&lt;/code>&lt;/td>
&lt;td>把 tmux 选区复制到系统剪贴板&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tmux-prefix-highlight&lt;/code>&lt;/td>
&lt;td>在状态栏高亮显示前缀键状态&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>安装插件：先按 &lt;code>prefix I&lt;/code>（大写 i）。&lt;/p>
&lt;h2 id="实用工作流示例">实用工作流示例
&lt;/h2>&lt;h3 id="1-远程跑长任务">1. 远程跑长任务
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ssh server
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux new -s training
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 在会话里执行训练脚本&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">python train.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 按 prefix d 分离，关闭 SSH 即可&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>下次恢复：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ssh server
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux attach -t training
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-本地开发多面板">2. 本地开发多面板
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">tmux new -s dev
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后按 &lt;code>prefix %&lt;/code> 把窗口分成左右两部分：左边跑编辑器/服务器，右边跑测试或日志。&lt;/p>
&lt;h3 id="3-快速保存与恢复环境">3. 快速保存与恢复环境
&lt;/h3>&lt;p>安装 &lt;code>tmux-resurrect&lt;/code> 后：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>快捷键&lt;/th>
&lt;th>作用&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>prefix Ctrl-s&lt;/code>&lt;/td>
&lt;td>保存当前环境&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prefix Ctrl-r&lt;/code>&lt;/td>
&lt;td>恢复保存的环境&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="进阶技巧">进阶技巧
&lt;/h2>&lt;h3 id="1-同步输入到所有窗格">1. 同步输入到所有窗格
&lt;/h3>&lt;p>需要在多台机器或同一组窗口里执行相同命令时，可以打开&lt;strong>输入同步&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 在 tmux 命令行执行&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">setw synchronize-panes on
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>快捷键绑定（加入 &lt;code>~/.tmux.conf&lt;/code>）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">bind&lt;/span> S setw synchronize-panes &lt;span class="se">\;&lt;/span> display-message &lt;span class="s2">&amp;#34;Sync panes: #{?synchronize-panes,ON,OFF}&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后按 &lt;code>prefix S&lt;/code> 即可切换同步状态。再次关闭：&lt;code>setw synchronize-panes off&lt;/code>。&lt;/p>
&lt;h3 id="2-用脚本一键搭建开发环境">2. 用脚本一键搭建开发环境
&lt;/h3>&lt;p>把常用布局写成脚本，避免每次手动分屏：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>&lt;span class="c1"># start-dev.sh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">SESSION&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;dev&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux has-session -t &lt;span class="nv">$SESSION&lt;/span> 2&amp;gt;/dev/null
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> &lt;span class="nv">$?&lt;/span> !&lt;span class="o">=&lt;/span> &lt;span class="m">0&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tmux new-session -d -s &lt;span class="nv">$SESSION&lt;/span> -n editor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tmux send-keys -t &lt;span class="nv">$SESSION&lt;/span>:editor &lt;span class="s1">&amp;#39;vim .&amp;#39;&lt;/span> C-m
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tmux split-window -h -t &lt;span class="nv">$SESSION&lt;/span>:editor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tmux send-keys -t &lt;span class="nv">$SESSION&lt;/span>:editor.right &lt;span class="s1">&amp;#39;npm run dev&amp;#39;&lt;/span> C-m
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tmux split-window -v -t &lt;span class="nv">$SESSION&lt;/span>:editor.right
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tmux send-keys -t &lt;span class="nv">$SESSION&lt;/span>:editor.bottom &lt;span class="s1">&amp;#39;git status&amp;#39;&lt;/span> C-m
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux attach -t &lt;span class="nv">$SESSION&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-嵌套-tmux本地--远程">3. 嵌套 tmux（本地 + 远程）
&lt;/h3>&lt;p>如果你本地开了 tmux，SSH 到远程服务器后又开了 tmux，两个 &lt;code>Ctrl-b&lt;/code> 会冲突。常见解决办法：&lt;/p>
&lt;ul>
&lt;li>本地用 &lt;code>Ctrl-b&lt;/code>，远程用 &lt;code>Ctrl-a&lt;/code>：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 远程服务器的 ~/.tmux.conf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g prefix C-a
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">unbind C-b
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">bind&lt;/span> C-a send-prefix
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>或者在本地 tmux 里按 &lt;code>Ctrl-b b&lt;/code>，把 prefix 透传给远程 tmux。&lt;/li>
&lt;/ul>
&lt;h3 id="4-查看并重新连接-detached-的会话">4. 查看并重新连接 detached 的会话
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 列出 detached 的会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux ls
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 如果只有一个 detached 会话，直接 attach&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux attach
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="5-调整颜色与终端兼容">5. 调整颜色与终端兼容
&lt;/h3>&lt;p>如果 vim/neovim 在 tmux 里颜色显示异常，加这几行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ~/.tmux.conf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -g default-terminal &lt;span class="s2">&amp;#34;screen-256color&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">set&lt;/span> -ag terminal-overrides &lt;span class="s2">&amp;#34;,xterm-256color:RGB&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>并确保外部终端也支持 256 色 / true color。&lt;/p>
&lt;h2 id="命令速查表">命令速查表
&lt;/h2>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux new -s &amp;lt;name&amp;gt; &lt;span class="c1"># 新建会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux ls &lt;span class="c1"># 列出会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux attach -t &amp;lt;name&amp;gt; &lt;span class="c1"># 接入会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux detach &lt;span class="c1"># 退出当前会话（后台运行）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux rename-session -t &amp;lt;old&amp;gt; &amp;lt;new&amp;gt; &lt;span class="c1"># 重命名会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux kill-session -t &amp;lt;name&amp;gt; &lt;span class="c1"># 结束会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">tmux kill-server &lt;span class="c1"># 结束所有会话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 窗口（在 tmux 内）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">prefix c &lt;span class="c1"># 新建窗口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">prefix , &lt;span class="c1"># 重命名窗口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">prefix n &lt;span class="c1"># 下一个窗口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">prefix p &lt;span class="c1"># 上一个窗口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">prefix w &lt;span class="c1"># 可视化选择窗口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">prefix 0-9 &lt;span class="c1"># 切换到对应编号窗口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">prefix &lt;span class="p">&amp;amp;&lt;/span> &lt;span class="c1"># 关闭窗口&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 窗格（在 tmux 内）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">prefix % &lt;span class="c1"># 垂直分割&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">prefix &lt;span class="s2">&amp;#34; # 水平分割
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">prefix o # 切换窗格
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">prefix 方向键 # 按方向切换窗格
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">prefix x # 关闭窗格
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">prefix z # 最大化/还原窗格
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">prefix 空格 # 切换窗格布局
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">prefix ! # 把当前窗格拆成独立窗口
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"># 复制模式
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">prefix [ # 进入复制/滚动模式
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">prefix ] # 粘贴
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="常见问题">常见问题
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>问题&lt;/th>
&lt;th>原因 / 解决&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>滚轮不能翻历史&lt;/td>
&lt;td>按 &lt;code>prefix [&lt;/code> 进入复制模式后再滚；或开启 &lt;code>set -g mouse on&lt;/code>。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl-b&lt;/code> 没反应&lt;/td>
&lt;td>先松开 &lt;code>Ctrl-b&lt;/code> 再按功能键；或者 prefix 被改成了 &lt;code>Ctrl-a&lt;/code>。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>中文显示乱码&lt;/td>
&lt;td>检查终端编码为 UTF-8，并在 &lt;code>~/.tmux.conf&lt;/code> 里加 &lt;code>setw -g utf8 on&lt;/code>（较新版本已默认支持）。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>vim 里按 ESC 有延迟&lt;/td>
&lt;td>加 &lt;code>set -sg escape-time 10&lt;/code> 到 &lt;code>~/.tmux.conf&lt;/code>。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>关闭终端后程序被杀死&lt;/td>
&lt;td>确保程序是跑在 tmux 会话里，并且你是按 &lt;code>prefix d&lt;/code> 分离，而不是直接关窗口。&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>状态栏不显示&lt;/td>
&lt;td>确认配置文件没有语法错误，执行 &lt;code>tmux source-file ~/.tmux.conf&lt;/code> 查看报错。&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="小贴士">小贴士
&lt;/h2>&lt;ol>
&lt;li>&lt;strong>先松 prefix 再按功能键&lt;/strong>：例如 &lt;code>Ctrl-b&lt;/code> 松开后按 &lt;code>c&lt;/code>。&lt;/li>
&lt;li>&lt;strong>善用 &lt;code>prefix ?&lt;/code>&lt;/strong>：随时查看所有快捷键列表。&lt;/li>
&lt;li>&lt;strong>调整终端大小后&lt;/strong>，tmux 会自动适配；如果显示异常，可以按 &lt;code>prefix r&lt;/code> 刷新。&lt;/li>
&lt;li>&lt;strong>tmux 默认不共享系统剪贴板&lt;/strong>，需要 &lt;code>tmux-yank&lt;/code> 或配合 &lt;code>xclip&lt;/code>/&lt;code>pbcopy&lt;/code> 等工具。&lt;/li>
&lt;li>&lt;strong>鼠标支持开启后&lt;/strong>，可以像普通终端一样滚屏、拖拽调整窗格大小，适合新手过渡。&lt;/li>
&lt;/ol></description></item><item><title>生成api文档工具的简易使用</title><link>https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/</link><pubDate>Sat, 03 May 2025 10:42:53 +0800</pubDate><guid>https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/</guid><description>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/index.png" alt="Featured image of post 生成api文档工具的简易使用" />&lt;h2 id="api文档的必要性">api文档的必要性
&lt;/h2>&lt;p>虽然我一直在写python项目，也并没有前后端的区别，但是随着项目越变越大，越发感觉没有api文档，对于我的回顾来说是非常麻烦的，因此还是需要一个用于生成api的python插件或者说一个用于书写api文档的在线或离线工具，之前是有用过Sphinx来自动生成api文档，但是感觉存在使用太麻烦的问题，如果是小项目，可能配置都感觉很麻烦，书写格式，似乎有md格式可以使用，但是我还没有去尝试，使用了它默认的格式，头都昏了&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image.png"
width="1013"
height="918"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image_hu16396331019311804839.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image_hu10206413274038761565.png 1024w"
loading="lazy"
alt="如图"
class="gallery-image"
data-flex-grow="110"
data-flex-basis="264px"
>&lt;/p>
&lt;h2 id="那些api文档工具可以使用">那些api文档工具可以使用
&lt;/h2>&lt;p>我只是做了简单的了解，太具体的深度还没有做。&lt;/p>
&lt;ol>
&lt;li>Sphinx 也就是我上面说到了，我只使用了python版本的，感觉并不是特别好用的&lt;/li>
&lt;li>MkDocs 这个是一个比较新的框架，也是比较现代的版本&lt;/li>
&lt;li>fastopenapi 这个是专门用于生成fastapi后端的项目&lt;a class="link" href="https://github.com/mr-fatalyst/fastopenapi" target="_blank" rel="noopener"
>项目地址&lt;/a>&lt;/li>
&lt;/ol>
&lt;h2 id="具体工具使用">具体工具使用
&lt;/h2>&lt;h3 id="sphinx">Sphinx
&lt;/h3>&lt;p>以我的fainigleam项目为例
&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-1.png"
width="960"
height="1032"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-1_hu6351032501117944637.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-1_hu12307142582688572315.png 1024w"
loading="lazy"
alt="faintgleam项目"
class="gallery-image"
data-flex-grow="93"
data-flex-basis="223px"
>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdir docs &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nb">cd&lt;/span> docs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-quickstart &lt;span class="c1"># 第一个选y，后面看着填&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">vim source/conf.py &lt;span class="c1"># 具体怎么改看下面&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">vim source/index.rst &lt;span class="c1"># 具体怎么改看下面&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-apidoc -o ./source ../src
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make html
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol>
&lt;li>创建docs文件夹，并cd进去
&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-2.png"
width="432"
height="31"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-2_hu6894374485765469759.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-2_hu17530737495040045654.png 1024w"
loading="lazy"
alt="创建文件夹"
class="gallery-image"
data-flex-grow="1393"
data-flex-basis="3344px"
>&lt;/li>
&lt;/ol>
&lt;p>2.sphinx-quickstart
&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-3.png"
width="762"
height="709"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-3_hu11256109789496518278.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-3_hu14828200606707051375.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="107"
data-flex-basis="257px"
>&lt;/p>
&lt;p>3.修改 &lt;code>source/conf.py&lt;/code>文件&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># conf.py&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;../../&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1"># 添加项目根目录到路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;../../src/&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1"># 添加src目录到路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#######################################&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">project&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;XXXXX&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">copyright&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;XXXXXX&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">author&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;XXXXX&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">release&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;X.X.X&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#######################################&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">extensions&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.autodoc&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 自动从docstrings生成文档&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.viewcode&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 添加查看源码的链接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.napoleon&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 支持Google风格的文档字符串&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 配置autodoc扩展&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">autodoc_member_order&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;bysource&amp;#39;&lt;/span> &lt;span class="c1"># 按源码顺序记录成员&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">add_module_names&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">False&lt;/span> &lt;span class="c1"># 不在API文档中添加模块名&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">templates_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;_templates&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">exclude_patterns&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">language&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;zh&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_theme&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;sphinx_rtd_theme&amp;#39;&lt;/span> &lt;span class="c1"># 使用ReadTheDocs主题&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_static_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;_static&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-4.png"
width="765"
height="701"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-4_hu12315155760379729029.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-4_hu11131886743594311540.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="109"
data-flex-basis="261px"
>&lt;/p>
&lt;ol start="4">
&lt;li>修改 &lt;code>source/index.rst&lt;/code>文件&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">########################################################&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="gh">fainitgleam documentation&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">=============&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">..&lt;/span> &lt;span class="ow">toctree&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:maxdepth:&lt;/span> &lt;span class="nf">2&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:caption:&lt;/span> &lt;span class="nf">Contents:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>#########################################################&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span># 前面都不变的，就这里增加一个modules&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> modules&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-5.png"
width="758"
height="440"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-5_hu16846302107065695246.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-5_hu6333555567195019507.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="172"
data-flex-basis="413px"
>&lt;/p>
&lt;ol start="5">
&lt;li>
&lt;p>执行&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">sphinx-apidoc -o ./source ../src
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-6.png"
width="770"
height="903"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-6_hu2104631240578414274.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-6_hu268330711024136087.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="85"
data-flex-basis="204px"
>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>make html&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-7.png"
width="767"
height="1404"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-7_hu2564385545487818632.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-7_hu9455714535073148653.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="54"
data-flex-basis="131px"
>&lt;/p>
&lt;p>7.就可以打开静态页面查看了&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-8.png"
width="950"
height="946"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-8_hu10550301209957985571.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-8_hu5016608727676764371.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="241px"
>
&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-9.png"
width="950"
height="946"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-9_hu8490329571251187602.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-9_hu16874039654587338327.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="241px"
>
&lt;img src="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-10.png"
width="950"
height="946"
srcset="https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-10_hu7237164734695653979.png 480w, https://www.zata.cc/p/%E7%94%9F%E6%88%90api%E6%96%87%E6%A1%A3%E5%B7%A5%E5%85%B7%E7%9A%84%E7%AE%80%E6%98%93%E4%BD%BF%E7%94%A8/images/index/image-10_hu9175922789498292873.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="241px"
>&lt;/p>
&lt;h3 id="mkdocs">MkDocs
&lt;/h3>&lt;p>在为Python项目选择一个可以长期使用的文档工具时，我们追求的是&lt;strong>易用性&lt;/strong>、&lt;strong>专业外观&lt;/strong>和&lt;strong>强大功能&lt;/strong>的最佳平衡。综合考量，2025年的最佳选择是 &lt;strong>MkDocs&lt;/strong> 配合 &lt;strong>Material for MkDocs&lt;/strong> 主题及 &lt;strong>mkdocstrings&lt;/strong> 插件。这个组合将成为你未来所有项目的首选。&lt;/p>
&lt;h4 id="为什么是这个组合">为什么是这个组合？
&lt;/h4>&lt;ul>
&lt;li>&lt;strong>现代且极其易用&lt;/strong>：你只需使用最熟悉的 &lt;strong>Markdown&lt;/strong> 语言来编写文档，几乎没有学习成本。通过&lt;code>mkdocs serve&lt;/code>命令即可开启实时预览，大大提升了编写效率和体验。&lt;/li>
&lt;li>&lt;strong>专业且外观精美&lt;/strong>：&lt;strong>Material for MkDocs&lt;/strong> 是一个功能极其强大的主题，能让你用最简单的配置，生成世界级的、响应式的现代化文档网站。内置搜索、深/浅色模式切换、代码高亮等功能一应俱全。&lt;/li>
&lt;li>&lt;strong>功能强大，足以应对未来需求&lt;/strong>：通过 &lt;strong>mkdocstrings&lt;/strong> 插件，它可以直接读取你代码中的文档字符串（docstrings），自动生成清晰、美观的API参考文档，完美解决了API文档的需求。&lt;/li>
&lt;/ul>
&lt;p>简单来说，这个组合让你用最简单的方式，获得专业级的输出，是兼顾了现在与未来的理想选择。&lt;/p>
&lt;h4 id="快速上手指南">快速上手指南
&lt;/h4>&lt;p>只需四步，即可搭建并运行你的专业文档网站。&lt;/p>
&lt;p>&lt;strong>1. 安装必要的库&lt;/strong>&lt;/p>
&lt;p>在你的终端中运行以下命令：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">uv install mkdocs mkdocs-material mkdocstrings-python
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>2. 创建新项目&lt;/strong> （如果还没有软件项目）&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdocs new my-project
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> my-project
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>如果已有软件项目&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建 docs 文件夹，用于存放所有 .md 文档文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir docs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建 mkdocs.yml 配置文件，它将位于项目根目录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">touch mkdocs.yml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建一个首页文档&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">touch docs/index.md
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这会创建一个名为 &lt;code>my-project&lt;/code> 的新目录，包含一个基础的 &lt;code>mkdocs.yml&lt;/code> 配置文件和一个 &lt;code>docs&lt;/code> 目录（用于存放你的Markdown文档）。&lt;/p>
&lt;p>&lt;strong>3. 配置 &lt;code>mkdocs.yml&lt;/code> 文件&lt;/strong>&lt;/p>
&lt;p>这是最关键的一步。用以下内容替换 &lt;code>mkdocs.yml&lt;/code> 文件的全部内容，这是一个包含了主题、API文档生成和中文支持的黄金配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 网站名称&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">site_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;我的项目名称&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">site_description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;项目的简短描述&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># 主题配置&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">theme&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">material&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">language&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">zh&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 设置语言为中文&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">features&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">navigation.tabs&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 导航栏使用标签页&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">navigation.sections&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 左侧导航支持章节收起&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">content.code.copy&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 代码块支持一键复制&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">content.code.annotate&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 支持代码块注释&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">search.suggest&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 搜索时提供建议&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">search.highlight&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 高亮搜索结果&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">palette&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 调色盘，用于实现深/浅色模式切换&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">scheme&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">default&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">toggle&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">icon&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">material/brightness-7&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">切换到深色模式&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">scheme&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">slate&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">toggle&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">icon&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">material/brightness-4&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">切换到浅色模式&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># 插件配置&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">plugins&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">search&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 内置搜索插件&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">mkdocstrings&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># API文档生成插件&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">handlers&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">python&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 指定处理Python代码&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">options&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">show_root_heading&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># 为模块显示一个顶层标题&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># 导航栏配置&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">nav&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">首页&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">index.md&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">API 参考&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">&amp;#39;模块A&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;api/module_a.md&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">&amp;#39;模块B&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;api/module_b.md&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">指南&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">&amp;#39;安装指南&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;guides/installation.md&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>4. 编写内容并运行&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>在 &lt;code>docs/&lt;/code> 目录下创建和编辑你的 &lt;code>.md&lt;/code> 文件。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>例如，在 &lt;code>docs/api/module_a.md&lt;/code> 文件中，你只需写入以下一行代码，&lt;code>mkdocstrings&lt;/code>就会自动为你生成整个模块的API文档：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">::: my_project.module_a
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>(请将 &lt;code>my_project.module_a&lt;/code> 替换为你的实际Python模块路径)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>在项目根目录下运行服务：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdocs serve
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;p>现在，打开浏览器访问 &lt;code>http://127.0.0.1:8000&lt;/code>，即可看到你专业、美观且功能强大的文档网站。&lt;/p>
&lt;h4 id="其他选择何时考虑">其他选择（何时考虑？）
&lt;/h4>&lt;ul>
&lt;li>&lt;strong>Sphinx&lt;/strong>：当你需要为一个极其庞大、复杂的传统开源库（如Python官方文档本身）构建文档，且需要PDF/ePub等多种输出格式时，可以考虑它。但请准备好应对其更陡峭的学习曲线（reStructuredText语法）。&lt;/li>
&lt;li>&lt;strong>pdoc&lt;/strong>：当你的需求&lt;strong>仅仅&lt;/strong>是快速、零配置地从代码生成一个纯API参考页面，而不需要任何额外的教程或指南时，pdoc是一个轻量级的选择。&lt;/li>
&lt;/ul></description></item><item><title>网页内容变化监控项目</title><link>https://www.zata.cc/p/%E7%BD%91%E9%A1%B5%E5%86%85%E5%AE%B9%E5%8F%98%E5%8C%96%E7%9B%91%E6%8E%A7%E9%A1%B9%E7%9B%AE/</link><pubDate>Tue, 22 Apr 2025 22:21:15 +0800</pubDate><guid>https://www.zata.cc/p/%E7%BD%91%E9%A1%B5%E5%86%85%E5%AE%B9%E5%8F%98%E5%8C%96%E7%9B%91%E6%8E%A7%E9%A1%B9%E7%9B%AE/</guid><description>&lt;img src="https://www.zata.cc/p/%E7%BD%91%E9%A1%B5%E5%86%85%E5%AE%B9%E5%8F%98%E5%8C%96%E7%9B%91%E6%8E%A7%E9%A1%B9%E7%9B%AE/images/index/index.png" alt="Featured image of post 网页内容变化监控项目" />&lt;h2 id="项目名--checkchan-dist">项目名： checkchan-dist
&lt;/h2>&lt;p>&lt;img src="https://www.zata.cc/2025-04-22-22-34-57.png"
loading="lazy"
>&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/2025-04-22-22-35-21.png"
loading="lazy"
>&lt;/p></description></item><item><title>Sphinx-快速生成python项目的api文档</title><link>https://www.zata.cc/p/sphinx-%E5%BF%AB%E9%80%9F%E7%94%9F%E6%88%90python%E9%A1%B9%E7%9B%AE%E7%9A%84api%E6%96%87%E6%A1%A3/</link><pubDate>Tue, 18 Mar 2025 00:16:22 +0800</pubDate><guid>https://www.zata.cc/p/sphinx-%E5%BF%AB%E9%80%9F%E7%94%9F%E6%88%90python%E9%A1%B9%E7%9B%AE%E7%9A%84api%E6%96%87%E6%A1%A3/</guid><description>&lt;img src="https://www.zata.cc/p/sphinx-%E5%BF%AB%E9%80%9F%E7%94%9F%E6%88%90python%E9%A1%B9%E7%9B%AE%E7%9A%84api%E6%96%87%E6%A1%A3/images/index/index.png" alt="Featured image of post Sphinx-快速生成python项目的api文档" />&lt;!-- ![alt text](images/index/index.png) -->
&lt;hr>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 初始化一个新的 Sphinx 项目&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-quickstart
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成 HTML 文档&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make html
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 清空构建目录&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make clean
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成 PDF 文档（需要安装 LaTeX）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make latexpdf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成单页 HTML 文档&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make singlehtml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 检查 reStructuredText 格式&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 启动本地服务器预览文档（需安装 sphinx-autobuild）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-autobuild &lt;span class="nb">source&lt;/span> build/html
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 生成 API 文档（需配置 sphinx-apidoc）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-apidoc -o source/ &amp;lt;module_path&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 构建并检查链接有效性&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make linkcheck
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>下面是conf.py文件的参考配置，此外你还需要在index.rst文件的最后一行增加文字即modules&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-py" data-lang="py">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># conf.py &lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;../../&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1"># 添加项目根目录到路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;../../src/&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1"># 添加src目录到路径&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">project&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;fainitgleam&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">copyright&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;2025, zata&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">author&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;zata&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">release&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;1.3.0&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># -- General configuration ---------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">extensions&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.autodoc&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 自动从docstrings生成文档&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.viewcode&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 添加查看源码的链接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.napoleon&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 支持Google风格的文档字符串&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 配置autodoc扩展&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">autodoc_member_order&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;bysource&amp;#39;&lt;/span> &lt;span class="c1"># 按源码顺序记录成员&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">add_module_names&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">False&lt;/span> &lt;span class="c1"># 不在API文档中添加模块名&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">templates_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;_templates&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">exclude_patterns&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">language&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;zh&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_theme&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;sphinx_rtd_theme&amp;#39;&lt;/span> &lt;span class="c1"># 使用ReadTheDocs主题&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_static_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;_static&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="sphinx-使用教程">Sphinx 使用教程
&lt;/h1>&lt;p>Sphinx 是一个功能强大的 Python 文档生成工具，广泛用于生成 Python 项目的技术文档、API 文档以及其他类型的文档。它支持 reStructuredText（reST）格式，并可以输出 HTML、PDF、ePub 等多种格式。本教程将详细介绍如何安装、配置和使用 Sphinx 生成专业文档。&lt;/p>
&lt;hr>
&lt;h2 id="1-安装-sphinx">1. 安装 Sphinx
&lt;/h2>&lt;h3 id="11-前提条件">1.1 前提条件
&lt;/h3>&lt;ul>
&lt;li>确保已安装 Python（建议使用 Python 3.6 或更高版本）。&lt;/li>
&lt;li>安装 &lt;code>pip&lt;/code>，Python 的包管理工具。&lt;/li>
&lt;/ul>
&lt;h3 id="12-安装-sphinx">1.2 安装 Sphinx
&lt;/h3>&lt;p>在终端运行以下命令安装 Sphinx：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install sphinx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="13-验证安装">1.3 验证安装
&lt;/h3>&lt;p>安装完成后，检查 Sphinx 是否正确安装：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sphinx-build --version
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>输出类似 &lt;code>sphinx-build 4.x.x&lt;/code>，表示安装成功。&lt;/p>
&lt;h3 id="14-可选安装主题">1.4 可选：安装主题
&lt;/h3>&lt;p>Sphinx 默认主题较为简单，可以安装更现代化的主题，如 Read the Docs 风格的主题：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install sphinx-rtd-theme
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="2-创建-sphinx-项目">2. 创建 Sphinx 项目
&lt;/h2>&lt;h3 id="21-初始化项目">2.1 初始化项目
&lt;/h3>&lt;ol>
&lt;li>
&lt;p>创建一个项目目录（例如 &lt;code>my-docs&lt;/code>）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdir my-docs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> my-docs
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>运行 &lt;code>sphinx-quickstart&lt;/code> 初始化 Sphinx 项目：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sphinx-quickstart
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>回答交互式问题：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Separate source and build directories&lt;/strong>: 推荐选择 &lt;code>y&lt;/code>，将源文件和构建输出分开。&lt;/li>
&lt;li>&lt;strong>Project name&lt;/strong>: 输入项目名称，例如 &lt;code>My Project&lt;/code>。&lt;/li>
&lt;li>&lt;strong>Author name(s)&lt;/strong>: 输入作者姓名。&lt;/li>
&lt;li>&lt;strong>Project release&lt;/strong>: 输入版本号，例如 &lt;code>1.0&lt;/code>。&lt;/li>
&lt;li>&lt;strong>Language&lt;/strong>: 输入文档语言（默认 &lt;code>en&lt;/code>，中文可输入 &lt;code>zh_CN&lt;/code>）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>完成后，Sphinx 会生成以下文件结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">my-docs/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── build/ # 构建输出目录
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── source/ # 源文件目录
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── conf.py # Sphinx 配置文件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── index.rst # 主文档文件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── _static/ # 静态文件（如 CSS、图片）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── _templates/ # 模板文件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── Makefile # 用于 Linux/Mac 的构建脚本
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── make.bat # 用于 Windows 的构建脚本
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="3-配置-sphinx">3. 配置 Sphinx
&lt;/h2>&lt;h3 id="31-编辑-confpy">3.1 编辑 &lt;code>conf.py&lt;/code>
&lt;/h3>&lt;p>&lt;code>conf.py&lt;/code> 是 Sphinx 的核心配置文件，位于 &lt;code>source/&lt;/code> 目录下。以下是一些常用配置项：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>项目信息&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">project&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;My Project&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">author&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;Your Name&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">release&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;1.0&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>语言设置&lt;/strong>（中文文档）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">language&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;zh_CN&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>主题设置&lt;/strong>（使用 Read the Docs 主题）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_theme&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;sphinx_rtd_theme&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>扩展启用&lt;/strong>：
Sphinx 支持多种扩展，常用扩展包括：&lt;/p>
&lt;ul>
&lt;li>&lt;code>sphinx.ext.autodoc&lt;/code>: 自动生成 Python 代码的 API 文档。&lt;/li>
&lt;li>&lt;code>sphinx.ext.napoleon&lt;/code>: 支持 Google/Numpy 风格的文档字符串。&lt;/li>
&lt;li>&lt;code>sphinx.ext.viewcode&lt;/code>: 显示源代码链接。&lt;/li>
&lt;/ul>
&lt;p>在 &lt;code>conf.py&lt;/code> 中启用扩展：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">extensions&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.autodoc&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.napoleon&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.viewcode&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>静态文件路径&lt;/strong>：
默认情况下，&lt;code>_static&lt;/code> 和 &lt;code>_templates&lt;/code> 路径已配置好，确保不要修改：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_static_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;_static&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;h3 id="32-设置中文支持">3.2 设置中文支持
&lt;/h3>&lt;p>如果文档使用中文，确保 &lt;code>language = 'zh_CN'&lt;/code>，并安装支持中文的主题（如 &lt;code>sphinx-rtd-theme&lt;/code>）。此外，推荐使用 UTF-8 编码保存所有 &lt;code>.rst&lt;/code> 文件。&lt;/p>
&lt;hr>
&lt;h2 id="4-编写文档">4. 编写文档
&lt;/h2>&lt;p>Sphinx 使用 reStructuredText（reST）作为默认标记语言，类似于 Markdown 但更适合技术文档。&lt;/p>
&lt;h3 id="41-编辑-indexrst">4.1 编辑 &lt;code>index.rst&lt;/code>
&lt;/h3>&lt;p>&lt;code>index.rst&lt;/code> 是文档的入口文件。默认内容如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">.. My Project documentation master file
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>&lt;span class="gh">Welcome to My Project&amp;#39;s documentation!&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">=====================================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="p">..&lt;/span> &lt;span class="ow">toctree&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:maxdepth:&lt;/span> &lt;span class="nf">2&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:caption:&lt;/span> &lt;span class="nf">Contents:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="gh">Indices and tables&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">==================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="m">*&lt;/span> &lt;span class="na">:ref:&lt;/span>&lt;span class="nv">`genindex`&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="m">*&lt;/span> &lt;span class="na">:ref:&lt;/span>&lt;span class="nv">`modindex`&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="m">*&lt;/span> &lt;span class="na">:ref:&lt;/span>&lt;span class="nv">`search`&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;strong>标题&lt;/strong>：使用 &lt;code>=&lt;/code>、&lt;code>-&lt;/code>、&lt;code>~&lt;/code> 等符号创建标题层级。&lt;/li>
&lt;li>&lt;strong>目录树（toctree）&lt;/strong>：使用 &lt;code>.. toctree::&lt;/code> 指令添加子页面，例如：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="p">..&lt;/span> &lt;span class="ow">toctree&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:maxdepth:&lt;/span> &lt;span class="nf">2&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:caption:&lt;/span> &lt;span class="nf">Contents:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> intro&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> api&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>这里 &lt;code>intro&lt;/code> 和 &lt;code>api&lt;/code> 对应 &lt;code>intro.rst&lt;/code> 和 &lt;code>api.rst&lt;/code> 文件。&lt;/li>
&lt;/ul>
&lt;h3 id="42-创建新页面">4.2 创建新页面
&lt;/h3>&lt;p>在 &lt;code>source/&lt;/code> 目录下创建新的 &lt;code>.rst&lt;/code> 文件，例如 &lt;code>intro.rst&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="gh">Introduction&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">============&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>This is the introduction to My Project.&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="p">..&lt;/span> &lt;span class="ow">note&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> This is a note directive to highlight important information.&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>将新文件添加到 &lt;code>index.rst&lt;/code> 的 &lt;code>toctree&lt;/code> 中。&lt;/p>
&lt;h3 id="43-常用-rest-语法">4.3 常用 reST 语法
&lt;/h3>&lt;ul>
&lt;li>
&lt;p>&lt;strong>粗体/斜体&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="gs">**bold text**&lt;/span> &lt;span class="ge">*italic text*&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>代码块&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="p">..&lt;/span> &lt;span class="ow">code-block&lt;/span>&lt;span class="p">::&lt;/span> &lt;span class="k">python&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">def&lt;/span> &lt;span class="nf">hello&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Hello, Sphinx!&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>链接&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="s">`Sphinx 官网 &lt;/span>&lt;span class="si">&amp;lt;https://www.sphinx-doc.org&amp;gt;&lt;/span>&lt;span class="s">`_&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>列表&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="m">-&lt;/span> Item 1&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="m">-&lt;/span> Item 2&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> - Subitem&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="5-生成文档">5. 生成文档
&lt;/h2>&lt;h3 id="51-构建-html-文档">5.1 构建 HTML 文档
&lt;/h3>&lt;p>在项目根目录运行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make html
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>输出文件将生成在 &lt;code>build/html/&lt;/code> 目录下。&lt;/li>
&lt;li>打开 &lt;code>build/html/index.html&lt;/code> 查看生成的文档。&lt;/li>
&lt;/ul>
&lt;h3 id="52-清理构建">5.2 清理构建
&lt;/h3>&lt;p>如果需要重新构建，清理旧输出：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make clean
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="53-其他格式">5.3 其他格式
&lt;/h3>&lt;p>Sphinx 支持多种输出格式，例如 PDF（需要安装 &lt;code>latexmk&lt;/code> 和 TeX 环境）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make latexpdf
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="6-自动生成-api-文档">6. 自动生成 API 文档
&lt;/h2>&lt;p>如果你的项目包含 Python 代码，可以使用 &lt;code>sphinx.ext.autodoc&lt;/code> 自动生成 API 文档。&lt;/p>
&lt;h3 id="61-配置-autodoc">6.1 配置 autodoc
&lt;/h3>&lt;p>确保 &lt;code>conf.py&lt;/code> 已启用 &lt;code>sphinx.ext.autodoc&lt;/code> 和 &lt;code>sphinx.ext.napoleon&lt;/code>。&lt;/p>
&lt;h3 id="62-创建-python-模块">6.2 创建 Python 模块
&lt;/h3>&lt;p>假设你的项目有一个 Python 模块 &lt;code>my_module.py&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">greet&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;Greet someone.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> Args:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> name (str): The name of the person to greet.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> Returns:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> str: A greeting message.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Hello, &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="63-生成-api-文档">6.3 生成 API 文档
&lt;/h3>&lt;ol>
&lt;li>
&lt;p>创建 &lt;code>api.rst&lt;/code> 文件：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="gh">API Documentation&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="gh">=================&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="p">..&lt;/span> &lt;span class="ow">automodule&lt;/span>&lt;span class="p">::&lt;/span> my_module&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:members:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:undoc-members:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:show-inheritance:&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>将 &lt;code>api.rst&lt;/code> 添加到 &lt;code>index.rst&lt;/code> 的 &lt;code>toctree&lt;/code>。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>确保 &lt;code>my_module.py&lt;/code> 在 Python 路径中，可以通过修改 &lt;code>conf.py&lt;/code> 添加模块路径：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;../&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>重新构建文档：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make html
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="7-发布文档">7. 发布文档
&lt;/h2>&lt;h3 id="71-本地查看">7.1 本地查看
&lt;/h3>&lt;p>直接打开 &lt;code>build/html/index.html&lt;/code> 查看生成的文档。&lt;/p>
&lt;h3 id="72-托管到-read-the-docs">7.2 托管到 Read the Docs
&lt;/h3>&lt;ol>
&lt;li>
&lt;p>将项目推送到 GitHub/GitLab。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>登录 &lt;a class="link" href="https://readthedocs.org/" target="_blank" rel="noopener"
>Read the Docs&lt;/a>，导入你的项目。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>配置 Read the Docs 自动构建，需在项目根目录添加 &lt;code>.readthedocs.yml&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">2&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">build&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">os&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ubuntu-22.04&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">tools&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">python&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;3.10&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">python&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">install&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">requirements&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">requirements.txt&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>在 &lt;code>requirements.txt&lt;/code> 中列出依赖：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">sphinx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-rtd-theme
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h3 id="73-其他托管方式">7.3 其他托管方式
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>GitHub Pages&lt;/strong>：将 &lt;code>build/html/&lt;/code> 内容部署到 GitHub Pages。&lt;/li>
&lt;li>&lt;strong>Netlify&lt;/strong>：配置 Netlify 自动构建 &lt;code>make html&lt;/code>。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="8-实用技巧">8. 实用技巧
&lt;/h2>&lt;h3 id="81-自定义主题">8.1 自定义主题
&lt;/h3>&lt;p>在 &lt;code>_static/&lt;/code> 目录下添加自定义 CSS 文件，并在 &lt;code>conf.py&lt;/code> 中启用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_static_path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;_static&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">html_css_files&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;custom.css&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="82-使用-markdown">8.2 使用 Markdown
&lt;/h3>&lt;p>如果更习惯 Markdown，可以安装 &lt;code>myst-parser&lt;/code>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install myst-parser
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在 &lt;code>conf.py&lt;/code> 中启用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">extensions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;myst_parser&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后可以使用 &lt;code>.md&lt;/code> 文件代替 &lt;code>.rst&lt;/code>。&lt;/p>
&lt;h3 id="83-自动构建">8.3 自动构建
&lt;/h3>&lt;p>使用 &lt;code>sphinx-autobuild&lt;/code> 实现文档实时预览：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install sphinx-autobuild
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-autobuild source/ build/html/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="9-常见问题">9. 常见问题
&lt;/h2>&lt;ul>
&lt;li>
&lt;p>&lt;strong>Q: 文档没有更新？&lt;/strong>
A: 运行 &lt;code>make clean&lt;/code> 清理旧构建，然后重新运行 &lt;code>make html&lt;/code>。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Q: 中文显示乱码？&lt;/strong>
A: 确保 &lt;code>language = 'zh_CN'&lt;/code>，并使用支持中文的主题。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Q: 模块未找到？&lt;/strong>
A: 检查 &lt;code>sys.path&lt;/code> 是否包含模块路径。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="10-进一步学习">10. 进一步学习
&lt;/h2>&lt;ul>
&lt;li>官方文档：https://www.sphinx-doc.org&lt;/li>
&lt;li>reStructuredText 入门：http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html&lt;/li>
&lt;li>Read the Docs 教程：https://docs.readthedocs.io&lt;/li>
&lt;/ul>
&lt;h2 id="补充使用-sphinx-apidoc-自动生成-api-文档">补充：使用 &lt;code>sphinx-apidoc&lt;/code> 自动生成 API 文档
&lt;/h2>&lt;p>Sphinx 提供了 &lt;code>sphinx-apidoc&lt;/code> 工具，可以自动扫描 Python 项目中的模块、类和函数，生成对应的 reStructuredText（reST）文档框架。以下是详细步骤：&lt;/p>
&lt;hr>
&lt;h3 id="1-确保启用必要扩展">1. 确保启用必要扩展
&lt;/h3>&lt;p>在 &lt;code>source/conf.py&lt;/code> 中确保已启用以下扩展：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">extensions&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.autodoc&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 自动提取文档字符串&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.napoleon&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 支持 Google/Numpy 风格文档字符串&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sphinx.ext.viewcode&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 添加源代码链接&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-项目结构示例">2. 项目结构示例
&lt;/h3>&lt;p>假设你的 Python 项目结构如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">my-docs/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── my_project/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── __init__.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── module1.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── module2/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── __init__.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── submodule.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── source/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── conf.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── index.rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── _static/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── Makefile
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中 &lt;code>module1.py&lt;/code> 包含以下代码：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">greet&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;Greet someone.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> Args:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> name (str): The name of the person to greet.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> Returns:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> str: A greeting message.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Hello, &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="3-运行-sphinx-apidoc">3. 运行 &lt;code>sphinx-apidoc&lt;/code>
&lt;/h3>&lt;p>在项目根目录（&lt;code>my-docs/&lt;/code>）运行以下命令：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sphinx-apidoc -o source/ my_project/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="参数说明">参数说明：
&lt;/h4>&lt;ul>
&lt;li>&lt;code>-o source/&lt;/code>: 指定生成的 &lt;code>.rst&lt;/code> 文件输出到 &lt;code>source/&lt;/code> 目录。&lt;/li>
&lt;li>&lt;code>my_project/&lt;/code>: 要扫描的 Python 模块或包的路径。&lt;/li>
&lt;li>可选参数：
&lt;ul>
&lt;li>&lt;code>-f&lt;/code>: 强制覆盖已存在的 &lt;code>.rst&lt;/code> 文件。&lt;/li>
&lt;li>&lt;code>-M&lt;/code>: 将模块文档放在子模块之前（默认子模块优先）。&lt;/li>
&lt;li>&lt;code>-e&lt;/code>: 为每个模块生成单独的页面。&lt;/li>
&lt;li>&lt;code>--private&lt;/code>: 包含私有成员（以 &lt;code>_&lt;/code> 开头的成员）。&lt;/li>
&lt;li>&lt;code>--no-toc&lt;/code>: 不生成目录树文件（&lt;code>modules.rst&lt;/code>）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>示例命令（强制覆盖并包含私有成员）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sphinx-apidoc -f -e --private -o source/ my_project/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="4-检查生成的文件">4. 检查生成的文件
&lt;/h3>&lt;p>运行后，&lt;code>source/&lt;/code> 目录下会生成类似以下文件：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">source/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── conf.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── index.rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── my_project.rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── my_project.module1.rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── my_project.module2.rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── my_project.module2.submodule.rst
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── modules.rst
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>my_project.rst&lt;/code> 和 &lt;code>modules.rst&lt;/code> 是模块的索引文件。&lt;/li>
&lt;li>每个 &lt;code>.rst&lt;/code> 文件对应一个模块，包含 &lt;code>.. automodule::&lt;/code> 指令，自动引用模块中的文档字符串。&lt;/li>
&lt;/ul>
&lt;h3 id="5-更新-indexrst">5. 更新 &lt;code>index.rst&lt;/code>
&lt;/h3>&lt;p>将生成的模块索引添加到 &lt;code>index.rst&lt;/code> 的 &lt;code>toctree&lt;/code> 中，例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="p">..&lt;/span> &lt;span class="ow">toctree&lt;/span>&lt;span class="p">::&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:maxdepth:&lt;/span> &lt;span class="nf">2&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:caption:&lt;/span> &lt;span class="nf">Contents:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> modules&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> intro&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里 &lt;code>modules&lt;/code> 指向 &lt;code>modules.rst&lt;/code>，它会自动包含所有生成的 API 文档。&lt;/p>
&lt;h3 id="6-配置-python-路径">6. 配置 Python 路径
&lt;/h3>&lt;p>为了让 Sphinx 找到你的 Python 模块，需在 &lt;code>conf.py&lt;/code> 中添加模块路径：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;../my_project&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="7-构建文档">7. 构建文档
&lt;/h3>&lt;p>运行以下命令生成 HTML 文档：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make html
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>打开 &lt;code>build/html/index.html&lt;/code>，你将看到自动生成的 API 文档，包含 &lt;code>module1.py&lt;/code> 中 &lt;code>greet&lt;/code> 函数的文档字符串。&lt;/p>
&lt;hr>
&lt;h3 id="8-实用技巧-1">8. 实用技巧
&lt;/h3>&lt;ul>
&lt;li>
&lt;p>&lt;strong>过滤成员&lt;/strong>：在 &lt;code>.rst&lt;/code> 文件中，可以通过 &lt;code>:members:&lt;/code>、&lt;code>:undoc-members:&lt;/code>、&lt;code>:private-members:&lt;/code> 等控制显示的成员。例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-rst" data-lang="rst">&lt;span class="line">&lt;span class="cl">&lt;span class="p">..&lt;/span> &lt;span class="ow">automodule&lt;/span>&lt;span class="p">::&lt;/span> my_project.module1&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:members:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:private-members:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:undoc-members:&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="nc">:show-inheritance:&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>忽略文件&lt;/strong>：如果不想为某些模块生成文档，可以在 &lt;code>sphinx-apidoc&lt;/code> 命令后添加忽略路径：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sphinx-apidoc -o source/ my_project/ my_project/module2/*
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>自动化脚本&lt;/strong>：将 &lt;code>sphinx-apidoc&lt;/code> 集成到构建流程中，例如在 &lt;code>Makefile&lt;/code> 中添加：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-makefile" data-lang="makefile">&lt;span class="line">&lt;span class="cl">&lt;span class="nf">apidoc&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> sphinx-apidoc -f -o source/ my_project/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后运行 &lt;code>make apidoc &amp;amp;&amp;amp; make html&lt;/code>。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="9-注意事项">9. 注意事项
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>文档字符串&lt;/strong>：确保你的 Python 代码中有清晰的文档字符串（docstring），否则生成的文档会缺少内容。&lt;/li>
&lt;li>&lt;strong>模块路径&lt;/strong>：如果模块未正确导入，检查 &lt;code>sys.path&lt;/code> 配置。&lt;/li>
&lt;li>&lt;strong>更新文档&lt;/strong>：每次修改 Python 代码后，需重新运行 &lt;code>sphinx-apidoc&lt;/code>（加 &lt;code>-f&lt;/code> 覆盖）或手动更新 &lt;code>.rst&lt;/code> 文件。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="10-进一步优化">10. 进一步优化
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>自定义模板&lt;/strong>：在 &lt;code>source/_templates/&lt;/code> 中创建自定义模板，修改 &lt;code>sphinx-apidoc&lt;/code> 生成的 &lt;code>.rst&lt;/code> 文件格式。&lt;/li>
&lt;li>&lt;strong>持续集成&lt;/strong>：在 CI/CD 流程中自动运行 &lt;code>sphinx-apidoc&lt;/code> 和 &lt;code>make html&lt;/code>，确保文档始终与代码同步。&lt;/li>
&lt;/ul>
&lt;p>通过 &lt;code>sphinx-apidoc&lt;/code>，你可以快速为大型 Python 项目生成 API 文档，大大提高效率！&lt;/p>
&lt;h2 id="示例项目一个简单的计算器">示例项目：一个简单的计算器
&lt;/h2>&lt;p>假设我们有一个小项目 &lt;code>calculator&lt;/code>，结构如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">calculator/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── calc.py # 主代码文件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── docs/ # 文档文件夹（稍后创建）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="1-创建项目代码">1. 创建项目代码
&lt;/h3>&lt;p>先在 &lt;code>calculator&lt;/code> 文件夹下创建 &lt;code>calc.py&lt;/code>，内容如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;这是一个简单的计算器模块。&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">add&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;将两个数相加。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 参数:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> a (int): 第一个数
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> b (int): 第二个数
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 返回:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> int: 两数之和
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">subtract&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;将两个数相减。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 参数:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> a (int): 被减数
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> b (int): 减数
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> 返回:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> int: 两数之差
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">b&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这个文件有模块级 docstring 和函数级 docstring，Sphinx 可以利用这些生成文档。&lt;/p>
&lt;hr>
&lt;h3 id="2-设置-sphinx">2. 设置 Sphinx
&lt;/h3>&lt;h4 id="安装-sphinx">安装 Sphinx
&lt;/h4>&lt;p>确保你有 Python 环境，然后在终端运行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install sphinx
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="初始化文档">初始化文档
&lt;/h4>&lt;p>进入 &lt;code>calculator&lt;/code> 文件夹，运行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdir docs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> docs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sphinx-quickstart
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>系统会问你一些问题，按以下方式回答（其他可以默认回车）：&lt;/p>
&lt;ul>
&lt;li>&lt;code>Separate source and build directories (y/n)&lt;/code>：输入 &lt;code>n&lt;/code>（简单起见，放在一起）。&lt;/li>
&lt;li>&lt;code>Project name&lt;/code>：输入 &lt;code>Calculator&lt;/code>。&lt;/li>
&lt;li>&lt;code>Author name(s)&lt;/code>：输入你的名字，比如 &lt;code>张三&lt;/code>。&lt;/li>
&lt;li>&lt;code>Project release&lt;/code>：输入 &lt;code>1.0&lt;/code>。&lt;/li>
&lt;/ul>
&lt;p>完成后，&lt;code>docs&lt;/code> 文件夹会变成这样：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">calculator/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── calc.py
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── docs/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── conf.py # 配置文件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── index.rst # 主文档文件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── Makefile # Linux/Mac 生成工具
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── make.bat # Windows 生成工具
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="3-配置-sphinx-1">3. 配置 Sphinx
&lt;/h3>&lt;h4 id="修改-confpy">修改 &lt;code>conf.py&lt;/code>
&lt;/h4>&lt;p>打开 &lt;code>docs/conf.py&lt;/code>，做两处调整：&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>添加项目路径&lt;/strong>，让 Sphinx 能找到 &lt;code>calc.py&lt;/code>：
在文件顶部添加：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sys&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abspath&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;..&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1"># 指向 calculator 目录&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>启用 &lt;code>autodoc&lt;/code> 扩展&lt;/strong>，支持自动生成代码文档：
找到 &lt;code>extensions&lt;/code> 列表，改成：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">extensions&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;sphinx.ext.autodoc&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h4 id="检查-indexrst">检查 &lt;code>index.rst&lt;/code>
&lt;/h4>&lt;p>默认的 &lt;code>index.rst&lt;/code> 可能是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Welcome to Calculator&amp;#39;s documentation!
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">======================================
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">.. toctree::
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :maxdepth: 2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>暂时不用改，后面会加内容。&lt;/p>
&lt;hr>
&lt;h3 id="4-自动生成代码文档">4. 自动生成代码文档
&lt;/h3>&lt;h4 id="用-sphinx-apidoc">用 &lt;code>sphinx-apidoc&lt;/code>
&lt;/h4>&lt;p>在 &lt;code>docs&lt;/code> 目录下运行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sphinx-apidoc -o . ..
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>-o .&lt;/code>：输出到当前目录（&lt;code>docs&lt;/code>）。&lt;/li>
&lt;li>&lt;code>..&lt;/code>：扫描上级目录（&lt;code>calculator&lt;/code>）。&lt;/li>
&lt;/ul>
&lt;p>这会生成：&lt;/p>
&lt;ul>
&lt;li>&lt;code>modules.rst&lt;/code>：模块总览。&lt;/li>
&lt;li>&lt;code>calc.rst&lt;/code>：针对 &lt;code>calc.py&lt;/code> 的文档。&lt;/li>
&lt;/ul>
&lt;p>看看 &lt;code>calc.rst&lt;/code>，内容大概是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">calc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">====
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">.. automodule:: calc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :members:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :undoc-members:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :show-inheritance:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="整合到-indexrst">整合到 &lt;code>index.rst&lt;/code>
&lt;/h4>&lt;p>编辑 &lt;code>index.rst&lt;/code>，加入模块链接：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Welcome to Calculator&amp;#39;s documentation!
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">======================================
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">这是一个简单的计算器项目，提供加法和减法功能。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">.. toctree::
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :maxdepth: 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> modules
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这里手动加了句介绍文字，&lt;code>modules&lt;/code> 指向自动生成的模块文档。&lt;/p>
&lt;hr>
&lt;h3 id="5-手动添加使用说明">5. 手动添加使用说明
&lt;/h3>&lt;p>新建一个文件 &lt;code>docs/usage.rst&lt;/code>，写点教程：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">使用说明
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">========
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">这是一个计算器的使用方法。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">步骤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">----
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 导入模块：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> .. code-block:: python
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> from calc import add, subtract
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 调用函数：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> .. code-block:: python
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> print(add(3, 5)) # 输出 8
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> print(subtract(10, 2)) # 输出 8
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后在 &lt;code>index.rst&lt;/code> 的 &lt;code>toctree&lt;/code> 里加一行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">.. toctree::
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> :maxdepth: 2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> modules
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> usage
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="6-生成文档">6. 生成文档
&lt;/h3>&lt;p>在 &lt;code>docs&lt;/code> 目录下运行：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make html &lt;span class="c1"># Linux/Mac&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">make.bat html &lt;span class="c1"># Windows&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>完成后，打开 &lt;code>docs/_build/html/index.html&lt;/code>，你会看到：&lt;/p>
&lt;ul>
&lt;li>首页有欢迎文字和目录。&lt;/li>
&lt;li>点击 “modules” -&amp;gt; “calc”，显示 &lt;code>add&lt;/code> 和 &lt;code>subtract&lt;/code> 的自动文档（从 docstring 生成）。&lt;/li>
&lt;li>点击 “使用说明”，显示手动写的教程。&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="结果预览">结果预览
&lt;/h3>&lt;p>网页大概长这样：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>首页&lt;/strong>：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Welcome to Calculator&amp;#39;s documentation!
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">这是一个简单的计算器项目，提供加法和减法功能。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- modules
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- usage
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>&lt;strong>calc 页面&lt;/strong>：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">calc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">这是一个简单的计算器模块。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">add(a, b)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 将两个数相加。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 参数: a (int) - 第一个数, b (int) - 第二个数
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 返回: int - 两数之和
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">subtract(a, b)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 将两个数相减。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>&lt;strong>usage 页面&lt;/strong>：
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">使用说明
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">这是一个计算器的使用方法。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">步骤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1. 导入模块：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> from calc import add, subtract
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 调用函数：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> print(add(3, 5)) # 输出 8
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="总结流程">总结流程
&lt;/h3>&lt;ol>
&lt;li>&lt;strong>写代码+注释&lt;/strong>：&lt;code>calc.py&lt;/code> 里加 docstring。&lt;/li>
&lt;li>&lt;strong>初始化&lt;/strong>：&lt;code>sphinx-quickstart&lt;/code> 创建文档框架。&lt;/li>
&lt;li>&lt;strong>配置&lt;/strong>：改 &lt;code>conf.py&lt;/code> 加路径和扩展。&lt;/li>
&lt;li>&lt;strong>自动生成&lt;/strong>：用 &lt;code>sphinx-apidoc&lt;/code> 提取代码文档。&lt;/li>
&lt;li>&lt;strong>手动补充&lt;/strong>：写 &lt;code>usage.rst&lt;/code> 加说明。&lt;/li>
&lt;li>&lt;strong>生成网页&lt;/strong>：&lt;code>make html&lt;/code>。&lt;/li>
&lt;/ol>
&lt;hr></description></item><item><title>内网文件传输工具LocalSend</title><link>https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/</link><pubDate>Sun, 16 Mar 2025 18:47:30 +0800</pubDate><guid>https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/</guid><description>&lt;img src="https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index.png" alt="Featured image of post 内网文件传输工具LocalSend" />&lt;!-- ![alt text](images/index/index.png) -->
&lt;p>&lt;a class="link" href="https://localsend.org/zh-CN/download" target="_blank" rel="noopener"
>https://localsend.org/zh-CN/download&lt;/a>&lt;/p>
&lt;hr>
&lt;h3 id="下载">下载
&lt;/h3>&lt;p>有很多种下载方法，我这里下载exe&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-1.png"
width="2552"
height="1314"
srcset="https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-1_hu11346364685074249903.png 480w, https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-1_hu13260399658968818973.png 1024w"
loading="lazy"
alt="下载包"
class="gallery-image"
data-flex-grow="194"
data-flex-basis="466px"
>&lt;/p>
&lt;h3 id="传输">传输
&lt;/h3>&lt;h4 id="如果都是连接的wifi">如果都是连接的wifi
&lt;/h4>&lt;p>如果都是连接的都是wifi，那么直接传输即可&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-2.png"
width="884"
height="561"
srcset="https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-2_hu16805482849463778247.png 480w, https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-2_hu420025093406982150.png 1024w"
loading="lazy"
alt="wifi传输"
class="gallery-image"
data-flex-grow="157"
data-flex-basis="378px"
>&lt;/p>
&lt;hr>
&lt;h4 id="如果一个连接的wifi另一个连接的网线">如果一个连接的wifi，另一个连接的网线
&lt;/h4>&lt;ol>
&lt;li>使用链接分享&lt;/li>
&lt;/ol>
&lt;p>那么可能找不到，这个时候发送端选择设置&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-3.png"
width="884"
height="561"
srcset="https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-3_hu14034909208075930998.png 480w, https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-3_hu4546934392299683938.png 1024w"
loading="lazy"
alt="通过连接分享"
class="gallery-image"
data-flex-grow="157"
data-flex-basis="378px"
>
&lt;img src="https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-4.png"
width="884"
height="489"
srcset="https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-4_hu13115601631048358702.png 480w, https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-4_hu7115972249036376718.png 1024w"
loading="lazy"
alt="分享链接"
class="gallery-image"
data-flex-grow="180"
data-flex-basis="433px"
>&lt;/p>
&lt;p>可以看到出来几个链接，一般选择第一个，到另一个电脑上面去&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-5.png"
width="1920"
height="1038"
srcset="https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-5_hu4821500229750622102.png 480w, https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-5_hu3245065590922013888.png 1024w"
loading="lazy"
alt="下载文件"
class="gallery-image"
data-flex-grow="184"
data-flex-basis="443px"
>&lt;/p>
&lt;p>点击文件就能下载了&lt;/p>
&lt;ol start="2">
&lt;li>尝试使用手动输入&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>前提先把双方的vpn关掉&lt;/strong>&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-6.png"
width="588"
height="160"
srcset="https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-6_hu3273758631715800917.png 480w, https://www.zata.cc/p/%E5%86%85%E7%BD%91%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%B7%A5%E5%85%B7localsend/images/index/index-6_hu16291472289363380265.png 1024w"
loading="lazy"
alt="手动的方式"
class="gallery-image"
data-flex-grow="367"
data-flex-basis="882px"
>&lt;/p>
&lt;p>然后可以保存到收藏夹&lt;/p></description></item><item><title>github项目newsnow部署</title><link>https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/</link><pubDate>Thu, 13 Mar 2025 22:25:19 +0800</pubDate><guid>https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/</guid><description>&lt;img src="https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index.png" alt="Featured image of post github项目newsnow部署" />&lt;!-- ![newsnow](images/index/index.png) -->
&lt;div style="position:relative; padding-bottom:75%; width:100%; height:0">
&lt;iframe
src="//player.bilibili.com/player.html?bvid=BV1X8QhY5EB5&amp;page=1&amp;as_wide=1&amp;high_quality=1"
scrolling="no"
border="0"
frameborder="no"
framespacing="0"
allowfullscreen="true"
style="position:absolute; height: 100%; width: 100%;"
>
&lt;/iframe>
&lt;/div>
&lt;h3 id="项目介绍">项目介绍
&lt;/h3>&lt;p>项目地址：&lt;/p>
&lt;p>&lt;a class="link" href="https://github.com/ourongxing/newsnow" target="_blank" rel="noopener"
>https://github.com/ourongxing/newsnow&lt;/a>&lt;/p>
&lt;p>newsnow是一个新闻聚合平台，用户可以关注自己感兴趣的新闻，并查看新闻内容。&lt;/p>
&lt;h3 id="使用docker部署----windows">使用docker部署 &amp;ndash; windows
&lt;/h3>&lt;ol>
&lt;li>安装好docker desktop&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-1.png"
width="1967"
height="1150"
srcset="https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-1_hu7072781025886979097.png 480w, https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-1_hu2017386131933657820.png 1024w"
loading="lazy"
alt="安装docker"
class="gallery-image"
data-flex-grow="171"
data-flex-basis="410px"
>&lt;/p>
&lt;p>具体的部署方式就不介绍了&lt;/p>
&lt;ol start="2">
&lt;li>下载项目文件&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-2.png"
width="2101"
height="1003"
srcset="https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-2_hu8475293142574556179.png 480w, https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-2_hu7344286371713171069.png 1024w"
loading="lazy"
alt="nowsnow项目文件"
class="gallery-image"
data-flex-grow="209"
data-flex-basis="502px"
>&lt;/p>
&lt;ol start="3">
&lt;li>在当前项目下执行docker compose up 命令&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-4.png"
width="1113"
height="626"
srcset="https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-4_hu16845919685824601416.png 480w, https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-4_hu7916407890245337435.png 1024w"
loading="lazy"
alt="docker compose"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="426px"
>
&lt;img src="https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-3.png"
width="1270"
height="720"
srcset="https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-3_hu17621736230753987750.png 480w, https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-3_hu5060506680395702956.png 1024w"
loading="lazy"
alt="docker 容器"
class="gallery-image"
data-flex-grow="176"
data-flex-basis="423px"
>&lt;/p>
&lt;h3 id="使用docker部署----linux服务器">使用docker部署 &amp;ndash; linux服务器
&lt;/h3>&lt;ol>
&lt;li>安装好docker，可以使用1panel或者是宝塔面板&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> sudo bash quick_start.sh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-5.png"
width="2537"
height="1332"
srcset="https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-5_hu14228113472465707693.png 480w, https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-5_hu14783548389634557097.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="190"
data-flex-basis="457px"
>&lt;/p>
&lt;ol start="2">
&lt;li>使用docker编排进行部署&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">version: &lt;span class="s1">&amp;#39;3&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">services:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> newsnow:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> image: ghcr.io/ourongxing/newsnow:latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> container_name: newsnow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> restart: always
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ports:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - &lt;span class="s1">&amp;#39;4444:4444&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> environment:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - &lt;span class="nv">G_CLIENT_ID&lt;/span>&lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - &lt;span class="nv">G_CLIENT_SECRET&lt;/span>&lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - &lt;span class="nv">JWT_SECRET&lt;/span>&lt;span class="o">=&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - &lt;span class="nv">INIT_TABLE&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - &lt;span class="nv">ENABLE_CACHE&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-6.png"
width="2552"
height="1314"
srcset="https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-6_hu5300003235293132266.png 480w, https://www.zata.cc/p/github%E9%A1%B9%E7%9B%AEnewsnow%E9%83%A8%E7%BD%B2/images/index/index-6_hu1446876228063632965.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="194"
data-flex-basis="466px"
>&lt;/p>
&lt;ol start="3">
&lt;li>打开你的ip地址:4444&lt;/li>
&lt;/ol></description></item><item><title>IObit Unlocker解除文件占用</title><link>https://www.zata.cc/p/iobit-unlocker%E8%A7%A3%E9%99%A4%E6%96%87%E4%BB%B6%E5%8D%A0%E7%94%A8/</link><pubDate>Tue, 11 Mar 2025 16:28:53 +0800</pubDate><guid>https://www.zata.cc/p/iobit-unlocker%E8%A7%A3%E9%99%A4%E6%96%87%E4%BB%B6%E5%8D%A0%E7%94%A8/</guid><description>&lt;img src="https://www.zata.cc/p/iobit-unlocker%E8%A7%A3%E9%99%A4%E6%96%87%E4%BB%B6%E5%8D%A0%E7%94%A8/images/index/index.png" alt="Featured image of post IObit Unlocker解除文件占用" />&lt;p>&lt;img src="https://www.zata.cc/p/iobit-unlocker%E8%A7%A3%E9%99%A4%E6%96%87%E4%BB%B6%E5%8D%A0%E7%94%A8/images/index/index.png"
width="560"
height="293"
srcset="https://www.zata.cc/p/iobit-unlocker%E8%A7%A3%E9%99%A4%E6%96%87%E4%BB%B6%E5%8D%A0%E7%94%A8/images/index/index_hu7538065937115619758.png 480w, https://www.zata.cc/p/iobit-unlocker%E8%A7%A3%E9%99%A4%E6%96%87%E4%BB%B6%E5%8D%A0%E7%94%A8/images/index/index_hu16319668015275843819.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="191"
data-flex-basis="458px"
>&lt;/p>
&lt;p>下载地址：&lt;/p>
&lt;p>&lt;a class="link" href="https://www.iobit.com/en/iobit-unlocker.php" target="_blank" rel="noopener"
>https://www.iobit.com/en/iobit-unlocker.php&lt;/a>&lt;/p></description></item><item><title>postman</title><link>https://www.zata.cc/p/postman/</link><pubDate>Wed, 05 Mar 2025 10:00:47 +0800</pubDate><guid>https://www.zata.cc/p/postman/</guid><description>&lt;img src="https://www.zata.cc/p/postman/images/index/index.png" alt="Featured image of post postman" />&lt;!-- ![alt text](images/index/index.png) -->
&lt;h3 id="postman介绍">postman介绍
&lt;/h3>&lt;p>如今，Postman的开发者已超过1000万(来自官网)，选择使用Postman的原因如下:&lt;br>
简单易用 - 要使用Postman，你只需登录自己的账户，只要在电脑上安装了Postman应用程序，就可以方便地随时随地访问文件。
使用集合 - Postman允许用户为他们的API调用创建集合。每个集合可以创建子文件夹和多个请求。这有助于组织测试结构。
多人协作 - 可以导入或导出集合和环境，从而方便共享文件。直接使用链接还可以用于共享集合。
创建环境 - 创建多个环境有助于减少测试重复(DEV/QA/STG/UAT/PROD)，因为可以为不同的环境使用相同的集合。这是参数化发生的地方，将在后续介绍。
创建测试 - 测试检查点(如验证HTTP响应状态是否成功)可以添加到每个API调用中，这有助于确保测试覆盖率。
自动化测试 - 通过使用集合Runner或Newman，可以在多个迭代中运行测试，节省了重复测试的时间。
调试 - Postman控制台有助于检查已检索到的数据，从而易于调试测试。
持续集成——通过其支持持续集成的能力，可以维护开发实践。&lt;/p>
&lt;h3 id="heading">
&lt;/h3></description></item><item><title>polar-DB</title><link>https://www.zata.cc/p/polar-db/</link><pubDate>Tue, 04 Mar 2025 13:59:34 +0800</pubDate><guid>https://www.zata.cc/p/polar-db/</guid><description>&lt;img src="https://www.zata.cc/p/polar-db/images/index/index-1.png" alt="Featured image of post polar-DB" />&lt;p>&lt;img src="https://www.zata.cc/p/polar-db/images/index/index-1.png"
width="780"
height="764"
srcset="https://www.zata.cc/p/polar-db/images/index/index-1_hu5409528645536666785.png 480w, https://www.zata.cc/p/polar-db/images/index/index-1_hu8338436586069430791.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="102"
data-flex-basis="245px"
>&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/polar-db/images/index/index.png"
width="892"
height="820"
srcset="https://www.zata.cc/p/polar-db/images/index/index_hu13658631444707831442.png 480w, https://www.zata.cc/p/polar-db/images/index/index_hu12495349704706904510.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="108"
data-flex-basis="261px"
>&lt;/p>
&lt;h3 id="简介">简介
&lt;/h3>&lt;ul>
&lt;li>Alibaba 的 PolarDB 是一款&lt;code>云原生关系型数据库服务&lt;/code>，性能高、可扩展性强，与&lt;strong>MySQL 和 PostgreSQL&lt;/strong>完全兼容。&lt;/li>
&lt;li>它采用计算与存储分离架构，支持高达 500 TB 的存储容量，并提供多区域部署以确保高可用性。&lt;/li>
&lt;li>安全功能包括 IP 白名单和虚拟专用云（VPC），全球数据库网络（GDN）支持跨区域数据复制和灾难恢复。&lt;/li>
&lt;li>意外细节：PolarDB 还提供免费实例，适合开发者测试，规格为 2 核 8 GB，50 GB 存储，每个月可参与一次。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>什么是 PolarDB？&lt;/strong>&lt;br>
PolarDB 是阿里巴巴云开发的一款云原生数据库服务，旨在为现代应用程序提供高性能和可扩展性。它与 MySQL 和 PostgreSQL 完全兼容，适合需要快速响应和高并发场景的企业。&lt;/p>
&lt;p>&lt;strong>主要特点&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>高性能&lt;/strong>：比传统数据库快得多，支持数百万次每秒查询（QPS）。&lt;/li>
&lt;li>&lt;strong>可扩展性&lt;/strong>：支持自动扩展，计算和存储可独立调整，最大支持 500 TB 存储。&lt;/li>
&lt;li>&lt;strong>高可用性&lt;/strong>：通过多区域部署和自动故障转移，确保最小停机时间。&lt;/li>
&lt;li>&lt;strong>安全性&lt;/strong>：包括 IP 白名单、VPC 等措施保护数据。&lt;/li>
&lt;li>&lt;strong>全球数据库网络（GDN）&lt;/strong>：支持跨区域数据同步，灾难恢复时间小于 2 秒。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开发者福利&lt;/strong>&lt;br>
PolarDB 提供免费实例，规格为 2 核 8 GB，50 GB 存储，适合开发者测试，每个月可参与一次，区域包括中国香港、德国法兰克福等。详情请访问 &lt;a class="link" href="https://www.alibabacloud.com/en/product/polarDB" target="_blank" rel="noopener"
>官方产品页面&lt;/a> 和 &lt;a class="link" href="https://www.alibabacloud.com/help/en" target="_blank" rel="noopener"
>文档中心&lt;/a>。&lt;/p>
&lt;hr>
&lt;h3 id="详细报告">详细报告
&lt;/h3>&lt;p>Alibaba 的 PolarDB 是一款云原生关系型数据库服务，由阿里巴巴云开发，旨在为企业提供高性能、可扩展和可靠的数据库解决方案。以下是其详细特点和功能的全面分析，基于官方资料和相关审查。&lt;/p>
&lt;h4 id="概述与背景">概述与背景
&lt;/h4>&lt;p>PolarDB 是为云环境优化的下一代关系型数据库，采用计算与存储分离架构，整合了软件和硬件资源，确保高性能和灵活性。它完全兼容 MySQL 和 PostgreSQL，并高度兼容 Oracle 语法，适合需要快速迁移和扩展的企业应用。PolarDB 已在阿里巴巴的“双十一”全球购物节等超大规模事件中得到验证，体现了其在高并发和大规模存储场景下的稳定性。&lt;/p>
&lt;h4 id="主要特点与功能">主要特点与功能
&lt;/h4>&lt;h5 id="1-架构与性能">1. 架构与性能
&lt;/h5>&lt;ul>
&lt;li>&lt;strong>计算与存储分离&lt;/strong>：PolarDB 的核心设计是将计算和存储解耦，允许独立扩展计算节点和存储容量。这种架构通过共享分布式存储确保数据一致性，避免传统异步复制带来的延迟问题。&lt;/li>
&lt;li>&lt;strong>高性能&lt;/strong>：官方数据表明，PolarDB for MySQL 在事务处理上比开源 MySQL 快 5 倍，在分析查询上快 400 倍，总拥有成本（TCO）降低 50%。对于 PostgreSQL，优化后查询和事务处理速度比标准 PostgreSQL 快 6 倍。&lt;/li>
&lt;li>&lt;strong>并行查询（MySQL 8.0）&lt;/strong>：通过在存储层分配数据到多个线程并行计算，复杂 SQL 和报告查询的响应时间可减少高达 30 倍（在 100 GB 数据、88 CPU 核心、710 GB 内存的配置下）。&lt;/li>
&lt;li>&lt;strong>快速 DDL 操作（MySQL）&lt;/strong>：通过物理复制优化，添加列或索引可在并行处理下瞬间完成，1 TB 数据、16 CPU 核心、128 GB 内存的场景下，添加列仅需 1 秒，比开源 MySQL 快 10 倍。&lt;/li>
&lt;/ul>
&lt;h5 id="2-可扩展性与存储">2. 可扩展性与存储
&lt;/h5>&lt;ul>
&lt;li>PolarDB 支持高达 500 TB 的存储容量（MySQL 和 PostgreSQL 版本），每个集群最多 16 个节点，每个节点最多 88 vCPUs。&lt;/li>
&lt;li>&lt;strong>自动扩展&lt;/strong>：存储和计算资源可根据数据量自动调整，无需停机。PolarDB-X 版本可扩展至拍字节级，适合超大规模数据场景。&lt;/li>
&lt;li>&lt;strong>弹性扩展（MySQL）&lt;/strong>：支持垂直扩展（升级/降级规格）和水平扩展（添加/移除只读节点，最多 16 个），存储可自动扩展至 500 TB，调整在几分钟内生效。&lt;/li>
&lt;/ul>
&lt;h5 id="3-高可用性与灾难恢复">3. 高可用性与灾难恢复
&lt;/h5>&lt;ul>
&lt;li>&lt;strong>多区域架构&lt;/strong>：PolarDB 在多个可用区部署数据副本，确保数据库灾难恢复和备份。支持在同一区域的 3 个数据中心或跨 3 个区域的 5 个数据中心部署。&lt;/li>
&lt;li>&lt;strong>全球数据库网络（GDN）&lt;/strong>：通过异步复制和物理日志并行处理，数据在全球多个集群间同步时间小于 2 秒，支持跨区域读写分离，数据从最近的集群读取，提升性能。&lt;/li>
&lt;li>&lt;strong>高可用性&lt;/strong>：主节点故障时自动切换到备用节点，无数据丢失，解决异步复制问题，确保全球数据一致性。&lt;/li>
&lt;/ul>
&lt;h5 id="4-安全与管理">4. 安全与管理
&lt;/h5>&lt;ul>
&lt;li>&lt;strong>安全措施&lt;/strong>：包括 IP 白名单、虚拟专用云（VPC）和多数据副本，确保数据在访问、存储和管理中的安全性。&lt;/li>
&lt;li>&lt;strong>运维功能（MySQL）&lt;/strong>：提供 24/7 机器学习驱动的异常检测，细粒度监控和诊断工具，包括自治中心、会话管理、实时监控、存储分析、死锁分析、诊断报告和性能洞察。SQL Explorer 可保留日志长达 5 年，支持慢 SQL 查询分析。&lt;/li>
&lt;li>&lt;strong>自动扩展&lt;/strong>：可配置阈值、节点规格和只读节点，动态调整资源。&lt;/li>
&lt;/ul>
&lt;h5 id="5-兼容性与迁移">5. 兼容性与迁移
&lt;/h5>&lt;ul>
&lt;li>&lt;strong>兼容性&lt;/strong>：PolarDB for MySQL 和 PostgreSQL 与其生态系统 100% 兼容，PostgreSQL 版本高度兼容 Oracle 语法，支持 DBLINK、分区表、PL/SQL 等功能，逻辑概念（如用户、角色、模式、权限）与 Oracle 相似。&lt;/li>
&lt;li>&lt;strong>迁移支持&lt;/strong>：提供 ADAM 工具进行免费迁移评估，覆盖兼容性、关联性、性能、风险和修改方法，并提供优化和转换建议。PostgreSQL 版本还包括数据库专家服务，涵盖模式/数据迁移、一致性验证、SQL 模拟/回放/切换/优化。&lt;/li>
&lt;/ul>
&lt;h5 id="6-特定版本功能">6. 特定版本功能
&lt;/h5>&lt;ul>
&lt;li>
&lt;p>&lt;strong>PolarDB for PostgreSQL&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>集成 GanosBase，支持时空数据存储和管理，包括向量、网格、轨迹、点云、网格、路径、3D 模型等。提供多级并行运算符，高效处理，兼容商业和开源空间数据服务，可构建城市级空间数据仓库。&lt;/li>
&lt;li>完全托管，减少 TCO，支持手动次要版本升级以获取性能提升、新功能和修复。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>PolarDB for Xscale&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>分布式无共享架构，高吞吐量、低延迟、高可扩展性和高可用性，完全兼容 MySQL 生态，支持二进制日志和开源分区/分片工具。&lt;/li>
&lt;li>标准版基于 Paxos 协议（主节点、备用节点、日志节点），成本效益高，可迁移至企业版。企业版支持在线扩展至拍字节级，适合高并发和大规模数据处理。&lt;/li>
&lt;li>自动分区（AUTO 模式，无需分区键，使用标准 MySQL 语法），混合负载（并行计算、自动扩展、读写分离、只读副本支持 OLTP/OLAP），金融级一致性（RPO=0，RC/RR 隔离级别）。&lt;/li>
&lt;li>企业级功能包括多区域/多区域灾难恢复，符合金融分布式事务数据库标准，通过长期稳定性测试，监控（计算/存储/数据库，定制警报，概览）和诊断/优化（识别问题 SQL，实时分析，报告中心）。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h5 id="7-开发者福利">7. 开发者福利
&lt;/h5>&lt;ul>
&lt;li>&lt;strong>免费实例&lt;/strong>：提供 Always Free 实例，适合开发者测试。规格为 2 核 8 GB，50 GB 存储，每个月可参与一次，区域包括中国（香港）、德国（法兰克福）、印度尼西亚（雅加达）、日本（东京）、新加坡、泰国（曼谷）、英国（伦敦）。参与后有效期为当月，未使用则过期，可切换区域或转为付费计划。详情请访问 &lt;a class="link" href="https://www.alibabacloud.com/blog/how-to-claim-polardb-resources-for-free_600105" target="_blank" rel="noopener"
>获取免费资源指南&lt;/a> 和 &lt;a class="link" href="https://www.alibabacloud.com/help/doc-detail/58764.htm#J_2364114860" target="_blank" rel="noopener"
>条款与条件&lt;/a>。&lt;/li>
&lt;/ul>
&lt;h4 id="计费与成本效益">计费与成本效益
&lt;/h4>&lt;ul>
&lt;li>&lt;strong>计费方式（MySQL）&lt;/strong>：支持按量付费（根据实例规格和存储使用扣费，自动扩展，适合短期使用）和订阅（预付费，长期使用，更具成本效益，提供更长有效期和更大容量计划）。&lt;/li>
&lt;li>&lt;strong>成本效益&lt;/strong>：比传统 MySQL/PostgreSQL 快 100 倍以上，共享存储减少扩展成本，仅按实际使用存储付费，降低总拥有成本。&lt;/li>
&lt;/ul>
&lt;h4 id="对比与用户反馈">对比与用户反馈
&lt;/h4>&lt;p>根据审查和用户反馈，PolarDB 特别适合需要高并发、大规模存储和复杂查询的业务场景。Sourceforge 的描述指出，其在阿里巴巴“双十一”购物节中得到验证，支持百万级 QPS 和 100 TB 集群，成本仅为传统商业数据库的 1/10。Gartner Peer Insights 和其他平台的用户评论强调其性能和扩展性，但也建议关注特定版本的文档以了解差异。&lt;/p>
&lt;h4 id="表格polardb-主要版本对比">表格：PolarDB 主要版本对比
&lt;/h4>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;strong>版本&lt;/strong>&lt;/th>
&lt;th>&lt;strong>架构&lt;/strong>&lt;/th>
&lt;th>&lt;strong>存储容量&lt;/strong>&lt;/th>
&lt;th>&lt;strong>主要特点&lt;/strong>&lt;/th>
&lt;th>&lt;strong>适用场景&lt;/strong>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>PolarDB for MySQL&lt;/td>
&lt;td>共享存储&lt;/td>
&lt;td>500 TB&lt;/td>
&lt;td>高事务性能，快速 DDL，IMCI 支持 HTAP&lt;/td>
&lt;td>高并发 OLTP/OLAP 混合负载&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PolarDB for PostgreSQL&lt;/td>
&lt;td>共享存储&lt;/td>
&lt;td>500 TB&lt;/td>
&lt;td>Oracle 兼容，时空数据支持，托管服务&lt;/td>
&lt;td>空间数据分析，Oracle 迁移&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PolarDB for Xscale&lt;/td>
&lt;td>分布式无共享&lt;/td>
&lt;td>拍字节级&lt;/td>
&lt;td>高吞吐量，自动分区，金融级一致性&lt;/td>
&lt;td>大规模分布式事务，金融行业&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="结论">结论
&lt;/h4>&lt;p>PolarDB 提供了一套全面的云原生数据库解决方案，涵盖高性能、可扩展性、安全性和兼容性，适合各种企业级应用。开发者可通过免费实例快速上手，具体功能根据版本（如 MySQL、PostgreSQL、Xscale）有所不同，建议参考官方文档获取详细信息。&lt;/p>
&lt;p>&lt;strong>关键引用：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://www.alibabacloud.com/en/product/polarDB" target="_blank" rel="noopener"
>PolarDB 产品页面详细介绍&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.alibabacloud.com/help/en" target="_blank" rel="noopener"
>PolarDB 文档中心&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.alibabacloud.com/blog/how-to-claim-polardb-resources-for-free_600105" target="_blank" rel="noopener"
>获取 PolarDB 免费资源指南&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.alibabacloud.com/product/polardb-for-mysql" target="_blank" rel="noopener"
>PolarDB for MySQL 学习更多&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.alibabacloud.com/product/polardb-for-postgresql" target="_blank" rel="noopener"
>PolarDB for PostgreSQL 学习更多&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.alibabacloud.com/product/polardb-for-xscale" target="_blank" rel="noopener"
>PolarDB for Xscale 学习更多&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.alibabacloud.com/help/polardb/latest/polardb-for-mysql" target="_blank" rel="noopener"
>PolarDB MySQL 文档&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.alibabacloud.com/help/polardb/polardb-for-postgresql/" target="_blank" rel="noopener"
>PolarDB PostgreSQL 文档&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.alibabacloud.com/help/polardb/latest/polardb-x" target="_blank" rel="noopener"
>PolarDB Xscale 文档&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.gartner.com/reviews/market/cloud-database-management-systems/vendor/alibaba-cloud/product/polardb" target="_blank" rel="noopener"
>PolarDB 产品介绍与用户评论&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://dbdb.io/db/polardb" target="_blank" rel="noopener"
>PolarDB 数据库目录信息&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://emptysqua.re/blog/review-polardb-scc/" target="_blank" rel="noopener"
>PolarDB-SCC 性能审查文章&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://sourceforge.net/software/product/PolarDB/" target="_blank" rel="noopener"
>PolarDB 用户评价与定价&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://sourceforge.net/software/product/PolarDB-X/" target="_blank" rel="noopener"
>PolarDB-X 用户评价与功能&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.geeksforgeeks.org/what-is-polardb-for-postgresql/" target="_blank" rel="noopener"
>PolarDB for PostgreSQL 技术文章&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.alibabacloud.com/blog/polardb-deep-dive-on-alibaba-cloud%25E2%2580%2599s-next-generation-database_578138" target="_blank" rel="noopener"
>PolarDB 深入分析博客&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.alibabacloud.com/blog/polardb-series-1-get-started-in-10-minutes_594647" target="_blank" rel="noopener"
>PolarDB 入门指南博客&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>coze</title><link>https://www.zata.cc/p/coze/</link><pubDate>Tue, 04 Mar 2025 11:46:49 +0800</pubDate><guid>https://www.zata.cc/p/coze/</guid><description>&lt;img src="https://www.zata.cc/p/coze/images/index/index.png" alt="Featured image of post coze" />&lt;p>参考：&lt;/p>
&lt;p>&lt;a class="link" href="https://www.coze.cn/open/docs/guides/welcome" target="_blank" rel="noopener"
>https://www.coze.cn/open/docs/guides/welcome&lt;/a> &lt;br>
&lt;a class="link" href="https://www.coze.cn/open/docs/guides/quickstart" target="_blank" rel="noopener"
>https://www.coze.cn/open/docs/guides/quickstart&lt;/a>&lt;/p>
&lt;hr>
&lt;h3 id="使用说明">使用说明
&lt;/h3>&lt;ol>
&lt;li>创建一个智能体&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/coze/images/index/index-1.png"
width="1912"
height="954"
srcset="https://www.zata.cc/p/coze/images/index/index-1_hu9549748875298603540.png 480w, https://www.zata.cc/p/coze/images/index/index-1_hu1452269760180308711.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="200"
data-flex-basis="481px"
>&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/coze/images/index/index-3.png"
width="1912"
height="954"
srcset="https://www.zata.cc/p/coze/images/index/index-3_hu18342400152805402960.png 480w, https://www.zata.cc/p/coze/images/index/index-3_hu8913680812167665348.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="200"
data-flex-basis="481px"
>&lt;/p>
&lt;ol start="2">
&lt;li>可以设置智能体的行为&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/coze/images/index/index-4.png"
width="1912"
height="954"
srcset="https://www.zata.cc/p/coze/images/index/index-4_hu17958632984151858100.png 480w, https://www.zata.cc/p/coze/images/index/index-4_hu17628936805932658056.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="200"
data-flex-basis="481px"
>&lt;/p>
&lt;p>效果&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/coze/images/index/index-5.png"
width="1912"
height="954"
srcset="https://www.zata.cc/p/coze/images/index/index-5_hu5131084219054494997.png 480w, https://www.zata.cc/p/coze/images/index/index-5_hu11140956575062933646.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="200"
data-flex-basis="481px"
>&lt;/p>
&lt;ol start="3">
&lt;li>调用插件&lt;/li>
&lt;/ol>
&lt;p>插件可以调用一些api&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/coze/images/index/index-6.png"
width="1912"
height="954"
srcset="https://www.zata.cc/p/coze/images/index/index-6_hu683124536788398373.png 480w, https://www.zata.cc/p/coze/images/index/index-6_hu1664421184630799744.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="200"
data-flex-basis="481px"
>&lt;/p></description></item><item><title>flora无限画布</title><link>https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/</link><pubDate>Tue, 04 Mar 2025 11:04:28 +0800</pubDate><guid>https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/</guid><description>&lt;img src="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index.png" alt="Featured image of post flora无限画布" />&lt;h3 id="网址">网址
&lt;/h3>&lt;p>&lt;a class="link" href="https://www.florafauna.ai/" target="_blank" rel="noopener"
>https://www.florafauna.ai/&lt;/a>&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index.png"
width="1912"
height="990"
srcset="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index_hu10243901073479220620.png 480w, https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index_hu8261799794381179797.png 1024w"
loading="lazy"
alt="flora示例"
class="gallery-image"
data-flex-grow="193"
data-flex-basis="463px"
>&lt;/p>
&lt;h3 id="使用简介">使用简介
&lt;/h3>&lt;p>当前可以免费使用，可以google账户登录&lt;/p>
&lt;ol>
&lt;li>导入个人的资源文件，由于后续的风格生成&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-2.png"
width="596"
height="604"
srcset="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-2_hu12986149292569534657.png 480w, https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-2_hu12227843731374198742.png 1024w"
loading="lazy"
alt="导入资源"
class="gallery-image"
data-flex-grow="98"
data-flex-basis="236px"
>&lt;/p>
&lt;ol start="2">
&lt;li>点击加号，设置生成方式并输入提示词&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-3.png"
width="440"
height="508"
srcset="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-3_hu10098994804169555423.png 480w, https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-3_hu9621853600036843185.png 1024w"
loading="lazy"
alt="右侧加号"
class="gallery-image"
data-flex-grow="86"
data-flex-basis="207px"
>
&lt;img src="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-4.png"
width="871"
height="499"
srcset="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-4_hu8934937075754528177.png 480w, https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-4_hu1463430125127450366.png 1024w"
loading="lazy"
alt="点击加号并拖拽"
class="gallery-image"
data-flex-grow="174"
data-flex-basis="418px"
>&lt;/p>
&lt;ol start="3">
&lt;li>点击生成按钮，等待生成结果
其中的数字表示同时生成几个（因为往往ai的效果不稳定，可能生成很多个才能找到适合自己的一个）&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-5.png"
width="641"
height="535"
srcset="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-5_hu6520656260498055143.png 480w, https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-5_hu4124886301594978791.png 1024w"
loading="lazy"
alt="生成内容"
class="gallery-image"
data-flex-grow="119"
data-flex-basis="287px"
>&lt;/p>
&lt;ol start="4">
&lt;li>可以多个生成内容传入一个输入中，不过只支持文本&lt;/li>
&lt;/ol>
&lt;p>可以让它做总结&lt;/p>
&lt;p>&lt;img src="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-6.png"
width="1912"
height="954"
srcset="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-6_hu16729944767232049411.png 480w, https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-6_hu9628083294743832403.png 1024w"
loading="lazy"
alt="合并内容做总结"
class="gallery-image"
data-flex-grow="200"
data-flex-basis="481px"
>&lt;/p>
&lt;ol start="5">
&lt;li>总结的内容可以再用于生成视频或图片&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-7.png"
width="1577"
height="629"
srcset="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-7_hu8106969889492491683.png 480w, https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-7_hu11828716500076219493.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="250"
data-flex-basis="601px"
>&lt;/p>
&lt;h3 id="使用感受">使用感受
&lt;/h3>&lt;p>flora我主要是用于设计方面，可以提供它一些风格的图片，让它学习，然后让它生成，这样就可以快速生成想要的风格。主要使用的方式是工作流的方式，每一个下级的框都会接收上一级的输出，总体来说使用成本比较低，支持文本、图片和视频三种输入和输出。&lt;br>
&lt;img src="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-1.png"
width="779"
height="538"
srcset="https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-1_hu1164645496528929818.png 480w, https://www.zata.cc/p/flora%E6%97%A0%E9%99%90%E7%94%BB%E5%B8%83/images/index/index-1_hu15248332037510851130.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="144"
data-flex-basis="347px"
>&lt;br>
使用简单，基本上效果也还可以。&lt;/p>
&lt;p>缺点：&lt;/p>
&lt;ul>
&lt;li>感觉界面有点卡顿&lt;/li>
&lt;li>可以选择的模型比较少&lt;/li>
&lt;li>提示词还是需要自己写，有现成的提示词的话，就好了&lt;/li>
&lt;/ul></description></item><item><title>百度自由画布</title><link>https://www.zata.cc/p/%E7%99%BE%E5%BA%A6%E8%87%AA%E7%94%B1%E7%94%BB%E5%B8%83/</link><pubDate>Tue, 04 Mar 2025 10:59:39 +0800</pubDate><guid>https://www.zata.cc/p/%E7%99%BE%E5%BA%A6%E8%87%AA%E7%94%B1%E7%94%BB%E5%B8%83/</guid><description>&lt;img src="https://www.zata.cc/p/%E7%99%BE%E5%BA%A6%E8%87%AA%E7%94%B1%E7%94%BB%E5%B8%83/images/index/index.png" alt="Featured image of post 百度自由画布" />&lt;h3 id="百度自由画布">百度自由画布
&lt;/h3>&lt;p>&lt;img src="https://www.zata.cc/p/%E7%99%BE%E5%BA%A6%E8%87%AA%E7%94%B1%E7%94%BB%E5%B8%83/images/index/index.png"
width="1912"
height="954"
srcset="https://www.zata.cc/p/%E7%99%BE%E5%BA%A6%E8%87%AA%E7%94%B1%E7%94%BB%E5%B8%83/images/index/index_hu3722237666422632432.png 480w, https://www.zata.cc/p/%E7%99%BE%E5%BA%A6%E8%87%AA%E7%94%B1%E7%94%BB%E5%B8%83/images/index/index_hu1185266302450269477.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="200"
data-flex-basis="481px"
>&lt;/p>
&lt;p>正在申请内测资格&amp;hellip;&lt;/p></description></item></channel></rss>