Перейти к содержанию

LLM-провайдер

Synth не поставляет модели и не содержит встроенного LLM. Модель подключается как внешний провайдер: OpenAI-совместимый endpoint, Ollama или Anthropic. Без доступного провайдера работают интерфейс, файлы, история и инструменты, но ответы модели — нет.

Варианты подключения

Подходит для корпоративного шлюза, vLLM, LiteLLM, OpenRouter-совместимого API и других реализаций OpenAI API.

synth config provider add \
  --name corp \
  --type openai \
  --url https://llm.<domain>/v1 \
  --model <model> \
  --api-key '<api-key>'

Базовый URL обычно заканчивается на /v1. Если ваш шлюз использует другой префикс, укажите его так, как он описан в документации шлюза.

Ollama устанавливается отдельно в том же контуре. Synth обращается к нативному API /api/chat, поэтому URL указывается без /v1 — так применяются num_ctx, think и инструменты.

ollama pull <model>

synth config provider add \
  --name ollama \
  --type ollama \
  --url http://127.0.0.1:11434 \
  --model <model>

Если Ollama на другом хосте, замените URL на http://<ollama-host>:11434 и откройте порт 11434 только для Synth. Модели Ollama скачиваются на хост Ollama отдельно; в поставку Synth они не входят.

Ollama без интернета

ollama pull требует доступа к реестру моделей. В закрытом контуре модель переносится на хост Ollama отдельно (например, GGUF-файл и Modelfile с ollama create); команда ollama pull выше — для хоста, у которого этот доступ есть.

synth config provider add \
  --name anthropic \
  --type anthropic \
  --url https://api.anthropic.com \
  --model <model> \
  --api-key '<api-key>'

Для Anthropic-совместимого шлюза укажите его базовый URL. Адаптер сам приводит адрес к /v1/messages.

Переменные окружения

Провайдера можно задать без CLI — через SYNTH_PROVIDER_<NAME>_*. Имя провайдера — в верхнем регистре:

export SYNTH_PROVIDER_CORP_TYPE=openai
export SYNTH_PROVIDER_CORP_URL=https://llm.<domain>/v1
export SYNTH_PROVIDER_CORP_MODEL=<model>
export SYNTH_PROVIDER_CORP_API_KEY='<api-key>'

Для Ollama:

export SYNTH_PROVIDER_OLLAMA_TYPE=ollama
export SYNTH_PROVIDER_OLLAMA_URL=http://127.0.0.1:11434
export SYNTH_PROVIDER_OLLAMA_MODEL=<model>

Ключи не коммитьте и не передавайте в открытом виде. В systemd используйте EnvironmentFile с правами 0600, в Kubernetes — Secret, в Docker — env-файл или Secret.

Проверить список провайдеров:

synth config provider list

Работающий инстанс

CLI-команда пишет JSON в каталог данных. Если сервер уже запущен, удобнее добавить провайдера через раздел «Провайдеры» в интерфейсе; CLI — хороший способ подготовить конфигурацию до первого старта.

Модель по умолчанию

Модель по умолчанию задаётся в админке («Модели») или через API:

curl -X PUT http://127.0.0.1:4300/api/v2/settings/default-model \
  -H "Authorization: Bearer <api-key>" \
  -H 'Content-Type: application/json' \
  -d '{"provider":"corp","model":"<model>"}'

Приоритет: runtime-настройка инстанса выше llm.defaultProvider / llm.defaultModel из config.yaml. Значение используется новыми сессиями.

CA и TLS

Если LLM-endpoint подписан внутренним CA, добавьте его в доверие Synth. Не отключайте проверку сертификата.

config.yaml:

security:
  tls:
    caFile: /etc/synth/certs/ca.pem

Переменные окружения:

export SYNTH_TLS_CA_FILE=/etc/synth/certs/ca.pem
# или PEM целиком:
# export SYNTH_TLS_CA_PEM="$(cat ca.pem)"

В интерфейсе то же настраивается в разделе «Сеть» → «TLS/CA». TLS применяется при старте: после изменения перезапустите сервис.

Для Helm-развёртывания используйте security.tls.existingSecret (CA и клиентские сертификаты) или caCert; чарт смонтирует файлы и пропишет пути. Проверка цепочки:

openssl s_client -connect llm.<domain>:443 -servername llm.<domain> \
  -CAfile /etc/synth/certs/ca.pem </dev/null

Не выключайте проверку TLS

rejectUnauthorized: false и curl -k допустимы только как временная диагностика. В рабочем контуре настройте CA: иначе трафик к LLM не защищён от подмены.

Прокси

Если исходящие запросы идут через прокси, настройте его в config.yaml или в интерфейсе («Сеть» → «Прокси»):

proxy:
  enabled: true
  url: http://proxy.<domain>:3128
  noProxy:
    - 127.0.0.1
    - localhost
    - .internal

Переменные окружения:

export SYNTH_PROXY_URL=http://proxy.<domain>:3128
export SYNTH_PROXY_NO_PROXY="127.0.0.1,localhost,.internal"

Приоритет: SYNTH_PROXY_* → runtime-настройка в UI → config.yaml → стандартные HTTP_PROXY/HTTPS_PROXY/NO_PROXY. Настройка применяется при старте. Для локальной Ollama добавьте 127.0.0.1,localhost в noProxy, иначе запрос уйдёт через прокси.

Доменная аутентификация прокси (NTLM/Negotiate/Kerberos) в Synth не реализуется — используйте промежуточный egress-прокси или шлюз, который завершает аутентификацию. SOCKS5 поддерживается best-effort, без target CA/mTLS.

Проверка доступности

OpenAI-совместимый endpoint (если поддерживает /models):

curl -fsS https://llm.<domain>/v1/models \
  -H "Authorization: Bearer <api-key>"

Ollama:

curl -fsS http://127.0.0.1:11434/api/tags

Если запрос из shell проходит, а Synth отвечает ошибкой, проверьте:

  1. тот ли URL и ключ заданы у провайдера;
  2. не мешает ли прокси (noProxy для локального endpoint);
  3. доверяет ли Synth CA endpoint;
  4. есть ли у сервиса сетевой доступ к хосту/порту.

Офлайн-поведение

  • Проверка обновлений и обращение к npm-реестру для работы не требуются.
  • SYNTH_OFFLINE — планируемый флаг явного офлайн-режима; в текущей версии его нет. Не полагайтесь на него в инструкциях по установке.
  • web_search и web_fetch требуют интернета. В закрытом контуре их можно ограничить egress-политикой; на чат и файловые инструменты это не влияет.
  • Модели не скачиваются при установке Synth и не входят в бандл.

Что дальше