Claude Code 中文文档

create: 2026-07-08
update: 2026-07-08
author: thinkycx
title: 【译】TypeScript SDK V2 Session API(已移除)
description: TypeScript Agent SDK V2 Session API 的参考文档。该 API 已在 0.3.142 版本移除,本文档保留给仍在 0.2.x 上的代码参考。涵盖 createSession/resumeSession/prompt 的用法、多轮对话、会话恢复,以及与 V1 query() API 的对比。
category: translation
tags: claude-code, agent-sdk, typescript, translation

TypeScript SDK V2 Session API(已移除)

已废弃的 V2 TypeScript Agent SDK Session API 参考,包含基于 session 的 send/stream 模式实现多轮对话。


V2 session API 已不再支持。TypeScript Agent SDK 0.3.142 移除了 unstable_v2_createSessionunstable_v2_resumeSessionunstable_v2_prompt,以及 SDKSessionSDKSessionOptions 类型。

迁移方式:使用 query() API 及其接受的 session 选项。多轮对话传入 AsyncIterable<SDKUserMessage>,恢复已保存会话使用 options.resume。本页仅供维护 Agent SDK 0.2.x 或更早版本代码时参考。

V2 是一套实验性 session API,消除了 async generator 和 yield 协调的复杂度。 每轮对话变成独立的 send()/stream() 调用,API 表面缩减为三个概念:

  • createSession() / resumeSession():开始或恢复对话
  • session.send():发送消息
  • session.stream():获取响应

安装

Agent SDK 0.2.x 是包含 V2 接口的最后版本。 版本号从 0.2.x 直接跳到 0.3.142,因此上面提到的移除版本与下面的安装锁定描述的是同一个边界。安装最后一个兼容 V2 的版本:

```bash theme={null}
npm install @anthropic-ai/[email protected]

<Note>
  SDK 会将你平台对应的 Claude Code 原生二进制包含为可选依赖因此无需单独安装 Claude Code
</Note>

## 快速开始

### 单次 Prompt

**简单的单轮查询不需要维护 session** 使用 `unstable_v2_prompt()` 发送一个数学问题并打印答案

```typescript theme={null}
import { unstable_v2_prompt } from "@anthropic-ai/claude-agent-sdk";

const result = await unstable_v2_prompt("What is 2 + 2?", {
  model: "claude-opus-4-7"
});
if (result.subtype === "success") {
  console.log(result.result);
}
V1 等效写法 ```typescript theme={null} import { query } from "@anthropic-ai/claude-agent-sdk"; const q = query({ prompt: "What is 2 + 2?", options: { model: "claude-opus-4-7" } }); for await (const msg of q) { if (msg.type === "result" && msg.subtype === "success") { console.log(msg.result); } } ```

基本 Session

超过单轮的交互需要创建 session。 V2 将发送和流式接收分为两个独立步骤:

  • send() — 发送消息
  • stream() — 流式接收响应

这种显式分离使得在轮次之间插入逻辑(如处理响应后再发后续消息)更加容易。

下面的示例创建一个 session,向 Claude 发送 "Hello!",并打印文本响应。使用 await using(TypeScript 5.2+)在代码块退出时自动关闭 session。也可以手动调用 session.close()

```typescript theme={null}
import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

await using session = unstable_v2_createSession({
model: "claude-opus-4-7"
});

await session.send("Hello!");
for await (const msg of session.stream()) {
// 过滤 assistant 消息获取可读输出
if (msg.type === "assistant") {
const text = msg.message.content
.filter((block) => block.type === "text")
.map((block) => block.text)
.join("");
console.log(text);
}
}

<details>
  <summary>V1 等效写法</summary>

  V1 中输入和输出都通过单个 async generator 流动基本 prompt 看起来类似但添加多轮逻辑需要重构为使用 input generator

  ```typescript theme={null}
  import { query } from "@anthropic-ai/claude-agent-sdk";

  const q = query({
    prompt: "Hello!",
    options: { model: "claude-opus-4-7" }
  });

  for await (const msg of q) {
    if (msg.type === "assistant") {
      const text = msg.message.content
        .filter((block) => block.type === "text")
        .map((block) => block.text)
        .join("");
      console.log(text);
    }
  }
  ```
</details>

### 多轮对话

**Session 在多次交互间保持上下文** 在同一个 session 上再次调用 `send()` 即可继续对话Claude 会记住之前的轮次

下面的示例先问一个数学问题再问一个引用前一个答案的后续问题

```typescript theme={null}
import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

await using session = unstable_v2_createSession({
  model: "claude-opus-4-7"
});

// 第一轮
await session.send("What is 5 + 3?");
for await (const msg of session.stream()) {
  // 过滤 assistant 消息获取可读输出
  if (msg.type === "assistant") {
    const text = msg.message.content
      .filter((block) => block.type === "text")
      .map((block) => block.text)
      .join("");
    console.log(text);
  }
}

