НейроАгент

Сбой выполнения инструментов AI SDK после нескольких сообщений

Узнайте, почему AI SDK генерирует JavaScript-код, но не выполняет инструменты после нескольких сообщений. Узнайте о проблемах конфигурации maxSteps и решениях для правильного выполнения инструментов в AI SDK 4.

Использование инструментов AISDK: модель генерирует JavaScript-код, но не выполняет инструменты

Я использую AISDK 4 со следующей конфигурацией:

javascript
return streamText({
    model,
    messages: context,
    tools: getTools(a, b, c, d),
    toolChoice: "auto",
    maxTokens: 30000,
    temperature: 0.0,
    abortSignal: abortSignal,
    system: getSystemPrompt(a, b),
});

Я столкнулся с проблемой, при которой после примерно четырех сообщений с моделью (включая вызовы инструментов), поведение меняется на пятом сообщении. Модель генерирует JavaScript-код в виде текста, но не вызывает инструмент для его выполнения.

Например:

  • Когда я прошу модель “создать PDF с котами”, она правильно генерирует и передает JavaScript-код для создания PDF, но инструмент никогда не вызывается для выполнения этого кода.

Я уже указал в промпте, что модель должна вызывать инструмент. Что может вызывать такое поведение? Существуют ли какие-либо ограничения в AISDK, которые я мог упустить?

НейроАгент

Проблема с AI SDK 4: модель генерирует JavaScript-код, но не выполняет инструменты после нескольких сообщений

Проблема, с которой вы сталкиваетесь с AI SDK 4, когда модель генерирует JavaScript-код, но не выполняет инструменты после нескольких сообщений, является распространенной проблемой, связанной с конфигурацией вызова инструментов и ограничениями многошагового выполнения. Такое поведение обычно возникает, когда параметр maxSteps неправильно настроен или когда существует несоответствие между разными частями вашей настройки вызова инструментов.

Содержание

Параметр maxSteps

Параметр maxSteps в AI SDK 4.0 контролирует, сколько раз модель может вызывать инструменты в рамках одного разговора. Когда вы достигаете этого лимита, модель перестает выполнять инструменты и вместо этого генерирует код в виде текстового содержимого.

Согласно результатам исследований, один пост на Reddit обнаружил, что когда значения maxSteps между разными компонентами (такими как useChat и streamText) не совпадают, инструменты просто не выполняются, что вызывает тихие сбои.

В вашем сценарии генерации PDF, если вы настроили maxSteps: 4, но разговор требует больше вызовов инструментов после четвертого сообщения, модель будет генерировать JavaScript-код вместо выполнения инструмента. Это объясняет, почему поведение меняется на пятом сообщении.

Распространенные причины сбоев выполнения инструментов

1. Несоответствующая конфигурация maxSteps

Если вы используете вызов инструментов как на стороне клиента, так и на стороне сервера, убедитесь, что значения maxSteps совпадают во всех компонентах:

javascript
// Конфигурация на стороне сервера (ваша текущая настройка)
return streamText({
    model,
    messages: context,
    tools: getTools(a, b, c, d),
    toolChoice: "auto",
    maxSteps: 10, // Убедитесь, что этого достаточно для вашего случая использования
    temperature: 0.0,
    abortSignal: abortSignal,
    system: getSystemPrompt(a, b),
});

2. Ошибки выполнения инструментов

Согласно документации AI SDK, при сбое выполнения инструментов AI SDK добавляет их как части содержимого tool-error, чтобы обеспечить автоматические циклы LLM в многошаговых сценариях. Эти ошибки могут препятствовать дальнейшему выполнению инструментов.

3. Ограничения длины контекста

После нескольких сообщений контекст разговора может превышать лимит токенов модели, что заставляет ее переключиться с выполнения инструментов на генерацию кода.

Рекомендации по конфигурации

1. Увеличьте maxSteps соответствующим образом

Для сложных рабочих процессов, включающих несколько вызовов инструментов, установите более высокое значение maxSteps:

javascript
return streamText({
    model,
    messages: context,
    tools: getTools(a, b, c, d),
    toolChoice: "auto",
    maxSteps: 20, // Более высокое значение для сложных рабочих процессов
    maxTokens: 30000,
    temperature: 0.0,
    abortSignal: abortSignal,
    system: getSystemPrompt(a, b),
});

2. Реализуйте правильную обработку ошибок

Обрабатывайте ошибки выполнения инструментов корректно:

