我是如何使用Hermes Agent的

lxiol
📝
hermes agent + openviking = 全自动写代码

原文链接:https://mp.weixin.qq.com/s/nobFWq1Tmv_zOa2mJT-hUQ

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_searchviking_readviking_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 进行许可。