<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>码道工坊</title><link>https://madao.org/</link><description>Good Luck To You!</description><item><title>CleanMyMac 又贵又偷偷传数据？试试这几个免费开源的 Mac 清理工具</title><link>https://madao.org/?id=43</link><description>&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;blockquote style=&quot;list-style-type: unset;&quot;&gt;
&lt;p&gt;用了两年 CleanMyMac，每年几百块的订阅费不说，后来才知道它后台还偷偷收集数据。折腾了一圈开源替代品，把体验整理出来了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;先说说为什么不想用 CleanMyMac 了&lt;/h2&gt;
&lt;p&gt;CleanMyMac 功能确实全面，界面也好看，但几个问题一直让我不太舒服：&lt;/p&gt;
&lt;p&gt;**第一，贵。**一年订阅费几十美金，折合人民币好几百。买了之后各种高级功能还得加钱，属于&quot;买了个入场券，进去之后处处要钱&quot;的模式。&lt;/p&gt;
&lt;p&gt;**第二，偷偷收集数据。**CleanMyMac 有遥测（Telemetry）功能，后台会上传使用数据。官方说是&quot;改进产品&quot;，但你不知道它具体传了什么。对于一个需要扫描你整个磁盘的工具来说，这事儿本身就挺敏感的。&lt;/p&gt;
&lt;p&gt;**第三，功能过剩。**大部分用户真正需要的就三件事：清垃圾、卸载干净、看看磁盘占用。CleanMyMac 塞了一堆大部分人永远用不到的功能，反而让软件越来越臃肿。&lt;/p&gt;
&lt;p&gt;后来发现了几个免费开源的替代品，试了一圈，各有特色，下面逐个说。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;一、PureMac：最像 CleanMyMac 的平替&lt;/h2&gt;
&lt;p&gt;PureMac 是 2026 年 4 月刚开源的项目，GitHub 上 momenbasel/PureMac，目前 100 多 Star，属于新项目但思路很对。&lt;/p&gt;
&lt;h3&gt;核心特点&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;100% 原生 SwiftUI&lt;/strong&gt;，没有 Electron 也没有 WebView，内存占用比那些套壳网页的&quot;工具&quot;低多了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;全程离线运行&lt;/strong&gt;，不联网、不上传、不收集任何数据。一个磁盘扫描工具不给网络权限也完全能用，这才对。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Apple Developer 签名&lt;/strong&gt;，不会弹&quot;无法验证开发者&quot;的警告。&lt;/p&gt;
&lt;h3&gt;能清理什么&lt;/h3&gt;
&lt;table style=&quot;width: 1783.2px;&quot;&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;/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;邮件附件&lt;/td&gt;
&lt;td&gt;Mail 应用里积攒的附件&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;大文件和旧文件&lt;/td&gt;
&lt;td&gt;自动识别占用空间大的文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Xcode 垃圾&lt;/td&gt;
&lt;td&gt;DerivedData、归档文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Homebrew 缓存&lt;/td&gt;
&lt;td&gt;下载缓存&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可清除空间&lt;/td&gt;
&lt;td&gt;APFS 快照占用的可清除空间&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;亮点功能&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;定时清理和自动清理&lt;/strong&gt;：可以设置清理间隔，让它自己定期跑。这是 CleanMyMac 高级版才有的功能，PureMac 直接给了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;智能扫描&lt;/strong&gt;：一键扫所有类别，不用一个个选。&lt;/p&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;p&gt;直接去 GitHub 下载 .dmg 安装包就行。也支持从源码编译。&lt;/p&gt;
&lt;h3&gt;不足&lt;/h3&gt;
&lt;p&gt;项目比较新（v1.0.1），目前&lt;strong&gt;不支持应用卸载功能&lt;/strong&gt;。社区里也有人提到了，作者还没加上。另外目前最低支持的 macOS 版本没有明确说明。&lt;/p&gt;
&lt;h3&gt;适合谁&lt;/h3&gt;
&lt;p&gt;不想折腾命令行、想要一个跟 CleanMyMac 差不多使用体验的人。打开就能用，点点鼠标就完事。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;二、Mole：开发者专属的命令行清理利器&lt;/h2&gt;
&lt;p&gt;Mole 是国内开发者 tw93 写的，GitHub 上 6.7K Star，Go 语言写的命令行工具。如果你是开发者，这个基本是首选。&lt;/p&gt;
&lt;h3&gt;核心特点&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;扫描 20+ 个系统隐藏位置&lt;/strong&gt;，从用户缓存、系统日志到浏览器缓存、开发工具缓存全覆盖。一次性清理下来，回收几十 GB 不夸张。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;彻底的应用卸载&lt;/strong&gt;：不是简单拖废纸篓那种。它会扫描 20 多个常见残留路径，包括 Application Support、Caches、Preferences、Logs、WebKit 存储、插件等，全部翻出来清理干净。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;交互式磁盘分析&lt;/strong&gt;：内置一个终端 TUI 界面，能像树一样浏览目录结构，快速找到藏在 ~/Library 或 node_modules 里的大文件。有人管它叫&quot;命令行版 DaisyDisk&quot;。&lt;/p&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;# Homebrew 安装
brew install tw93/tap/mole

