KNA KNA
KNA KNA
集成指南 · INTEGRATION

把 KNA 接入 Hermes Agent

用人民币驱动 Nous Research 的 self-improving AI agent —— Hermes 跑在 Telegram / Discord / Slack / WhatsApp / iMessage 等多平台,所有对话走 KNA Claude,零行代码改动。

预计 5 分钟完成接入 实测 v0.12.0 / 2026-05-08 含全部 10 个 auxiliary 任务配置

Hermes AgentNous Research 出的 self-improving AI agent —— 自带学习闭环,能从经验创建技能、跨会话记忆、跑在 25+ 消息平台。GitHub: nousresearch/hermes-agent · 官网

核心原理:Hermes 原生支持 provider: anthropic + 自定义 base_url。KNA 是完全兼容的 Anthropic API gateway,所以 Hermes 调用 KNA 时用的还是 Anthropic 官方 SDK,零行代码改动。

⚠ 中国大陆用户失败率最高的坑:Claude Code OAuth 凭据冲突
如果你以前装过 Anthropic 官方 Claude Code 并登录过,hermes 会优先用 ~/.claude/.credentials.json 里的 OAuth token 而不是你填的 KNA key —— 表现为一直 401。 详见 §9 Q4。一键诊断:curl -fsSL https://code.wearekna.com/kna-doctor.sh | bash

0TL;DR(60 秒版)

# 1. 安装 Hermes
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
source ~/.zshrc

# 2. 主模型用 Sonnet 4.6
hermes config set model.provider anthropic
hermes config set model.base_url https://code.wearekna.com/anthropic
hermes config set model.default claude-sonnet-4-6

# 3. 把 KNA Key 写进 .env(这一步是关键 — anthropic provider 不读 config.yaml 里的 api_key)
cat >> ~/.hermes/.env <<'EOF'
ANTHROPIC_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ANTHROPIC_TOKEN=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ANTHROPIC_BASE_URL=https://code.wearekna.com/anthropic
ANTHROPIC_AUTH_TOKEN=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
EOF

# 4. 开聊
hermes

如果你要看完整流程、auxiliary 任务全配置、消息平台 daemon 重启、故障排查,往下读。


1前提条件

1.1 在 KNA 注册账号、拿 API Key

  1. 打开 https://wearekna.com,点 立即注册
  2. 邮箱注册(无需海外信用卡、无需手机号实名)
  3. 登录到 https://code.wearekna.com/dashboard
  4. 左侧 API 密钥创建 Key → 命名「hermes-agent」→ 复制以 sk- 开头、共 67 字符(sk- + 64 位 hex)的 token
  5. 充值(最低 ¥10,全场赠送 20%;推荐先充 ¥30 测试)

💡 首次充值建议 ¥30:到账约 $5 USD 余额,够跑约 250 万 Haiku tokens 或 33 万 Sonnet input tokens —— 足以验证 hermes 完整工作流。

1.2 系统支持矩阵

平台状态
Linux✅ 原生
macOS✅ 原生(实测 Apple Silicon)
Windows❌ 必须 WSL2
Android (Termux)✅ 用 [termux] extra

1.3 运行时

Hermes 用 Python 3.11+,安装脚本会自动装 uv


2安装 Hermes Agent

2.1 一键安装(推荐)

curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

完成后 reload shell:

source ~/.bashrc      # 用 bash
source ~/.zshrc       # 用 zsh(macOS 默认)

2.2 验证安装

hermes --version
hermes doctor

hermes doctor 会检查 Python、uv、依赖、配置目录等;正常输出全是 ✅。


3配置 KNA Key 进 Hermes

Hermes 的配置存在两个文件里:

⚠️ 实测踩坑提醒(2026-05-07)

Hermes 的 anthropic provider 只读环境变量忽略 config.yaml 里的 model.api_key 字段,即使 hermes config set 显示成功。所以下面任意方式配完后,必须确保 ~/.hermes/.env 里有 ANTHROPIC_API_KEY / ANTHROPIC_TOKEN / ANTHROPIC_BASE_URL / ANTHROPIC_AUTH_TOKEN 四个变量(不同 SDK 路径读不同的,都写上最稳)。

