agentic_huge_data_base / wiki
页面 jcode · 4.2 Anthropic 与 Claude 提供方·DeepWiki 中文全文译文

4.2 · Anthropic 与 Claude 提供方(Anthropic and Claude Providers)

代理式研究运行时 · 聚焦本章的模块关系、源码依据与实现要点。

项目jcode 章节4.2 状态全文译文 模块模型调用与提供方适配、界面与交互、接口与服务契约、智能体运行时
源码线索
  • src/memory_agent_tests.rs
  • src/message.rs
  • src/provider/anthropic.rs
  • src/provider/anthropic_tests.rs
  • src/provider/claude.rs
  • src/provider/copilot.rs
  • src/provider/copilot_tests.rs
  • src/provider/mod.rs
  • src/provider/openai.rs
  • src/server/client_session_tests/clear.rs
模块标签
  • 模型调用与提供方适配
  • 界面与交互
  • 接口与服务契约
  • 智能体运行时
  • 记忆与上下文

章节正文

Anthropic 与 Claude 提供方

Anthropic 和 Claude 提供者

相关源文件

本章引用的主要源码文件:

  • src/memory_agent_tests.rs
  • src/message.rs
  • src/provider/anthropic.rs
  • src/provider/anthropic_tests.rs
  • src/provider/claude.rs
  • src/provider/copilot.rs
  • src/provider/copilot_tests.rs
  • src/provider/mod.rs
  • src/provider/openai.rs
  • src/server/client_session_tests/clear.rs
  • src/server/client_session_tests/reload.rs
  • src/server/client_session_tests/resume.rs
  • src/tui/app/tui_lifecycle_runtime.rs

本文档描述了 jcode 中基于 Anthropic 的大语言模型(LLM)提供者的实现。它涵盖了直接使用 Messages API 的 AnthropicProvider、与 Claude Code CLI 交互的 ClaudeProvider,以及用于保持与 Anthropic 生态系统兼容性的专用提示缓存和工具重映射策略。

提供者概述

jcode 实现了两种与 Anthropic 模型交互的主要方式:

  1. AnthropicProvider:使用 reqwest 对 Anthropic Messages API 的直接实现 src/provider/anthropic.rs:1-4。它处理原始 HTTP 请求并管理 OAuth 令牌。
  2. ClaudeProvider:连接官方 claude(Claude Code)CLI 的桥接器,允许 jcode 利用 Claude Code 的内部工具执行和 OAuth 会话 src/provider/claude.rs:47-60
自然语言到代码实体的映射

下图展示了 jcode 提供者系统如何弥合高层模型请求与底层代码实体之间的差距。

提供者编排流程

jcode · 自然语言到代码实体的映射 · 图 1
jcode · 自然语言到代码实体的映射 · 图 1

来源:src/provider/anthropic.rs:1-10src/provider/claude.rs:47-60src/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_idaccount_uuidorganization_uuid src/provider/anthropic.rs:97-129
工具名称重映射

当使用基于 OAuth 的访问时,Anthropic 期望工具名称与 Claude Code 模式匹配。jcode 使用 anthropic_map_tool_name_for_oauthanthropic_map_tool_name_from_oauth 在其内部工具名称与官方 Claude Code 等效名称之间执行双向映射 src/provider/anthropic.rs:13-19

来源:src/provider/anthropic.rs:41-87src/provider/anthropic.rs:97-129src/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_1M src/provider/anthropic.rs:55-65

来源:src/provider/anthropic.rs:29-65src/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(如 selfdevmemorysession_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 风格消息的转换,确保流事件和工具结果正确映射回 jcodeEventStream 类型。它处理各种 CliOutput 变体,包括 StreamEventAssistantUser 消息 src/provider/claude.rs:162-199

Claude CLI 集成数据流

jcode · SDK 桥接逻辑 · 图 2
jcode · SDK 桥接逻辑 · 图 2

来源:src/provider/claude.rs:62-75src/provider/claude.rs:162-199

模型目录与可用性

jcode 支持多种 Claude 模型,并通过缓存的目录监控可用性。

模型目录
  • 已知模型:标准模型包括 claude-opus-4-6claude-sonnet-4-6claude-haiku-4-5 src/provider/anthropic_tests.rs:12-20
  • 刷新机制:系统提供 begin_anthropic_model_catalog_refreshfetch_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-173src/provider/copilot_tests.rs:101-158

来源:src/provider/mod.rs:168-174src/provider/anthropic_tests.rs:12-20src/provider/copilot_tests.rs:101-158