Обзор

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);
  }
}