Вызов модели LangChain -- функция init_chat_model()
LangChain init_chat_model() — одна из наиболее часто используемых функций в LangChain. Она позволяет унифицированно подключаться к более чем 20 провайдерам моделей, без необходимости запоминать имена классов и различия параметров каждого провайдера.
Синтаксис
Синтаксис функции init_chat_model() выглядит следующим образом:
from langchain.chat_models import init_chat_model
# 完整语法
model = init_chat_model(
model, # str | None:模型名称(provider:model 格式)
*,
model_provider=None, # str | None:单独的模型提供商
configurable_fields=None, # None | "any" | list[str]:可运行时修改的字段
config_prefix=None, # str | None:配置键前缀
**kwargs, # 模型特定参数(temperature、max_tokens 等)
)Описание параметров:
| Параметр | Type | Описание | Значение по умолчанию |
|---|---|---|---|
| model | str или None | Имя модели в формате provider:model. Передача None может использоваться для создания настраиваемой модели. | Отсутствует |
| model_provider | str или None | Укажите провайдера отдельно. Используется, когда он получен динамически или когда модель невозможно определить. | Отсутствует |
| configurable_fields | "any", list или None | Список полей, которые можно изменять во время выполнения. None означает фиксированную модель. | Отсутствует |
| config_prefix | str или None | Префикс для ключей конфигурации в сценариях с несколькими моделями, чтобы избежать конфликтов. | Отсутствует |
| **kwargs | dict | Параметры, передаваемые нижележащей модели. | Отсутствует |
Подробное объяснение параметра model
Формат provider:model (рекомендуется)
Формат —provider:model name, разделённые двоеточием:
Пример
# Формат provider:model
model = init_chat_model("deepseek:deepseek-v4-flash")
model = init_chat_model("anthropic:claude-sonnet-4-5-20250929")
model = init_chat_model("deepseek:deepseek-chat")
model = init_chat_model("ollama:llama3.2")
model = init_chat_model("groq:llama-3.3-70b")
Автоматическое определение провайдера модели
Если вы не укажете префикс провайдера, LangChain попытается определить его по названию модели:
Пример
# Автоматическое определение провайдера (по префиксу названия модели)
model = init_chat_model("deepseek-v4-flash") # → openai
model = init_chat_model("claude-sonnet-4-5") # → anthropic
model = init_chat_model("deepseek-chat") # → deepseek
model = init_chat_model("grok-3") # → xai
model = init_chat_model("mistral-large") # → mistralai
| Префикс названия модели | Определённый провайдер |
|---|---|
| gpt-, o1, o3, chatgpt, text-davinci | openai |
| claude | anthropic |
| gemini | google_vertexai |
| command | cohere |
| deepseek | deepseek |
| mistral, mixtral | mistralai |
| grok | xai |
| sonar | perplexity |
| amazon., anthropic., meta. | bedrock |
Автоматическое определение удобно, но не гарантирует 100% корректность. Например, префикс gemini может указывать на google_vertexai или google_genai, и в будущих версиях результат автоматического определения по умолчанию может измениться. Рекомендуется всегда использовать формат provider:model в производственных средах.
Параметр model_provider
Если model_provider указан отдельно, результат эквивалентен формату provider:model:
Пример
model = init_chat_model("claude-sonnet-4-5", model_provider="anthropic")
model = init_chat_model("anthropic:claude-sonnet-4-5")
Сценарии использования model_provider:
- Когда имя провайдера динамически считывается из файла конфигурации
- Когда имя провайдера и имя модели нужно настраивать независимо (переключать отдельно во время выполнения)
- Когда имя модели нельзя определить автоматически и неудобно объединять строки
Фиксированная модель или настраиваемая модель
init_chat_model() имеет два режима использования:
Режим 1: Фиксированная модель
Укажите конкретную строку модели, возвращается экземпляр BaseChatModel, который можно использовать напрямую:
Пример
# модель указана, возвращается фиксированная модель
model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0.7)
response = model.invoke("Расскажи о Python Python")
print(response.content)
Если .env находится в текущем каталоге, используйте следующий код для загрузки конфигурации из текущего пути:
import os from dotenv import load_dotenv # 加载当前目录 .env 文件 load_dotenv() from langchain.chat_models import init_chat_model # 指定了 model,返回固定模型 model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0.7) response = model.invoke("介绍Example") print(response.content)
Режим 2: Настраиваемая модель
Не указывайте модель (или установите её в None), чтобы создать модель, которую можно динамически переключать во время выполнения:
Пример
# Не указывайте модель, возвращается настраиваемая модель
# Можно зафиксировать некоторые параметры (например, temperature=0.7), а остальные указать во время выполнения
configurable_model = init_chat_model(temperature=0.7)
# Укажите модель через config во время выполнения
response = configurable_model.invoke(
"Расскажи о Python Python",
config={"configurable": {"model": "deepseek-v4-flash"}}
)
print(response.content)
# Один и тот же экземпляр модели может работать с разными моделями
response = configurable_model.invoke(
"Расскажи о Python Python",
config={"configurable": {"model": "claude-sonnet-4-5"}}
)
print(response.content)
Настраиваемые модели очень полезны при A/B-тестировании и оптимизации затрат. Вы можете переключать модели или настраивать параметры, изменяя конфигурацию, без перезапуска сервиса.
Все поддерживаемые провайдеры моделей
Ниже перечислены провайдеры, нативно поддерживаемые init_chat_model(), и их установочные пакеты:
| название провайдера | Пакет для установки | Репрезентативная модель |
|---|---|---|
| openai | langchain-deepseek | gpt-4o、gpt-4o-mini |
| anthropic | langchain-anthropic | claude-sonnet-4-5、claude-opus-4-7 |
| google_genai | langchain-google-genai | gemini-2.5-flash、gemini-2.5-pro |
| google_vertexai | langchain-google-vertexai | gemini-2.5-flash、gemini-2.5-pro |
| deepseek | langchain-deepseek | deepseek-chat、deepseek-reasoner |
| mistralai | langchain-mistralai | mistral-large、mistral-small |
| groq | langchain-groq | llama-3.3-70b、mixtral-8x7b |
| ollama | langchain-ollama | llama3.2、qwen2.5 |
| fireworks | langchain-fireworks | accounts/fireworks/models/llama-v3p1-70b |
| вместе | langchain-together | meta-llama/Llama-3.3-70B |
| xai | langchain-xai | grok-3 |
| openrouter | langchain-openrouter | openai/gpt-4o、anthropic/claude-sonnet |
| perplexity | langchain-perplexity | sonar、sonar-pro |
| huggingface | langchain-huggingface | Различные модели HuggingFace |
| cohere | langchain-cohere | command-r-plus |
Общие параметры kwargs
Параметры kwargs передаются напрямую в базовый класс модели. К часто используемым относятся:
Пример
model = init_chat_model(
"deepseek:deepseek-v4-flash",
# Управляет случайностью вывода (0~2), чем меньше значение, тем стабильнее вывод
temperature=0.3,
# Ограничивает максимальное количество выходных токенов (контролирует затраты)
max_tokens=200,
# Тайм-аут запроса (секунды)
timeout=30,
# Количество повторных попыток после сбоя
max_retries=2,
# Пользовательский адрес API (сценарии прокси/ретрансляции)
# base_url="https://your-proxy.com/v1",
# Ограничитель частоты запросов (контролирует частоту запросов)
# rate_limiter=MyRateLimiter(requests_per_second=5),
)
response = model.invoke("Что такое Python Python?")
print(response.content)
| Параметр | Type | Описание | Применимые провайдеры |
|---|---|---|---|
| temperature | float | Управляет случайностью, 0~2, значение по умолчанию зависит от модели | Большинство |
| max_tokens | int | Ограничивает максимальное количество выходных токенов | Все |
| timeout | int или float | Таймаут запроса в секундах | Все |
| max_retries | int | Количество повторных попыток после сбоя запроса | Большинство |
| base_url | str | Пользовательская конечная точка API | Большинство |
| rate_limiter | BaseRateLimiter | Экземпляр ограничителя скорости | Большинство |
| top_p | float | Параметр ядерной выборки, 0~1 | Большинство |
| stop | list[str] | Стоп-последовательности; модель прекращает генерацию, когда встречает эти слова | Большинство |
temperature и top_p обычно не задаются одновременно. temperature управляет "формой распределения", а top_p управляет "диапазоном кандидатов". В большинстве сценариев достаточно настроить только temperature.
ConfigurableModel — переключение модели во время выполнения
ConfigurableModel — это расширенный вариант использования init_chat_model(), позволяющий динамически указывать модели и параметры во время выполнения:
Пример
# Создайте настраиваемую модель и задайте значения по умолчанию
model = init_chat_model(
"deepseek:deepseek-v4-flash", # Модель по умолчанию
configurable_fields="any", # Все параметры можно изменять во время выполнения
config_prefix="my", # Префикс ключа конфигурации
temperature=0.3, # Температура по умолчанию
)
# Запуск с конфигурацией по умолчанию
response = model.invoke("Расскажи о Python")
print(f"Конфигурация по умолчанию: {response.content[:50]}...")
# Переопределить модель и параметры во время выполнения (обратите внимание на префикс my_)
response = model.invoke(
"Расскажи о Python Python",
config={
"configurable": {
"my_model": "deepseek:deepseek-v4-pro", # Сменить модель
"my_temperature": 0.9, # Настроить температуру
}
}
)
print(f"Переопределить конфигурацию: {response.content[:50]}...")
Возможные значения configurable_fields:
| Значение | Значение |
|---|---|
| Отсутствует | Не настраивается, возвращает обычный BaseChatModel (режим фиксированной модели) |
| "any" | Все параметры настраиваются (обратите внимание на риск безопасности: api_key и т. д. также могут быть изменены) |
| ["model", "temperature"] | Только поля, указанные в списке, являются настраиваемыми |
Другие расширенияПри использовании configurable_fields="any" будьте осторожны с безопасностью: если вы доверяете небезопасному источнику конфигурации, такие чувствительные поля, как api_key и base_url, могут быть изменены. В производственных средах рекомендуется явно перечислять настраиваемые поля.