Перейти к основному содержанию

Обзор

Claude Agent SDK поддерживает два различных режима ввода для взаимодействия с агентами:
  • Режим Streaming Input (По умолчанию и рекомендуется) - Постоянная интерактивная сессия
  • Single Message Input - Одноразовые запросы, которые используют состояние сессии и возобновление
Это руководство объясняет различия, преимущества и варианты использования каждого режима, чтобы помочь вам выбрать правильный подход для вашего приложения.

Режим Streaming Input (Рекомендуется)

Режим streaming input - это предпочтительный способ использования Claude Agent SDK. Он обеспечивает полный доступ к возможностям агента и позволяет создавать богатые интерактивные впечатления. Он позволяет агенту работать как долгоживущий процесс, который принимает пользовательский ввод, обрабатывает прерывания, выводит запросы разрешений и управляет сессией.

Как это работает

Преимущества

Загрузка изображений

Прикрепляйте изображения непосредственно к сообщениям для визуального анализа и понимания

Очередь сообщений

Отправляйте несколько сообщений, которые обрабатываются последовательно, с возможностью прерывания

Интеграция инструментов

Полный доступ ко всем инструментам и пользовательским MCP серверам во время сессии

Обратная связь в реальном времени

Смотрите ответы по мере их создания, а не только финальные результаты

Сохранение контекста

Сохраняйте контекст разговора между несколькими ходами естественным образом

Пример реализации

import { query, type SDKUserMessage } from "@anthropic-ai/claude-agent-sdk";
import { readFile } from "fs/promises";

async function* generateMessages(): AsyncGenerator<SDKUserMessage> {
  // First message
  yield {
    type: "user",
    message: {
      role: "user",
      content: "Analyze this codebase for security issues"
    },
    parent_tool_use_id: null
  };

  // Wait for conditions or user input
  await new Promise((resolve) => setTimeout(resolve, 2000));

  // Follow-up with image
  yield {
    type: "user",
    message: {
      role: "user",
      content: [
        {
          type: "text",
          text: "Review this architecture diagram"
        },
        {
          type: "image",
          source: {
            type: "base64",
            media_type: "image/png",
            data: await readFile("diagram.png", "base64")
          }
        }
      ]
    },
    parent_tool_use_id: null
  };
}

// Process streaming responses
for await (const message of query({
  prompt: generateMessages(),
  options: {
    maxTurns: 10,
    allowedTools: ["Read", "Grep"]
  }
})) {
  if (message.type === "result" && message.subtype === "success") {
    console.log(message.result);
  }
}

Ввод одного сообщения

Ввод одного сообщения проще, но более ограничен.

Когда использовать ввод одного сообщения

Используйте ввод одного сообщения когда:
  • Вам нужен одноразовый ответ
  • Вам не нужны вложения изображений или методы управления в середине сеанса
  • Вам нужно работать в безгосударственной среде, такой как lambda функция

Ограничения

Режим ввода одного сообщения не поддерживает:
  • Прямое вложение изображений в сообщения
  • Динамическую очередь сообщений
  • Прерывание в реальном времени
  • Естественные многоходовые разговоры

Пример реализации

import { query } from "@anthropic-ai/claude-agent-sdk";

// Simple one-shot query
for await (const message of query({
  prompt: "Explain the authentication flow",
  options: {
    maxTurns: 1,
    allowedTools: ["Read", "Grep"]
  }
})) {
  if (message.type === "result" && message.subtype === "success") {
    console.log(message.result);
  }
}

// Continue conversation with session management
for await (const message of query({
  prompt: "Now explain the authorization process",
  options: {
    continue: true,
    maxTurns: 1
  }
})) {
  if (message.type === "result" && message.subtype === "success") {
    console.log(message.result);
  }
}