Рад представить новую библиотеку langchain-yandexgpt, которая обеспечивает простую и мощную интеграцию YandexGPT в экосистему LangChain.js. Основная цель этой библиотеки — предоставить разработчикам удобный инструмент для создания приложений на базе больших языковых моделей от Яндекса, включая поддержку одной из самых востребованных функций — вызова инструментов (Tool Calling).
Ключевые возможности
langchain-yandexgpt расширяет стандартный класс ChatYandexGPT из пакета @langchain/yandex, добавляя важные функции:
- Поддержка Tool Calling: Легко определяйте и используйте внешние инструменты (функции) прямо из вашей LLM-цепочки. Библиотека позволяет описывать инструменты с помощью zod-схем, автоматически преобразуя их в формат, понятный для YandexGPT. Модель сама решает, какой инструмент и с какими параметрами вызвать для ответа на запрос пользователя.
- Простая интеграция: Библиотека спроектирована так, чтобы её использование было максимально интуитивным для тех, кто уже знаком с LangChain.js.
- Гибкая настройка: Вы можете управлять параметрами модели, такими как temperature, maxTokens, и выбирать нужную версию модели (yandexgpt-lite, yandexgpt и др.).
Как это работает? Пример использования
Давайте рассмотрим, как легко можно заставить модель использовать внешний инструмент для получения информации о погоде.
Сначала установим библиотеку:
npm install langchain-yandexgpt
Теперь напишем код. Сначала определим инструмент get_weather с помощью @langchain/core/tools и zod для описания его аргументов.
import { HumanMessage, SystemMessage } from '@langchain/core/messages';
import { tool } from '@langchain/core/tools';
import { LangChainYandexGPT } from 'langchain-yandexgpt';
import { z } from 'zod';
// 1. Настраиваем модель
const llm = new LangChainYandexGPT({
temperature: 0,
apiKey: 'ВАШ_YANDEX_GPT_API_KEY',
folderID: 'ВАШ_YANDEX_GPT_CATALOG_ID',
model: 'yandexgpt-lite',
});
// 2. Определяем инструмент для получения погоды
const weatherTool = tool(
async ({ city }) => {
// Здесь могла бы быть реальная логика запроса к API погоды
return `Погода в городе ${city}: солнечно, температура 22°C.`;
},
{
name: 'get_weather',
description: 'Получает актуальную информацию о погоде в указанном городе.',
schema: z.object({
city: z.string().describe('Название города, например "Москва"'),
}),
}
);
// 3. Привязываем инструмент к модели
const modelWithTools = llm.bindTools([weatherTool]);
// 4. Делаем запрос к модели
const response = await modelWithTools.invoke([
new SystemMessage(
'Используй инструмент get_weather, чтобы получить информацию о погоде.',
),
new HumanMessage('Какая погода в Москве?'),
]);
// 5. Обрабатываем ответ модели
if (response.tool_calls && response.tool_calls.length > 0) {
console.log('Модель решила вызвать инструмент:', response.tool_calls);
// Здесь будет логика вызова weatherTool.invoke(toolCall.args)
// и передачи результата обратно в модель для финального ответа.
} else {
console.log('Ответ модели:', response.content);
}
В этом примере модель не будет сама придумывать погоду. Вместо этого она вернет объект tool_calls, указывающий, что для ответа на вопрос нужно вызвать функцию get_weather с аргументом { city: ‘Москва’ }. Это открывает огромные возможности для создания интеллектуальных агентов, способных взаимодействовать с внешними API и системами.
Библиотека открыта и на доступна на GitHub. Буду рад вашим отзывам, предложениям и участию в развитии проекта!