# 或者直接下载脚本
curl -fsSL &lt;a href=&quot;https://raw.githubusercontent.com/tw93/mole/main/install.sh&quot;&gt;https://raw.githubusercontent.com/tw93/mole/main/install.sh&lt;/a&gt; | bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;常用命令&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;mo                  # 打开交互式菜单
mo clean            # 开始系统清理
mo clean --dry-run  # 预览模式，看会清什么但不实际删
mo clean --whitelist # 管理保护清单
mo uninstall        # 深度卸载应用
mo analyze          # 磁盘空间分析
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;安全机制&lt;/h3&gt;
&lt;p&gt;首次用强烈建议先跑&amp;nbsp;&lt;code&gt;mo clean --dry-run&lt;/code&gt;，它会列出所有准备清理的文件和大小，你看了没问题再真正执行。&lt;/p&gt;
&lt;p&gt;白名单功能也很有用，默认保护了 Playwright 浏览器、HuggingFace 模型、Maven 缓存这些开发者的重目录，不会误删。你也可以自己加。&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;# 把某个目录加入保护
mo clean --whitelist
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;还有个贴心功能&amp;nbsp;&lt;code&gt;mo touchid&lt;/code&gt;，把 sudo 权限跟 Touch ID 指纹绑定。清理需要 root 权限的时候按一下指纹就行，不用反复输密码。&lt;/p&gt;
&lt;h3&gt;适合谁&lt;/h3&gt;
&lt;p&gt;经常用终端的开发者。用惯了命令行之后会觉得 GUI 工具慢。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;三、Pretty Clean：界面最好看的免费选择&lt;/h2&gt;
&lt;p&gt;Pretty Clean 是个有 GUI 的清理工具，界面设计符合 Apple 的设计语言，看着舒服。&lt;/p&gt;
&lt;h3&gt;核心特点&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;多重扫描策略&lt;/strong&gt;：对不同类型的数据（用户文件、系统缓存、应用数据、下载目录）用不同的扫描方式，覆盖面比那些一刀切的工具广。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;开发者模式&lt;/strong&gt;：支持扫描开发工具留下的编译缓存，GUI 工具里有这个功能的很少。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Intel 和 Apple Silicon 都支持&lt;/strong&gt;，安装包不到 6MB。&lt;/p&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;brew install --cask prettyclean
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;也可以从官网下载 DMG：prettyclean.cc&lt;/p&gt;
&lt;h3&gt;使用&lt;/h3&gt;
&lt;p&gt;打开应用 &amp;rarr; 点&quot;开始扫描&quot; &amp;rarr; 看结果 &amp;rarr; 勾选要清的 &amp;rarr; 点&quot;清理&quot;。流程很直白。&lt;/p&gt;
&lt;h3&gt;适合谁&lt;/h3&gt;
&lt;p&gt;不想碰命令行、又嫌 PureMac 功能不够多的普通用户。界面比 PureMac 更精致一些。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;四、Pearcleaner：专注应用卸载的开源工具&lt;/h2&gt;
&lt;p&gt;Pearcleaner，GitHub 上 alienator88/Pearcleaner，主打一个&quot;帮你把应用卸得干干净净&quot;。&lt;/p&gt;
&lt;p&gt;它不像前面几个什么都能清，就专注一件事：卸载应用。通过实时监控 + 深度扫描的方式，把应用相关的所有残留文件都找出来。&lt;/p&gt;
&lt;p&gt;如果你对&quot;卸载干净&quot;这个需求特别强，可以把它跟上面任何一个工具搭配用。&lt;/p&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;brew install --cask pearcleaner
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;五、几个工具横着比一比&lt;/h2&gt;
&lt;table style=&quot;width: 1783.2px;&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;对比项&lt;/th&gt;
&lt;th&gt;CleanMyMac&lt;/th&gt;
&lt;th&gt;PureMac&lt;/th&gt;
&lt;th&gt;Mole&lt;/th&gt;
&lt;th&gt;Pretty Clean&lt;/th&gt;
&lt;th&gt;Pearcleaner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;价格&lt;/td&gt;
&lt;td&gt;$35/年起&lt;/td&gt;
&lt;td&gt;免费&lt;/td&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;不开源&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&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;有&lt;/td&gt;
&lt;td&gt;没有&lt;/td&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;GUI&lt;/td&gt;
&lt;td&gt;GUI&lt;/td&gt;
&lt;td&gt;命令行&lt;/td&gt;
&lt;td&gt;GUI&lt;/td&gt;
&lt;td&gt;GUI&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;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;有&lt;/td&gt;
&lt;td&gt;没有&lt;/td&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;有&lt;/td&gt;
&lt;td&gt;有大文件检测&lt;/td&gt;
&lt;td&gt;强（TUI）&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;高级版才有&lt;/td&gt;
&lt;td&gt;有&lt;/td&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;高级版才有&lt;/td&gt;
&lt;td&gt;有&lt;/td&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;一般&lt;/td&gt;
&lt;td&gt;有 Xcode/HB&lt;/td&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;较高&lt;/td&gt;
&lt;td&gt;低（原生）&lt;/td&gt;
&lt;td&gt;极低&lt;/td&gt;
&lt;td&gt;低（&amp;lt;6MB）&lt;/td&gt;
&lt;td&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;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;hr /&gt;
&lt;h2&gt;六、我的建议&lt;/h2&gt;
&lt;p&gt;不同人的情况不一样，按需求选：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;普通用户，只想简单清理&lt;/strong&gt;：PureMac。打开就能用，定时自动清理也省心。等它加上应用卸载功能就更完美了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;开发者，经常清缓存和编译产物&lt;/strong&gt;：Mole。命令行操作快，清理深度够，白名单保护重要目录不误删。&lt;code&gt;mo clean --dry-run&lt;/code&gt;&amp;nbsp;先看再删，安全感拉满。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不碰命令行，要好看的界面&lt;/strong&gt;：Pretty Clean。界面精致，流程简单。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主要是想卸载干净&lt;/strong&gt;：Pearcleaner + 上面的任意一个搭配。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;如果非要选一个推荐的话&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;我自己的搭配是 Mole 做日常清理 + Pearcleaner 做应用卸载。一个命令行搞定垃圾和缓存，一个 GUI 界面卸载应用。两个都是免费的，加起来不到 CleanMyMac 一个月的订阅费。而且不用提心吊胆它们在后台偷偷传什么数据。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;写在后面&lt;/h2&gt;
&lt;p&gt;其实 macOS 本身也自带一些清理能力，比如关于本机 &amp;rarr; 储存空间里可以看到各类文件的占用情况，也能手动清理。但自带的太简陋了，连个缓存大小都看不清楚。&lt;/p&gt;
&lt;p&gt;CleanMyMac 这类商业工具把体验做得很完善没错，但一年几百块的价格 + 不透明的数据收集，确实让人不太放心。现在开源工具的功能差距越来越小了，对于大多数人来说，免费方案已经完全够用。&lt;/p&gt;
&lt;p&gt;反正先试试免费的开源方案，不够用了再考虑付费的也不迟。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;工具链接汇总：&lt;/em&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;&lt;em&gt;PureMac：github.com/momenbasel/PureMac&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Mole：github.com/tw93/mole&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Pretty Clean：prettyclean.cc&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 16 Apr 2026 22:09:47 +0800</pubDate></item><item><title>Hermes Agent 部署教程：手把手教你把自进化 AI 跑起来</title><link>https://madao.org/?id=42</link><description>&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;blockquote style=&quot;list-style-type: unset;&quot;&gt;
&lt;p&gt;适合国内环境的完整安装指南，附踩坑记录和抄袭争议梳理。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;最近 AI Agent 圈有个项目挺火的&amp;mdash;&amp;mdash;Hermes Agent，硅谷 Nous Research 团队做的，GitHub 上线一个多月就冲到了 9 万 Star。&lt;/p&gt;
&lt;p&gt;它最大的特点是&quot;自进化&quot;：不是那种每次开聊都得重新交代背景的 Agent，而是会自动总结经验、创建技能，用得越多越顺手。三层记忆系统，跨会话还记得你。&lt;/p&gt;
&lt;p&gt;不过前两天出了个瓜&amp;mdash;&amp;mdash;4 月 15 号，中国团队 EvoMap 发长文说 Hermes 的&quot;自进化&quot;核心架构抄了他们的 Evolver，10 步主循环一一对应、12 组术语系统性替换、7 份公开材料零引用。Nous Research 的回应是&quot;Delete your account&quot;，挺无语的。&lt;/p&gt;
&lt;p&gt;争议归争议，工具本身确实好用，MIT 协议完全开源。下面教你怎么从零把它跑起来。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;一、先确认你的环境&lt;/h2&gt;
&lt;table style=&quot;width: 1783.2px;&quot;&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;Linux / macOS / WSL2（不支持 Windows 原生）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;3.10+，推荐 3.11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;内存&lt;/td&gt;
&lt;td&gt;4GB+（本地跑模型要 16GB+）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;网络&lt;/td&gt;
&lt;td&gt;需要访问 GitHub（国内有办法绕）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;模型 API Key&lt;/td&gt;
&lt;td&gt;至少一个，DeepSeek、OpenRouter、OpenAI 都行&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Windows 用户看过来&lt;/strong&gt;：Hermes 不支持 Windows 原生，得先装 WSL2，推荐 Ubuntu 22.04。WSL2 安装教程网上很多，搜一下就行，这里不展开了。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;二、两种安装方式&lt;/h2&gt;
&lt;h3&gt;方式 A：一键安装&lt;/h3&gt;
&lt;p&gt;网络通的话，一行命令就完事：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL &lt;a href=&quot;https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh&quot;&gt;https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh&lt;/a&gt; | bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;脚本会自动装好这些依赖：&lt;/p&gt;
&lt;table style=&quot;width: 1783.2px;&quot;&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;Python 3.11&lt;/td&gt;
&lt;td&gt;运行环境&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node.js v22&lt;/td&gt;
&lt;td&gt;前端工具链&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;uv&lt;/td&gt;
&lt;td&gt;Python 包管理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ripgrep&lt;/td&gt;
&lt;td&gt;文件内容搜索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ffmpeg&lt;/td&gt;
&lt;td&gt;音视频处理&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;装完刷新环境变量：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;source ~/.bashrc
# 用 zsh 的话
source ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;然后跑一下诊断：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;hermes doctor
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;全部打勾就说明没问题了。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;方式 B：手动安装&lt;/h3&gt;
&lt;p&gt;国内直连 GitHub 动不动就超时，这时候得手动来，一步步搞。参考大海资源网的方案：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第 1 步，更新系统包&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;第 2 步，装 Python 和编译工具&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install python3-pip python3-venv python3-full build-essential git -y
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;第 3 步，装必备工具&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install ripgrep ffmpeg -y
curl -fsSL &lt;a href=&quot;https://deb.nodesource.com/setup_22.x&quot;&gt;https://deb.nodesource.com/setup_22.x&lt;/a&gt; | sudo -E bash -
sudo apt install -y nodejs
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;第 4 步，改 GitHub Host&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;20.205.243.166 github.com&quot; | sudo tee -a /etc/hosts
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注意这个 IP 不一定一直能用，去站长工具（ping.chinaz.com）查最新的替换。实在不行的话&amp;hellip;&amp;hellip;你懂的，准备个梯子最省心。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第 5 步，克隆仓库&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;git clone &lt;a href=&quot;https://github.com/NousResearch/hermes-agent.git&quot;&gt;https://github.com/NousResearch/hermes-agent.git&lt;/a&gt; ~/.hermes/hermes-agent
cd ~/.hermes/hermes-agent
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;第 6 步，初始化子模块&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;git submodule update --init --recursive
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;第 7 步，装 uv&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;curl -LsSf &lt;a href=&quot;https://astral.sh/uv/install.sh&quot;&gt;https://astral.sh/uv/install.sh&lt;/a&gt; | sh
source $HOME/.local/bin/env
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;第 8 步，建虚拟环境&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;uv venv --python 3.11
source .venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;第 9 步，安装 Hermes&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;uv pip install -e . --index-url &lt;a href=&quot;https://pypi.tuna.tsinghua.edu.cn/simple&quot;&gt;https://pypi.tuna.tsinghua.edu.cn/simple&lt;/a&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这里加了&amp;nbsp;&lt;code&gt;--index-url&lt;/code&gt;&amp;nbsp;指定清华源，国内下载快很多。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;三、配置&lt;/h2&gt;
&lt;h3&gt;3.1 一键配置向导&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;hermes setup
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;跟着提示一步步走就行，它会帮你选模型、开工具、配网关。&lt;/p&gt;
&lt;h3&gt;3.2 选模型&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;hermes model
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;支持的提供商挺多的：&lt;/p&gt;
&lt;table style=&quot;width: 1783.2px;&quot;&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;Nous Portal&lt;/td&gt;
&lt;td&gt;官方模型，原生函数调用&lt;/td&gt;
&lt;td&gt;一般&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenRouter&lt;/td&gt;
&lt;td&gt;200+ 模型随便选&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;GPT-4o 系列&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek&lt;/td&gt;
&lt;td&gt;国内可用，便宜&lt;/td&gt;
&lt;td&gt;国内首选&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kimi&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;p&gt;国内用户建议直接用 DeepSeek。在&amp;nbsp;&lt;code&gt;hermes model&lt;/code&gt;&amp;nbsp;里选 More providers &amp;rarr; Custom endpoint，然后填这些：&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;Base URL：&lt;a href=&quot;https://api.deepseek.com/v1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;code&gt;https://api.deepseek.com/v1&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;API Key：去 DeepSeek 官网申请一个&lt;/li&gt;
&lt;li&gt;Model：&lt;code&gt;deepseek-chat&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3.3 配工具&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;hermes tools
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;文件操作、Shell 执行、网络请求、浏览器控制之类的，按需开就行。&lt;/p&gt;
&lt;h3&gt;3.4 消息网关（可选）&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;hermes gateway setup
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;可以接 6 个平台，接上之后手机上就能跟 AI 聊天了：&lt;/p&gt;
&lt;table style=&quot;width: 1783.2px;&quot;&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;Telegram&lt;/td&gt;
&lt;td&gt;@BotFather 创建 Bot Token&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discord&lt;/td&gt;
&lt;td&gt;创建 Discord Bot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slack&lt;/td&gt;
&lt;td&gt;Slack App 接入&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WhatsApp&lt;/td&gt;
&lt;td&gt;WhatsApp Business API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signal&lt;/td&gt;
&lt;td&gt;Signal 消息网关&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLI&lt;/td&gt;
&lt;td&gt;命令行，默认就是这个&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;3.5 环境变量&lt;/h3&gt;
&lt;p&gt;如果你更习惯直接改配置文件，编辑&amp;nbsp;&lt;code&gt;~/.hermes/.env&lt;/code&gt;：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;# API Key 填一个就行
OPENROUTER_API_KEY=sk-xxx
# 或者
OPENAI_API_KEY=sk-xxx
# 或者
DEEPSEEK_API_KEY=sk-xxx