javascript
const tools = {
    executeJavaScript: tool({
        description: "Выполнить JavaScript-код",
        parameters: z.object({
            code: z.string().describe("JavaScript-код для выполнения"),
        }),
        execute: async ({ code }) => {
            try {
                // Ваша логика выполнения здесь
                return { result: "Код выполнен успешно" };
            } catch (error) {
                // Верните ошибку модели для восстановления
                throw new Error(`Выполнение не удалось: ${error.message}`);
            }
        },
    }),
};

3. Правильно используйте контекст инструментов

Убедитесь, что ваши инструменты имеют доступ к необходимому контексту:

javascript
const tools = {
    createPDF: tool({
        description: "Создать PDF-документ",
        parameters: z.object({
            content: z.string().describe("Содержимое для включения в PDF"),
        }),
        execute: async ({ content }, context) => {
            // Доступ к истории разговора при необходимости
            const conversationHistory = context.messages;
            // Ваша логика создания PDF
            return { success: true, pdfId: generatedId };
        },
    }),
};

Отладка и устранение неполадок

1. Проверяйте сетевые запросы

Как упоминается в руководстве по устранению неполадок Microsoft, убедитесь, что скрипт, определенный в конфигурации фрагмента src, был загружен, проверив код ответа 200 (успех) или 304 (не изменен) на вкладке “Сеть”.

2. Мониторьте поток выполнения инструментов

Добавьте логирование для отслеживания выполнения инструментов:

javascript
const tools = {
    executeJavaScript: tool({
        description: "Выполнить JavaScript-код",
        parameters: z.object({
            code: z.string().describe("JavaScript-код для выполнения"),
        }),
        execute: async ({ code }) => {
            console.log("Запрошено выполнение инструмента:", code);
            try {
                const result = await executeCode(code);
                console.log("Выполнение инструмента успешно");
                return result;
            } catch (error) {
                console.error("Выполнение инструмента не удалось:", error);
                throw error;
            }
        },
    }),
};

3. Проверяйте схемы инструментов

Убедитесь, что ваши схемы инструментов определены правильно. В исследованиях упоминается, что generateText выдает ошибки при проблемах с проверкой схемы инструментов, что может помешать выполнению.

Рекомендации по миграции

Исследования показывают, что AI SDK 5.0 имеет значительные улучшения для вызова инструментов. Согласно руководству по миграции, параметр maxSteps заменен на stopWhen, который обеспечивает более гибкий контроль над многошаговым выполнением.

Ключевые преимущества перехода на AI SDK 5.0 включают:

  • Автоматический поток ввода: входные данные вызова инструментов теперь потокуются по умолчанию
  • Явные состояния ошибок: ошибки выполнения инструментов ограничены инструментом и могут быть повторно отправлены
  • Лучший контроль многошаговых процессов: более гибкие условия остановки

Если вы сталкиваетесь с постоянными проблемами с выполнением инструментов после нескольких сообщений, рассмотрите возможность перехода на AI SDK 5.0, где механизм вызова инструментов был значительно улучшен.

Источники

  1. AI SDK Core: Tool Calling - Официальная документация
  2. Руководство по миграции: AI SDK 4.0 на 5.0
  3. Reddit: Vercel AI SDK - Тихий сбой с maxSteps
  4. AI SDK 5 - Блог Vercel
  5. Microsoft Azure Monitor - Устранение неполадок JavaScript SDK

Заключение

Проблема, при которой ваша модель AI SDK 4 генерирует JavaScript-код, но не выполняет инструменты после нескольких сообщений, скорее всего, вызвана либо недостаточной конфигурацией maxSteps, либо несоответствием параметров между разными компонентами.

Ключевые выводы:

  • Убедитесь, что значение maxSteps достаточно высоко для сложности вашего рабочего процесса
  • Проверьте согласованность между конфигурациями на стороне клиента и сервера
  • Реализуйте правильную обработку ошибок и логирование для выполнения инструментов
  • Рассмотрите возможность обновления до AI SDK 5.0 для улучшенных возможностей вызова инструментов

Рекомендуемые действия:

  1. Увеличьте параметр maxSteps для обработки большего количества вызовов инструментов
  2. Проверьте всю конфигурацию вызова инструментов на наличие несоответствий параметров
  3. Добавьте комплексное логирование для отладки потока выполнения инструментов
  4. Оцените возможность перехода на AI SDK 5.0 для лучшего контроля многошагового выполнения

Устраняя эти проблемы конфигурации, вы должны восстановить правильное поведение выполнения инструментов даже после нескольких сообщений в вашем разговоре.