Интерфейс V2 является нестабильным предпросмотром. API могут измениться на основе обратной связи перед тем, как стать стабильными. Некоторые функции, такие как разветвление сессий, доступны только в V1 SDK.
V2 Claude Agent TypeScript SDK устраняет необходимость в асинхронных генераторах и координации yield. Это делает многооборотные разговоры проще — вместо управления состоянием генератора между оборотами, каждый оборот представляет собой отдельный цикл send()/stream(). Поверхность API сводится к трём концепциям:
createSession() / resumeSession(): Начать или продолжить разговор
session.send(): Отправить сообщение
session.stream(): Получить ответ
Установка
Интерфейс V2 включён в существующий пакет SDK:
npm install @anthropic-ai/claude-agent-sdk
SDK поставляется с нативным бинарным файлом Claude Code для вашей платформы в качестве опциональной зависимости, поэтому вам не нужно устанавливать Claude Code отдельно.
Быстрый старт
Однократный запрос
Для простых однооборотных запросов, когда вам не нужно поддерживать сессию, используйте unstable_v2_prompt(). Этот пример отправляет математический вопрос и логирует ответ:
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);
}
Базовая сессия
Для взаимодействий, выходящих за рамки одного запроса, создайте сессию. V2 разделяет отправку и потоковую передачу на отдельные шаги:
send() отправляет ваше сообщение
stream() передаёт ответ потоком
Это явное разделение облегчает добавление логики между оборотами (например, обработка ответов перед отправкой последующих сообщений).
Пример ниже создаёт сессию, отправляет “Hello!” в Claude и выводит текстовый ответ. Он использует await using (TypeScript 5.2+) для автоматического закрытия сессии при выходе из блока. Вы также можете вызвать session.close() вручную.
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()) {
// Filter for assistant messages to get human-readable output
if (msg.type === "assistant") {
const text = msg.message.content
.filter((block) => block.type === "text")
.map((block) => block.text)
.join("");
console.log(text);
}
}
Многооборотный разговор
Сессии сохраняют контекст между несколькими обменами. Чтобы продолжить разговор, вызовите send() снова на той же сессии. Claude помнит предыдущие обороты.
Этот пример задаёт математический вопрос, а затем задаёт последующий вопрос, который ссылается на предыдущий ответ:
import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";
await using session = unstable_v2_createSession({
model: "claude-opus-4-7"
});
// Turn 1
await session.send("What is 5 + 3?");
for await (const msg of session.stream()) {
// Filter for assistant messages to get human-readable output
if (msg.type === "assistant") {
const text = msg.message.content
.filter((block) => block.type === "text")
.map((block) => block.text)
.join("");
console.log(text);
}
}
// Turn 2
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);
}
}
Возобновление сессии
Если у вас есть ID сессии из предыдущего взаимодействия, вы можете возобновить её позже. Это полезно для долгоживущих рабочих процессов или когда вам нужно сохранить разговоры между перезагрузками приложения.
Этот пример создаёт сессию, сохраняет её ID, закрывает её, а затем возобновляет разговор:
import {
unstable_v2_createSession,
unstable_v2_resumeSession,
type SDKMessage
} from "@anthropic-ai/claude-agent-sdk";
// Helper to extract text from assistant messages
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("");
}
// Create initial session and have a conversation
const session = unstable_v2_createSession({
model: "claude-opus-4-7"
});
await session.send("Remember this number: 42");
// Get the session ID from any received message
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();
// Later: resume the session using the stored ID
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);
}
Очистка
Сессии можно закрывать вручную или автоматически, используя await using, функцию TypeScript 5.2+ для автоматической очистки ресурсов. Если вы используете более старую версию TypeScript или столкнулись с проблемами совместимости, используйте вместо этого ручную очистку.
Автоматическая очистка (TypeScript 5.2+):
import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";
await using session = unstable_v2_createSession({
model: "claude-opus-4-7"
});
// Session closes automatically when the block exits
Ручная очистка:
import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";
const session = unstable_v2_createSession({
model: "claude-opus-4-7"
});
// ... use the session ...
session.close();
Справочник API
unstable_v2_createSession()
Создаёт новую сессию для многооборотных разговоров.
function unstable_v2_createSession(options: {
model: string;
// Additional options supported
}): SDKSession;
unstable_v2_resumeSession()
Возобновляет существующую сессию по ID.
function unstable_v2_resumeSession(
sessionId: string,
options: {
model: string;
// Additional options supported
}
): SDKSession;
unstable_v2_prompt()
Однократная удобная функция для однооборотных запросов.
function unstable_v2_prompt(
prompt: string,
options: {
model: string;
// Additional options supported
}
): Promise<SDKResultMessage>;
Интерфейс SDKSession
interface SDKSession {
readonly sessionId: string;
send(message: string | SDKUserMessage): Promise<void>;
stream(): AsyncGenerator<SDKMessage, void>;
close(): void;
}
Доступность функций
Не все функции V1 доступны в V2 пока. Следующие требуют использования V1 SDK:
- Разветвление сессий (опция
forkSession)
- Некоторые продвинутые паттерны потокового ввода
Обратная связь
Поделитесь своей обратной связью по интерфейсу V2 перед тем, как он станет стабильным. Сообщайте о проблемах и предложениях через GitHub Issues.
См. также