# 需要代理的话
HTTPS_PROXY=&lt;a href=&quot;http://127.0.0.1:7890&quot;&gt;http://127.0.0.1:7890&lt;/a&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;四、启动&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;hermes
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;看到欢迎界面就 OK 了，直接打字聊就行。&lt;/p&gt;
&lt;p&gt;几个有用的命令：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;hermes config check    # 检查配置完不完整
hermes doctor          # 跑诊断，出问题了先跑这个
hermes gateway install # 装成 systemd 服务，后台 24 小时跑
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;五、核心功能&lt;/h2&gt;
&lt;h3&gt;三层记忆&lt;/h3&gt;
&lt;table style=&quot;width: 1783.2px;&quot;&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;当前对话上下文&lt;/td&gt;
&lt;td&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;自动总结的解决方案&lt;/td&gt;
&lt;td&gt;用多了形成的&quot;肌肉记忆&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;自进化&lt;/h3&gt;
&lt;p&gt;这是它跟其他 Agent 最大的区别。用大白话说就是：做完一个任务之后，它会自己总结经验，下次遇到类似的直接用之前的套路。相当于你带了个会记笔记、会复盘的实习生。&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre&gt;&lt;code&gt;用户下任务 &amp;rarr; Agent 执行 &amp;rarr; 做完了自动提取经验 &amp;rarr; 存成 Skill
&amp;rarr; 下次类似任务直接调用 Skill &amp;rarr; Skill 还会在使用中优化
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;内置工具&lt;/h3&gt;
&lt;p&gt;40 多个内置工具，文件操作、Shell、网络请求、浏览器控制、代码编辑基本都覆盖了。还支持 MCP 扩展。&lt;/p&gt;
&lt;h3&gt;定时任务&lt;/h3&gt;
&lt;p&gt;可以用自然语言设定时任务，比如：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;hermes schedule &quot;每天早上 8 点，汇总我的邮件并发送到 Telegram&quot;
hermes schedule list  # 查看已配的任务
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;RL 训练数据导出&lt;/h3&gt;
&lt;p&gt;每次执行任务的完整轨迹都会被记录，可以导出来微调模型：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;hermes export --format sharegpt --output training_data.json
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;用得越久，积累的数据越多，以后微调出来的模型就越好用。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;六、6 种部署后端&lt;/h2&gt;
&lt;table style=&quot;width: 1783.2px;&quot;&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;local&lt;/td&gt;
&lt;td&gt;本地调试&lt;/td&gt;
&lt;td&gt;默认，不用配&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;docker&lt;/td&gt;
&lt;td&gt;隔离沙箱，生产推荐&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hermes config set backend docker&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ssh&lt;/td&gt;
&lt;td&gt;远程服务器&lt;/td&gt;
&lt;td&gt;配 SSH 密钥&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;daytona&lt;/td&gt;
&lt;td&gt;无服务器持久化&lt;/td&gt;
&lt;td&gt;5 美元/月的 VPS 就能跑&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;modal&lt;/td&gt;
&lt;td&gt;云端函数&lt;/td&gt;
&lt;td&gt;需要 Modal 账号&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;singularity&lt;/td&gt;
&lt;td&gt;HPC 集群&lt;/td&gt;
&lt;td&gt;需要 Singularity 环境&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;省钱方案：Daytona 后端 + DeepSeek API，一个月几块钱。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;七、Docker 部署&lt;/h2&gt;
&lt;p&gt;不想折腾环境的话，Docker 最省事：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;docker pull nousresearch/hermes-agent:latest

docker run -it \
  -v ~/.hermes:/root/.hermes \
  -e OPENAI_API_KEY=your_key_here \
  nousresearch/hermes-agent:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;docker-compose 也行：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;yaml&quot;&gt;yaml&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;version: &quot;3.9&quot;
