Документация по LLMClient Как работает LLMClient реализует ключевой паттерн Metabot Agent System (MAS) — фреймворк для построения мультиагентных систем через композицию простых, понятных блоков кода. MAS следует принципу "сложное через простое": Декларативность: Сложные AI-операции описываются простыми, читаемыми выражениями Модульность: Каждый flow — независимая единица работы с собственным контекстом Прозрачность: Вся логика работы агента видна в коде скрипта/плагина Композиция: Сложные мультиагентные сценарии собираются из простых блоков Методы класса LLMClient new LLMClient(sessionName, agentName = "", apiFormat = "") Создаёт новый экземпляр клиента для работы с LLM. Параметры Имя Тип Описание sessionName String Уникальное имя сессии agentName String Имя агента (опционально) apiFormat String Формат API (опционально) ВозвращаетLLMClient — экземпляр клиента. setPromptTable(tableName, agentName) Устанавливает таблицу промптов и имя агента. Параметры Имя Тип Описание tableName String Имя таблицы промптов agentName String Имя агента addUserQuery(content) Сохраняет пользовательский запрос для текущей сессии. Параметры Имя Тип Описание content String Пользовательский запрос getUserQuery() Получает последний пользовательский запрос. ПараметрыНет ВозвращаетString — последний пользовательский запрос. addPrompt(role, content) Добавляет промпт с указанной ролью. Параметры Имя Тип Описание role String Роль: 'system', 'user', 'assistant' content String/Array Текст или массив строк addRawPrompts(prompts) Добавляет массив промптов без обработки. Параметры Имя Тип Описание prompts Array Массив объектов {role, content} addSystemPrompt(content) Добавляет системный промпт. Параметры Имя Тип Описание content String Системный промпт addUserPrompt(content) Добавляет пользовательский промпт. Параметры Имя Тип Описание content String Пользовательский промпт addAssistantPrompt(content) Добавляет промпт ассистента. Параметры Имя Тип Описание content String Промпт ассистента addHistoryToPrompts(historyOverride = null) Добавляет историю сообщений к промптам. Параметры Имя Тип Описание historyOverride Array/Null Массив сообщений или null clearPrompts() Очищает все промпты текущей сессии. ПараметрыНет setHistoryMaxLength(lmax) Устанавливает максимальную длину истории сообщений. Параметры Имя Тип Описание lmax Number Максимальная длина истории setHistory(messages) Сохраняет историю сообщений. Параметры Имя Тип Описание messages Array Массив объектов {role, content} getHistory() Получает историю сообщений. ПараметрыНет ВозвращаетArray — история сообщений. addToHistory(message) Добавляет сообщение в историю. Параметры Имя Тип Описание message Object Объект {role, content} disableHistory() Отключает сохранение истории сообщений. ПараметрыНет clearHistory() Очищает историю сообщений. ПараметрыНет getHistoryStr() Получает историю сообщений в виде строки. ПараметрыНет ВозвращаетString — история сообщений. setModel(model) Устанавливает модель для генерации ответа. Параметры Имя Тип Описание model String Название модели setProvider(providerName) Устанавливает провайдера LLM. Параметры Имя Тип Описание providerName String Название провайдера getProvider() Получает текущего провайдера. ПараметрыНет ВозвращаетString — название провайдера. setApiFormat(apiFormat) Устанавливает формат API. Параметры Имя Тип Описание apiFormat String Формат API setModelParams(params) Устанавливает параметры модели. Параметры Имя Тип Описание params Object Объект с параметрами модели setTemperature(temp) Устанавливает температуру генерации. Параметры Имя Тип Описание temp Number Температура генерации getParams() Получает параметры модели. ПараметрыНет ВозвращаетObject — параметры модели. getMessages() Получает промпты запроса. ПараметрыНет ВозвращаетArray — промпты запроса. deleteMessages() Удаляет промпты запроса. ПараметрыНет prepareRequest(callbackScript = null) Сохраняет промпты и задаёт callback-скрипт. Параметры Имя Тип Описание callbackScript String Код скрипта для обработки ответа (опц.) sendRequest() Отправляет асинхронный запрос к LLM. ПараметрыНет Пример const llm = new LLMClient("DetectIntent") llm.setModel("gpt-3.5-turbo") llm.setProvider("OpenAI") llm.setPromptTable("gpt_prompts", "MyAgent") llm.addSystemPrompt("$start") llm.addUserPrompt(`Запрос пользователя: ${lead.getAttr("user_input")}`) llm.prepareRequest("MyAgent:MyScript") return llm.sendRequest() handleResponse() Обрабатывает ответ от LLM, сохраняет результат и историю. ПараметрыНет setErrorScript(scriptCode) Назначает fallback-скрипт при ошибке. Параметры Имя Тип Описание scriptCode String Код скрипта для обработки ошибки getErrorScript() Получает fallback-скрипт. ПараметрыНет ВозвращаетString — код fallback-скрипта. setFallbackConfig(scriptCode, timeout) Настраивает резервный сценарий и таймаут. Параметры Имя Тип Описание scriptCode String Код резервного скрипта timeout Number Таймаут в секундах scheduleFallback() Запланировать отложенный запуск fallback-скрипта. ПараметрыНет unscheduleFallback() Удалить отложенный запуск fallback-скрипта. ПараметрыНет getResponseResult() Получает результат запроса (объект ответа провайдера). ПараметрыНет ВозвращаетObject — объект ответа провайдера. getProviderResult() Получает "сырые" данные от провайдера. ПараметрыНет ВозвращаетObject — исходные данные от провайдера. getResponseText() Извлекает текст ответа из результата. ПараметрыНет ВозвращаетString — текст ответа. extractAnswerForModel(content) Извлекает ответ по формату модели. Параметры Имя Тип Описание content Object Объект ответа провайдера getModelContextSize(modelName = null) Получает максимальный размер контекста модели. Параметры Имя Тип Описание modelName String Название модели или null ВозвращаетNumber — максимальный размер контекста. getLastJSON(text = null) Извлекает JSON из текста ответа. Параметры Имя Тип Описание text String Текст ответа или null ВозвращаетObject — найденный JSON. extractTextWithoutJSON(text = null) Удаляет JSON из текста и возвращает чистый текст. Параметры Имя Тип Описание text String Текст ответа или null ВозвращаетString — текст без JSON. removeMarkdownHeaders(text = null) Удаляет заголовки Markdown из текста. Параметры Имя Тип Описание text String Текст ответа или null ВозвращаетString — текст без заголовков. getAgentAnswer(agentName) Получает ответ агента по имени. Параметры Имя Тип Описание agentName String Имя агента ВозвращаетString — ответ агента. getLastTokenUsage() Получает статистику токенов последнего запроса. ПараметрыНет ВозвращаетObject — статистика токенов. setStatus(status) Устанавливает статус сессии. Параметры Имя Тип Описание status String Статус: 'IDLE', 'PREPARED', ... getStatus() Получает текущий статус. ПараметрыНет ВозвращаетString — текущий статус. clearStatus() Очищает статус. ПараметрыНет nextFlow(scriptCode) Переходит к следующему flow-скрипту. Параметры Имя Тип Описание scriptCode String Код следующего flow-скрипта sendResponse() Отправляет ответ в лог админа. ПараметрыНет sendFormattedResponse(format = 'Markdown') Отправляет ответ в заданном формате. Параметры Имя Тип Описание format String Формат: 'Markdown', 'HTML', ... finishFlow() Завершает работу сессии. ПараметрыНет Примеры использования const LLMClient = require("Common.MetabotAI.LLMClient") const llm = new LLMClient("DetectIntent") llm.setModel("gpt-3.5-turbo") llm.setProvider("OpenAI") llm.setPromptTable("gpt_prompts", "MyAgent") llm.addSystemPrompt("$start") llm.addUserPrompt(`Запрос пользователя: ${lead.getAttr("user_input")}`) llm.prepareRequest("MyAgent:MyScript") llm.setErrorScript("MyAgent:ErrorFlow") return llm.sendRequest() Жизненный цикл и статусы Статус Когда устанавливается Описание IDLE new LLMClient(...) Клиент создан, ничего не сделано. PREPARED prepareRequest() Промпты собраны, запрос готов. WAITING sendRequest() Запрос отправлен, ожидаем ответ. SUCCESS handleResponse() (200) Ответ успешно получен. ERROR handleResponse() (≠200) Ошибка при получении ответа. ERROR_HANDLED handleResponse() → fallback Сработал обработчик ошибки. DONE вручную Не используется напрямую. Отладка и переменные Переменная Пример значения Описание llm__status WAITING Текущий статус запроса llm__provider OpenAI Название LLM-провайдера llm__params { model: "gpt-3.5-turbo", temperature: 0.7 } Параметры модели llm__messages [{"role": "system", ...}, ...] Все промпты запроса llm__history [{"role": "user", ...}, ...] История переписки llm__callback_script MyAgent:NextStep Скрипт для ответа llm__error_script MyAgent:Fallback Скрипт для ошибки llm__raw_response Вот ваш ответ... Текст ответа до форматирования llm__user_query Сколько лет космосу? Последний пользовательский запрос FAQ Вопрос: Как добавить свой промпт?Ответ: Используйте addSystemPrompt, addUserPrompt или addAssistantPrompt. Можно ссылаться на промпты из таблицы через $name или @common_name. Вопрос: Как обработать ошибку?Ответ: Назначьте обработчик через setErrorScript(scriptCode) или используйте резервный сценарий через setFallbackConfig(scriptCode, timeout). Вопрос: Как получить статистику токенов?Ответ: Вызовите getLastTokenUsage() после получения ответа. Вопрос: Как интегрировать с другими компонентами?Ответ: Используйте методы перехода (nextFlow), отправки (sendResponse, sendFormattedResponse) и работы с историей.