# Claude Code SDK Rust 功能和参数文档
## 概述
Claude Code SDK Rust 是一个用于与 Claude Code CLI 交互的 Rust SDK,提供简单查询接口和完整的交互式客户端功能,与官方 Python SDK 具有完全的功能对等性。
## 核心功能
### 1. 简单查询接口
通过 `query()` 函数提供一次性查询功能,适用于无需保持会话状态的简单交互。
```rust
pub async fn query(
prompt: impl Into<String>,
options: Option<ClaudeCodeOptions>
) -> Result<impl Stream<Item = Result<Message>>>
```
### 2. 交互式客户端
通过 `InteractiveClient` 提供有状态的对话功能,支持上下文保持和连续对话。
主要方法:
- `new(options: ClaudeCodeOptions) -> Result<Self>` - 创建新客户端
- `connect() -> Result<()>` - 连接到 Claude CLI
- `send_and_receive(prompt: String) -> Result<Vec<Message>>` - 发送消息并等待完整响应
- `send_message(prompt: String) -> Result<()>` - 发送消息而不等待响应
- `receive_response() -> Result<Vec<Message>>` - 接收消息直到收到结果消息
- `interrupt() -> Result<()>` - 取消正在进行的操作
- `disconnect() -> Result<()>` - 断开与 Claude CLI 的连接
### 3. 优化客户端
`OptimizedClient` 提供高性能操作模式,支持三种客户端模式:
```rust
pub enum ClientMode {
Single, // 单次请求模式
Batch, // 批处理模式
Interactive // 交互式会话模式
}
```
### 4. 流式支持
支持异步消息流处理,可以实时接收和处理来自 Claude 的响应。
### 5. 中断功能
支持在操作过程中随时中断正在进行的任务,提供更好的控制能力。
## 配置参数详解
### ClaudeCodeOptions 结构体
所有配置选项都通过 `ClaudeCodeOptions` 结构体进行管理,支持通过构建器模式进行配置:
```rust
let options = ClaudeCodeOptions::builder()
.system_prompt("You are a helpful assistant")
.model("claude-3-5-sonnet-20241022")
.permission_mode(PermissionMode::AcceptEdits)
.build();
```
### 参数说明
#### 系统提示词配置
- **`system_prompt: Option<String>`**
- 在所有消息前添加的系统提示词
- 用于设定 Claude 的角色和行为准则
- **`append_system_prompt: Option<String>`**
- 追加的系统提示词
- 在原有系统提示词后添加额外指令
#### 工具权限控制
- **`allowed_tools: Vec<String>`**
- 允许使用的工具列表
- 示例:`["read", "write", "bash"]`
- 只有在此列表中的工具才能被使用
- **`disallowed_tools: Vec<String>`**
- 禁止使用的工具列表
- 优先级高于 allowed_tools
- 在此列表中的工具将被禁用
#### 权限模式
- **`permission_mode: PermissionMode`**
- 控制工具执行的权限模式
- 可选值:
- `Default` - 默认模式,危险操作需要用户确认
- `AcceptEdits` - 自动接受文件编辑操作
- `Plan` - 计划模式,用于规划任务(v0.1.7 新增)
- `BypassPermissions` - 允许所有工具操作无需确认(谨慎使用)
#### MCP (Model Context Protocol) 配置
- **`mcp_servers: HashMap<String, McpServerConfig>`**
- MCP 服务器配置映射
- 支持三种类型的 MCP 服务器:
- `Stdio` - 标准输入/输出模式
- `Sse` - Server-Sent Events 模式
- `Http` - HTTP 模式
- **`mcp_tools: Vec<String>`**
- 要启用的 MCP 工具列表
#### 对话控制
- **`max_turns: Option<i32>`**
- 最大对话轮数限制
- 超过此限制后对话将自动结束
- **`max_thinking_tokens: i32`**
- 最大思考 token 数
- 默认值:根据模型自动设置
- 控制 Claude 内部推理的复杂度
- **`model: Option<String>`**
- 指定使用的模型
- 示例:`"claude-3-5-sonnet-20241022"`
- **`cwd: Option<PathBuf>`**
- 工作目录路径
- Claude 执行文件操作时的基础目录
- **`continue_conversation: bool`**
- 是否继续之前的对话
- 设为 true 时会保持对话上下文
- **`resume: Option<String>`**
- 恢复特定对话 ID
- 用于恢复之前中断的对话
- **`permission_prompt_tool_name: Option<String>`**
- 自定义权限提示工具名称
## 消息类型
SDK 支持以下消息类型:
### 1. UserMessage
用户输入的消息
```rust
pub struct UserMessage {
pub content: String,
}
```
### 2. AssistantMessage
Claude 的响应消息
```rust
pub struct AssistantMessage {
pub content: Vec<ContentBlock>,
}
```
### 3. SystemMessage
系统通知消息
```rust
Message::System {
subtype: String,
data: serde_json::Value,
}
```
### 4. ResultMessage
操作结果消息,包含时间和成本信息
```rust
Message::Result {
subtype: String,
duration_ms: i64,
duration_api_ms: i64,
is_error: bool,
num_turns: i32,
session_id: String,
total_cost_usd: Option<f64>,
usage: Option<serde_json::Value>,
result: Option<String>,
}
```
## 内容块类型
`ContentBlock` 支持以下类型:
### 1. TextContent
纯文本内容
```rust
pub struct TextContent {
pub text: String,
}
```
### 2. ToolUseContent
工具使用请求
```rust
pub struct ToolUseContent {
pub id: String,
pub name: String,
pub input: serde_json::Value,
}
```
### 3. ToolResultContent
工具执行结果
```rust
pub struct ToolResultContent {
pub tool_use_id: String,
pub content: Option<ContentValue>,
pub is_error: Option<bool>,
}
```
## 错误处理
SDK 提供全面的错误类型:
- `CLINotFoundError` - Claude Code CLI 未安装
- `CLIConnectionError` - 连接失败
- `ProcessError` - CLI 进程错误
- `InvalidState` - 无效的操作状态
## 使用示例
### 基础查询
```rust
use cc_sdk::{query, Result};
use futures::StreamExt;
#[tokio::main]
async fn main() -> Result<()> {
let mut messages = query("解释一下 Rust 的所有权系统", None).await?;
while let Some(msg) = messages.next().await {
match msg? {
cc_sdk::Message::Assistant { message } => {
for content in message.content {
if let cc_sdk::ContentBlock::Text(text) = content {
println!("{}", text.text);
}
}
}
_ => {}
}
}
Ok(())
}
```
### 交互式对话
```rust
use cc_sdk::{InteractiveClient, ClaudeCodeOptions, PermissionMode, Result};
#[tokio::main]
async fn main() -> Result<()> {
let options = ClaudeCodeOptions::builder()
.system_prompt("你是一个 Rust 编程专家")
.permission_mode(PermissionMode::AcceptEdits)
.allowed_tools(vec!["read".to_string(), "write".to_string()])
.max_turns(20)
.build();
let mut client = InteractiveClient::new(options)?;
client.connect().await?;
// 第一轮对话
let messages = client.send_and_receive(
"帮我创建一个简单的 HTTP 服务器".to_string()
).await?;
// 继续对话
let messages = client.send_and_receive(
"添加日志记录功能".to_string()
).await?;
client.disconnect().await?;
Ok(())
}
```
### 使用优化客户端
```rust
use cc_sdk::{OptimizedClient, ClientMode, ClaudeCodeOptions, Result};
#[tokio::main]
async fn main() -> Result<()> {
let options = ClaudeCodeOptions::default();
// 单次请求模式
let mut client = OptimizedClient::new(ClientMode::Single, options.clone())?;
let response = client.query("What is 2 + 2?").await?;
// 批处理模式
let mut batch_client = OptimizedClient::new(ClientMode::Batch, options.clone())?;
let queries = vec![
"解释异步编程",
"什么是 Future",
"如何使用 tokio"
];
for query in queries {
let response = batch_client.query(query).await?;
println!("Response: {}", response);
}
Ok(())
}
```
## 性能优化建议
1. **使用适当的客户端模式**
- 单次查询使用 `query()` 函数或 `OptimizedClient::Single`
- 批量处理使用 `OptimizedClient::Batch`
- 交互式对话使用 `InteractiveClient`
2. **合理配置参数**
- 设置适当的 `max_turns` 避免无限对话
- 根据需要调整 `max_thinking_tokens`
- 只启用必要的工具以提高安全性和性能
3. **错误处理**
- 始终处理可能的错误情况
- 使用 `interrupt()` 方法及时取消长时间运行的操作
4. **资源管理**
- 使用完毕后调用 `disconnect()` 释放资源
- 避免创建过多的客户端实例
## 与 Python SDK 的功能对等性
本 Rust SDK 提供与官方 Python SDK 100% 的功能对等性:
- ✅ 所有客户端方法:`query()`、`send_message()`、`receive_response()`、`interrupt()`
- ✅ 交互式会话:完整的有状态对话支持
- ✅ 消息流:实时异步消息处理
- ✅ 所有配置选项:系统提示、模型、权限、工具等
- ✅ 所有消息类型:用户、助手、系统、结果消息
- ✅ 错误处理:与 Python SDK 匹配的全面错误类型
- ✅ 会话管理:多会话支持与上下文隔离
## 更多信息
- GitHub 仓库:[claude-code-sdk-rs](https://github.com/your-repo/claude-code-sdk-rs)
- API 文档:[docs.rs/cc-sdk](https://docs.rs/cc-sdk)
- 示例代码:查看 `examples/` 目录
## 许可证
本项目采用 MIT 许可证。详见 [LICENSE](../LICENSE) 文件。