services:
  hermes:
    image: nousresearch/hermes-agent:latest
    volumes:
      - ~/.hermes:/root/.hermes
    environment:
      - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY}
    stdin_open: true
    tty: true
    restart: unless-stopped
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;八、从 OpenClaw 迁移&lt;/h2&gt;
&lt;p&gt;之前用 OpenClaw 的话，一行命令迁移：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;hermes claw migrate
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;SOUL.md、记忆、技能、API Key 都会搬过来。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;九、踩坑记录&lt;/h2&gt;
&lt;p&gt;下面这些坑我自己和社区的人都踩过，提前说一声。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;坑 1：hermes: command not found&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;最常见的报错，环境变量没刷新：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;还不行的话检查 PATH：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;echo $PATH | grep -o &#039;/usr/local/bin&#039;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;坑 2：小模型效果很差&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;别用 7B 这种小模型，多步骤任务到第三步就开始胡说八道。底层模型决定了上限，至少 70B 级别的，或者直接上 Claude Opus / GPT-4o。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;坑 3：记忆检索偶尔不准&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;持久记忆用的是 FTS5 全文搜索，语义理解能力有限，有时候会召回不相关的内容。可以手动清理：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;hermes memory list
hermes memory search &quot;关键词&quot;
hermes memory delete &amp;lt;id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;坑 4：GitHub 克隆超时&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;国内老问题，三种解法：改 Host（手动安装第 4 步）、用 Gitee 镜像、或者挂梯子。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;坑 5：Python 版本不对&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hermes 要 Python 3.11，系统上有多个版本的话：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;uv python install 3.11
uv venv .venv --python 3.11
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;坑 6：子模块缺失&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;克隆的时候忘了加&amp;nbsp;&lt;code&gt;--recurse-submodules&lt;/code&gt;：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;cd ~/.hermes/hermes-agent
git submodule update --init --recursive
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;坑 7：更新后配置报错&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;hermes config check
hermes config migrate
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;坑 8：Telegram 网关连不上&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.env&lt;/code&gt;&amp;nbsp;里加代理：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;HTTPS_PROXY=&lt;a href=&quot;http://127.0.0.1:7890&quot;&gt;http://127.0.0.1:7890&lt;/a&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;十、抄袭争议梳理&lt;/h2&gt;
&lt;p&gt;教程部分写完了，最近这个瓜挺值得聊的。&lt;/p&gt;
&lt;p&gt;4 月 15 号，中国团队 EvoMap 发了一篇技术对比报告。他们做了一个叫 Evolver 的 AI Agent 自进化引擎，2 月 1 号就开源了。结果发现 3 月 9 号才创建自进化仓库的 Hermes Agent，核心架构跟 Evolver 高度雷同。&lt;/p&gt;
&lt;p&gt;具体证据有三条：&lt;/p&gt;
&lt;table style=&quot;width: 1783.2px;&quot;&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;10 步主循环完全对应&lt;/td&gt;
&lt;td&gt;两个项目分别用 Python 和 Node.js 写的，但 10 步编排从头到尾一一对应&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12 组术语系统性替换&lt;/td&gt;
&lt;td&gt;逻辑骨架一模一样，就是变量名全换了&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7 份公开材料零引用&lt;/td&gt;
&lt;td&gt;引用了斯坦福、伯克利的东西，对最相似的 Evolver 连提都没提&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;时间线上，Evolver 2 月 1 号公开，Hermes 的自进化仓库 3 月 9 号才创建，晚了 36 天。Hermes 主仓库确实是 2025 年 7 月建的，但在 Evolver 公开之前一直是私有仓库，所有架构同构证据都集中在自进化模块。&lt;/p&gt;
&lt;p&gt;Nous Research 的官方回应：&quot;我们仓库 2025 年 7 月就有了。我们是先驱。Delete your account。&quot;&lt;/p&gt;
&lt;p&gt;没有任何技术层面的正面回应，直接让人删号。&lt;/p&gt;
&lt;p&gt;EvoMap 团队已经把 Evolver 核心模块改成混淆发布了，协议也从 MIT 换成了 GPL-3.0。&lt;/p&gt;
&lt;p&gt;这事儿其实暴露了一个更大的问题：传统开源协议（MIT、Apache、GPL）是给人设计的，防的是手动复制代码。但现在 AI 可以不抄一行原文，只复刻核心架构，产出一个跟原项目&quot;毫无重合&quot;的&quot;全新&quot;项目，传统的版权界定方式根本管不了。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;十一、同类产品对比&lt;/h2&gt;
&lt;table style=&quot;width: 1783.2px;&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;维度&lt;/th&gt;
&lt;th&gt;Hermes Agent&lt;/th&gt;
&lt;th&gt;OpenClaw&lt;/th&gt;
&lt;th&gt;AutoGPT&lt;/th&gt;
&lt;th&gt;CrewAI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stars&lt;/td&gt;
&lt;td&gt;9 万+&lt;/td&gt;
&lt;td&gt;35 万+&lt;/td&gt;
&lt;td&gt;~17 万&lt;/td&gt;
&lt;td&gt;~3 万&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;协议&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;部分开源&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;自进化 Skills&lt;/td&gt;
&lt;td&gt;自动创建+优化&lt;/td&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;有&lt;/td&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;200+&lt;/td&gt;
&lt;td&gt;仅 OpenAI&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;6 种&lt;/td&gt;
&lt;td&gt;CLI&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;6 种&lt;/td&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;RL 数据导出&lt;/td&gt;
&lt;td&gt;有&lt;/td&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;hr /&gt;
&lt;h2&gt;十二、可选功能包&lt;/h2&gt;
&lt;p&gt;有些功能需要额外装：&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong title=&quot;bash&quot;&gt;bash&lt;/strong&gt;
&lt;div&gt;
&lt;div tabindex=&quot;0&quot; title=&quot;复制&quot; role=&quot;button&quot; aria-label=&quot;复制&quot;&gt;复制&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div tabindex=&quot;0&quot; role=&quot;button&quot; aria-expanded=&quot;true&quot; aria-label=&quot;Collapse&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;# 语音
pip install &quot;hermes-agent[voice]&quot;

# 消息平台
pip install &quot;hermes-agent[messaging]&quot;

# 浏览器自动化
pip install &quot;hermes-agent[browser]&quot;

# 图片生成
pip install &quot;hermes-agent[image]&quot;

# 向量数据库，增强记忆检索
pip install &quot;hermes-agent[vector]&quot;

