Anthropic 与 Claude 提供方
Anthropic 和 Claude 提供者
相关源文件
本章引用的主要源码文件:
src/memory_agent_tests.rssrc/message.rssrc/provider/anthropic.rssrc/provider/anthropic_tests.rssrc/provider/claude.rssrc/provider/copilot.rssrc/provider/copilot_tests.rssrc/provider/mod.rssrc/provider/openai.rssrc/server/client_session_tests/clear.rssrc/server/client_session_tests/reload.rssrc/server/client_session_tests/resume.rssrc/tui/app/tui_lifecycle_runtime.rs
本文档描述了 jcode 中基于 Anthropic 的大语言模型(LLM)提供者的实现。它涵盖了直接使用 Messages API 的 AnthropicProvider、与 Claude Code CLI 交互的 ClaudeProvider,以及用于保持与 Anthropic 生态系统兼容性的专用提示缓存和工具重映射策略。
提供者概述
jcode 实现了两种与 Anthropic 模型交互的主要方式:
- AnthropicProvider:使用
reqwest对 Anthropic Messages API 的直接实现src/provider/anthropic.rs:1-4。它处理原始 HTTP 请求并管理 OAuth 令牌。 - ClaudeProvider:连接官方
claude(Claude Code)CLI 的桥接器,允许jcode利用 Claude Code 的内部工具执行和 OAuth 会话src/provider/claude.rs:47-60。
自然语言到代码实体的映射
下图展示了 jcode 提供者系统如何弥合高层模型请求与底层代码实体之间的差距。
提供者编排流程
来源:src/provider/anthropic.rs:1-10、src/provider/claude.rs:47-60、src/provider/mod.rs:166-184。
AnthropicProvider(直接 API)
AnthropicProvider 处理与 Anthropic REST API(位于 https://api.anthropic.com/v1/messages)的直接通信 src/provider/anthropic.rs:41-45。它支持标准 API 密钥和从 Claude Code 安装中派生的 OAuth 令牌 src/provider/anthropic.rs:97-129。
OAuth 契约与身份
要使用专为 Claude Code 设计的 OAuth 令牌直接调用 API,jcode 必须满足特定契约以避免认证或归属错误:
- User-Agent:设置为
claude-cli/2.1.123 (external, sdk-cli)src/provider/anthropic.rs:48。 - 计费请求头:
cc_version=2.1.123; cc_entrypoint=sdk-cli; cch=33f85;src/provider/anthropic.rs:52-53。 - 身份请求头:注入
X-Claude-Code-Session-Id和其他X-Stainless-*请求头,以镜像官方客户端的指纹src/provider/anthropic.rs:71-87。 - 元数据:从
~/.claude.json加载官方客户端元数据,包括device_id、account_uuid和organization_uuidsrc/provider/anthropic.rs:97-129。
工具名称重映射
当使用基于 OAuth 的访问时,Anthropic 期望工具名称与 Claude Code 模式匹配。jcode 使用 anthropic_map_tool_name_for_oauth 和 anthropic_map_tool_name_from_oauth 在其内部工具名称与官方 Claude Code 等效名称之间执行双向映射 src/provider/anthropic.rs:13-19。
来源:src/provider/anthropic.rs:41-87、src/provider/anthropic.rs:97-129、src/provider/claude.rs:62-75。
滑动双标记提示缓存
jcode 实现了一种针对 Anthropic 定价模型优化的提示缓存策略。AnthropicProvider 通过在消息流中插入 cache_control 标记来管理缓存断点 src/provider/anthropic_tests.rs:168-216。
实现细节
- 缓存断点:
jcode使用add_message_cache_breakpoint在最后两个用户/助手轮次边界处插入ephemeral标记src/provider/anthropic_tests.rs:168-216。 - TTL 管理:支持针对特定高频会话的 1 小时缓存 TTL,通过
set_cache_ttl_1h切换src/provider/anthropic.rs:29-39。 - 1M 上下文支持:被识别为 "1M" 的模型(例如通过
effectively_1m)会触发使用ANTHROPIC_OAUTH_BETA_HEADERS_1Msrc/provider/anthropic.rs:55-65。
来源:src/provider/anthropic.rs:29-65、src/provider/anthropic_tests.rs:168-216。
Claude 代码提供者和 SDK 桥接
ClaudeProvider 使用 tokio::process::Command 调用启用了 JSON 输出的 claude CLI src/provider/claude.rs:11-15。
关键特性
- 内部工具处理:
ClaudeProvider可以将执行委托给 CLI 的内置工具。NATIVE_TOOL_NAMES(如selfdev、memory、session_search)会被过滤掉,由jcode在本地处理src/provider/claude.rs:43-44。 - 序列化:对 CLI 的访问受全局
CLAUDE_CLI_LOCK保护src/provider/claude.rs:22。这可以防止由并发 CLI 实例引起的 "ProcessTransport not ready" 错误src/provider/claude.rs:33-34。 - 部分消息处理:支持流式传输部分消息以实现更响应的用户界面,由
JCODE_CLAUDE_CLI_PARTIAL控制src/provider/claude.rs:144-152。
SDK 桥接逻辑
该提供者促进 Rust 运行时与 Claude CLI 进程之间的 JSON-RPC 风格消息的转换,确保流事件和工具结果正确映射回 jcode 的 EventStream 类型。它处理各种 CliOutput 变体,包括 StreamEvent、Assistant 和 User 消息 src/provider/claude.rs:162-199。
Claude CLI 集成数据流
来源:src/provider/claude.rs:62-75、src/provider/claude.rs:162-199。
模型目录与可用性
jcode 支持多种 Claude 模型,并通过缓存的目录监控可用性。
模型目录
- 已知模型:标准模型包括
claude-opus-4-6、claude-sonnet-4-6和claude-haiku-4-5src/provider/anthropic_tests.rs:12-20。 - 刷新机制:系统提供
begin_anthropic_model_catalog_refresh和fetch_anthropic_model_catalog等函数,以保持模型列表的最新状态src/provider/mod.rs:168-174。
上下文限制
提供者系统会跟踪每个模型的上下文限制,例如 Opus 为 200,000 个 Token,Sonnet 为 128,000 个 Token,可通过 context_limit_for_model_with_provider 访问 src/provider/mod.rs:172-173、src/provider/copilot_tests.rs:101-158。
来源:src/provider/mod.rs:168-174、src/provider/anthropic_tests.rs:12-20、src/provider/copilot_tests.rs:101-158。