AI-функции
AI-функции — это встроенные функции ClickHouse, которые можно использовать для обращения к ИИ или генерации эмбеддингов при работе с данными, извлечения информации, классификации данных и т. д.
AI-функции могут возвращать непредсказуемые результаты. Итог во многом зависит от качества промпта и используемой модели.
Все функции используют общую инфраструктуру, которая обеспечивает:
- Контроль квот: Ограничения в рамках одного запроса на токены (
ai_function_max_input_tokens_per_query,ai_function_max_output_tokens_per_query) и вызовы API (ai_function_max_api_calls_per_query). - Повторные попытки с бэкоффом: При временных сбоях выполняются повторные попытки (
ai_function_max_retries) с экспоненциальным бэкоффом (ai_function_retry_initial_delay_ms).
Конфигурация
Функции ИИ используют именованную коллекцию, в которой хранятся учетные данные провайдера и настройки. Первый аргумент каждой функции — имя этой коллекции.
Пример оператора для создания именованной коллекции с учетными данными провайдера:
Параметры именованной коллекции
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
provider | String | — | Провайдер модели. Поддерживаются: 'openai', 'anthropic'. См. примечание ниже. |
endpoint | String | — | URL конечной точки API. |
model | String | — | Имя модели (например, 'gpt-4o-mini', 'text-embedding-3-small'). |
api_key | String | — | Ключ аутентификации провайдера. |
max_tokens | UInt64 | 1024 | Максимальное количество выходных токенов за один вызов API. |
api_version | String | — | Строка версии API. Используется в Anthropic ('2023-06-01'). |
Можно использовать любой API, совместимый с OpenAI (например, vLLM, Ollama, LiteLLM), задав provider = 'openai' и указав в endpoint адрес вашего сервиса.
Настройки на уровне запроса
Все настройки, связанные с ИИ, перечислены в разделе Settings с префиксом ai_function_.
Ограничение хостов конечных точек
URL endpoint в именованной коллекции AI — это адрес исходящего подключения, к которому сервер обращается от своего имени, передавая api_key коллекции в заголовках запроса. По умолчанию ClickHouse разрешает любые хосты. Чтобы ограничить функции определённым набором провайдеров, настройте remote_url_allow_hosts в конфигурации сервера, например:
Обратите внимание, что этот параметр действует на уровне всего сервера и распространяется на все функции, использующие HTTP.
Поддерживаемые провайдеры
| Провайдер | Значение provider | Функции чата | Примечания |
|---|---|---|---|
| OpenAI | 'openai' | Да | Используется по умолчанию. |
| Anthropic | 'anthropic' | Да | Использует конечную точку /v1/messages. |
Обсервабилити
Активность AI-функций отслеживается с помощью ClickHouse ProfileEvents:
| ProfileEvent | Description |
|---|---|
AIAPICalls | Количество HTTP-запросов, отправленных AI-провайдеру. |
AIInputTokens | Общее количество использованных входных токенов. |
AIOutputTokens | Общее количество использованных выходных токенов. |
AIRowsProcessed | Количество строк, для которых был получен результат. |
AIRowsSkipped | Количество пропущенных строк (превышена квота или произошла ошибка при ai_function_throw_on_error = 0). |
Запросите эти события:
aiClassify
Добавлено в: v26.4.0
Классифицирует указанный текст по одной из заданных категорий с помощью LLM-провайдера.
Функция отправляет текст вместе с фиксированным запросом на классификацию и форматом ответа JSON-schema,
который ограничивает модель так, чтобы она возвращала ровно одну из переданных меток. Если ответ возвращается как JSON-объект
вида {"category": "..."}, метка извлекается, и функция возвращает строку этой метки.
Первый аргумент — это именованная коллекция, которая задает provider, model, конечную точку и API-ключ.
Синтаксис
Псевдонимы: AIClassify
Аргументы
collection— Имя именованной коллекции, содержащей учетные данные провайдера и параметры конфигурации.Stringtext— Текст для классификации.Stringcategories— Постоянный список меток возможных категорий.Array(String)temperature— Температура сэмплирования, управляющая случайностью. По умолчанию:0.0.Float64
Возвращаемое значение
Одна из указанных меток категорий или значение по умолчанию для типа столбца (пустая строка), если запрос завершился ошибкой и ai_function_throw_on_error отключен. String
Примеры
Классификация тональности
Классификация столбца
aiExtract
Добавлено в: v26.4.0
Извлекает структурированную информацию из неструктурированного текста с помощью провайдера LLM.
Третий аргумент может быть либо произвольной инструкцией на естественном языке (например, 'the main complaint'), либо
schema в формате JSON вида '{"field_a": "description of field a", "field_b": "description of field b"}'.
В режиме инструкции функция возвращает извлечённое значение в виде обычной строки или пустую строку, если ничего не найдено.
В режиме schema функция возвращает строку JSON-объекта, ключи которого соответствуют запрошенной schema; отсутствующие поля имеют значение null.
Первый аргумент — именованная коллекция, которая задаёт провайдера, модель, конечную точку и API-ключ.
Синтаксис
Псевдонимы: AIExtract
Аргументы
collection— Имя именованной коллекции, содержащей учетные данные провайдера и настройки.Stringtext— Текст, из которого нужно извлечь информацию.Stringinstruction_or_schema— Инструкция для извлечения в свободной форме или константный JSON-объект, описывающий поля для извлечения.const Stringtemperature— Температура семплирования, управляющая случайностью. По умолчанию:0.0.const Float64
Возвращаемое значение
Одно извлечённое значение (в режиме инструкции) или строка JSON-объекта (в режиме schema). Возвращает значение по умолчанию для типа столбца (пустую строку), если запрос завершился ошибкой и ai_function_throw_on_error отключён. String
Примеры
Инструкция в свободной форме
Извлечение schema
aiGenerate
Добавлено в: v26.4.0
Генерирует произвольный текст по запросу с использованием провайдера LLM.
Функция отправляет запрос настроенному AI-провайдеру и возвращает сгенерированный текст.
При необходимости можно указать системный запрос, чтобы направлять поведение модели (например, задать тон, формат или роль).
Если системный запрос не указан, используется системный запрос по умолчанию: You are a helpful assistant. Provide a clear and concise response.
Первый аргумент — именованная коллекция, в которой задаются провайдер, модель, конечная точка и API-ключ.
Синтаксис
Псевдонимы: AIGenerate
Аргументы
collection— Имя именованной коллекции, содержащей учетные данные провайдера и конфигурацию.Stringprompt— Пользовательский запрос или вопрос, отправляемый модели.Stringsystem_prompt— Необязательная постоянная инструкция системного уровня, задающая поведение модели (например, роль или формат вывода) и отправляемая с каждым запросом.Stringtemperature— Температура сэмплирования, управляющая случайностью. Значение по умолчанию:0.7.Float64
Возвращаемое значение
Сгенерированный текстовый ответ или значение по умолчанию для типа столбца (пустая строка), если запрос завершился ошибкой и ai_function_throw_on_error отключен. String
Примеры
Простой вопрос
С системным промптом
Сводка по значениям столбца
aiTranslate
Добавлено в: v26.4.0
Переводит указанный текст на заданный язык с помощью LLM-провайдера.
Дополнительные указания по стилю или диалекту можно передать в качестве четвертого аргумента (например, 'оставлять технические термины без перевода').
Первый аргумент — именованная коллекция, в которой указаны провайдер, модель, конечная точка и API-ключ.
Синтаксис
Псевдонимы: AITranslate
Аргументы
collection— Имя именованной коллекции, содержащей учетные данные провайдера и настройки.Stringtext— Текст для перевода.Stringtarget_language— Имя целевого языка или код BCP-47 (например,'French','es-MX').Stringinstructions— Необязательные дополнительные инструкции для переводчика в виде константы.Stringtemperature— Температура сэмплирования, определяющая степень случайности. Значение по умолчанию:0.3.Float64
Возвращаемое значение
Переведённый текст или значение по умолчанию для типа столбца (пустая строка), если запрос завершился ошибкой и отключена настройка ai_function_throw_on_error. String
Примеры
Перевод на французский
Перевести на японский с указаниями по стилю