Модели и ключи конфигурации¶
Модели¶
Чат-модели создаются в коде и передаются фабрике под именами:
import os
from langchain_anthropic import ChatAnthropic
from langchain_openai import ChatOpenAI
factory = LangfuseChainFactory(
langfuse,
models={
"openai": ChatOpenAI(model="gpt-5.5", api_key=os.environ["OPENAI_API_KEY"], timeout=30),
"anthropic": ChatAnthropic(model="claude-sonnet-5-5", api_key=os.environ["ANTHROPIC_API_KEY"]),
},
allowed_config_keys={"model", "temperature", "max_tokens"},
)
Подходит любая чат-модель LangChain. Всё, что не выражается в JSON — ключи, адреса, HTTP-клиенты, ограничители частоты запросов, — задаётся в этих конструкторах.
Конфигурация промпта выбирает модель ключом provider, одним из ключей словаря models:
{"provider": "anthropic", "model": "claude-opus-5-5", "temperature": 0.2, "max_tokens": 800}
Если модель одна, provider можно опустить. Если моделей несколько, он обязателен, а имя, которого
нет в models, срывает сборку с ChainBuildError.
Разрешённые ключи конфигурации¶
Каждый ключ конфигурации, кроме provider и template_format, переопределяет поле выбранной
модели. Какие переопределения действуют, решает allowed_config_keys:
| Значение | Что может изменить конфигурация |
|---|---|
None (по умолчанию) |
Ничего. Конфигурация только выбирает модель. |
Набор ключей, {"model", "temperature", "max_tokens"} |
Эти поля. |
"any" |
Любое поле, включая base_url и api_key. |
С фабрикой выше показанная конфигурация запускает цепочку на модели Anthropic с именем модели,
температурой и лимитом токенов из конфигурации; ключи и тайм-аут остаются такими, какими их задал
код. Ключ вне набора модель не видит, но хуки по-прежнему могут его прочитать. template_format в
наборе позволяет конфигурации выбирать движок рендера (см. раздел Шаблоны).
Как применяется переопределение¶
Переопределение никогда не меняет модель, переданную фабрике. Оно создаёт новый объект того же
класса из полей выбранной модели и значений конфигурации — через конструктор, так же, как это делает
init_chat_model(configurable_fields=...). Отсюда:
- Конструктор проверяет значения.
"temperature": "hot"срывает сборку сChainBuildError, а предыдущая цепочка продолжает работать. - Ключ конфигурации может быть именем поля или его алиасом.
modelзадаётmodel_nameуChatOpenAI. - Если переопределять нечего, цепочка работает на самом объекте модели.
- HTTP-клиент, созданный моделью при конструировании, переезжает в новый объект.
ChatOpenAIсохраняет свой клиент, поэтому переопределениеbase_urlилиtimeoutменяет поле, но не запросы;ChatAnthropicпересобирает клиент из новых полей.
Имена полей у провайдеров¶
Ключи — это аргументы конструктора класса модели, поэтому у провайдеров они различаются. Ключ,
которого класс не знает, игнорируется или, как у ChatOpenAI, уходит в model_kwargs с
предупреждением.
ChatOpenAI |
ChatAnthropic |
ChatGoogleGenerativeAI |
ChatOllama |
|
|---|---|---|---|---|
| Имя модели | model |
model |
model |
model |
| Температура | temperature |
temperature |
temperature |
temperature |
| Лимит токенов | max_tokens |
max_tokens |
max_output_tokens |
num_predict |