我是如何使用Hermes Agent的
hermes agent + openviking = 全自动写代码
前言
我日常主要用 Hermes 配置 Copilot 写代码,但公司配的 Copilot 额度有限,用完就得等下个月更新。
理想情况下,我想用 Claude Code——Anthropic 官方的 CLI Agent,代码能力强,上下文理解深,处理复杂重构任务比国内大模型稳得多。但现实是:Claude Code 对国内访问封杀比较严重,直连基本不通,挂代理又不稳定,日常用起来摩擦太大。
退而求其次,公司提供了 Continue(接入了 claude-sonnet,走公司内网,稳定)和 CodeBuddy(接入了 Claude-Code 模型)的额度。于是我搭了一套方案,让这几个工具的额度可以交叉使用,互相补充,尽量逼近 Claude Code 的体验。
核心是两件事:
- 配置 OpenViking 知识库,给 Hermes 加上跨会话的持久记忆和语义检索能力
- 写了一个本地代理服务 hermes-agent-acp-bridge,把 Continue CLI 和 CodeBuddy CLI 包装成标准 OpenAI 接口,让 Hermes 能直接调用
一、配置 OpenViking
OpenViking 是 Hermes 的知识库后端,提供 viking_search、viking_read、viking_remember 等工具,让 Agent 能跨会话检索和存储信息。
1.0 为什么需要 OpenViking
Hermes 内置的 Memory 区块有字符上限(约 2200 字),只够存几条关键事实。稍微复杂一点的项目背景、API 细节、踩坑记录根本放不下。
OpenViking 相当于把记忆系统外挂到一个无限容量的本地知识库,Hermes 通过 viking_search 按需检索,不占 Memory 配额。内置记忆只存「这个项目用 OpenViking,地址是 127.0.0.1:1933」这一条,其余所有知识都放在 OpenViking 里。
1.1 启动服务
OpenViking 默认跑在本地 1933 端口:
1 | `http://127.0.0.1:1933` |
启动后,Hermes 的 Memory 区块里会出现:
-
-
1 | `# OpenViking Knowledge Base``Active. Endpoint: http://127.0.0.1:1933` |
这说明 Hermes 已经感知到了知识库,后续对话中可以直接用 viking_* 工具。
1.2 使用 olmx 配置 embed 模型
OpenViking 的语义搜索依赖向量嵌入(embedding)。我用 olmx 提供本地 embed 能力。
olmx 是一个本地 embedding 服务,兼容 Ollama 接口。配置步骤:
启动 olmx,让它监听本地端口(默认 8000)
在 OpenViking 的配置里,把 embed 后端指向 olmx:
1 | `embed:``provider: ollama``base_url: http://127.0.0.1:8000``model: nomic-embed-text` |
- 重启 OpenViking,之后
viking_add_resource和viking_remember存入的内容都会自动向量化
这样,viking_search 就能做语义相似度检索,而不只是关键词匹配。
1.3 日常使用
存入知识:
1 | `viking_remember("olmx embed 配置路径在 ~/.config/openviking/config.yaml")` |
检索知识:
1 | `viking_search("embed 配置")` |
读取详情:
1 | `viking_read(uri, level="full")` |
删除文件(注意:viking_* 工具没有 delete 操作,要用 curl 直接调 HTTP API):
1 | `curl -s -X DELETE "http://127.0.0.1:1933/api/v1/fs?uri=viking://path/to/file.md"` |
二、hermes-agent-acp-bridge:把 CLI 工具包装成 OpenAI 接口
详情可以看我上一篇文章给 Hermes Agent 装上”万能模型适配器”——hermes-agent-acp-bridge。Continue 内置了 claude-sonnet(内网版),CodeBuddy 提供了 Claude-Code 模型,但它们都只能通过各自的 CLI 交互,没有标准 HTTP API。
hermes-agent-acp-bridge 的思路很简单:写一个 rust 服务,把 OpenAI 的 /v1/chat/completions 接口翻译成对 CLI 工具的ACP协议调用,再把输出包装回 OpenAI 格式返回。
这样 Hermes 就能把 TME Continue 的 claude-sonnet 当成「本地 Claude Code 的平替」来用——同样是 claude 系列模型,同样支持流式输出,只是走的是公司内网而不是 Anthropic 官方 API。
这个项目完全是用 Hermes 开发的
-
-
-
-
-
-
-
-
-
-
-
-
1 | `# 查看可用模型``curl http://127.0.0.1:8765/v1/models````# 测试非流式调用``curl -X POST http://127.0.0.1:8765/v1/chat/completions \``-H "Content-Type: application/json" \``-d '{"model":"continue-claude-sonnet","messages":[{"role":"user","content":"hello"}],"stream":false}'````# 测试流式调用``curl -X POST http://127.0.0.1:8765/v1/chat/completions \``-H "Content-Type: application/json" \``-d '{"model":"continue-claude-sonnet","messages":[{"role":"user","content":"hello"}],"stream":true}'` |
三、整体架构
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1 | `Hermes Agent``|``| OpenAI API 调用``v``acp-bridge (127.0.0.1:8765)``|``+---> continue --print 'prompt' (TME claude-sonnet,Claude Code 平替)``|``+---> codebuddy --print --model codebuddy-claude-sonnet-4.6 'prompt' (codebuddy-claude-sonnet-4.6)``|``+---> codebuddy --print --model codebuddy-claude-4.5 'prompt' (codebuddy-claude-4.5)````OpenViking (127.0.0.1:1933) <-- 独立知识库,Hermes 通过 viking_* 工具直接访问``|``+---> olmx (8000) <-- 本地 embedding,支持语义检索` |
四、实际使用案例
下面是我用 Hermes 辅助开发公司项目时的几个真实 case。
Case 1:修复并发 map panic
背景
多个 goroutine 同时读写这个 map,触发了 Go 的并发 map panic。
我怎么用 Hermes 的
我把 panic 的 stack trace 和相关代码贴给 Hermes,让它分析根因。Hermes 用 CodeBuddy(codebuddy-claude-4.5)快速定位:for k, v := range Dict 这种直接遍历在并发场景下不安全,应该用 fastflow 提供的 Dict.Range 方法(内部加了锁)。
最终改动(commit 33c21eb)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1 | `// 改前:直接遍历 map,并发不安全``for k, v := range Dict {``if strings.HasPrefix(k, "_") && strings.HasSuffix(k, "_") {``continue``}``mOutput[k] = v``}````// 改后:用 Dict.Range,内部有锁``Dict.Range(func(k, v string) {``if strings.HasPrefix(k, "_") && strings.HasSuffix(k, "_") {``return``}``mOutput[k] = v``})` |
同时升级到 v0.1.15,这个版本才有 Range 方法。
Hermes 的价值:我知道是并发问题,但不清楚依赖有没有提供安全的遍历方式。Hermes 直接从依赖的 API 里找到了 Range,省去了我翻文档的时间。
Case 2:OpenViking 知识库的实际用途
上面几个 case 里,Hermes 能快速定位问题,部分原因是我把项目相关的知识存进了 OpenViking:
-
-
1 | `viking_remember("禁止自动重试:请求 header 加 x-rpc-timeout")``viking_remember("git push 到 xxx 前必须 unset https_proxy http_proxy")` |
这些知识在下次会话里会自动注入,Hermes 不需要我重新解释项目背景,直接就能上手。
六、总结
整套方案的核心思想很简单:任何有 ACP 模式(非交互式输出)的 AI CLI 工具,都可以通过 hermes-agent-acp-bridge 这个薄薄的代理层,变成标准的 OpenAI 兼容服务。Hermes 只需要配置一个 base_url,就能无缝接入。
OpenViking 则补上了跨会话记忆和知识检索的能力,配合 olmx 的本地 embedding,让 Hermes 真正有了”长期记忆”,不用每次都重新解释上下文。
- END -
💬 本文评论区已开启,但暂无读者留言。
本文转载自微信公众号,如有侵权请联系删除。
- 标题: 我是如何使用Hermes Agent的
- 作者: lxiol
- 创建于 : 2026-05-08 21:50:26
- 更新于 : 2026-05-12 16:07:04
- 链接: https://blog.lxiol.cn/2026/05/08/我是如何使用Hermes-Agent的/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。