跳转至

自定义 Anthropic 兼容后端

当你使用 claude 提供方时,claude-mem 会通过 Claude Agent SDK 与 Anthropic API 通信。默认情况下,SDK 以官方 Anthropic 端点为目标,但它会遵循标准的 ANTHROPIC_BASE_URL 环境变量。这意味着你可以将 claude-mem 路由到任何与 Anthropic 协议兼容的后端——例如企业网关、区域桥接服务,或暴露 Anthropic 风格 API 的第三方提供方——而无需修改任何 claude-mem 源代码。

Note

本文档说明如何持久化自定义 base URL,以便 claude-mem 的 worker 始终如一地使用它。对于兼容 OpenAI 的上游提供方,请使用 LiteLLM 之类的网关,并遵循 LiteLLM Gateway 指南。

何时使用此功能

如果你需要 claude-mem 的观察 worker 与以下目标通信,请使用 ANTHROPIC_BASE_URL:

  • 一个企业级 Anthropic 网关(位于 api.anthropic.com 前面的代理)
  • 一个区域级 Anthropic 部署(例如通过 Anthropic 兼容 shim 的 AWS Bedrock 或 GCP Vertex)
  • 一个第三方提供方,将其 API 桥接到 Anthropic 协议

如果你的提供方只支持 OpenAI chat-completions 协议,请在它前面放置一个 LiteLLM 之类的网关,并将 claude-mem 的 Claude Agent SDK 路径指向该网关。完整的路由模型请参阅 LiteLLM Gateway。

工作原理

流程设计得非常简单:

  1. 你写入凭据到 ~/.claude-mem/.env。
  2. EnvManager.loadClaudeMemEnv() 读取该文件(src/shared/EnvManager.ts:67)。
  3. buildIsolatedEnv() 将 ANTHROPIC_BASE_URL 复制到 worker 的启动环境中,同时包含显式的网关或 API 凭据(src/shared/EnvManager.ts:164)。
  4. ClaudeProvider.startSession() 使用该隔离环境启动 Claude Agent SDK(src/services/worker/ClaudeProvider.ts:115)。SDK 原生读取 ANTHROPIC_BASE_URL——claude-mem 不会解析或重写它。

由于该变量被隔离在 worker 进程中,你的交互式 Claude Code 会话不受影响;只有后台记忆代理使用此覆盖。

配置

第 1 步:编辑 ~/.claude-mem/.env

凭据文件是一个纯文本 KEY=VALUE 环境文件,位于 ~/.claude-mem/.env(权限 0600)。添加或更新 ANTHROPIC_BASE_URL 行:

# ~/.claude-mem/.env
ANTHROPIC_API_KEY=sk-ant-...
ANTHROPIC_BASE_URL=https://your-gateway.example.com/v1

如果文件尚不存在,请创建它。目录权限会被强制为 0700,文件权限会被强制为 0600,这些会在下次 worker 写入时自动完成。

第 2 步:选择兼容的模型

CLAUDE_MEM_MODEL(位于 ~/.claude-mem/settings.json)会直接传给 SDK。模型名称必须是你的桥接服务接受的名称——claude-mem 不会转换名称。

{
  "CLAUDE_MEM_MODEL": "claude-haiku-4-5-20251001"
}

如果你的桥接服务期望非 Anthropic 模型名称(例如 Bedrock 推理配置),则在此处设置该字符串。

第 3 步:重启 Worker

凭据在 worker 启动 SDK 时加载,因此编辑 .env 后需要重启:

npm run worker:restart

示例:企业网关

假设你的团队在 api.anthropic.com 前面运行 https://anthropic-proxy.internal.example.com,用于审计和速率限制。该代理接受相同的协议和相同的模型名称。

~/.claude-mem/.env:

ANTHROPIC_API_KEY=sk-corp-...
ANTHROPIC_BASE_URL=https://anthropic-proxy.internal.example.com

~/.claude-mem/settings.json:

{
  "CLAUDE_MEM_PROVIDER": "claude",
  "CLAUDE_MEM_MODEL": "claude-haiku-4-5-20251001"
}

重启后,下一条观察记录将通过你的网关路由。

验证

重启后,在 worker 日志中查看下一条观察记录的刷新:

npm run worker:logs

通过网关的成功请求会显示标准的 SDK Starting SDK query 行,随后是 Response received。如果网关拒绝该请求,SDK 错误会原样出现在 worker-error.log 中——不会静默回退到公共 Anthropic 端点。

限制与注意事项

  • 不进行模型名称转换。 如果你的桥接服务期望 glm-4.7,而 CLAUDE_MEM_MODEL 是 claude-haiku-4-5-20251001,请求将失败。请将 CLAUDE_MEM_MODEL 固定为你桥接服务能识别的名称。
  • 网关认证通常使用 ANTHROPIC_AUTH_TOKEN。 对于 LiteLLM 网关模式,请将网关密钥或虚拟密钥存储为 ANTHROPIC_AUTH_TOKEN。对于直接使用 Anthropic API 密钥模式或明确期望该密钥的网关,请使用 ANTHROPIC_API_KEY。
  • shell 中的 ANTHROPIC_BASE_URL 不会被继承。 ANTHROPIC_API_KEY 位于 BLOCKED_ENV_VARS 列表(src/shared/EnvManager.ts:10)中,以防止因 shell 泄漏密钥而导致意外计费;ANTHROPIC_BASE_URL 未被阻止,但仍必须设置在 ~/.claude-mem/.env 中,以便 worker 在重启期间可靠地读取它。不要依赖 shell 导出。
  • 无自动检测。 如果你已经为 Claude Code 本身配置了 ANTHROPIC_BASE_URL、ANTHROPIC_DEFAULT_HAIKU_MODEL 等,claude-mem 目前不会读取这些配置。请将相关值镜像到 ~/.claude-mem/.env 和 ~/.claude-mem/settings.json 中。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/claude-mem