方式 A · 交互式向导

hermes model

按提示:

  1. Choose provider → 用箭头选 anthropic
  2. Enter base URL → 填 https://code.wearekna.com/anthropic末尾 /anthropic 不能省
  3. Enter API key → 粘贴你的 sk-xxxxxxxxxx... (67 字符)
  4. Choose default model → 选 claude-sonnet-4-6

向导走完后仍需手动加 4 个 ANTHROPIC_* env 变量~/.hermes/.env(见上方踩坑提醒)。

方式 B · CLI + .env(实测有效,推荐)

# 1. 主模型 metadata(写到 config.yaml)
hermes config set model.provider anthropic
hermes config set model.base_url https://code.wearekna.com/anthropic
hermes config set model.default claude-sonnet-4-6

# 2. 凭证写到 .env(这一步必做,否则 anthropic provider 拿不到 key)
cat >> ~/.hermes/.env <<'EOF'
ANTHROPIC_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ANTHROPIC_TOKEN=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ANTHROPIC_BASE_URL=https://code.wearekna.com/anthropic
ANTHROPIC_AUTH_TOKEN=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
EOF

验证:

hermes config show | grep -A4 'Model:'
hermes doctor

410 个 auxiliary 任务配置(容易漏)

主模型配好不代表完事。Hermes 内部有 10 个辅助任务(压缩、视觉、标题生成、记忆 curator 等),每个都有自己的 provider 配置。如果不配,跑起来会看到一堆类似的警告:

⚠ No auxiliary LLM provider configured —
  context compression will drop middle turns without a summary.
⚠ Auxiliary title generation failed: No LLM provider configured for
  task=title_generation provider=auto. Run: hermes setup

这 10 个任务全部都需要单独配。最简洁的做法 —— 全部指到 KNA + Haiku(便宜 5 倍):

KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
URL=https://code.wearekna.com/anthropic

for task in vision web_extract compression session_search skills_hub \
            approval mcp title_generation curator flush_memories; do
  hermes config set auxiliary.$task.provider anthropic
  hermes config set auxiliary.$task.model claude-haiku-4-5
  hermes config set auxiliary.$task.base_url $URL
  hermes config set auxiliary.$task.api_key $KEY
done

10 个 auxiliary 任务一览:

Task触发场景建议模型
compression上下文长 / /compressHaiku
title_generation每条 session 自动起标题Haiku
session_search跨会话搜索时总结Haiku
vision用户发图片Sonnet(Haiku 也行)
web_extract抓网页提取要点Haiku
skills_hub技能 metadata 生成Haiku
approval风险操作的二次确认判断Haiku
mcpMCP server 工具描述合成Haiku
curator定期整理 memory.md / 用户画像Haiku
flush_memories会话结束时把对话归档进长期记忆Haiku

5KNA 支持的 Claude 模型

TierModel ID输入价输出价推荐场景
Opusclaude-opus-4-7$15/MTok$75/MTok复杂 reasoning、长上下文规划
Sonnetclaude-sonnet-4-6$3/MTok$15/MTok主力模型,平衡能力与价格
Haikuclaude-haiku-4-5$1/MTok$5/MTokauxiliary 全包

价格与 Anthropic 官方价 1:1,KNA 不加价、不预扣、不取整(见 wearekna.com 价格说明)。Anthropic 发新模型当天 KNA 同步支持。


6验证连接

6.1 用 Hermes 跑第一句话

hermes

进入 TUI 后输入:

你是哪个模型?请返回完整 model id。

正确响应应该自报为 Claude Sonnet 4.6 / Opus / Haiku。如果它说 GPT-X 或 Llama,说明配置走错 provider 了 —— 回头检查 model.provider

6.2 用 curl 验证 KNA 端点本身工作

