Claude Code SDK 支持两种不同的输入模式来与代理交互:
- 流式输入模式(默认和推荐)- 持久的交互式会话
- 单消息输入 - 使用会话状态和恢复的一次性查询
本指南解释了每种模式的差异、优势和用例,帮助您为应用程序选择正确的方法。
流式输入模式(推荐)
流式输入模式是使用 Claude Code SDK 的首选方式。它提供对代理功能的完全访问,并支持丰富的交互式体验。
它允许代理作为长期运行的进程运行,接收用户输入、处理中断、显示权限请求并处理会话管理。
工作原理
工具集成
在会话期间完全访问所有工具和自定义 MCP 服务器
实现示例
import { query } from "@anthropic-ai/claude-code";
import { readFileSync } from "fs";
async function* generateMessages() {
yield {
type: "user" as const,
message: {
role: "user" as const,
content: "分析此代码库的安全问题"
}
};
await new Promise(resolve => setTimeout(resolve, 2000));
yield {
type: "user" as const,
message: {
role: "user" as const,
content: [
{
type: "text",
text: "审查此架构图"
},
{
type: "image",
source: {
type: "base64",
media_type: "image/png",
data: readFileSync("diagram.png", "base64")
}
}
]
}
};
}
for await (const message of query({
prompt: generateMessages(),
options: {
maxTurns: 10,
allowedTools: ["Read", "Grep"]
}
})) {
if (message.type === "result") {
console.log(message.result);
}
}
单消息输入
单消息输入更简单但功能更有限。
何时使用单消息输入
在以下情况下使用单消息输入:
- 您需要一次性响应
- 您不需要图像附件、钩子等
- 您需要在无状态环境中运行,例如 lambda 函数
单消息输入模式不支持:
- 消息中的直接图像附件
- 动态消息排队
- 实时中断
- 钩子集成
- 自然的多轮对话
实现示例
import { query } from "@anthropic-ai/claude-code";
for await (const message of query({
prompt: "解释身份验证流程",
options: {
maxTurns: 1,
allowedTools: ["Read", "Grep"]
}
})) {
if (message.type === "result") {
console.log(message.result);
}
}
for await (const message of query({
prompt: "现在解释授权过程",
options: {
continue: true,
maxTurns: 1
}
})) {
if (message.type === "result") {
console.log(message.result);
}
}