// 第二轮
await session.send("Multiply that by 2");
for await (const msg of session.stream()) {
  if (msg.type === "assistant") {
    const text = msg.message.content
      .filter((block) => block.type === "text")
      .map((block) => block.text)
      .join("");
    console.log(text);
  }
}
V1 等效写法 ```typescript theme={null} import { query } from "@anthropic-ai/claude-agent-sdk"; // 需要创建 async iterable 来提供消息 async function* createInputStream() { yield { type: "user", session_id: "", message: { role: "user", content: [{ type: "text", text: "What is 5 + 3?" }] }, parent_tool_use_id: null }; // 需要协调何时 yield 下一条消息 yield { type: "user", session_id: "", message: { role: "user", content: [{ type: "text", text: "Multiply by 2" }] }, parent_tool_use_id: null }; } const q = query({ prompt: createInputStream(), options: { model: "claude-opus-4-7" } }); for await (const msg of q) { if (msg.type === "assistant") { const text = msg.message.content .filter((block) => block.type === "text") .map((block) => block.text) .join(""); console.log(text); } } ```

会话恢复

如果有之前交互的 session ID,可以稍后恢复。 适用于长时间运行的工作流或需要跨应用重启持久化对话的场景。

下面的示例创建一个 session、保存其 ID、关闭它,然后恢复对话:

```typescript theme={null}
import {
unstable_v2_createSession,
unstable_v2_resumeSession,
type SDKMessage
} from "@anthropic-ai/claude-agent-sdk";

// 从 assistant 消息提取文本的辅助函数
function getAssistantText(msg: SDKMessage): string | null {
if (msg.type !== "assistant") return null;
return msg.message.content
.filter((block) => block.type === "text")
.map((block) => block.text)
.join("");
}

// 创建初始 session 并进行对话
const session = unstable_v2_createSession({
model: "claude-opus-4-7"
});

await session.send("Remember this number: 42");

// 从接收到的消息中获取 session ID
let sessionId: string | undefined;
for await (const msg of session.stream()) {
sessionId = msg.session_id;
const text = getAssistantText(msg);
if (text) console.log("Initial response:", text);
}

console.log("Session ID:", sessionId);
session.close();

// 稍后:使用保存的 ID 恢复 session
await using resumedSession = unstable_v2_resumeSession(sessionId!, {
model: "claude-opus-4-7"
});

await resumedSession.send("What number did I ask you to remember?");
for await (const msg of resumedSession.stream()) {
const text = getAssistantText(msg);
if (text) console.log("Resumed response:", text);
}

<details>
  <summary>V1 等效写法</summary>

  ```typescript theme={null}
  import { query } from "@anthropic-ai/claude-agent-sdk";

  // 创建初始 session
  const initialQuery = query({
    prompt: "Remember this number: 42",
    options: { model: "claude-opus-4-7" }
  });

  // 从任意消息获取 session ID
  let sessionId: string | undefined;
  for await (const msg of initialQuery) {
    sessionId = msg.session_id;
    if (msg.type === "assistant") {
      const text = msg.message.content
        .filter((block) => block.type === "text")
        .map((block) => block.text)
        .join("");
      console.log("Initial response:", text);
    }
  }

  console.log("Session ID:", sessionId);

  // 稍后恢复 session
  const resumedQuery = query({
    prompt: "What number did I ask you to remember?",
    options: {
      model: "claude-opus-4-7",
      resume: sessionId
    }
  });

  for await (const msg of resumedQuery) {
    if (msg.type === "assistant") {
      const text = msg.message.content
        .filter((block) => block.type === "text")
        .map((block) => block.text)
        .join("");
      console.log("Resumed response:", text);
    }
  }
  ```
</details>

### 资源清理

**Session 可以手动或自动关闭** 使用 [`await using`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management)(TypeScript 5.2+ 的自动资源管理特性)在代码块退出时自动清理。旧版 TypeScript 或遇到兼容问题时使用手动清理。

**自动清理TypeScript 5.2+):**

```typescript theme={null}
import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

await using session = unstable_v2_createSession({
  model: "claude-opus-4-7"
});
// 代码块退出时 session 自动关闭

手动清理:

```typescript theme={null}
import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

const session = unstable_v2_createSession({
model: "claude-opus-4-7"
});
// ... 使用 session ...
session.close();

## API 参考

### `unstable_v2_createSession()`

**创建新的多轮对话 session**

```typescript theme={null}
function unstable_v2_createSession(options: {
  model: string;
  // 支持其他选项
}): SDKSession;

unstable_v2_resumeSession()

通过 ID 恢复已有 session。

```typescript theme={null}
function unstable_v2_resumeSession(
sessionId: string,
options: {
model: string;
// 支持其他选项
}
): SDKSession;

### `unstable_v2_prompt()`

**单轮查询的便捷函数**

```typescript theme={null}
function unstable_v2_prompt(
  prompt: string,
  options: {
    model: string;
    // 支持其他选项
  }
): Promise<SDKResultMessage>;

SDKSession 接口

typescript theme={null} interface SDKSession { readonly sessionId: string; send(message: string | SDKUserMessage): Promise<void>; stream(): AsyncGenerator<SDKMessage, void>; close(): void; }

功能可用性

V2 session API 不支持所有 V1 功能。 以下功能需要使用 V1 SDK

  • Session 分叉(forkSession 选项)
  • 部分高级流式输入模式

相关文档