尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Hermes学习笔记:用 Harness 为 AI Agent 搭建可复现的 Provider 配置骨架

Hermes学习笔记:用 Harness 为 AI Agent 搭建可复现的 Provider 配置骨架 1. 从一次“配置漂移”说起为什么 Hermes 学习要先搭 Harness 骨架如果你正在学 Hermes大概率会遇到这样一个场景昨天在 CLI 里跑通了 Claude Code 的接入今天换到另一个终端或者另一台机器Provider 配置、API Key、模型路由全都要重新填一遍。更麻烦的是当你想同时保留“高精度模型做规划、低延迟模型做补全”这种路由策略时配置文件很快就会变成一团乱麻。Hermes 本身是一个开源 AI Agent 框架社区里常叫它“爱马仕”。它的核心思路是让 Agent 的能力随使用时间叠加增长而不是每次会话从零开始。它支持 18 个以上的 LLM Provider通过三种 API 模式做归一化chat_completions对应 OpenAI、DeepSeek 这类兼容端点anthropic_messages对应 Anthropic 原生协议codex_responses对应 GitHub Copilot、Codex 这类通道。对学 Hermes 的人来说这意味着你可以在一个框架里切换不同模型而不必为每个模型改一遍 Agent 逻辑。但“能切换”和“可复现地切换”是两回事。Harness 在这里的角色就是那层把 Provider 配置、Key 管理、模型路由固定下来的骨架。它不负责模型推理而是负责让每次启动 Agent 时Provider 的解析结果是一致的、可预期的。这篇笔记就围绕这个骨架展开先给一份可复制的config.toml与settings.json再走一遍 CC Switch 的切换步骤最后用连通性验证确认整条通道是通的。适合已经装好 Hermes、准备把 Claude Code 这类工具接进统一 Key/API 通道的人。2. TaoToken 前置把 Key 和 API 通道先固定下来在动配置文件之前先把 Provider 的接入点确定下来。Hermes 的 Provider 抽象层支持自定义 base URL所以你可以把 TaoToken 作为统一的 API 通道接进去这样 Claude Code、Hermes 本体、以及后续要加的辅助任务比如上下文压缩用的摘要模型都能走同一个入口不用每个工具单独配一套 Key。具体操作是进控制台创建 API Key。打开https://taotoken.net/console在 API Keys 页面新建一个 Key复制出来先存到本地环境变量里不要直接写进会提交到 Git 的配置文件。我一般会在 shell 的 profile 里加一行export TAOTOKEN_API_KEYsk-你的实际Key这样config.toml里就可以用${TAOTOKEN_API_KEY}这种占位符引用配置文件本身可以安全地放进版本管理。如果你还没注册从官网入口进就行https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。这里有个容易踩的坑Hermes 的 Provider 解析是分层的model_routing里的default、high_precision、low_latency可以指向不同 Provider但它们的base_url如果都指向同一个通道Key 就可以复用同一个。反过来如果你给每个路由项都单独填 Key后面轮换的时候会非常痛苦。所以前置这一步的目标很明确一个通道、一个 Key、多个模型路由共用。3. 可复制配置config.toml 与 settings.json 骨架Hermes 的配置分两层config.toml管 Provider、模型路由、压缩阈值这些框架级参数settings.json管 Claude Code 这类外部工具的接入参数。下面这份骨架可以直接复制改掉 Key 和模型名就能用。先看config.toml# ~/.hermes/config.toml [provider] # 统一走 TaoToken 通道三种 API 模式按需选 default_api_mode anthropic_messages base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} [model_routing] # 默认路由日常对话和一般任务 default anthropic/claude-sonnet-4-6 # 高精度路由复杂规划、代码审查 high_precision anthropic/claude-opus-4-8 # 低延迟路由补全、标题生成这类轻量任务 low_latency deepseek/deepseek-v4-pro [fallback_providers] # 主模型不可用时的兜底顺序 providers [ openai/gpt-5.1, google/gemini-3-pro ] [compression] # 上下文压缩阈值50% 触发精细压缩 trigger_ratio 0.5 # 保留最近 20 条消息完整原文 protect_last_n 20 [gateway] # 网关兜底压缩阈值85% 强制压缩防溢出 safety_net_ratio 0.85再看settings.json这份是给 Claude Code 接入用的{ provider: { name: taotoken, baseUrl: https://taotoken.net/api, apiKeyEnv: TAOTOKEN_API_KEY, apiMode: anthropic_messages }, model: { default: anthropic/claude-sonnet-4-6, fallback: openai/gpt-5.1 }, harness: { sessionPersistence: true, compression: { enabled: true, triggerRatio: 0.5, protectLastN: 20 } } }这两份配置的对应关系是config.toml里的base_url和api_key决定了 Hermes 本体怎么找 Providersettings.json里的provider块决定了 Claude Code 通过 MCP 桥接时走哪个通道。两边指向同一个https://taotoken.net/apiKey 都从TAOTOKEN_API_KEY环境变量读这样切换工具时不用改 Key。关于apiMode的选择这里展开说一下。如果你的主力模型是 Claude 系列用anthropic_messages能保留原生协议的特性比如 prefix caching这对长会话的成本控制很关键。如果你混用 OpenAI 和 DeepSeek那chat_completions的兼容性更好。codex_responses一般只在接 Copilot 这类通道时才用。三种模式在 Hermes 的 Provider 抽象层里会被归一化成统一的调用接口所以上层 Agent 逻辑不用关心底层是哪种。4. CC Switch 切换步骤与连通性验证配置写完之后用 CC Switch 做一次 Provider 切换确认骨架是活的。CC Switch 的作用是在多个 Provider 配置之间快速切换适合你同时维护“生产通道”和“测试通道”的场景。第一步把上面两份配置放到 Hermes 的配置目录。默认路径是~/.hermes/config.toml直接放根目录settings.json放到~/.hermes/tools/claude-code/下。如果你用了 profile 隔离路径会变成~/.hermes/profiles/profile名/每个 profile 有独立的配置和记忆互不干扰。第二步执行切换命令hermes provider switch taotoken这条命令会读取config.toml里的[provider]块把当前活跃 Provider 切到taotoken。切换完成后可以用hermes provider list确认hermes provider list # 输出示例 # * taotoken (active) anthropic_messages https://taotoken.net/api # openai-fallback chat_completions https://api.openai.com/v1第三步做连通性验证。最直接的方式是发一个最小请求确认通道能通、模型能回curl -s https://taotoken.net/api/v1/messages \ -H x-api-key: ${TAOTOKEN_API_KEY} \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d { model: anthropic/claude-sonnet-4-6, max_tokens: 64, messages: [{role: user, content: reply with ok}] }如果返回里带content字段且内容是ok之类的回复说明通道是通的。如果返回 401检查 Key 有没有正确导出到当前 shell如果返回 404检查base_url有没有多写或少写/v1这类路径段。第四步在 Hermes 里跑一次带工具调用的会话验证 Provider 解析和工具调度是联动的hermes run --profile default --task 列出当前目录下的文件这一步会触发 Agent 的执行循环加载 system prompt、做压缩预检、调 LLM、如果返回工具调用就执行工具、把结果追加回上下文、继续循环。如果这一步能正常返回文件列表说明 Provider 配置、工具注册、会话持久化整条链路都是通的。5. 本篇常见错排查配置骨架跑不通多数问题集中在几个固定位置。下面按报错现象倒推原因。报错Provider not found: taotoken说明config.toml里的[provider]块没有被正确加载。先确认文件路径对不对Hermes 默认读~/.hermes/config.toml如果你用了HERMES_HOME环境变量路径会跟着变。再确认 TOML 语法有没有写错比如base_url写成了baseUrlTOML 是下划线风格JSON 才是驼峰。报错401 UnauthorizedKey 没读到。检查TAOTOKEN_API_KEY有没有在当前 shell 里export可以用echo $TAOTOKEN_API_KEY确认。如果你是在 IDE 里跑 Hermes注意 IDE 的终端环境可能和系统 shell 是隔离的需要在 IDE 的环境变量设置里单独加。报错model not found模型名写错了。Hermes 的模型路由用的是provider/model格式比如anthropic/claude-sonnet-4-6。如果你只写了claude-sonnet-4-6Provider 解析层会找不到对应的通道。另外注意模型名要和apiMode匹配anthropic_messages模式下不要填 OpenAI 风格的模型名。上下文压缩触发后会话变慢这是正常现象压缩管线里的 Stage 4 会调辅助模型做摘要这一步有网络往返。如果觉得太频繁可以把trigger_ratio从 0.5 调到 0.6给上下文更多余量。但不要调太高否则网关的 85% 兜底会频繁触发反而更慢。CC Switch 切换后 Claude Code 还是走旧通道settings.json的加载时机是在 Claude Code 启动时切换 Provider 后需要重启 Claude Code 进程。另外确认settings.json里的apiKeyEnv和config.toml里的api_key指向同一个环境变量否则会出现 Hermes 本体通了但 Claude Code 没通的情况。会话历史搜不到Hermes 的会话持久化用的是 SQLite FTS5中文搜索依赖 trigram 分词器。如果你搜的是很短的词比如两个字可能匹配不到试试搜更长的短语。另外确认state.db文件在~/.hermes/下如果被误删历史会话就没了。6. 把骨架用起来下一步的接入与验证配置骨架搭好之后接下来的动作分两条线。一条是接入线如果你要把 Claude Code 作为编码执行器接进 Hermes 的编排层需要走 MCP 桥接这时候settings.json里的provider块就是桥接的入口配置。另一条是验证线确认模型对话能正常返回再确认长期编码任务能稳定跑。接入相关的 Key 管理和文档可以从 API Keys 页面和接入文档入手https://taotoken.net/api-keys和https://taotoken.net/doc。如果你只是想先验证模型通道通不通直接用模型对话页面发一条消息最快https://taotoken.net/chat。如果你打算把 Hermes 作为长期编码或 Agent 编排层来用那 Coding Plan 更适合它针对长会话和工具调用做了额度优化https://taotoken.net/coding-plan。回到 Hermes 学习本身这套骨架的价值在于“可复现”。你今天在 CLI 里跑通的配置明天换到 Gateway 模式、换到另一个 profileProvider 解析结果是一致的。Hermes 的 Provider 抽象层把 18 个以上 Provider 的差异归一化了而 Harness 骨架把这种归一化的结果固定下来。两者配合你才能把精力放在 Agent 逻辑和技能积累上而不是每次启动都重新填一遍 Key。
返回列表