UNPKG

solver-sdk

Version:

SDK для интеграции с Code Solver Backend API (совместимо с браузером и Node.js), с поддержкой функциональности мышления (Thinking Mode)

164 lines (134 loc) 8.07 kB
# Руководство: Потоковый чат с Thinking через SDK Это руководство объясняет, как использовать обновленный `solver-sdk` для получения потоковых ответов от языковой модели с поддержкой режима "thinking" через WebSocket. Это позволяет отображать ход мыслей модели и финальный ответ в реальном времени. ## Основной метод: `streamChatWithThinking` Для потоковой передачи с thinking используйте новый метод `sdk.chat.streamChatWithThinking`. **Преимущества:** - **Автоматическое подключение WebSocket:** SDK сам создает и управляет WebSocket соединением. - **Простая обработка событий:** Вы просто предоставляете callback-функцию для обработки всех событий потока. - **Полная поддержка Anthropic:** Обрабатываются все актуальные события (`thinking_delta`, `text_delta`, `signature_delta`, `message_delta`, `ping` и т.д.). ## Пример использования ```javascript const { CodeSolverSDK } = require('solver-sdk'); // Или import { CodeSolverSDK } from 'solver-sdk'; async function runStreamingExample() { // 1. Инициализация SDK const sdk = new CodeSolverSDK({ baseURL: 'https://your-backend-url.com', // URL вашего бэкенда // apiKey: 'your-api-key' // Если требуется }); // 2. Сообщения для отправки const messages = [ { role: 'user', content: 'Объясни теорию относительности простыми словами.' } ]; // 3. Опции запроса (включаем thinking) const options = { model: 'claude-3-7-sonnet-20240229', // Или другая модель с поддержкой thinking thinking: true, // Обязательно для активации режима temperature: 0.7 }; // 4. Обработчик событий WebSocket const handleEvent = (eventType, data) => { console.log(`[EVENT: ${eventType}]`, data); // Логирование всех событий для отладки switch(eventType) { // Начало потока case 'connect': console.log(`WebSocket подключен: ${data.socketId}`); break; case 'message_start': console.log(`Начало ответа модели: ${data.model}`); // Здесь можно инициализировать UI для отображения ответа break; // Поток размышлений case 'thinking_start': console.log('-- Начало размышлений --'); // Очистить/показать область для размышлений break; case 'thinking_delta': process.stdout.write(data.text); // Выводим текст размышлений по мере поступления // Добавить data.text в UI область размышлений break; case 'signature_delta': console.log('[Подпись блока thinking получена]'); break; // Поток основного ответа case 'text_delta': process.stdout.write(data.text); // Выводим текст ответа по мере поступления // Добавить data.text в UI область ответа break; // Завершение блоков и сообщения case 'content_block_stop': // Блок (thinking или text) завершен break; case 'message_delta': // Обновление статуса сообщения (например, stop_reason) console.log(`Обновление сообщения: ${JSON.stringify(data.delta)}`); break; case 'message_stop': console.log('-- Сообщение завершено --'); // Показать финальное состояние UI break; // Служебные события case 'ping': console.log('[Ping от сервера]'); break; case 'retry': console.warn(`Попытка переподключения ${data.retryCount} из-за перегрузки...`); break; // Ошибки и завершение case 'error': console.error(`Ошибка WebSocket: ${data.message} (Код: ${data.code})`); // Показать сообщение об ошибке в UI break; case 'disconnect': console.log('WebSocket отключен'); break; case 'done': console.log('Поток данных завершен.'); // Можно закрыть соединение или ожидать новых запросов break; case 'unknown_event': console.log(`Получено неизвестное событие: ${data.type}`); break; } }; // 5. Вызов метода и ожидание потока try { console.log('Отправка запроса...'); const response = await sdk.chat.streamChatWithThinking( messages, options, handleEvent // Передаем наш обработчик ); console.log(`Запрос успешно отправлен. Используется Socket ID: ${response.socketId}`); console.log('Ожидание событий через WebSocket...'); // В реальном приложении здесь будет основной цикл работы или ожидание } catch (error) { console.error('Ошибка при отправке запроса:', error); // Обработка ошибки инициации запроса } } // Запуск примера runStreamingExample(); ``` ## Ключевые моменты 1. **Включите `thinking: true`**: Это главный параметр для активации режима потокового мышления. 2. **Предоставьте обработчик `onEvent`**: Эта функция будет получать все события WebSocket. 3. **Обрабатывайте нужные события**: Как минимум, вам понадобятся `thinking_delta` (для размышлений) и `text_delta` (для основного ответа), а также `error` и `done`. 4. **SDK управляет соединением**: Вам не нужно вручную создавать `socketId` или подключаться к WebSocket – SDK сделает это автоматически. ## (Опционально) Использование существующего `socketId` Если ваш клиент уже управляет WebSocket соединением и имеет `socketId`, вы можете передать его в опциях, чтобы SDK использовал существующее соединение: ```javascript // Предположим, у вас есть connectResponse от sdk.chat.connectWebSocket() const existingSocketId = connectResponse.socketId; const options = { model: 'claude-3-7-sonnet-20240229', thinking: true, socketId: existingSocketId // Передаем существующий ID }; // SDK не будет создавать новое соединение, а использует указанное const response = await sdk.chat.streamChatWithThinking( messages, options, handleEvent ); ``` Это полезно, если вы хотите использовать одно WebSocket соединение для нескольких запросов.