Назад в ленту

ClickHouse добавила Llm-функции: теперь ИИ вызывается прямо из SQL-запроса

Аналитическая база научилась классифицировать тексты, извлекать данные и строить RAG-сценарии без отдельного конвейера обработки.

Аналитические базы данных долго жили в своей песочнице: быстрые, надёжные, но начисто лишённые интеллекта. Хочешь прикрутить к ним Llm-модель — строй отдельный конвейер, гоняй данные туда-сюда, молись, чтобы ничего не отвалилось по дороге. ClickHouse решила эту стену снести. Команда добавила набор встроенных AI-функций, которые позволяют обращаться к большим языковым моделям и работать с эмбеддингами напрямую из SQL-запросов.

Суть нововведения проста, но радикальна. Раньше типичный сценарий выглядел так: выгружаешь миллионы строк из базы, тащишь их в отдельный стек, там прогоняешь через модель, получаешь результат и запихиваешь обратно. Медленно, хрупко, плюс лишний слой инфраструктуры, который надо кормить и обслуживать. Теперь модель вызывается прямо там, где лежат данные — как обычная функция вроде lower() или sum().

Что именно добавили в Clickhouse AI

Набор функций разбили на несколько релизов. В версии 26.4 появились aiGenerate(), aiClassify(), aiExtract() и aiTranslate(). В 26.6 подъехал aiEmbed() для работы с эмбеддингами. А в 26.8 добавили aiFilter(), aiRedact() и aiSimilarity(). Сейчас весь набор находится в статусе беты, а в ClickHouse Cloud доступен в режиме приватного превью.

Логика работы простая: каждая функция делает удалённый HTTP-запрос к API провайдера — либо на каждую входную строку, либо батчем, если речь об эмбеддингах. Ответ парсится и возвращается как нативное значение ClickHouse. Хочешь классифицировать заголовки новостей по рубрикам — пишешь SELECT aiClassify(title, ['tech', 'sports', 'politics']) и получаешь готовую разметку. Без единой строчки Python.

Как это настраивается

Чтобы всё заработало, нужно создать два именованных набора (named collection): один для текстовых функций, второй для эмбеддингов. В них хранятся учётные данные и конфигурация провайдера. Дальше вы прописываете настройки ai_function_text_default_credentials и ai_function_embedding_default_credentials, и функции сами подхватывают нужный эндпоинт.

Провайдер не обязательно должен быть коммерческим. Подойдёт любой OpenAI-совместимый API: Ollama, LiteLLM, vLLM. Достаточно указать provider = 'openai' и направить эндпоинт на свой локальный сервис. Так что если вы принципиально не хотите отправлять данные наружу — вариант с локальной Llm-моделью полностью рабочий.

Зачем это нужно на практике

Главная выгода — исчезновение отдельного конвейера обработки. Задачи вроде классификации текста, извлечения структурированных данных из неструктурированного мусора и построения RAG-сценариев теперь решаются на уровне самой аналитической базы. Причём ClickHouse уже умеет хранить и искать векторы, так что полный цикл RAG может крутиться в одной системе, а не собираться по кусочкам из векторной базы, фреймворка оркестрации и отдельного API.

Под капотом у всех функций общая инфраструктура: контроль квот, повторные попытки при сбоях, батчинг и наблюдаемость. Это не просто обёртки над HTTP-запросами — это попытка встроить работу с моделями в саму ткань базы данных.

О чём стоит помнить

Есть и ложка дёгтя. Во-первых, качество результата на 90% зависит от выбранной модели и того, как вы напишете промпт. ClickHouse даёт масштаб — применение модели к миллионам строк внутри джойнов и агрегаций, — но не гарантирует волшебство. Во-вторых, вывод модели может быть непредсказуемым, и для критичных задач его стоит валидировать. В-третьих, отправка чувствительных данных внешнему провайдеру требует осторожности.

Наконец, функции пока в бете, так что документация сосредоточена на общей инфраструктуре, а не на глубоких гайдах по каждой отдельной функции. Если в вашей сборке они не включены — возможно, придётся подождать или проверить версию.

Отдельно стоит упомянуть генерацию SQL на естественном языке. Начиная с версии 25.7 в ClickHouse Client и clickhouse-local появилась возможность описать задачу простым текстом и получить готовый SQL-запрос. Это уже другая грань той же идеи: убрать барьер между человеком и данными.

Мы будем следить за тем, как развивается Clickhouse AI. Если функции выйдут из беты и обрастут внятной документацией — это может стать одним из самых практичных применений языковых моделей в аналитике.

Справка по теме (FAQ)
Что такое AI-функции в ClickHouse?
Это встроенные функции, которые позволяют вызывать большие языковые модели и работать с эмбеддингами напрямую из SQL-запросов. Среди них aiGenerate, aiClassify, aiExtract, aiEmbed и другие.
В каких версиях ClickHouse доступны AI-функции?
Функции появлялись поэтапно: aiGenerate, aiClassify, aiExtract и aiTranslate — в версии 26.4, aiEmbed — в 26.6, а aiFilter, aiRedact и aiSimilarity — в 26.8.
Можно ли использовать локальную модель вместо внешнего API?
Да. Подойдёт любой OpenAI-совместимый API: Ollama, LiteLLM, vLLM. Достаточно указать provider = «openai» и направить эндпоинт на локальный сервис.
Как настроить работу AI-функций?
Нужно создать два именованных набора (named collection) для текстовых и эмбеддинг-функций, прописать в них учётные данные провайдера и указать настройки ai_function_text_default_credentials и ai_function_embedding_default_credentials.