curl -s https://code.wearekna.com/anthropic/v1/messages \
  -H "x-api-key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 50,
    "messages": [{"role":"user","content":"返回三个字: 已验证"}]
  }' | jq '.model, .usage, .content[0].text'

6.3 验证 Hermes 真的打到了 KNA

KNA 在每个响应里加了 x-upstream: api.anthropic.comx-passthrough: true 头:

curl -s -D - -o /dev/null -X POST https://code.wearekna.com/anthropic/v1/messages \
  -H "x-api-key: sk-xxxxxxxxxx... (67 字符)" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-haiku-4-5","max_tokens":5,"messages":[{"role":"user","content":"hi"}]}' \
  | grep -iE "x-upstream|x-passthrough"
# x-upstream: api.anthropic.com
# x-passthrough: true

7Gateway 守护进程(用 Telegram / Discord 必读)

如果你只用本地 TUI(hermes 命令),跳过本节。如果你要让 Hermes 在 Telegram / Discord / iMessage 上持续在线,得跑 gateway 守护进程:

hermes gateway setup    # 一次性配置 token / channel
hermes gateway start    # 启动 + 注册成系统服务(macOS launchd / Linux systemd)

⚠️ 关键:改完配置后必须重启 gateway,新设置才生效

Gateway 是常驻进程,启动时一次性读 config.yaml + .env。后续 hermes config set 写入的内容不会自动重载

7.1 macOS(launchd)

# 重启 gateway,新配置立即生效
launchctl kickstart -k gui/$(id -u)/ai.hermes.gateway

# 看启动日志
tail -f ~/.hermes/logs/gateway.log

正常输出会包含:

INFO gateway.run: Connecting to telegram...
INFO gateway.platforms.telegram: [Telegram] Connected to Telegram (polling mode)
INFO gateway.run: ✓ telegram connected
INFO gateway.run: Gateway running with 1 platform(s)

7.2 Linux(systemd user service)

systemctl --user restart hermes-gateway
systemctl --user status hermes-gateway
journalctl --user -u hermes-gateway -f

7.3 排错小技巧


8进阶 · 多模型策略

8.1 主模型 Sonnet + auxiliary Haiku(默认推荐)

主模型 + 10 个 auxiliary 已经在第 4 节配好。这是最佳性价比组合:贵的 Sonnet 用在真正对话,便宜的 Haiku 用在压缩 / 总结 / 标题等机械任务,整体省约 30%-50% 成本。

8.2 切到 Opus 跑复杂任务

Hermes TUI 里随时切:

/model claude-opus-4-7

这个 session 立刻用 Opus。下次启动还是 default。

8.3 同时用 KNA 和其他 provider

Hermes 支持多 provider 并存:

hermes model openrouter:x-ai/grok-4    # 临时切到 OpenRouter
hermes model anthropic:claude-sonnet-4-6   # 切回 KNA

8.4 Cron 调度任务

Hermes 内置 cron。每天早上 9 点跑一次:

hermes cron add "0 9 * * *" \
  --message "看 GitHub trending,挑 3 个 AI 项目总结发我 Telegram"

Cron 任务用 model.default。长跑任务持续消耗余额,建议 KNA dashboard 设余额低提醒邮件


9常见问题

Q1:报错 Provider authentication failed: No Anthropic credentials found

这是 anthropic provider 找不到 env 变量。检查 ~/.hermes/.env 里是否同时有:

  • ANTHROPIC_API_KEY=sk-xxxxxxxxxx...
  • ANTHROPIC_TOKEN=sk-xxxxxxxxxx...
  • ANTHROPIC_BASE_URL=https://code.wearekna.com/anthropic
  • ANTHROPIC_AUTH_TOKEN=sk-xxxxxxxxxx...

四个都写上最稳。如果 gateway 在跑,加完后必须 launchctl kickstart -k gui/$(id -u)/ai.hermes.gateway 重启。

Q2:警告 No auxiliary LLM provider configured — context compression will drop middle turns