# 全装上
pip install &quot;hermes-agent[all]&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;最后说两句&lt;/h2&gt;
&lt;p&gt;Hermes Agent 功能设计确实不错，三层记忆 + 自进化 + 多平台网关，是目前为数不多真正能&quot;越用越好用&quot;的 Agent。抄袭争议给它抹了一笔黑，但作为开源工具，该用还是能用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;适合这些朋友：&lt;/strong&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;在意数据隐私、想本地部署的&lt;/li&gt;
&lt;li&gt;有模型微调需求、需要积累训练数据的&lt;/li&gt;
&lt;li&gt;想要一个能长期记住你的 AI 助手的&lt;/li&gt;
&lt;li&gt;纯粹好奇想折腾一下的&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;这些情况就算了：&lt;/strong&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;不想碰命令行的&lt;/li&gt;
&lt;li&gt;想要开箱即用图形界面的&lt;/li&gt;
&lt;li&gt;完全没有 API 预算的&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 16 Apr 2026 21:56:13 +0800</pubDate></item><item><title>Diskinfo固态硬盘健康度检测</title><link>https://madao.org/?id=41</link><description>&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 电脑硬盘的检查至关重要，其中有两个关键检查点务必留意，那就是查看硬盘通电时长和读写损耗。有需要的朋友赶紧点赞收藏，以免日后需要时找不到了。&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;首先，当我们着手进行硬盘的检测时，打开图吧工具箱，在其中找到磁盘工具。&lt;/div&gt;
&lt;div&gt;要知道，AsssD 和 Disc Mark 可是专门用于测量固态硬盘读写的得力工具。&lt;/div&gt;
&lt;div&gt;我们打开 disc mark 之后，点击选择测试盘，在进行 mark 测速时，千万要留意别测系统盘，同时勾选最大容量。&lt;/div&gt;
&lt;div&gt;在此过程中，先查看一下硬盘还剩余多少空间，举个例子，假如您购买了一个 1T 的固态，至少要保留 300g 的空间才较为合理。&lt;/div&gt;
&lt;div&gt;接下来测机械硬盘的时候，相对而言可以较为随意，测 1 个 G 通常就可以了。不过对于 MVME 固态，建议选择 32g 起步进行测试，否则难以测得准确速度。&lt;/div&gt;
&lt;div&gt;而 Diskinfo 这个工具，简直可以说是用来清查硬盘&amp;ldquo;户口&amp;rdquo;的神器，它能够清晰地查看硬盘的通电时长、次数以及读取写入量。&lt;/div&gt;
&lt;div&gt;一般来说，新电脑的通电时间通常不会超过 50 小时，开关机次数也不应超过 20 次。倘若发现这些数字存在异常，那很可能意味着硬盘存在某种猫腻，此时您就得加倍小心了。&lt;/div&gt;
&lt;div&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260410154553177580715362468.png&quot; /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;其次，我们还要看看接口是否正确。有时候，明明说好的是 NVME 固态硬盘，却给您装个 SATA 来糊弄您。硬盘的健康度必须达到 100%，一旦出现黄色警告，那就别犹豫，赶紧退货，没有任何商量的余地。&lt;/div&gt;
&lt;div&gt;最后，再来说说 SiskGenius 这个工具。新手千万要慎用，因为它很容易造成数据丢失。如果要进行分区，记得一定要勾选4096扇区，也就是所谓的 4K 对齐。特别是老电脑在升级固态硬盘，准备重装系统之前，务必要做好对齐工作。&lt;/div&gt;
&lt;div&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260410154626177580718635927.png&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;</description><pubDate>Fri, 10 Apr 2026 15:44:34 +0800</pubDate></item><item><title>一个包含把ERP、CRM、HRM、项目管理的好用开源平台</title><link>https://madao.org/?id=40</link><description>&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;做企业的，痛点都差不多：&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;人事用一个系统，客户管理用一个系统，项目进度用一个系统，财务又用一个系统。光系统对接就够喝一壶的，更别提数据分散、流程割裂的问题。&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;Ever Gauzy 是一个开源的企业管理平台，把ERP、CRM&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;、HRM、项目管理这些模块整合到了一起。AGPL 3.0协议，代码全开&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409230354177574703413849.png&quot; /&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;
&lt;section data-mpa-md-key=&quot;heading-1&quot;&gt;
&lt;section data-mid=&quot;&quot;&gt;
&lt;section data-mid=&quot;&quot;&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mid=&quot;&quot; data-mpa-md-content=&quot;t&quot;&gt;覆盖了哪些业务&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section data-mpa-md-key=&quot;heading-2&quot;&gt;
&lt;section&gt;
&lt;section&gt;&lt;br /&gt;&lt;span data-set-border-color=&quot;c1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-content=&quot;t&quot;&gt;人力资源管理（HRM）&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;员工管理、入离职、考勤排班、请假审批、绩效目标（OKR/KPI）、候选人面试追踪（ATS）。从招人到管人，一套流程覆盖。&lt;/section&gt;
&lt;section data-mpa-md-key=&quot;heading-2&quot;&gt;
&lt;section&gt;
&lt;section&gt;&lt;br /&gt;&lt;span data-set-border-color=&quot;c1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-content=&quot;t&quot;&gt;客户关系管理（CRM）&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;客户/潜在客户管理、销售管线、报价、提案。&lt;/section&gt;
&lt;section data-mpa-md-key=&quot;heading-2&quot;&gt;
&lt;section&gt;
&lt;section&gt;&lt;br /&gt;&lt;span data-set-border-color=&quot;c1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-content=&quot;t&quot;&gt;项目管理（PM）&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;项目创建、任务分配、进度追踪、日程安排。&lt;/section&gt;
&lt;section data-mpa-md-key=&quot;heading-2&quot;&gt;
&lt;section&gt;
&lt;section&gt;&lt;br /&gt;&lt;span data-set-border-color=&quot;c1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-content=&quot;t&quot;&gt;财务与成本管理&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;记账、发票、收款付款、收入支出管理、多币种支持。&lt;/section&gt;
&lt;section data-mpa-md-key=&quot;heading-2&quot;&gt;
&lt;section&gt;
&lt;section&gt;&lt;span data-set-border-color=&quot;c1&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-content=&quot;t&quot;&gt;时间追踪&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;员工工时记录、活动监控、工作效率分析。有专门的桌面计时器客户端。&lt;/section&gt;
&lt;section data-mpa-md-key=&quot;heading-2&quot;&gt;
&lt;section&gt;
&lt;section&gt;&lt;br /&gt;&lt;span data-set-border-color=&quot;c1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-content=&quot;t&quot;&gt;其他&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;库存管理、设备共享、多组织管理、多语言、多主题（深色/浅色/企业主题）、报表与分析、知识库、邮件模板、数据导入导出。&lt;/section&gt;
&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409230447177574708785863.png&quot; /&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409230528177574712843812.png&quot; /&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409230549177574714984233.png&quot; /&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409230621177574718117404.png&quot; /&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;
&lt;section data-mpa-md-key=&quot;heading-1&quot;&gt;
&lt;section data-mid=&quot;&quot;&gt;
&lt;section data-mid=&quot;&quot;&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mid=&quot;&quot; data-mpa-md-content=&quot;t&quot;&gt;&lt;br /&gt;技术栈&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section data-mpa-md-key=&quot;heading-2&quot;&gt;
&lt;section&gt;
&lt;section&gt;&lt;br /&gt;&lt;span data-set-border-color=&quot;c1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-content=&quot;t&quot;&gt;前端&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;TypeScript + Angular&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;基于 Nx monorepo 管理&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;section data-mpa-md-key=&quot;heading-2&quot;&gt;
&lt;section&gt;
&lt;section&gt;&lt;br /&gt;&lt;span data-set-border-color=&quot;c1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-content=&quot;t&quot;&gt;后端&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;Node.js + NestJS&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;TypeORM / MikroORM / Knex&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;section data-mpa-md-key=&quot;heading-2&quot;&gt;
&lt;section&gt;
&lt;section&gt;&lt;br /&gt;&lt;span data-set-border-color=&quot;c1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-content=&quot;t&quot;&gt;数据库&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;支持多种：SQLite（默认演示用）、PostgreSQL（推荐生产用）、MySQL、MariaDB、CockroachDB、MS SQL、Oracle、MongoDB。&lt;/section&gt;
&lt;section data-mpa-md-key=&quot;heading-2&quot;&gt;
&lt;section&gt;
&lt;section&gt;&lt;br /&gt;&lt;span data-set-border-color=&quot;c1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-content=&quot;t&quot;&gt;基础设施（Docker部署时）&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;PostgreSQL：主数据库&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;OpenSearch：搜索引擎&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;Redis：缓存&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;MinIO：对象存储（S3兼容）&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;Cube.js：BI报表&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;Jitsu：数据采集&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;section data-mpa-md-key=&quot;heading-1&quot;&gt;
&lt;section data-mid=&quot;&quot;&gt;
&lt;section data-mid=&quot;&quot;&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mid=&quot;&quot; data-mpa-md-content=&quot;t&quot;&gt;&lt;br /&gt;部署方式&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section data-mpa-md-key=&quot;heading-2&quot;&gt;
&lt;section&gt;
&lt;section&gt;&lt;br /&gt;&lt;span data-set-border-color=&quot;c1&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-content=&quot;t&quot;&gt;最快体验：Docker一键启动&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section data-mpa-md-key=&quot;common&quot;&gt;
&lt;section data-pm-slice=&quot;0 0 []&quot; data-mpa-action-id=&quot;mnioraa6zfn&quot;&gt;&lt;/section&gt;
&lt;section data-mpa-action-id=&quot;mnioraa613oa&quot; data-mpa-template=&quot;t&quot; data-mpa-preserve-tpl-color=&quot;t&quot;&gt;
&lt;pre&gt;&lt;code&gt;docker-compose -f docker-compose.demo.yml up&lt;/code&gt;&lt;/pre&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;打开浏览器访问&amp;nbsp;&lt;a href=&quot;http://localhost:4200&quot;&gt;http://localhost:4200&lt;/a&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;管理员账号：admin@ever.co / admin&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;员工账号：employee@ever.co / 123456&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;推荐用 Kubernetes，也支持 Docker Compose。配置文件 .env.compose 里可以自定义数据库类型等参数。&lt;/section&gt;
&lt;br /&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409230820177574730067278.png&quot; /&gt;&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;
&lt;section data-mpa-md-key=&quot;heading-1&quot;&gt;
&lt;section data-mid=&quot;&quot;&gt;
&lt;section data-mid=&quot;&quot;&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mid=&quot;&quot; data-mpa-md-content=&quot;t&quot;&gt;&lt;br /&gt;桌面客户端&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;text&quot;&gt;提供三个版本：&lt;/section&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;ordered-list&quot; data-mpa-md-content=&quot;t&quot;&gt;Gauzy Server：包含API + 数据库 + 前端，适合小团队部署&lt;/section&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-content=&quot;t&quot;&gt;Gauzy Desktop App：全功能桌面端，可独立运行也可连接远程服务器&lt;/section&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-content=&quot;t&quot;&gt;Gauzy Desktop Timer：专注工时记录和活动监控的轻量客户端&lt;/section&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409230844177574732469672.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;section data-mpa-md-key=&quot;heading-1&quot;&gt;
&lt;section data-mid=&quot;&quot;&gt;
&lt;section data-mid=&quot;&quot;&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mid=&quot;&quot; data-mpa-md-content=&quot;t&quot;&gt;适合谁&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;中小企业想用一个平台搞定多个业务模块的&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;不想把数据分散在多个SaaS里的团队&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;需要私有化部署、对数据安全有要求的组织&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;想基于开源平台做二次开发的团队&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;section data-mpa-md-key=&quot;heading-1&quot;&gt;
&lt;section data-mid=&quot;&quot;&gt;
&lt;section data-mid=&quot;&quot;&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mid=&quot;&quot; data-mpa-md-content=&quot;t&quot;&gt;注意事项&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;SaaS版本目前还在Alpha阶段，功能不太稳定，谨慎使用&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;项目体积较大，本地构建耗时较长&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;推荐用预构建的Docker镜像，而不是从头本地编译&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;section data-mpa-md-action-id=&quot;$id&quot; data-mpa-md-key=&quot;bullet-list&quot; data-mpa-md-content=&quot;t&quot;&gt;生产环境建议用PostgreSQL，不要用SQLite&lt;/section&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;</description><pubDate>Thu, 09 Apr 2026 23:03:13 +0800</pubDate></item><item><title>响应式布局的常用解决方案对比(媒体查询、百分比、rem和vw/vh）</title><link>https://madao.org/?id=39</link><description>&lt;p&gt;简要介绍：前端开发中，静态网页通常需要适应不同&lt;span data-pretit=&quot;分辨率&quot; data-tit=&quot;分辨率&quot;&gt;分辨率&lt;/span&gt;的设备，常用的自适应解决方案包括媒体查询、百分比、rem和vw/vh等。本文从px单位出发，分析了px在移动端布局中的不足，接着介绍了几种不同的自适应解决方案。&lt;/p&gt;
&lt;ul style=&quot;list-style-type: none;&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;px和视口&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;媒体查询&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;百分比&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;自适应场景下的rem解决方案&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;通过vw/vh来实现自适应&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;一、px和视口&lt;/h3&gt;
&lt;p&gt;在静态网页中，我们经常用像素（px）作为单位，来描述一个元素的宽高以及定位信息。在pc端，通常认为&lt;span data-pretit=&quot;css&quot; data-tit=&quot;css&quot;&gt;css&lt;/span&gt;中,1px所表示的真实长度是固定的。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;那么，px真的是一个设备无关，跟长度单位米和分米一样是固定大小的吗？&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;字体都是16px，显然在pc端中文字正常显示，而在移动端文字很小，几乎看不到，说明在css中1px并不是固定大小，直观从我们发现在移动端1px所表示的长度较小，所以导致文字显示不清楚。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;那么css中的1px的真实长度到底由什么决定呢？&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;为了理清楚这个概念我们首先介绍像素和视口的概念&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;t1&quot;&gt;&lt;/a&gt;1. 像素&lt;/h4&gt;
&lt;p&gt;像素是网页布局的基础，一个像素表示了计算机屏幕所能显示的最小区域，像素分为两种类型：css像素和物理像素。&lt;/p&gt;
&lt;p&gt;我们在js或者css代码中使用的px单位就是指的是css像素，物理像素也称设备像素，只与设备或者说硬件有关，同样尺寸的屏幕，设备的密度越高，物理像素也就越多。下表表示css像素和物理像素的具体区别：&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;width: 962px; height: 44px;&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;th style=&quot;height: 22px;&quot;&gt;css像素&lt;/th&gt;
&lt;th style=&quot;height: 22px;&quot;&gt;为web开发者提供，在css中使用的一个抽象单位&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;物理像素&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;只与设备的硬件密度有关，任何设备的物理像素都是固定的&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;那么css像素与物理像素的转换关系是怎么样的呢？为了明确css像素和物理像素的转换关系，必须先了解视口是什么。&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;t2&quot;&gt;&lt;/a&gt;2. 视口&lt;/h4&gt;
&lt;p&gt;广义的视口，是指浏览器显示内容的屏幕区域，狭义的视口包括了布局视口、视觉视口和理想视口&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;t3&quot;&gt;&lt;/a&gt;(1) 布局视口（layout viewport）&lt;/h4&gt;
&lt;p&gt;布局视口定义了pc网页在移动端的默认布局行为，因为通常pc的分辨率较大，布局视口默认为980px。也就是说在不设置网页的viewport的情况下，pc端的网页默认会以布局视口为基准，在移动端进行展示。因此我们可以明显看出来，默认为布局视口时，根植于pc端的网页在移动端展示很模糊。&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;t4&quot;&gt;&lt;/a&gt;(2) 视觉视口（visual viewport）&lt;/h4&gt;
&lt;p&gt;视觉视口表示浏览器内看到的网站的显示区域，用户可以通过缩放来查看网页的显示内容，从而改变视觉视口。视觉视口的定义，就像拿着一个放大镜分别从不同距离观察同一个物体，视觉视口仅仅类似于放大镜中显示的内容，因此视觉视口不会影响布局视口的宽度和高度。&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;t5&quot;&gt;&lt;/a&gt;(3) 理想视口（ideal viewport）&lt;/h4&gt;
&lt;p&gt;理想视口或者应该全称为&amp;ldquo;理想的布局视口&amp;rdquo;，在移动设备中就是指设备的分辨率。换句话说，理想视口或者说分辨率就是给定设备物理像素的情况下，最佳的&amp;ldquo;布局视口&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;上述视口中，最重要的是要明确理想视口的概念，在移动端中，理想视口或者说分辨率跟物理像素之间有什么关系呢？&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;为了理清分辨率和物理像素之间的联系，我们介绍一个用DPR（Device pixel ratio）设备像素比来表示，则可以写成：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409225257177574637733651.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;在不缩放的情况下，一个css像素就对应一个dpr，也就是说，在不缩放&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409225307177574638763014.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;此外，在移动端的布局中，我们可以通过viewport元标签来控制布局，比如一般情况下，我们可以通过下述标签使得移动端在理想视口下布局：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409225351177574643178966.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;上述&lt;span data-tit=&quot;meta&quot; data-report-query=&quot;spm=1001.2101.3001.11407&quot; data-report-click=&quot;{&amp;quot;spm&amp;quot;:&amp;quot;3001.11407&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;https://ai.csdn.net/?openMirrorId=img69736f27150c352fb916418f&amp;amp;utm_source=xtai_slb_kw_0310&amp;quot;,&amp;quot;extra&amp;quot;:{&amp;quot;wordId&amp;quot;:138880,&amp;quot;businessId&amp;quot;:2,&amp;quot;word&amp;quot;:&amp;quot;Meta&amp;quot;,&amp;quot;blogTemplateId&amp;quot;:-1}}&quot; data-href=&quot;https://ai.csdn.net/?openMirrorId=img69736f27150c352fb916418f&amp;amp;utm_source=xtai_slb_kw_0310&quot;&gt;meta&lt;/span&gt;标签的每一个属性的详细介绍如下：&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;width: 962px;&quot;&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;width&lt;/td&gt;
&lt;td&gt;正整数&lt;/td&gt;
&lt;td&gt;定义布局视口的宽度，单位为像素&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;height&lt;/td&gt;
&lt;td&gt;正整数&lt;/td&gt;
&lt;td&gt;定义布局视口的高度，单位为像素，很少使用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;initial-scale&lt;/td&gt;
&lt;td&gt;[0,10]&lt;/td&gt;
&lt;td&gt;初始缩放比例，1表示不缩放&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minimum-scale&lt;/td&gt;
&lt;td&gt;[0,10]&lt;/td&gt;
&lt;td&gt;最小缩放比例&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;maximum-scale&lt;/td&gt;
&lt;td&gt;[0,10]&lt;/td&gt;
&lt;td&gt;最大缩放比例&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;user-scalable&lt;/td&gt;
&lt;td&gt;yes／no&lt;/td&gt;
&lt;td&gt;是否允许手动缩放页面，默认值为yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;其中我们来看width属性，在移动端布局时，在meta标签中我们会将width设置称为device-width，device-width一般是表示分辨率的宽，通过width=device-width的设置我们就将布局视口设置成了理想的视口。&lt;/p&gt;
&lt;h4&gt;3. px与自适应&lt;/h4&gt;
&lt;p&gt;上述我们了解到了当通过viewport元标签，设置布局视口为理想视口时，1个css像素可以表示成：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409225417177574645743832.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我们直到，在pc端的布局视口通常情况下为980px，移动端以iphone6为例，分辨率为375 * 667，也就是说布局视口在理想的情况下为375px。比如现在我们有一个750px * 1134px的视觉稿，那么在pc端，一个css像素可以如下计算&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409225433177574647312984.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;而在iphone6下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409225444177574648463034.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;也就是说在PC端，一个CSS像素可以用0.76个物理像素来表示，而iphone6中 一个CSS像素表示了2个物理像素。此外不同的移动设备分辨率不同，也就是1个CSS像素可以表示的物理像素是不同的，因此如果在css中仅仅通过px作为长度和宽度的单位，造成的结果就是无法通过一套样式，实现各端的自适应。&lt;/p&gt;
&lt;h3&gt;&lt;a name=&quot;t7&quot;&gt;&lt;/a&gt;二、媒体查询&lt;/h3&gt;
&lt;p&gt;在前面我们说到，不同端的设备下，在css文件中，1px所表示的物理像素的大小是不同的，因此通过一套样式，是无法实现各端的自适应。由此我们联想：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;如果一套样式不行，那么能否给每一种设备各一套不同的样式来实现自适应的效果？&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;答案是肯定的。&lt;/p&gt;
&lt;p&gt;使用&lt;a title=&quot;@media&quot; href=&quot;https://github.com/media&quot;&gt;@media&lt;/a&gt;媒体查询可以针对不同的媒体类型定义不同的样式，特别是&lt;span data-pretit=&quot;响应式&quot; data-tit=&quot;响应式&quot;&gt;响应式&lt;/span&gt;页面，可以针对不同屏幕的大小，编写多套样式，从而达到自适应的效果。举例来说：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409225610177574657096690.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;上述的代码通过媒体查询定义了几套样式，通过max-width设置样式生效时的最大分辨率，上述的代码分别对分辨率在0～320px，320px～550px，550px～768px以及768px～960px的屏幕设置了不同的背景颜色。&lt;/p&gt;
&lt;p&gt;通过媒体查询，可以通过给不同分辨率的设备编写不同的样式来实现响应式的布局，比如我们为不同分辨率的屏幕，设置不同的背景图片。比如给小屏幕手机设置&lt;a title=&quot;@2x&quot; href=&quot;https://github.com/2x&quot;&gt;@2x&lt;/a&gt;图，为大屏幕手机设置&lt;a title=&quot;@3x&quot; href=&quot;https://github.com/3x&quot;&gt;@3x&lt;/a&gt;图，通过媒体查询就能很方便的实现。&lt;/p&gt;
&lt;p&gt;但是媒体查询的缺点也很明显，如果在浏览器大小改变时，需要改变的样式太多，那么多套样式代码会很繁琐。&lt;/p&gt;
&lt;h3&gt;&lt;a name=&quot;t8&quot;&gt;&lt;/a&gt;三、&lt;span data-pretit=&quot;百分比&quot; data-tit=&quot;百分比&quot;&gt;百分比&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;除了用px结合媒体查询实现响应式布局外，我们也可以通过百分比单位 &quot; % &quot; 来实现响应式的效果。&lt;/p&gt;
&lt;p&gt;比如当浏览器的宽度或者高度发生变化时，通过百分比单位，通过百分比单位可以使得浏览器中的组件的宽和高随着浏览器的变化而变化，从而实现响应式的效果。&lt;/p&gt;
&lt;p&gt;为了了解百分比布局，首先要了解的问题是：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;css中的子元素中的百分比（%）到底是谁的百分比？&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;直观的理解，我们可能会认为子元素的百分比完全相对于直接父元素，height百分比相对于height，width百分比相对于width。当然这种理解是正确的，但是根据css的盒式模型，除了height、width属性外，还具有padding、border、margin等等属性。那么这些属性设置成百分比，是根据父元素的那些属性呢？此外还有border-radius和translate等属性中的百分比，又是相对于什么呢？下面来具体分析。&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;t9&quot;&gt;&lt;/a&gt;1. 百分比的具体分析&lt;/h4&gt;
&lt;p&gt;（1）子元素height和width的百分比&lt;/p&gt;
&lt;p&gt;子元素的height或width中使用百分比，是相对于子元素的直接父元素，width相对于父元素的width，height相对于父元素的height。比如：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409225626177574658684232.png&quot; /&gt;&lt;/p&gt;
&lt;pre data-index=&quot;7&quot;&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;</description><pubDate>Thu, 09 Apr 2026 22:51:30 +0800</pubDate></item><item><title>移动端不同屏幕适配的方法</title><link>https://madao.org/?id=38</link><description>&lt;h3&gt;1.使用js修改rem值的大小&lt;/h3&gt;
&lt;p&gt;这个方法比较简单，获取其他手机屏幕相对于iphone5手机屏幕的大小，然后放大和缩小html的fontsize值就可以了。这个方法有个缺点就是fontsize值可能为小数，有可能导致页面上的文字出现模糊不清的情况。只要微调 下就可以并不是大的问题。js代码如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409224926177574616699459.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;使用上面这段代码是有前提的，就是页面必须要加这段html代码。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409224939177574617999565.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;原因如下：&lt;/p&gt;
&lt;p&gt;在移动端的发展过程中，早期的手机为了正常显示pc页面，手机默认的viewport的宽度并不是手机屏幕的宽度，一般默认的viewport宽度为980px，当然也有手机默认的宽度为1280px。这样如果你不把viewport的宽度设置为device-width的话，window.innerWidth就是默认值 980px或者是1280px。这样我们上一段代码就有问题了。我们使用window.innerWidth获取的并不是屏幕的宽度，所以求出来的scale也就错了。&lt;/p&gt;
&lt;p&gt;解决方法有两个，一个是加上meta那一段html代码，既设置viewport的width为device-width。推荐使用这个方法（其实现在的移动端页面都有这段代码）。第二个方法就是改用screen.width而不是使用window.innerWidth。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409224956177574619665902.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;2.使用媒体查询适配&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;使用媒体查询设置html元素font-size的大小。这个方法简单但是工作量较多，一来是需要知道市场上所有主流的手机的屏幕尺寸，二来如果未来出现新的机型号到时候可能又会出现页面不适配的情况。当时这个方法确实比较简单一点，媒体查询的css如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409225018177574621878915.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;3.flex布局：主流的布局方式，不仅适用于移动Web，网页上也表现良好，这也是现在工作中用的最多的布局方式，因此我们的项目 尽量采用flex+rem的方式进行布局和完成移动端的适配。&lt;/p&gt;
&lt;p&gt;rem是相对长度单位，可以做到一样的取值，在不同尺寸的屏幕上的大小按比例缩放。&lt;br /&gt;rem的定义：rem（font size of the root element）是相对于根元素（即html元素）font-size计算值的倍数。&lt;br /&gt;例如html标签设置font-size:16px，同时div设置width:1.2rem。那么这个div的宽度就是1.2rem=16px*1.2=19.2px。&lt;br /&gt;因此这种方法的适配原理是：根据不同屏幕的宽度，以相同的比例动态修改html的font-size适配，并将px替换成rem，它可以很好的根据根元素的字体大小来进行变化，从而达到各种屏幕基本一直的效果体验。&lt;/p&gt;
&lt;p&gt;明白了REM的原理后，我们就可以使用这个特点来进行适应布局了，这也是现在比较主流的移动端web适配方案。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409225034177574623463473.png&quot; /&gt;&lt;/p&gt;</description><pubDate>Thu, 09 Apr 2026 22:48:41 +0800</pubDate></item><item><title>原生js实现文件分片上传</title><link>https://madao.org/?id=37</link><description>&lt;p&gt;分片上传是一种文件上传技术，它允许将大文件分割成多个较小的片段（通常称为&amp;ldquo;分片&amp;rdquo;或&amp;ldquo;块&amp;rdquo;），然后将这些片段分别上传到服务器。服务器在接收到所有分片后，会将它们组合成一个完整的文件。&lt;/p&gt;
&lt;h3&gt;分片上传有以下优点：&lt;/h3&gt;
&lt;h3&gt;可以支持大文件上传。&lt;/h3&gt;
&lt;p&gt;由于文件被分割成多个较小的片段，因此可以避免单次上传文件过大导致的问题。&lt;/p&gt;
&lt;h3&gt;可以提高上传速度。&lt;/h3&gt;
&lt;p&gt;由于每个分片都是独立上传的，因此可以并行上传多个分片，从而提高上传速度。&lt;/p&gt;
&lt;h3&gt;可以支持断点续传。&lt;/h3&gt;
&lt;p&gt;如果某个分片上传失败，可以重新上传这个分片，而不需要重新上传整个文件。&lt;/p&gt;
&lt;p&gt;实现分片上传需要前端和后端配合。前端需要将文件分割成多个分片，并将每个分片单独上传到服务器；后端需要接收这些分片，并在接收到所有分片后将它们组合成一个完整的文件。&lt;/p&gt;
&lt;h3&gt;示例代码如下：&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409224705177574602537859.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;在上面的代码中，我们首先获取用户选择的文件，然后计算出分片总数。接着，我们使用一个循环来遍历每个分片，并使用 File 对象的 slice 方法将文件分割成多个分片。&lt;/p&gt;
&lt;p&gt;对于每个分片，我们创建一个 FormData 对象，并将分片、文件名、分片索引和分片总数添加到表单数据中。然后，我们使用 fetch 函数向服务器发送一个 POST 请求，将表单数据上传到服务器。&lt;/p&gt;
&lt;p&gt;需要注意的是，上面的代码仅仅是一个简单的示例，实际应用中可能需要更多的错误处理和进度显示等功能。此外，后端也需要相应地处理分片上传。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description><pubDate>Thu, 09 Apr 2026 22:45:01 +0800</pubDate></item><item><title>windows本地安装postgres教程</title><link>https://madao.org/?id=36</link><description>&lt;h1&gt;&amp;zwnj;安装步骤&amp;zwnj;&lt;/h1&gt;
&lt;h3&gt;&lt;br /&gt;&amp;zwnj;下载安装包&amp;zwnj;&lt;/h3&gt;
&lt;p&gt;&lt;br /&gt;访问 PostgreSQL 官方下载页面：&lt;br /&gt;&lt;a href=&quot;https://www.enterprisedb.com/downloads/postgres-postgresql-downloads&quot;&gt;https://www.enterprisedb.com/downloads/postgres-postgresql-downloads&lt;/a&gt;&lt;br /&gt;选择适用于 Windows 的 &amp;zwnj;64 位版本（x86-64）&amp;zwnj;，下载 .exe 安装文件。&lt;/p&gt;
&lt;p&gt;这里我选择的是win-64版本的&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;float: left;&quot; src=&quot;https://madao.org/zb_users/upload/2026/04/20260409223949177574558997111.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;float: left;&quot; src=&quot;https://madao.org/zb_users/upload/2026/04/20260409224000177574560013354.png&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;&amp;zwnj;运行安装程序&amp;zwnj;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;右键安装包 &amp;rarr; &amp;zwnj;&amp;ldquo;以管理员身份运行&amp;rdquo;&amp;zwnj;（避免权限问题）&amp;zwnj;8。&lt;/li&gt;
&lt;li&gt;点击 &amp;zwnj;Next&amp;zwnj; 进入下一步。&lt;/li&gt;
&lt;li&gt;&amp;zwnj;设置安装路径&amp;zwnj;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;默认路径为 C:\Program Files\PostgreSQL\XX，建议&amp;zwnj;改到非系统盘&amp;zwnj;（如 D 盘），避免 C 盘空间不足&amp;zwnj;35。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;这里我选择的d盘&lt;br /&gt;点击 &amp;zwnj;Next&amp;zwnj;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409224141177574570194838.png&quot; /&gt;&lt;br /&gt;设置一下密码，然后一路next&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409224203177574572352022.png&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;&lt;br /&gt;&amp;zwnj;选择安装组件&amp;zwnj;&lt;/h3&gt;
&lt;p&gt;默认全选（包括 pgAdmin、Stack Builder 等）。&lt;br /&gt;若不确定用途，&amp;zwnj;保持全选&amp;zwnj;；若仅需数据库核心，可取消 Stack Builder（后续可单独安装扩展）&amp;zwnj;35。&lt;br /&gt;点击 &amp;zwnj;Next&amp;zwnj;。&lt;/p&gt;
&lt;h3&gt;&lt;br /&gt;&amp;zwnj;设置数据目录&amp;zwnj;&lt;/h3&gt;
&lt;p&gt;默认为安装路径下的 data 子目录。&lt;br /&gt;建议&amp;zwnj;不要放在系统盘&amp;zwnj;（如 C 盘），可指定如 D:\PostgreSQL\data&amp;zwnj;36。&lt;br /&gt;点击 &amp;zwnj;Next&amp;zwnj;。&lt;/p&gt;
&lt;h3&gt;&lt;br /&gt;&amp;zwnj;设置超级用户密码&amp;zwnj;&lt;/h3&gt;
&lt;p&gt;超级用户名默认为 postgres。&lt;br /&gt;&amp;zwnj;务必设置并牢记密码&amp;zwnj;，后续连接数据库、pgAdmin 等均需使用&amp;zwnj;12。&lt;br /&gt;点击 &amp;zwnj;Next&amp;zwnj;。&lt;/p&gt;
&lt;h3&gt;&lt;br /&gt;&amp;zwnj;设置端口号&amp;zwnj;&lt;/h3&gt;
&lt;p&gt;默认端口为 &amp;zwnj;5432&amp;zwnj;。&lt;br /&gt;若该端口已被占用（如其他数据库服务），可改为 &amp;zwnj;5433&amp;zwnj; 或更高（需确保不冲突）&amp;zwnj;36。&lt;br /&gt;点击 &amp;zwnj;Next&amp;zwnj;。&lt;/p&gt;
&lt;h3&gt;&lt;br /&gt;&amp;zwnj;设置区域与编码&amp;zwnj;&lt;/h3&gt;
&lt;p&gt;&amp;zwnj;关键提示&amp;zwnj;：&lt;br /&gt;&amp;zwnj;不要选择中文地区（如 Chinese (Simplified)）&amp;zwnj;，否则可能因编码问题导致安装失败或乱码&amp;zwnj;29。&lt;br /&gt;建议选择 &amp;zwnj;默认（C）&amp;zwnj; 或 &amp;zwnj;English (United States)&amp;zwnj;&amp;zwnj;9。&lt;br /&gt;点击 &amp;zwnj;Next&amp;zwnj;。&lt;br /&gt;&amp;zwnj;确认信息并安装&amp;zwnj;&lt;/p&gt;
&lt;p&gt;核对设置无误后，点击 &amp;zwnj;Install&amp;zwnj; 开始安装。&lt;br /&gt;安装过程需几分钟，完成后点击 &amp;zwnj;Finish&amp;zwnj;&amp;zwnj;15。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409224306177574578667149.png&quot; /&gt;&lt;br /&gt;&amp;nbsp;一路漫长的安装等待&lt;/p&gt;
&lt;p&gt;可以使用navicat链接测一下有么有安装成功，填入刚刚设置的账号密码&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;如图显示安装成功&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409224322177574580236246.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409224330177574581058543.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;安装成功以后会自动打开页面这里可以不用安装选择取消&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description><pubDate>Thu, 09 Apr 2026 22:38:04 +0800</pubDate></item><item><title>关于uniapp的vue2.x版本的路由守卫拦截方案</title><link>https://madao.org/?id=35</link><description>&lt;p&gt;使用uni-read-pages和uni-simple-router实现，方案思路如下&lt;/p&gt;
&lt;p&gt;首先在packge.json把下面两个依赖npm install 一下，我目前是这两个版本，别的版本号没有测试过&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409223612177574537215996.png&quot; /&gt;&lt;br /&gt;一键获取完整项目代码&lt;br /&gt;然后再再根目录下面创建一个vue.config.js&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409223623177574538340532.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;代码如下&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://madao.org/zb_users/upload/2026/04/20260409223633177574539369797.png&quot; /&gt;&lt;br /&gt;一键获取完整项目代码&lt;br /&gt;javascript&lt;/p&gt;
&lt;p&gt;然后根目录创建一个index.js(这里应该也可以创建目录router/index.js，我没有试过，感兴趣的自己可以试一下)&lt;/p&gt;
&lt;p&gt;// router.js&lt;br /&gt;import {RouterMount,createRouter} from &#039;uni-simple-router&#039;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;const scrollInfo={};&lt;br /&gt;&amp;nbsp;&lt;br /&gt;const router = createRouter({&lt;br /&gt;&amp;nbsp; &amp;nbsp; platform: process.env.VUE_APP_PLATFORM, &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; routes: [...ROUTES],&lt;br /&gt;&amp;nbsp; &amp;nbsp; h5:{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; scrollBehavior:(to, from, savedPosition)=&amp;gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const XY=scrollInfo[to.path];&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(XY){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return XY;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return savedPosition;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;});&lt;br /&gt;//全局路由前置守卫&lt;br /&gt;router.beforeEach((to, from, next) =&amp;gt; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; console.log(&quot;跳转前&quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; next();&lt;br /&gt;});&lt;br /&gt;// 全局路由后置守卫&lt;br /&gt;router.afterEach((to, from) =&amp;gt; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; console.log(&#039;跳转结束&#039;)&lt;br /&gt;})&lt;br /&gt;&amp;nbsp;&lt;br /&gt;export {&lt;br /&gt;&amp;nbsp; &amp;nbsp; router,&lt;br /&gt;&amp;nbsp; &amp;nbsp; RouterMount&lt;br /&gt;}&lt;br /&gt;一键获取完整项目代码&lt;br /&gt;javascript&lt;/p&gt;
&lt;p&gt;然后main.js里面加入如下代码&lt;/p&gt;
&lt;p&gt;import Vue from &#039;vue&#039;&lt;br /&gt;import App from &#039;./App&#039;&lt;br /&gt;import {router,RouterMount} from &#039;./router.js&#039; &amp;nbsp;//路径换成自己的&lt;br /&gt;Vue.use(router)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Vue.config.productionTip = false&lt;br /&gt;App.mpType = &#039;app&#039;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;const app = new Vue({&lt;br /&gt;&amp;nbsp; &amp;nbsp; ...App,&lt;br /&gt;})&lt;br /&gt;&amp;nbsp;&lt;br /&gt;//v1.3.5起 H5端 你应该去除原有的app.$mount();使用路由自带的渲染方式-----这一步很重要，&lt;br /&gt;// #ifdef H5&lt;br /&gt;&amp;nbsp; &amp;nbsp; RouterMount(app,router,&#039;#app&#039;)&lt;br /&gt;// #endif&lt;br /&gt;app.$mount()&lt;br /&gt;一键获取完整项目代码&lt;br /&gt;javascript&lt;/p&gt;
&lt;p&gt;其他的不用做任何改动，然后控制台就可以打印出来啦&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description><pubDate>Thu, 09 Apr 2026 22:35:15 +0800</pubDate></item><item><title>OpenAI 发布 GPT-5，推理能力大幅提升</title><link>https://madao.org/?id=25</link><description>OpenAI 正式发布 GPT-5 模型，在数学推理、代码生成和多模态理解方面较上一代有显著提升，API 同步开放接入。</description><pubDate>Wed, 08 Apr 2026 13:18:55 +0800</pubDate></item></channel></rss>