> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

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

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

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <span>Бета</span>
            </a>;
  }
  return <a href="https://clickhouse.com/docs/reference/settings/beta-and-experimental-features#beta-features" className="betaBadge">
            <span>Возможность в статусе бета</span>
        </a>;
};

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Версия", "Значение по умолчанию", "Комментарий"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        История версий
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

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>;
};

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

## ai\_function\_allow\_insecure\_endpoint

<BetaBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "0"},{"label": "Функции ИИ теперь по умолчанию отклоняют небезопасные конечные точки (http) на удалённых хостах."}]}]} />

Если false (значение по умолчанию), функции ИИ не используют `endpoint` именованной коллекции, который отправляет промпты и ключи API на удалённый хост по незашифрованному соединению: любая конечная точка, не использующая HTTPS и не расположенная на loopback-хосте, отклоняется с исключением. Конечные точки loopback (например, локальный сервер модели `http://localhost`) всегда разрешены. Установите true, чтобы разрешить использование незашифрованных конечных точек `http://` на удалённых хостах.

## ai\_function\_embedding\_default\_credentials

<BetaBadge />

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

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

## ai\_function\_embedding\_max\_batch\_size

<BetaBadge />

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

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

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

## ai\_function\_max\_api\_calls\_per\_query

<BetaBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1000"},{"label": "По умолчанию ограничивать количество исходящих HTTP-вызовов функций ИИ в рамках одного запроса (ранее 0 — без ограничений)."}]}, {"id": "row-2","items": [{"label": "26.4"},{"label": "0"},{"label": "новая настройка"}]}]} />

Максимальное количество HTTP-запросов, которые функции ИИ могут выполнять в рамках одного запроса. Ограничение применяется независимо каждым сервером и фрагментом запроса: в пределах одного контекста выполнения это точный общий лимит для всех функций ИИ, блоков и потоков, но распределённый запрос (между сегментами или фрагментами параллельных реплик) может выполнять до такого количества запросов для каждого сегмента или фрагмента. Его необходимо задать в запросе верхнего уровня — переопределение `SETTINGS` в подзапросе игнорируется. Установите 0, чтобы отключить ограничение.

## ai\_function\_max\_input\_tokens\_per\_query

<BetaBadge />

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

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

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

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

## ai\_function\_max\_output\_tokens\_per\_query

<BetaBadge />

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

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

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

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

## ai\_function\_max\_retries

<BetaBadge />

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.9"},{"label": "1"},{"label": "По умолчанию один раз повторять попытку при временной ошибке API, чтобы единичный ответ 429 или 5xx от провайдера не приводил к сбою запроса."}]}, {"id": "row-2","items": [{"label": "26.4"},{"label": "0"},{"label": "новая настройка"}]}]} />

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

## ai\_function\_request\_timeout\_sec

<BetaBadge />

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

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

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

## ai\_function\_retry\_initial\_delay\_ms

<BetaBadge />

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

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

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

## ai\_function\_text\_default\_credentials

<BetaBadge />

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

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

## ai\_function\_throw\_on\_error

<BetaBadge />

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

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

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

## ai\_function\_throw\_on\_quota\_exceeded

<BetaBadge />

<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). Как и ограничения QUOTA, этот параметр необходимо задать в запросе верхнего уровня — переопределение `SETTINGS` в подзапросе игнорируется.
