Вызов модели 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ОписаниеЗначение по умолчанию
modelstr или NoneИмя модели в формате provider:model. Передача None может использоваться для создания настраиваемой модели.Отсутствует
model_providerstr или NoneУкажите провайдера отдельно. Используется, когда он получен динамически или когда модель невозможно определить.Отсутствует
configurable_fields"any", list или NoneСписок полей, которые можно изменять во время выполнения. None означает фиксированную модель.Отсутствует
config_prefixstr или NoneПрефикс для ключей конфигурации в сценариях с несколькими моделями, чтобы избежать конфликтов.Отсутствует
**kwargsdictПараметры, передаваемые нижележащей модели.Отсутствует

Подробное объяснение параметра model

Формат provider:model (рекомендуется)

Формат —provider:model name, разделённые двоеточием:

Пример

from langchain.chat_models import init_chat_model

# Формат 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 попытается определить его по названию модели:

Пример

from langchain.chat_models import init_chat_model

# Автоматическое определение провайдера (по префиксу названия модели)
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-davinciopenai
claudeanthropic
geminigoogle_vertexai
commandcohere
deepseekdeepseek
mistral, mixtralmistralai
grokxai
sonarperplexity
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, который можно использовать напрямую:

Пример

from langchain.chat_models import init_chat_model

# модель указана, возвращается фиксированная модель
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), чтобы создать модель, которую можно динамически переключать во время выполнения:

Пример

from langchain.chat_models import init_chat_model

# Не указывайте модель, возвращается настраиваемая модель
# Можно зафиксировать некоторые параметры (например, 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(), и их установочные пакеты:

название провайдераПакет для установкиРепрезентативная модель
openailangchain-deepseekgpt-4o、gpt-4o-mini
anthropiclangchain-anthropicclaude-sonnet-4-5、claude-opus-4-7
google_genailangchain-google-genaigemini-2.5-flash、gemini-2.5-pro
google_vertexailangchain-google-vertexaigemini-2.5-flash、gemini-2.5-pro
deepseeklangchain-deepseekdeepseek-chat、deepseek-reasoner
mistralailangchain-mistralaimistral-large、mistral-small
groqlangchain-groqllama-3.3-70b、mixtral-8x7b
ollamalangchain-ollamallama3.2、qwen2.5
fireworkslangchain-fireworksaccounts/fireworks/models/llama-v3p1-70b
вместеlangchain-togethermeta-llama/Llama-3.3-70B
xailangchain-xaigrok-3
openrouterlangchain-openrouteropenai/gpt-4o、anthropic/claude-sonnet
perplexitylangchain-perplexitysonar、sonar-pro
huggingfacelangchain-huggingfaceРазличные модели HuggingFace
coherelangchain-coherecommand-r-plus

Общие параметры kwargs

Параметры kwargs передаются напрямую в базовый класс модели. К часто используемым относятся:

Пример

from langchain.chat_models import init_chat_model

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ОписаниеПрименимые провайдеры
temperaturefloatУправляет случайностью, 0~2, значение по умолчанию зависит от моделиБольшинство
max_tokensintОграничивает максимальное количество выходных токеновВсе
timeoutint или floatТаймаут запроса в секундахВсе
max_retriesintКоличество повторных попыток после сбоя запросаБольшинство
base_urlstrПользовательская конечная точка APIБольшинство
rate_limiterBaseRateLimiterЭкземпляр ограничителя скоростиБольшинство
top_pfloatПараметр ядерной выборки, 0~1Большинство
stoplist[str]Стоп-последовательности; модель прекращает генерацию, когда встречает эти словаБольшинство

temperature и top_p обычно не задаются одновременно. temperature управляет "формой распределения", а top_p управляет "диапазоном кандидатов". В большинстве сценариев достаточно настроить только temperature.


ConfigurableModel — переключение модели во время выполнения

ConfigurableModel — это расширенный вариант использования init_chat_model(), позволяющий динамически указывать модели и параметры во время выполнения:

Пример

from langchain.chat_models import 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, могут быть изменены. В производственных средах рекомендуется явно перечислять настраиваемые поля.

Другие расширения