> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Настройки сеанса ai_function_*

> Настройки сеанса ClickHouse в автоматически сгенерированной группе ai_function_*.

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>Тип</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>По умолчанию</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Изменяется без перезапуска
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Экспериментальная возможность. <u><a href="/docs/docs/beta-and-experimental-features#experimental-features">Подробнее.</a></u>
        </div>;
};

Эти настройки доступны в [system.settings](/docs/ru/reference/system-tables/settings) и автоматически генерируются на основе [исходного кода](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<div id="ai_function_embedding_default_credentials">
  ## ai\_function\_embedding\_default\_credentials
</div>

<ExperimentalBadge />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": ""},{"label": "Новая настройка"}]}]} />

Имя именованной коллекции, которую `aiEmbed` использует, если при вызове в карту параметров не передаются `credentials`. Пустое значение означает, что значения по умолчанию нет: в таких вызовах `credentials` нужно передавать явно. `aiEmbed` принимает `model` как обязательный позиционный аргумент, а не из именованной коллекции. Этот параметр выделен отдельно от `ai_function_text_default_credentials`, поскольку конечная точка для эмбеддингов отличается от конечной точки чата.

<div id="ai_function_embedding_max_batch_size">
  ## ai\_function\_embedding\_max\_batch\_size
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="NonZeroUInt64" default_value="100" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.6"},{"label": "100"},{"label": "Новая настройка"}]}]} />

Максимальное количество текстов, включаемых в один HTTP-запрос, выполняемый `aiEmbed`. Тексты группируются в батчи такого размера, чтобы снизить накладные расходы на вызовы API. Например, 500 уникальных текстов при размере батча 100 дадут 5 HTTP-запросов.

<div id="ai_function_max_api_calls_per_query">
  ## ai\_function\_max\_api\_calls\_per\_query
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "0"},{"label": "новая настройка"}]}]} />

Максимальное количество HTTP-запросов, которые функции ИИ могут выполнять в рамках одного запроса. Установите 0, чтобы отключить ограничение.

<div id="ai_function_max_input_tokens_per_query">
  ## ai\_function\_max\_input\_tokens\_per\_query
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="1000000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "1000000"},{"label": "новая настройка"}]}]} />

Максимальное суммарное число входных токенов (промпта) по всем вызовам API функции ИИ в рамках одного запроса. Подсчитывается накопительно по данным из ответов провайдера. Обратите внимание, что этот лимит может быть превышен на объём входных токенов одного вызова, поскольку число входных токенов для вызова заранее неизвестно. Установите 0, чтобы отключить ограничение.

Это ограничение действует только для провайдеров, которые возвращают объект `usage` в своём ответе (OpenAI, Anthropic, vLLM). Если провайдер не передаёт сведения об использовании токенов (в частности, HuggingFace TEI), счётчик остаётся равным 0 — в таком случае используйте `ai_function_max_api_calls_per_query`, чтобы ограничить число таких вызовов.

<div id="ai_function_max_output_tokens_per_query">
  ## ai\_function\_max\_output\_tokens\_per\_query
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="500000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "500000"},{"label": "Новая настройка"}]}]} />

Максимальное суммарное число выходных токенов (completion) по всем вызовам API функции ИИ в рамках одного запроса. Отслеживается накопительно на основе ответов провайдера. Обратите внимание, что этот предел может быть превышен на количество выходных токенов одного вызова, поскольку число выходных токенов заранее неизвестно. Установите 0, чтобы отключить ограничение.

Это ограничение применяется только к провайдерам, которые возвращают объект `usage` в своём ответе (OpenAI, Anthropic, vLLM). Оно не распространяется на функции embedding (в частности, aiEmbed), которые никогда не создают выходные токены.

<div id="ai_function_max_retries">
  ## ai\_function\_max\_retries
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "0"},{"label": "новая настройка"}]}]} />

Максимальное количество повторных попыток при временных ошибках для каждого отдельного API-запроса. Для каждой повторной попытки используется экспоненциально увеличивающаяся задержка, начиная с `ai_function_retry_initial_delay_ms`.

<div id="ai_function_request_timeout_sec">
  ## ai\_function\_request\_timeout\_sec
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="60" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "60"},{"label": "новая настройка"}]}]} />

Тайм-аут в секундах для отдельных HTTP-запросов, выполняемых функциями ИИ (вызовы API для чат-комплишенов ИИ и эмбеддингов). Если запрос не завершается за это время, он считается неуспешным и может быть повторён в соответствии с `ai_function_max_retries`.

<div id="ai_function_retry_initial_delay_ms">
  ## ai\_function\_retry\_initial\_delay\_ms
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="UInt64" default_value="1000" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "1000"},{"label": "новая настройка"}]}]} />

Начальная задержка в миллисекундах перед первой повторной попыткой после неудачного API-запроса функции ИИ. При каждой следующей попытке задержка удваивается (экспоненциальная задержка). Например, при настройках по умолчанию: 1000ms, 2000ms, 4000ms.

<div id="ai_function_text_default_credentials">
  ## ai\_function\_text\_default\_credentials
</div>

<ExperimentalBadge />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": ""},{"label": "Новая настройка"}]}]} />

Имя именованной коллекции, которую текстовые функции ИИ (`aiGenerate`, `aiClassify`, `aiExtract`, `aiTranslate`) используют, если в карте параметров вызова не указаны `credentials`. Пустое значение означает отсутствие значения по умолчанию: в таких вызовах `credentials` нужно передавать явно. Конечная точка chat-completions отличается от конечной точки эмбеддинга, поэтому этот параметр отделён от `ai_function_embedding_default_credentials`.

<div id="ai_function_throw_on_error">
  ## ai\_function\_throw\_on\_error
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "1"},{"label": "новая настройка"}]}]} />

Если `true` (по умолчанию), то при необратимом сбое вызова функции ИИ после исчерпания всех повторных попыток выполнение запроса прерывается с исключением. Если `false`, для строки, в которой произошёл сбой, используется значение по умолчанию для типа столбца (пустая строка для `String`), и обработка продолжается.

<div id="ai_function_throw_on_quota_exceeded">
  ## ai\_function\_throw\_on\_quota\_exceeded
</div>

<ExperimentalBadge />

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "1"},{"label": "новая настройка"}]}]} />

Если true (по умолчанию), при превышении лимита QUOTA для функции ИИ (`ai_function_max_input_tokens_per_query`, `ai_function_max_output_tokens_per_query` или `ai_function_max_api_calls_per_query`) запрос прерывается с Исключением. Если false, для оставшихся строк используется значение по умолчанию для типа столбца (пустая строка для String).
