Функции AI#

Функции AI позволяют вызывать большую языковую модель (LLM) для выполнения различных текстовых задач. Поддерживаются несколько провайдеров LLM, в частности OpenAI и Anthropic напрямую, а также многие другие, такие как Llama, DeepSeek, Phi, Mistral или Gemma через Ollama.

LLM должна предоставляться вне Trino как внешний сервис.

Конфигурация#

Поскольку функции AI требуют внешний сервис LLM, по умолчанию они недоступны. Чтобы включить их, необходимо настроить файл свойств каталога, чтобы зарегистрировать функции, вызывающие настроенную LLM, с указанным именем каталога.

Создайте файл свойств каталога etc/catalog/llm.properties, который ссылается на коннектор ai:

connector.name=ai

Функции AI доступны с именем схемы ai. Для приведенного выше примера функции используют префикс каталога и схемы llm.ai.

Чтобы не указывать полное имя функций при каждом обращении, настройте свойство SQL-окружения sql.path в файле config.properties, чтобы включить префикс каталога и схемы:

sql.path=llm.ai

Настройте несколько каталогов, чтобы использовать одни и те же функции с разными провайдерами LLM. В этом случае функции нужно вызывать по полному имени, а не полагаться на SQL path.

Провайдеры#

Функции AI вызывают внешнюю LLM. Доступ к API LLM должен быть настроен в каталоге. Производительность, результаты и стоимость всех вызовов функций AI зависят от провайдера LLM и используемой модели. Необходимо указать модель, которая подходит для текстового анализа.

Свойства конфигурации провайдеров функций AI#

Имя свойства

Описание

ai.provider

Обязательное имя провайдера. Должно быть anthropic для использования провайдера Anthropic или openai для OpenAI или Ollama.

ai.anthropic.endpoint

URL эндпоинта API Anthropic. По умолчанию https://api.anthropic.com.

ai.anthropic.api-key

Значение API-ключа для доступа к API Anthropic. Обязательно при ai.provider, установленном в anthropic.

ai.openai.endpoint

URL эндпоинта API OpenAI или Ollama. По умолчанию https://api.openai.com. При использовании моделей через Ollama задайте URL эндпоинта Ollama и добавьте любую строку для ai.openai.api-key.

ai.openai.api-key

Значение API-ключа для доступа к API OpenAI. Обязательно при ai.provider, установленном в openai. При использовании Ollama обязательно, но игнорируется.

Функции AI подключаются к провайдерам по HTTP. Настройте подключение, используя префикс ai с HTTP client properties.

В следующих разделах приведены минимальные конфигурации для использования Anthropic, OpenAI и Ollama.

Anthropic#

Провайдер Anthropic использует API Anthropic для выполнения функций AI:

ai.provider=anthropic
ai.model=claude-3-5-sonnet-latest
ai.anthropic.api-key=xxx

Используйте secrets, чтобы не хранить реальные значения API-ключей в файлах свойств каталога.

OpenAI#

Провайдер OpenAI использует API OpenAI для выполнения функций AI:

ai.provider=openai
ai.model=gpt-4o-mini
ai.openai.api-key=xxx

Используйте secrets, чтобы не хранить реальные значения API-ключей в файлах свойств каталога.

Ollama#

Провайдер OpenAI можно использовать с Ollama для выполнения функций AI, поскольку Ollama совместим с API OpenAI:

ai.provider=openai
ai.model=llama3.3
ai.openai.endpoint=http://localhost:11434
ai.openai.api-key=none

API-ключ должен быть указан, но Ollama его игнорирует.

Ollama позволяет использовать Llama, DeepSeek, Phi, Mistral, Gemma и другие модели в self-hosted развертывании или у поставщика.

Конфигурация моделей#

Все провайдеры поддерживают ряд разных моделей. Для использования функций AI необходимо настроить как минимум одну модель. Модель должна подходить для текстового анализа. Выбор провайдера и модели влияет на производительность, результаты и стоимость всех функций AI.

Стоимость зависит от используемой функции AI и определяется размером implementation prompt, длиной входных данных и длиной вывода модели, потому что провайдеры моделей тарифицируют по входным и выходным токенам.

При необходимости можно настроить разные модели одного и того же провайдера для отдельных функций как override:

Свойства конфигурации моделей функций AI#

Имя свойства

Описание

ai.model

Обязательное имя модели. Допустимые имена зависят от провайдера. Модель должна подходить для текстового анализа. Эта модель используется для всех функций, если для конкретной функции не настроена отдельная модель как override.

ai.analyze-sentiment.model

Необязательный override для использования другой модели в ai_analyze_sentiment().

ai.classify.model

Необязательный override для использования другой модели в ai_classify().

ai.extract.model

Необязательный override для использования другой модели в ai_extract().

ai.fix-grammar.model

Необязательный override для использования другой модели в ai_fix_grammar().

ai.generate.model

Необязательный override для использования другой модели в ai_gen().

ai.mask.model

Необязательный override для использования другой модели в ai_mask().

ai.translate.model

Необязательный override для использования другой модели в ai_translate().

Функции#

Следующие функции доступны в каждом каталоге, настроенном с коннектором ai, в схеме ai и используют настроенного провайдера LLM:

ai_analyze_sentiment(text) varchar#

Анализирует тональность входного текста.

Результат тональности: positive, negative, neutral или mixed.

SELECT ai_analyze_sentiment('I love Trino');
-- positive
ai_classify(text, labels) varchar#

Классифицирует входной текст в соответствии с предоставленными метками.

SELECT ai_classify('Buy now!', ARRAY['spam', 'not spam']);
-- spam
ai_extract(text, labels)#

Извлекает значения для указанных меток из входного текста.

SELECT ai_extract('John is 25 years old', ARRAY['name', 'age']);
-- {name=John, age=25}
ai_fix_grammar(text) varchar#

Исправляет грамматические ошибки во входном тексте.

SELECT ai_fix_grammar('I are happy. What you doing?');
-- I am happy. What are you doing?
ai_gen(prompt) varchar#

Генерирует текст на основе входного prompt.

SELECT ai_gen('Describe Trino in a few words');
-- Distributed SQL query engine.
ai_mask(text, labels) varchar#

Маскирует значения для указанных меток во входном тексте, заменяя их текстом [MASKED].

SELECT ai_mask(
    'Contact me at 555-1234 or visit us at 123 Main St.',
    ARRAY['phone', 'address']);
-- Contact me at [MASKED] or visit us at [MASKED].
ai_translate(text, language) varchar#

Переводит входной текст на указанный язык.

SELECT ai_translate('I like coffee', 'es');
-- Me gusta el café

SELECT ai_translate('I like coffee', 'zh-TW');
-- 我喜歡咖啡