Функции ИИ
Функции ИИ — это встроенные функции ClickHouse, которые можно использовать для обращения к ИИ или генерации эмбеддингов при работе с данными, извлечения информации, классификации данных и т. д.
Функции ИИ могут возвращать непредсказуемые результаты. Итог во многом зависит от качества промпта и используемой модели.
Все функции используют общую инфраструктуру, которая обеспечивает:
- Контроль квот: Ограничения в рамках одного запроса на токены (
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 | — | Ключ аутентификации провайдера. Необязательно: если параметр не указан, заголовок аутентификации не отправляется, что позволяет обращаться к OpenAI-совместимым серверам, не требующим аутентификации. |
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 — это URL конечной точки исходящего подключения, к которому сервер обращается от своего имени, потенциально передавая (если указано) 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
Примеры
Классификация тональности
Классификация столбца
aiEmbed
Добавленный в: v26.6.0
Генерирует вектор эмбеддинга для заданного текста с помощью настроенного AI-провайдера.
Функция отправляет текст на настроенную конечную точку эмбеддингов и возвращает полученный вектор как Array(Float32).
В пределах одного блока строк входные данные группируются в батчи размером до
ai_function_embedding_max_batch_size
элементов на один HTTP-запрос, чтобы уменьшить накладные расходы на каждый вызов.
Первый аргумент — именованная коллекция, которая задаёт провайдера, модель, конечную точку и, при необходимости, API-ключ.
Необязательный аргумент dimensions, если он поддерживается моделью (например, text-embedding-3-* у OpenAI),
запрашивает вектор заданного размера; в противном случае возвращается вектор стандартного для модели размера.
Синтаксис
Аргументы
collection— Имя именованной коллекции, содержащей учетные данные провайдера и конфигурацию.Stringtext— Текст для получения эмбеддинга.Stringdimensions— Необязательная целевая размерность выходного вектора.0или отсутствие значения означает исходную размерность модели.UInt64
Возвращаемое значение
Вектор эмбеддинга или пустой массив, если входное значение равно NULL или пусто, запрос завершился ошибкой и ai_function_throw_on_error отключён, либо квота была превышена при отключённом ai_function_throw_on_quota_exceeded. Array(Float32)
Примеры
Векторизация одной строки
С явно заданными измерениями
Создание эмбеддингов для столбца с текстами
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
Примеры
Перевод на французский
Перевести на японский с указаниями по стилю