<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Ricardo 的博客</title><description>Ricardo 的个人博客，记录 Linux、编程与工具的学习笔记：能跑通的命令、踩过的坑，以及当时为什么这么选。</description><link>https://ricardo-firefly.pages.dev/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>6.16.9</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年11月2日 01:40:31</lastBuildDate><item><title>搭建 AI-Nagi 的过程</title><link>https://ricardo-firefly.pages.dev/posts/ai-nagi-setup/</link><guid isPermaLink="true">https://ricardo-firefly.pages.dev/posts/ai-nagi-setup/</guid><description>用 NapCat + AstrBot 把一个 QQ 小号变成有性格的 AI，从装工具到调人格的完整记录</description><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;作者：晚空秋&lt;/p&gt;
&lt;p&gt;在红岩网校看到「卷娘」这个 AI 形象时，第一反应是好奇：它是怎么来的？背后接了什么东西？能不能自己也做一个？&lt;/p&gt;
&lt;p&gt;顺着这个问题问下去，发现原理并不神秘——一个 QQ 协议端负责收发消息，一个机器人框架负责接大模型，中间用 WebSocket 连起来。于是就有了下面这个属于我自己的 QQ AI：&lt;strong&gt;Nagi&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这篇记录整个搭建过程，包括踩过的坑。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;一、需要准备什么&lt;a href=&quot;#一需要准备什么&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;组件&lt;/th&gt;&lt;th&gt;作用&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;QQ 小号&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;给 AI 一个身份&lt;/td&gt;&lt;td&gt;强烈建议用小号，原因见下&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;NapCat&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;QQ 协议端&lt;/td&gt;&lt;td&gt;让程序能像人一样收发 QQ 消息&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;AstrBot Launcher&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;图形化安装器 + 进程管家&lt;/td&gt;&lt;td&gt;本身不含 AI 能力，只负责把 AstrBot 装起来、跑起来&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;AstrBot&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;机器人主体&lt;/td&gt;&lt;td&gt;接大模型、管人格、装插件&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;大模型 API Key&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;提供“智能”&lt;/td&gt;&lt;td&gt;&lt;strong&gt;要花钱&lt;/strong&gt;，按 token 计费&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;section&gt;&lt;h3&gt;关于风险，先说清楚&lt;a href=&quot;#关于风险先说清楚&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;NapCat 并不是腾讯官方提供的接口，它的做法是&lt;strong&gt;注入进程接管 QQ 客户端&lt;/strong&gt;。这本质上违反了《QQ 软件许可协议》，存在被判定为异常登录、甚至封号的可能。&lt;/p&gt;&lt;p&gt;所以：&lt;strong&gt;一定用小号&lt;/strong&gt;。真被封了也不心疼，主号不要冒险。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;关于成本&lt;a href=&quot;#关于成本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;这套东西不是免费的。AI 每回复一次都在消耗 token，你可以理解为「每说一句话都在花钱」。日常聊天花费很小，但如果拉进群、被频繁 @，账单会肉眼可见地涨。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;二、三个部件是怎么连起来的&lt;a href=&quot;#二三个部件是怎么连起来的&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;搞清楚这张图，后面每一步都不会迷路：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;QQ 小号 ──扫码登录──&amp;gt; NapCat（协议端）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│  WebSocket  ws://127.0.0.1:6199/ws&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;▼&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                     &lt;/span&gt;&lt;/span&gt;&lt;span&gt;AstrBot（AI 主体）──HTTPS──&amp;gt; 大模型 API（DeepSeek 等）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NapCat&lt;/strong&gt; 负责“听得见、说得出”——把 QQ 的消息转成程序能读的格式，再把回复发回去&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AstrBot&lt;/strong&gt; 负责“想”——收到消息后调用大模型，决定回什么&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6199&lt;/strong&gt; 是两者之间的桥，AstrBot 在这头等着，NapCat 主动连过去&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;三、开始搭建&lt;a href=&quot;#三开始搭建&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;第 1 步：安装所需工具&lt;a href=&quot;#第-1-步安装所需工具&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;去 GitHub 下载两个东西：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;AstrBot Launcher：&lt;a href=&quot;https://github.com/AstrBotDevs/astrbot-launcher/releases&quot; target=&quot;_blank&quot;&gt;https://github.com/AstrBotDevs/astrbot-launcher/releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;NapCat：&lt;a href=&quot;https://github.com/NapNeko/NapCatQQ/releases&quot; target=&quot;_blank&quot;&gt;https://github.com/NapNeko/NapCatQQ/releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;NapCat 的安装脚本会自动检测并下载对应版本的 QQ（大约 300 MB），耐心等它跑完。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/nagi/step1-napcat-install.png&quot; alt=&quot;NapCat 安装程序正在下载 QQ 客户端&quot; /&gt;&lt;figcaption&gt;NapCat 安装程序正在下载 QQ 客户端&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;NapCat 安装时会自动拉取匹配版本的 QQ，进度条走完就装好了&lt;/em&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第 2 步：运行 AstrBot，补齐运行组件&lt;a href=&quot;#第-2-步运行-astrbot补齐运行组件&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;打开 AstrBot Launcher，先把三个组件装上：&lt;strong&gt;Python&lt;/strong&gt;、&lt;strong&gt;Node.js (LTS)&lt;/strong&gt;、&lt;strong&gt;uv&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;注意 uv 选 &lt;strong&gt;v4.28.2&lt;/strong&gt; 这个版本，别的版本可能和 Launcher 对不上。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/nagi/step2-components.png&quot; alt=&quot;AstrBot 组件管理：Python、Node.js、uv 均已下载&quot; /&gt;&lt;figcaption&gt;AstrBot 组件管理：Python、Node.js、uv 均已下载&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;三个组件都显示“已下载”才继续，缺一个后面都起不来&lt;/em&gt;&lt;/p&gt;&lt;p&gt;装完创建实例、启动，Launcher 会给你一组 &lt;strong&gt;WebUI 的账号和密码&lt;/strong&gt;。浏览器打开它给的地址，登录进去，先创建一个自己的用户。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第 3 步：NapCat 登录 QQ 小号&lt;a href=&quot;#第-3-步napcat-登录-qq-小号&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;NapCat 安装完成后会在 QQ 安装目录里生成 &lt;code&gt;napcat.bat&lt;/code&gt;，双击运行，会弹出一个二维码。&lt;/p&gt;&lt;p&gt;用&lt;strong&gt;小号&lt;/strong&gt;扫码登录。这一步成功后，NapCat 就已经能收发这个号的消息了。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第 4 步：在 AstrBot 里创建机器人&lt;a href=&quot;#第-4-步在-astrbot-里创建机器人&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;回到 AstrBot 的 WebUI，点“创建机器人”，按下表填：&lt;/p&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;/th&gt;&lt;th&gt;值&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;消息平台类别&lt;/td&gt;&lt;td&gt;&lt;strong&gt;OneBot v11&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;机器人名称&lt;/td&gt;&lt;td&gt;随意（默认 &lt;code&gt;default&lt;/code&gt; 也行）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;启用&lt;/td&gt;&lt;td&gt;打开&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;反向 WebSocket 主机&lt;/td&gt;&lt;td&gt;&lt;code&gt;0.0.0.0&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;反向 WebSocket 端口&lt;/td&gt;&lt;td&gt;&lt;code&gt;6199&lt;/code&gt;（保持不变）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;反向 WebSocket Token&lt;/td&gt;&lt;td&gt;&lt;strong&gt;留空&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/nagi/step4-create-bot.png&quot; alt=&quot;在 AstrBot 中创建 OneBot v11 机器人&quot; /&gt;&lt;figcaption&gt;在 AstrBot 中创建 OneBot v11 机器人&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;消息平台选 OneBot v11，主机 0.0.0.0，端口 6199，Token 不填&lt;/em&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第 5 步：在 NapCat 里建立连接&lt;a href=&quot;#第-5-步在-napcat-里建立连接&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;NapCat 运行后会给一个 WebUI 地址，浏览器打开，用刚登录的小号进去。找到 &lt;strong&gt;网络配置&lt;/strong&gt;：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;新建 &lt;strong&gt;WebSocket 客户端&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;启用打开&lt;/li&gt;
&lt;li&gt;URL 改成 &lt;code&gt;ws://127.0.0.1:6199/ws&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Token 删掉（留空）&lt;/li&gt;
&lt;li&gt;心跳间隔、重连间隔都设为 &lt;code&gt;1000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;保存&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/nagi/step5-napcat-dashboard.png&quot; alt=&quot;NapCat 主界面：确认版本与连接状态&quot; /&gt;&lt;figcaption&gt;NapCat 主界面：确认版本与连接状态&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;NapCat 的概览页，可以看到版本号和运行状态&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/nagi/step5-websocket-client.png&quot; alt=&quot;WebSocket 客户端配置：URL、心跳与重连间隔&quot; /&gt;&lt;figcaption&gt;WebSocket 客户端配置：URL、心跳与重连间隔&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;URL 指向 AstrBot 的 6199，Token 留空，两个间隔都是 1000&lt;/em&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第 6 步：确认连接成功&lt;a href=&quot;#第-6-步确认连接成功&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;回到 AstrBot，打开「数据与日志」，看到这一行就说明通了：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[INFO] aiochttp(OneBot v11) 适配器已连接。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/nagi/step6-connected.png&quot; alt=&quot;AstrBot 日志：适配器已连接&quot; /&gt;&lt;figcaption&gt;AstrBot 日志：适配器已连接&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;日志里出现「适配器已连接」，说明 NapCat 和 AstrBot 握手成功&lt;/em&gt;&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第 7 步：接入大模型&lt;a href=&quot;#第-7-步接入大模型&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;回到 AstrBot 的欢迎页，配置 AI：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;选择提供商模型（我用的是 &lt;strong&gt;DeepSeek&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;粘贴 &lt;strong&gt;API 密钥&lt;/strong&gt;（获取方法见文末附录）&lt;/li&gt;
&lt;li&gt;点“获取模型”&lt;/li&gt;
&lt;li&gt;聊天模型选 &lt;strong&gt;flash&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;保存配置&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;到这里，主体就已经能跑起来了——给它发条消息试试。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第 8 步：给它一个人格&lt;a href=&quot;#第-8-步给它一个人格&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;第一次对话大概率会让你失望：&lt;strong&gt;十分死板，毫无“人样”&lt;/strong&gt;，像个问答机器人。&lt;/p&gt;&lt;p&gt;原因是模型不知道“它是谁”。所以要装人格：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;① 装插件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在 Launcher 的插件市场安装 &lt;strong&gt;chat_plus&lt;/strong&gt;（一个以 AI 读空气为主的群聊增强插件）。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/nagi/step8-chat-plus.png&quot; alt=&quot;插件市场里安装 chat_plus&quot; /&gt;&lt;figcaption&gt;插件市场里安装 chat_plus&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;② 打开分段回复和群聊上下文&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在配置文件的「扩展功能」里：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;启用&lt;strong&gt;分段回复&lt;/strong&gt;（像真人一样把长回复拆成几条短消息）&lt;/li&gt;
&lt;li&gt;启用&lt;strong&gt;群聊上下文感知&lt;/strong&gt;（让它知道群里前面聊了什么）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/nagi/step8-segmented.png&quot; alt=&quot;扩展功能：分段回复与群聊上下文&quot; /&gt;&lt;figcaption&gt;扩展功能：分段回复与群聊上下文&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;分段回复能明显改善“像不像人”的观感，群聊上下文则避免它答非所问&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;③ 配置图片理解（可选）&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;勾选「自动理解图片」，选择一个视觉模型，群友发图它也能看懂。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/nagi/step8-image-model.png&quot; alt=&quot;图片转述模型配置&quot; /&gt;&lt;figcaption&gt;图片转述模型配置&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;④ 写系统提示词&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;回到 AstrBot 的「人格设定」，创建新人格：起一个 ID，然后在系统提示词里描述它是谁——名字、性格、说话风格、口头禅、禁忌。&lt;/p&gt;&lt;p&gt;这一步建议&lt;strong&gt;和豆包之类的 AI 对话来打磨&lt;/strong&gt;：先写一版粗糙的，让它帮你提问（“遇到这种情况他会怎么回应？”），再根据回答补细节。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第 9 步：选择人格，收工&lt;a href=&quot;#第-9-步选择人格收工&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;最后在配置文件的「AI 配置」里选中刚建的人格，保存。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/nagi/step9-chat.png&quot; alt=&quot;和 Nagi 的第一次对话&quot; /&gt;&lt;figcaption&gt;和 Nagi 的第一次对话&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;配好人格之后，回复从“客服腔”变成了有人味的短句&lt;/em&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;四、踩过的坑&lt;a href=&quot;#四踩过的坑&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;现象&lt;/th&gt;&lt;th&gt;原因&lt;/th&gt;&lt;th&gt;解法&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;日志一直没有「适配器已连接」&lt;/td&gt;&lt;td&gt;端口或 URL 写错&lt;/td&gt;&lt;td&gt;确认 AstrBot 是 &lt;code&gt;0.0.0.0:6199&lt;/code&gt;，NapCat 连 &lt;code&gt;ws://127.0.0.1:6199/ws&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;扫码后秒掉线&lt;/td&gt;&lt;td&gt;小号被风控&lt;/td&gt;&lt;td&gt;换号，或降低发送频率&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;回复很慢&lt;/td&gt;&lt;td&gt;模型选了 pro/长上下文&lt;/td&gt;&lt;td&gt;换 flash，减少上下文条数&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;一口气发一大段&lt;/td&gt;&lt;td&gt;没开分段回复&lt;/td&gt;&lt;td&gt;扩展功能里打开分段，间隔 1.5–3.5 秒&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;说话不像人&lt;/td&gt;&lt;td&gt;系统提示词太笼统&lt;/td&gt;&lt;td&gt;写具体：称呼、语气、句子长度、禁用词&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;五、最后&lt;a href=&quot;#五最后&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;从“看到一个 AI 形象觉得好奇”到“自己跑起来一个”，中间其实只有三个部件和一个端口。真正花时间的不是配置，而是&lt;strong&gt;调人格&lt;/strong&gt;——同样的模型，提示词写得好不好，观感差距是数量级的。&lt;/p&gt;&lt;p&gt;Nagi 现在还在慢慢调，等哪天它能在群里自然地接话，这篇就算写完了。&lt;/p&gt;&lt;hr /&gt;&lt;section&gt;&lt;h3&gt;附录：获取 DeepSeek API 密钥&lt;a href=&quot;#附录获取-deepseek-api-密钥&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;打开 &lt;a href=&quot;https://www.deepseek.com/&quot; target=&quot;_blank&quot;&gt;https://www.deepseek.com/&lt;/a&gt; ，进入 &lt;strong&gt;API 开放平台&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;注册并登录，创建账户信息&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;新用户需要先充值&lt;/strong&gt;（最少 10 元），用于抵扣运行时的 token 消耗&lt;/li&gt;
&lt;li&gt;进入 &lt;strong&gt;API keys&lt;/strong&gt; 页面，点“创建 API key”&lt;/li&gt;
&lt;li&gt;复制生成的密钥，粘贴到 AstrBot 的配置里&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/nagi/appendix-deepseek.png&quot; alt=&quot;DeepSeek 开放平台首页&quot; /&gt;&lt;figcaption&gt;DeepSeek 开放平台首页&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;密钥只显示一次，务必当场保存；泄露了就在后台删掉重建。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>修改hosts快速连接GitHub</title><link>https://ricardo-firefly.pages.dev/posts/modify-hosts/</link><guid isPermaLink="true">https://ricardo-firefly.pages.dev/posts/modify-hosts/</guid><description>五步搞定：用 ping 拿 IP，改 hosts 绑定域名，解决 GitHub 打不开或加载慢</description><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;GitHub 打开慢或者干脆打不开，多半是域名被解析到了一个不可用的 IP。手动把域名绑到一个能通的 IP 上，就能绕过这个问题。&lt;/p&gt;
&lt;p&gt;整个过程五步，十分钟内能做完。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;第一步：拿到可用的 IP&lt;a href=&quot;#第一步拿到可用的-ip&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;打开 cmd 窗口，输入：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ping&lt;/span&gt;&lt;span&gt; github.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;按回车，会看到类似这样的输出：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img src=&quot;/images/ping-github.png&quot; alt=&quot;ping github.com 的输出，方括号里就是 IP&quot; /&gt;&lt;figcaption&gt;ping github.com 的输出，方括号里就是 IP&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;方括号 &lt;code&gt;[]&lt;/code&gt; 里那一串数字就是 IP 地址，比如 &lt;code&gt;20.205.243.166&lt;/code&gt;。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;如果这里显示”请求超时”或”找不到主机”，说明当前网络连 ping 都不通，改 hosts 也没用，得换网络环境或用代理。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;第二步：复制 IP 地址&lt;a href=&quot;#第二步复制-ip-地址&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;把方括号里的 IP 复制下来，比如 &lt;code&gt;20.205.243.166&lt;/code&gt;。&lt;/p&gt;&lt;p&gt;只复制 IP 本身，后面的 &lt;code&gt;时间=100ms TTL=109&lt;/code&gt; 不要带上。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;第三步：以管理员身份运行记事本&lt;a href=&quot;#第三步以管理员身份运行记事本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在任务栏搜索框里输入 &lt;code&gt;记事本&lt;/code&gt;，右键选择 &lt;strong&gt;以管理员身份运行&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;这一步不能省。hosts 是系统文件，普通权限打开会保存失败。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;第四步：找到 hosts 文件&lt;a href=&quot;#第四步找到-hosts-文件&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在记事本左上角点 &lt;strong&gt;文件 → 打开&lt;/strong&gt;，地址栏进入：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Windows\System32\drivers\etc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;右下角的文件类型默认是”文本文档”，&lt;strong&gt;改成”所有文件”&lt;/strong&gt;，这时才能在列表里看到 &lt;code&gt;hosts&lt;/code&gt;。&lt;/p&gt;&lt;p&gt;选中 &lt;code&gt;hosts&lt;/code&gt;，点打开。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;第五步：粘贴 IP 并保存&lt;a href=&quot;#第五步粘贴-ip-并保存&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;把刚才复制的 IP 粘贴到文件&lt;strong&gt;最下方&lt;/strong&gt;，格式是「IP + 空格 + 域名」：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;20.205.243.166    github.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;注意：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;IP 和域名之间用空格或 Tab 隔开，不能用逗号&lt;/li&gt;
&lt;li&gt;文件里原有的 &lt;code&gt;127.0.0.1 localhost&lt;/code&gt; 那几行不要动&lt;/li&gt;
&lt;li&gt;改完点左上角 &lt;strong&gt;文件 → 保存&lt;/strong&gt;（或 &lt;code&gt;Ctrl+S&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;保存成功，整个流程就完成了。重新打开浏览器访问 GitHub 试试。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;补充几点&lt;a href=&quot;#补充几点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;1. 需要绑定的不止 github.com&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;常用的还有几个，可以一起加：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;140.82.112.3      github.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;140.82.112.6      api.github.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;140.82.112.9      codeload.github.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;185.199.108.133   raw.githubusercontent.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;185.199.108.133   objects.githubusercontent.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;2. 改完没生效，刷新一下 DNS 缓存&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在 cmd 里执行：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;ipconfig&lt;/span&gt;&lt;span&gt; /flushdns&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;然后按 &lt;code&gt;Ctrl+F5&lt;/code&gt; 强制刷新浏览器。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. IP 会变&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;GitHub 的 IP 段过一段时间会调整，几个月后如果又变慢了，重复上面五步，重新 ping 一次、换一个新 IP 即可。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4. ping 不通就别折腾 hosts 了&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如果第一步 ping 就超时，说明是链路层的问题，改 hosts 解决不了，需要走代理或者其他加速方式。&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;一句话总结：&lt;strong&gt;ping 拿 IP → 管理员记事本打开 hosts → 贴到最下面 → 保存 → 刷新 DNS&lt;/strong&gt;。&lt;/p&gt;&lt;/section&gt;</content:encoded></item></channel></rss>