10 个 auxiliary 任务没配。看第 4 节,跑那个 for 循环一次性全配。

Q3:报错 Auxiliary title generation failed: No LLM provider configured for task=title_generation

同上 —— 单独漏配了 title_generation。第 4 节的 for 循环覆盖全部 10 个,跑一遍。

Q4:报错 401 Unauthorizedinvalid api key(最常见!)

90% 的 401 都是 Claude Code OAuth 凭据冲突。Hermes 内部按这个顺序找 Anthropic token:

  1. ANTHROPIC_TOKEN 环境变量
  2. CLAUDE_CODE_OAUTH_TOKEN 环境变量
  3. ~/.claude.json~/.claude/.credentials.json(装过 Claude Code 必有)
  4. ANTHROPIC_API_KEY 环境变量 ← 我们让你填的

如果你以前装过 Anthropic 官方 Claude Code 并 OAuth 登录过,你的家目录里有 ~/.claude/.credentials.json 存着 sk-ant-oat01-... 这种 OAuth token。Hermes 启动后优先级 3 命中,把 OAuth token 当成 API key 发到 KNA → KNA 不认 → 401。

一键诊断(推荐)

curl -fsSL https://code.wearekna.com/kna-doctor.sh | bash

手动清理(如果不再用官方 Claude Code 直连):

# 清环境变量
unset ANTHROPIC_TOKEN CLAUDE_CODE_OAUTH_TOKEN

# 备份并移除本地凭据文件
[ -f ~/.claude/.credentials.json ] && mv ~/.claude/.credentials.json ~/.claude/.credentials.json.kna-bak
[ -f ~/.claude.json ] && mv ~/.claude.json ~/.claude.json.kna-bak

验证 KNA key 本身有效(绕过 hermes 的 OAuth 优先级链):

curl -sS https://code.wearekna.com/anthropic/v1/messages \
  -H "x-api-key: $(grep ANTHROPIC_API_KEY ~/.hermes/.env | cut -d= -f2)" \
  -H "anthropic-version: 2023-06-01" -H "content-type: application/json" \
  -d '{"model":"claude-haiku-4-5","max_tokens":5,"messages":[{"role":"user","content":"hi"}]}'

如果 curl 200 但 hermes 401 → 100% 是上面的优先级冲突;如果 curl 也 401 → 是 key 本身的问题(dashboard 检查启用/余额)。

Q5:报错 insufficient balance余额不足
  • 登录 https://code.wearekna.com 看余额
  • Hermes 在重度任务下 1 小时可能消耗 ¥10-30,建议先充 ¥30+ 跑一会儿看消耗速率
Q6:响应非常慢、timeout
  • KNA 转发到 Anthropic 官方端点(位于美国),中国网络通过 KNA Tokyo 节点中转。延迟通常 800-2500ms 首 token
  • 完全连不上:检查能否访问 https://code.wearekna.com(不需要梯子)
  • Hermes 默认开 streaming,看到字一个个吐就是正常
Q7:Hermes 的 tool calling / function calling 兼容 KNA 吗?

完全兼容。KNA 是 byte-for-byte 透传 Anthropic 官方 API 的 gateway,请求体和响应体不修改、不重写。Hermes 用 Anthropic SDK 原生 tool_use / tool_result 协议,KNA 全部照常转发。prompt caching、extended thinking、batch 等也全支持。

Q8:怎么导出账单 / 对账?

KNA dashboard → 使用记录 → 选时间范围 → 导出 CSV。每条记录都有 request_id、model、input/output tokens、扣费金额,可与 Anthropic 官方计量逐条比对。

Q9:怎么把 OpenClaw 老配置 migrate 到 hermes + KNA?
hermes claw migrate

会把 OpenClaw 里的 Anthropic API key 也带过来。之后手动改成 KNA key

hermes config set model.base_url https://code.wearekna.com/anthropic
# 然后按方式 B 把 4 个 ANTHROPIC_* env 写到 .env

