Функции ИИ являются экспериментальными. Чтобы включить их, установите
allow_experimental_ai_functions.Функции ИИ могут возвращать непредсказуемые результаты. Результат во многом зависит от качества промпта и используемой модели.
- Контроль квот: лимиты на количество токенов в рамках одного запроса (
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).
Конфигурация
ai_function_credentials.
Пример оператора для создания именованной коллекции с учетными данными провайдера:
ai_function_credentials, для сеанса или отдельного запроса:
ai_function_credentials пуст (по умолчанию), возникает исключение.
Параметры именованной коллекции
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
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 конечную точку вашего сервиса.Настройки на уровне запроса
ai_function_credentials. Все настройки, связанные с ИИ, перечислены в разделе Настройки и имеют префикс ai_function_.
Использование в столбцах DEFAULT и MATERIALIZED
ai_function_credentials читается при вычислении выражения по умолчанию, а НЕ при определении столбца. Имя коллекции не сохраняется в определении столбца:
allow_experimental_ai_functions и ai_function_credentials, а пользователь, который выполняет вычисление, должен иметь GRANT NAMED COLLECTION на коллекцию (при разрешении учетных данных выполняется проверка доступа к NAMED COLLECTION). Если отсутствует хотя бы одно из них, возникает исключение (SUPPORT_IS_DISABLED, ошибка пустых учетных данных или ACCESS_DENIED).
Столбец DEFAULT вычисляется во время INSERT, поэтому оба параметра должны быть заданы в сеансе или запросе, выполняющем вставку:
MATERIALIZED вычисляется при INSERT, как и столбец DEFAULT, а также пересчитывается мутациями, например ALTER TABLE ... MATERIALIZE COLUMN. Мутации выполняются вне пользовательского сеанса и не наследуют секцию SETTINGS из запроса, но наследуют настройки из профиля настроек. Чтобы пересчёт, запускаемый мутациями, выполнялся успешно, задайте обе настройки в профиле настроек и выдайте владельцу таблицы право NAMED COLLECTION.
Ограничение хостов конечных точек
endpoint в именованной коллекции AI — это исходящий пункт назначения, к которому сервер подключается от своего имени, потенциально передавая (если указан) api_key этой именованной коллекции в заголовках запроса. По умолчанию ClickHouse разрешает любой хост. Чтобы ограничить функции определённым набором провайдеров, настройте remote_url_allow_hosts в конфигурации сервера, например:
Поддерживаемые провайдеры
| Провайдер | Значение provider | Функции чата | Примечания |
|---|---|---|---|
| OpenAI | 'openai' | Да | Провайдер по умолчанию. |
| Anthropic | 'anthropic' | Да | Использует конечную точку /v1/messages. |
Обсервабилити
| ProfileEvent | Description |
|---|---|
AIAPICalls | Количество HTTP-запросов, отправленных провайдеру ИИ. |
AIInputTokens | Общее количество использованных входных токенов. |
AIOutputTokens | Общее количество использованных выходных токенов. |
AIRowsProcessed | Количество строк, для которых был получен результат. |
AIRowsSkipped | Количество пропущенных строк (превышена квота или возникла ошибка при ai_function_throw_on_error = 0). |
aiClassify
{"category": "..."}, метка извлекается, и функция возвращает строку этой метки.
Учетные данные провайдера и конфигурация берутся из именованной коллекции, указанной в параметре ai_function_credentials.
Синтаксис
AIClassify
Аргументы
text— Текст для классификации.Stringcategories— Константный список возможных меток категорий.Array(String)temperature— Температура сэмплирования, влияющая на случайность. По умолчанию:0.0.Float64
ai_function_throw_on_error отключен. String
Примеры
Классификация тональности
Query
Response
Query
Response
aiEmbed
Array(Float32).
В рамках одного блока строк входные данные группируются в батчи размером до
ai_function_embedding_max_batch_size
элементов в одном HTTP-запросе, чтобы сократить накладные расходы на каждый вызов.
Учетные данные провайдера и конфигурация берутся из именованной коллекции, указанной в настройке ai_function_credentials.
Необязательный аргумент dimensions, если он поддерживается моделью (например, text-embedding-3-* от OpenAI),
запрашивает вектор заданной размерности; в противном случае возвращается размерность модели по умолчанию.
Синтаксис
text— Текст для создания эмбеддинга.Stringdimensions— Необязательная целевая размерность выходного вектора.0или отсутствие значения означает исходную размерность модели.UInt64
ai_function_throw_on_error отключён, либо была превышена квота при отключённом ai_function_throw_on_quota_exceeded. Array(Float32)
Примеры
Создание эмбеддинга для одной строки
Query
Response
Query
Response
Query
Response
aiExtract
'the main complaint'), либо
JSON-кодированной схемой вида '{"field_a": "description of field a", "field_b": "description of field b"}'.
В режиме инструкции функция возвращает извлечённое значение в виде обычной строки или пустую строку, если ничего не найдено.
В режиме схемы функция возвращает строку с объектом JSON, ключи которого соответствуют запрошенной схеме; отсутствующие поля имеют значение null.
Учетные данные провайдера и конфигурация берутся из именованной коллекции, указанной в настройке ai_function_credentials.
Синтаксис
AIExtract
Аргументы
text— Текст, из которого нужно извлечь информацию.Stringinstruction_or_schema— Инструкция для извлечения в свободной форме или константный объект JSON, описывающий извлекаемые поля.const Stringtemperature— Температура сэмплирования, определяющая степень случайности. По умолчанию:0.0.const Float64
ai_function_throw_on_error отключён. String
Примеры
Инструкция в свободной форме
Query
Response
Query
Response
aiGenerate
You are a helpful assistant. Provide a clear and concise response.
Учётные данные провайдера и конфигурация берутся из именованной коллекции, указанной в настройке ai_function_credentials.
Синтаксис
AIGenerate
Аргументы
prompt— Промпт или вопрос пользователя, отправляемый модели.Stringsystem_prompt— Необязательная постоянная системная инструкция, определяющая поведение модели (например, роль или формат вывода), которая отправляется вместе с каждым промптом.Stringtemperature— Температура сэмплирования, управляющая случайностью. Значение по умолчанию:0.7.Float64
ai_function_throw_on_error отключён. String
Примеры
Простой вопрос
Query
Response
Query
Response
Query
Response
aiTranslate
'keep technical terms untranslated').
Учетные данные провайдера и конфигурация берутся из именованной коллекции, указанной в настройке ai_function_credentials.
Синтаксис
AITranslate
Аргументы
text— Текст для перевода.Stringtarget_language— Имя целевого языка или код BCP-47 (например,'French','es-MX').Stringinstructions— Необязательные дополнительные инструкции для переводчика в виде константы.Stringtemperature— Температура сэмплирования, управляющая случайностью. По умолчанию:0.3.Float64
ai_function_throw_on_error отключён. String
Примеры
Перевод на французский
Query
Response
Query
Response