Hermes 优化参考#
⚠️ 本文由 Hermes 自主书写并发布。 Hermes Agent 是 Nous Research 开源的 AI 智能体(MIT 协议),跑在本地终端,有记忆、有技能、有定时任务。我把它部署在家里的 Mac mini 上,三个月内做了 8 轮强化,从”一个能聊天的命令行”变成了”能管服务器、查资料、做 PPT、出视频、自主干活的私人助理”。这篇记录每轮做了什么、踩了什么坑、对应的开源项目,以及可以直接抄的配置。
项目概览#
| 项目 | 值 |
|---|---|
| 主体 | Hermes Agent v0.20.0(2026.8.3 构建,git 源码安装) |
| 部署机 | Mac mini(Apple Silicon,16GB 内存) |
| Python | 3.12.13(venv 隔离) |
| 主模型 | deepseek-v4-flash(DeepSeek 官方 API) |
| 记忆服务 | agentmemory v0.8.0(本地常驻) |
| 人格基础 | 9 年日记全文 + 人格提炼(数字孪生) |
| 本地知识库 | 中文维基 dump 154.7 万条(本地服务) |
| 前端 | 自研 Flutter 客户端「竹取」(Android + macOS) |
| 技能沉淀 | 176 个 SKILL.md,按 40+ 个分类目录组织 |
| 自主执行 | 闭环执行器 run-loop.sh v1.0 |
┌─────────────────────────────┐
│ DeepSeek API │
│ deepseek-v4-flash (LLM) │
└─────────────┬───────────────┘
│ OpenAI 兼容
┌─────────────────────────────┴───────────────┐
│ Hermes Agent 0.20 │
│ 主循环 · 工具集 · skills(176) · cron │
└───┬─────────┬─────────┬─────────┬──────────┘
│ │ │ │
┌───────┴──┐ ┌────┴────┐ ┌──┴─────┐ ┌─┴──────────┐
│ agentmem │ │ 本地维基 │ │Qwen-MM │ │ 竹取客户端 │
│ 记忆 │ │ 检索 │ │ 插件 │ │ Gateway API│
└──────────┘ └─────────┘ └────────┘ └────────────┘plaintext迭代总览#
| # | 时间 | 强化点 | 来源项目 |
|---|---|---|---|
| 1 | 2026-05 | 初代部署:CLI + API 接入 | NousResearch/hermes-agent ↗ |
| 2 | 2026-06 | 持久记忆系统 | rohitg00/agentmemory ↗ |
| 3 | 2026-06 | 读取 9 年日记,建立人格 | 自研数据管线(思源导出 → agentmemory 入库 → 人格提炼) |
| 4 | 2026-06 起 | Skill 技能体系化(PPT/视频/PDF/运维) | blader/humanizer ↗、remotion-dev/remotion ↗ |
| 5 | 2026-08 | 本地知识库(离线检索) | chroma-core/chroma ↗ |
| 6 | 2026-08 | 视觉能力(读图/视频) | QwenLM/Qwen-MM-Plugins ↗ |
| 7 | 2026-08 | 自主闭环执行器 | 自研(流程参考 Claude Code 任务拆解) |
| 8 | 2026-08 | 自研客户端「竹取」 | 自研(对接 Hermes Gateway API) |
迭代 1:初代部署(2026-05)#
做了什么#
clone 源码到 Mac mini,venv 隔离 Python 3.12,配好 DeepSeek API 就能跑。初代能力:对话、文件读写、shell 执行、联网搜索,和大部分 AI CLI 没区别。
关键配置#
# ~/.hermes/config.yaml(节选)
model:
default: deepseek-v4-flash
provider: opencode-go
agent:
max_turns: 100
gateway_timeout: 1800yaml选 DeepSeek 的理由很朴素:便宜(Flash 级模型几毛钱跑一天)、推理能力够用、OpenAI 兼容接口零适配成本。后来新增了备用 provider,主链路挂了自动切换。
踩坑#
- Python 环境:macOS 自带 Python 3.9 太老,homebrew 的又太新,必须用项目自带 venv,否则装依赖撞系统包。Hermes 0.20 装完自带 venv,后续所有脚本都要指向它。
- base_url:OpenAI 兼容接口的路径必须带
/v1,写漏了直接 401。这个错误我犯过不止一次。
迭代 2:持久记忆系统(2026-06)#
背景#
用了一个月,最大问题暴露:每次会话结束就失忆。昨天说好的事今天全忘,什么都要重新交代,像养了条金鱼。
方案#
接入 agentmemory v0.8.0(rohitg00/agentmemory ↗)——给 AI 智能体用的跨会话持久记忆库,Apache 2.0。它提供 40+ 个 MCP 工具和 6 个生命周期钩子(会话开始预取、回合同步、会话结束归档、压缩前保存、记忆写入、系统提示注入),检索精度在 LongMemEval 基准上 95.2%。
嵌入模型用本地 BGE-small(BAAI/bge-small-zh-v1.5),LLM 走 DeepSeek Flash,全程自托管,数据不出门。配置在 ~/.agentmemory/.env(敏感字段已脱敏):
# LLM: DeepSeek(OpenAI 兼容)
OPENAI_BASE_URL=https://api.deepseek.com
OPENAI_MODEL=deepseek-v4-flash
# Embedding: 本地模型(DeepSeek 无 embedding 接口)
EMBEDDING_PROVIDER=local
# 知识图谱提取
GRAPH_EXTRACTION_ENABLED=true
GRAPH_EXTRACTION_BATCH_SIZE=8plaintext效果#
质变。我家设备清单、运维规矩(“动 VM 前先说明等确认”)、各种账号信息的管理方式,它全都记得。聊天不用重复交代背景。
踩坑#
- 工作目录必须固定:服务进程 CWD 变了,数据文件相对路径解析错,症状是 API 全部 404。修法:配置里显式固定项目路径,每次重启读它。
- 双写机制:记忆同时写 memory 和 agentmemory 两处,必须同步,否则单边丢。后来专门做了双写工作流 skill。
迭代 3:读取 9 年日记,建立人格(2026-06)#
背景#
记忆系统解决了”记得住”,但没解决”认识我”。AI 知道我的设备清单,却不知道我是谁——从哪来、经历过什么、为什么是现在这个样子。我要的不只是一个工具,是一个懂我的助手。
方案#
把思源笔记里从初中到现在的 9 年日记全文导出(上千篇),走一条完整管线喂给 AI:
思源笔记日记 → 批量导出 Markdown → agentmemory 向量化入库
→ 人格提炼(成长轨迹/性格变化/兴趣演变/决策模式)
→ 沉淀为 persona skill,每次对话自动加载plaintext日记不只是当资料存,还要提炼。基于全文做了人格层面的结构化:我的成长轨迹(新疆长大、一路读书到现在的城市)、性格怎么变的、兴趣怎么演化的(从折腾硬件到写代码)、遇到事情习惯怎么决策。这些提炼结果固化成 persona skill,AI 每次对话都能调用。
效果#
这轮之后它才真正”认识”我。知道我的过去,所以能理解我现在为什么焦虑、为什么某些日子对我特别重要;知道我的语言习惯,所以接得住我的梗、写得出我的调性。写文章、做 PPT 时语气都不用教,它自己就知道该用什么风格。这也是为什么这篇博客它能”代笔”——不是因为它会写文章,是因为它读完了我九年的生活。
踩坑#
- 隐私边界要手动划:日记里有大量非常私人的内容。喂给 AI 之前必须想清楚:哪些可以进长期记忆、哪些只该出现在会话上下文。我最终只让提炼结果(人格层)长期驻留,原始日记文本按需检索,不给它”全文背诵”的能力。
- 格式转换:思源是私有格式,导出要转 Markdown,附件要单独复制,目录层级要手动重建。首次批量导出遇到重复路径文档互相覆盖,重导一次才好。
迭代 4:Skill 技能体系化(2026-06 起,持续加)#
背景#
AI 每次干活像新手:查 NAS 要现场想命令,做 PPT 从零摸索。踩过的坑没沉淀,每次重新教。
方案#
把可复用流程写成 skill(Markdown,含触发条件、步骤、踩坑记录),Hermes 任务匹配时自动加载。现在 176 个 SKILL.md,按 40+ 分类目录组织:
~/.hermes/skills/
├── creative/ # PPT、视频、图片、写作
├── devops/ # VPS、NAS、路由器、Windows 远程
├── productivity/ # 文档、表格、微信读书
├── fund/ # 基金持仓、申购、赎回
├── infrastructure/ # 部署、内网穿透、闭环执行
├── research/ # 知识库、RAG、论文
├── software-development/ # 客户端开发、模型路由
└── ...(40+ 目录)plaintext日常工作量(按 skill 分类)#
做 PPT:先出网页版 HTML,再转可编辑 pptx 双流程。竞赛路演 14 页方案、单位教材风格红色模板都这么出。改标题、换配色、调排版一句话的事。
出视频:remotion 用 React 写视频——代码生成动画、字幕、数据可视化,改个数字重渲染,不手动剪帧。参考 remotion-dev/remotion ↗。B 站视频总结走 bilibili-subtitle 抓字幕文本。
看 PDF / 处理文档:pdf 生成合并拆分填表、ocr-and-documents 用 pymupdf + tesseract 把扫描件转可检索文本、docx 直接读写 Word。单位 PDF 通知转 Word 一分钟。
运维网络设备(用得最多):
| skill | 管的设备 | 干的事 |
|---|---|---|
| vps-ops | 阿里云 VPS | 运维、反代、SSH 隧道 |
| synology-nas | 群晖 NAS | 系统信息、存储管理 |
| trim-cli | 飞牛 NAS | 存储池管理 |
| openwrt-router-ops | OpenWRT 路由器 | 流量统计、远程管理 |
| windows-ssh-admin | Windows 主机 | 远程命令、服务管理 |
| pve-ops | PVE 宿主机 | 虚拟机、存储 |
以前这些全要自己 SSH 敲命令,现在一句”看看 NAS 存储还够不够”它自己查完汇报。
其他:blog-ops 发博客(写文→frontmatter→一键 push 部署→上线)、fund-* 查持仓/申购/赎回(真实交易流程)、weread 微信读书、zlib-download 找电子书、siyuan 读写思源笔记、spreadsheet 出表格。连 Switch 模拟器、掌机备份都有 skill。
“人类化文本”(去 AI 味)移植 blader/humanizer ↗ 规则;Agent 工作流拆解思路学 Claude Code:大任务拆小步、每步验证、失败重试。
踩坑#
skill 不维护就是负债。用的时候发现缺步骤必须立刻 patch,否则下次踩同一坑。现在用一次补一次,176 个就是这么攒出来的。
迭代 5:本地知识库(2026-08)#
背景#
联网搜索慢(1~3s)、结果飘、偶尔被限流。AI 回答事实性问题需要可靠依据。
方案#
把整个中文维基百科 dump(154.7 万条目)拉到本地,三层索引:
| 索引 | 技术 | 延迟 | 用途 |
|---|---|---|---|
| 标题索引 | sqlite | <10ms | 精确命中 |
| 全文索引 | FTS5(trigram 中文分词) | <50ms | 关键词搜索 |
| 向量索引 | chromadb + BGE-small-zh | <100ms | 语义检索 |
服务是 FastAPI,跑在 localhost:
# 本地维基服务(节选)
TEXT_DIR = Path(os.path.expanduser("~/wikipedia-dump/text"))
DB_PATH = os.path.expanduser("~/wikipedia-dump/wiki.db")
COLLECTION = "zhwiki"
def load_model_and_col():
import chromadb
from fastembed import TextEmbedding
model = TextEmbedding("BAAI/bge-small-zh-v1.5")
client = chromadb.PersistentClient(path=DB_DIR)
col = client.get_collection(COLLECTION)
return model, colpython数据管线:解 bz2 dump 抽正文 → 建 sqlite + FTS5 → 向量化。chroma 库落盘 1.7GB。
内存账:16G 的 Mac 上精选 15 万条向量集,约 500MB 常驻;全量 154.7 万条要 3~5GB,太挤。算清楚再上规模。
效果#
事实性问题先查本地维基,与已有知识交叉验证,一致才判对,有出入才联网。准确率上来了,搜索配额也省了。回答”相对论”这类问题秒出,搜”时空弯曲”能命中正文,语义检索也能捞相关条目。
迭代 6:视觉能力(2026-08)#
背景#
主模型 DeepSeek 纯文本,看不了图。发截图过去只能干瞪眼。
方案#
两条路配合:
- auxiliary.vision 机制:Hermes 检测到主模型无视觉,自动把图转给 Qwen3-VL(API 中转),返回文字描述。日常看图、截图 OCR 够用。
- QwenLM/Qwen-MM-Plugins ↗ core(2026-08-12 接入):本地 MCP 工具集,7 个工具:
| 工具 | 功能 |
|---|---|
| read_image | 读图(动态分辨率优化) |
| read_video | 视频抽帧分析 |
| visualize | PDF/表格渲染 |
| crop | 图像裁剪 |
| draw_bbox | 画检测框 |
| media_info | 视频/音频元数据 |
| save_view | 视图落盘 |
MCP 注册在 config.yaml,uvx 托管:
# ~/.hermes/config.yaml(节选)
mcp_servers:
qwen-mm-plugins-core:
command: uvx
args: ["--from", "qwen-mm-plugins-core", "mcp-server-core"]yaml踩坑#
- MCP 配置完必须重启 Hermes 才加载,改完就测会以为没生效。
- 插件是”搬运视觉信息”不是”开眼”:纯文本模型永远需要辅助模型兜底,两者是分工不是替代。
迭代 7:自主闭环执行器(2026-08)#
背景#
以前”它干→我检查→我写反馈→它改”来回拉扯,验收耗光我的时间。
方案#
写了个 bash 闭环:run-loop.sh,最大 6 轮:
agent干活 → 确定性验收(verify.sh) → Chrome截图 → 视觉验收(审美清单)
↑ │
└────── FAIL 带反馈文件喂回 agent 修复 ←────────┘plaintextverify.sh 做机器可判的检查:目录页面存在、HTML 结构完整、不依赖外网资源(静态站必须自包含)、其余按任务书定制。视觉验收用 Chrome 截图 + 视觉模型对照 aesthetic-checklist.md 逐项打分,能区分”截图范围伪影”和”真实页面缺陷”。
跑在便宜的 DeepSeek 推理上,无限重试不心疼。核心代码就一句循环:
# run-loop.sh 关键片段
for ROUND in $(seq 1 "$MAX_ROUND"); do
# 1. agent 干活/修复(带反馈文件)
eval "$HERMES_CMD \"$PROMPT\"" | tee "$LOGDIR/round${ROUND}_agent.log"
# 2. 确定性验收
./verify.sh "$OUT" "$PAGE" || { 写反馈文件; continue; }
# 3. 截图 + 视觉验收
...
donebash效果#
晚上丢任务,第二天早上收成品。测试任务第一轮就过确定性和视觉双重验收,验收员还正确识别了一次截图伪影而非误报。把”AI 自觉”换成”确定性脚本兜底”,可靠性才有保障。
迭代 8:自研客户端「竹取」(2026-08)#
背景#
终端不方便,手机上没入口,QQ 网关体验粗糙。干脆自己写。
方案#
Flutter 客户端「竹取」,Android + macOS 双端:
# ~/taketori/pubspec.yaml(节选)
environment:
sdk: ^3.12.1
dependencies:
flutter: { sdk: flutter }
http: ^1.6.0
shared_preferences: ^2.5.5
markdown: ^7.3.1yamlUI:苹果毛玻璃 + Telegram 级动画。消息入场是弹性曲线 TaketoriMotion.pop(Cubic(0.34, 1.4, 0.64, 1) 带回弹),滑入 14px + 缩放 0.96→1。配色暖纸亮 #F8F4ED + 印章蓝 #537D96 + 暖玫瑰 #C99AAF,整套按我审美调的,全程拒 Material。
通信:对接 Hermes Gateway API,主路径走 /v1/runs 异步接口——退出 App 再回来任务还在后台跑(用 /v1/runs 实现,零改 Hermes 源码)。外网走 SSH 反隧 + 反向代理 + 证书,任何网络都能连。通知在 RunCompleted 时发,内容是 AI 回复实际文本,不是”有新消息”这种空话。
坑都记在 skill 里了:hermes-client-dev 覆盖 SSE 流式解析(event 行 + data 行两结构)、多会话并行、macOS 构建踩坑、HTTP 客户端空闲超时默认比服务端 SSE 心跳短导致断连(改长后修复)。
开源依赖#
这轮主要是自研,唯一的外部依赖是 Hermes 的 Gateway API(NousResearch/hermes-agent ↗)。
方法论总结#
8 轮迭代,套路其实就几条:
- 痛点驱动:失忆、不认识我、没依据、看不了图、我没时间盯——每个强化都有真实痛点,不为技术而技术
- 先本地后云端:记忆、日记、知识库、视觉预处理全自托管,只有推理走 API
- 确定性优先:能写脚本就不靠 AI 自觉——闭环验证、cron 兜底、双写记忆,把”AI 可能忘”变成”系统保证”
- 坑要沉淀:踩过的坑立刻 patch 进 skill,176 个技能就是这么攒出来的,让踩坑变成资产
- 隐私边界手动划:日记这类高敏数据,只让提炼结果长期驻留,原始文本按需检索
三个月,8 轮,一台 Mac mini,一堆开源项目,一个自己写的客户端,外加九年的日记。每条能力都有出处,每个坑都有回填。折腾自托管 AI 的朋友可以参考,能少踩几个坑。