反向迁移(hermes → openclaw)见 OpenClaw 接入指南

Q10:Cron 任务能用 KNA 吗?

可以。Cron 任务跑的是 model.default,所以 KNA 是 default 时所有 cron 也走 KNA。注意长跑任务会持续扣余额。


10数据流向

你的 Hermes Agent (本地 / VPS / Modal)
        │
        │ HTTPS, TLS 1.3
        ▼
   Cloudflare 边缘 (中国可达 CDN)
        │
        │ retention: 0 / logs: none
        ▼
   KNA 转发节点 (Tokyo, AS-Vultr)
        │
        │ retention: 0 / logs: metadata only (model, tokens, latency)
        │ 不缓存、不读取 prompt、不路由其他模型
        ▼
   api.anthropic.com (Anthropic 官方端点)
        │
        ▼
       Claude (Opus / Sonnet / Haiku)

KNA 全程零留存,仅记录账单 metadata(哪个 model、多少 token、多久)。prompt 与 completion 内容不落盘。详见 wearekna.com#notdo


11故障排查 Checklist

按顺序检查:

全过还是不通,邮件 info@wearekna.com,附上:

  1. hermes doctor 输出
  2. hermes config show(脱敏 API key)
  3. 错误 stack trace 或 response body
  4. Gateway 日志最后 50 行:tail -50 ~/.hermes/logs/gateway.log

附录 · 完整配置参考

~/.hermes/config.yaml(关键片段)

# 主模型
model:
  provider: anthropic
  base_url: https://code.wearekna.com/anthropic
  default: claude-sonnet-4-6

# 10 个 auxiliary 任务全部指到 KNA + Haiku
auxiliary:
  vision:           { provider: anthropic, model: claude-haiku-4-5, base_url: https://code.wearekna.com/anthropic, api_key: ${ANTHROPIC_API_KEY} }
  web_extract:      { provider: anthropic, model: claude-haiku-4-5, base_url: https://code.wearekna.com/anthropic, api_key: ${ANTHROPIC_API_KEY} }
  compression:      { provider: anthropic, model: claude-haiku-4-5, base_url: https://code.wearekna.com/anthropic, api_key: ${ANTHROPIC_API_KEY} }
  session_search:   { provider: anthropic, model: claude-haiku-4-5, base_url: https://code.wearekna.com/anthropic, api_key: ${ANTHROPIC_API_KEY} }
  skills_hub:       { provider: anthropic, model: claude-haiku-4-5, base_url: https://code.wearekna.com/anthropic, api_key: ${ANTHROPIC_API_KEY} }
  approval:         { provider: anthropic, model: claude-haiku-4-5, base_url: https://code.wearekna.com/anthropic, api_key: ${ANTHROPIC_API_KEY} }
  mcp:              { provider: anthropic, model: claude-haiku-4-5, base_url: https://code.wearekna.com/anthropic, api_key: ${ANTHROPIC_API_KEY} }
  title_generation: { provider: anthropic, model: claude-haiku-4-5, base_url: https://code.wearekna.com/anthropic, api_key: ${ANTHROPIC_API_KEY} }
  curator:          { provider: anthropic, model: claude-haiku-4-5, base_url: https://code.wearekna.com/anthropic, api_key: ${ANTHROPIC_API_KEY} }
  flush_memories:   { provider: anthropic, model: claude-haiku-4-5, base_url: https://code.wearekna.com/anthropic, api_key: ${ANTHROPIC_API_KEY} }

~/.hermes/.env(关键)

# anthropic provider 必须读 env 变量,4 个都写
ANTHROPIC_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ANTHROPIC_TOKEN=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ANTHROPIC_BASE_URL=https://code.wearekna.com/anthropic
ANTHROPIC_AUTH_TOKEN=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

改完之后必做

# macOS 重启 daemon
launchctl kickstart -k gui/$(id -u)/ai.hermes.gateway

# 或 Linux
systemctl --user restart hermes-gateway