Общие параметры Chat Model в LangChain

В предыдущем разделе мы изучилиinit_chat_model()основное использование

В этом разделе будут подробно описаны общие параметры управления, используемые при вызове моделей, что поможет вам лучше контролировать поведение модели.


temperature — управление креативностью и детерминированностью

temperatureЭто наиболее часто используемый параметр с диапазоном значений от 0 до 2. Он управляет случайностью вывода модели.

Пример

from langchain.chat_models import init_chat_model

# Сравнение разных значений temperature для одного и того же вопроса
question = "Представь Python Tutorial Python одним предложением"

# temperature=0: Вывод очень детерминирован, почти всегда одинаковый
model_low = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)
resp1 = model_low.invoke(question)
resp2 = model_low.invoke(question)
print(f"temperature=0 1-й раз: {resp1.content}")
print(f"temperature=0 2-й раз: {resp2.content}")
print(f"Оба результата идентичны: {resp1.content == resp2.content}")
print()

# temperature=1.5: Вывод разнообразен, может отличаться каждый раз
model_high = init_chat_model("deepseek:deepseek-v4-flash", temperature=1.5)
resp1 = model_high.invoke(question)
resp2 = model_high.invoke(question)
print(f"temperature=1.5 1-й раз: {resp1.content}")
print(f"temperature=1.5 2-й раз: {resp2.content}")

Вывод:

temperature=0 第1次: Example是一个为编程初学者提供免费教程的学习平台。
temperature=0 第2次: Example是一个为编程初学者提供免费教程的学习平台。
两次结果相同: True

temperature=1.5 第1次: Example是一个简单易懂的编程与网络技术入门学习平台。
temperature=1.5 第2次: Example是深受编程新手喜爱的中文免费在线技术学习平台。
значение temperatureЭффектСценарии использования
0 ~ 0.3Стабильный и детерминированный вывод, результаты почти идентичны каждый разИзвлечение данных, классификация, генерация кода, перевод
0.5 ~ 0.7Умеренная креативность, естественный вывод, не отклоняющийся от темыПовседневные разговоры, суммирование контента
0.8 ~ 1.2Разнообразный вывод с большим простором для творчестваТворческое письмо, мозговой штурм
1.3 ~ 2.0Очень случайный вывод, может появляться неожиданный контентИсследовательская генерация (не рекомендуется для продакшена)

temperature=0 не означает "абсолютно идентичный". Из-за различий в точности вычислений с плавающей точкой во внутренних расчётах модели в крайних случаях всё ещё могут быть небольшие различия. Если нужна абсолютная детерминированность, некоторые модели предоставляют параметр seed.


max_tokens - управление длиной вывода и стоимостью

max_tokensОграничивает максимальное количество токенов в выводе модели. Один токен приблизительно эквивалентен 0.75 английским словам или 0.5 китайским иероглифам.

Пример

from langchain.chat_models import init_chat_model

model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)

# max_tokens=30: Ограничить вывод до 30 токенов
response_short = model.invoke(
    "Опишите подробно платформу Example Tutorial EXAMPLE",
    max_tokens=30
)
print(f"Ограничено 30 токенами ({len(response_short.content)} символов):")
print(response_short.content)
print()

# max_tokens=200: Разрешить более длинный вывод
response_long = model.invoke(
    "Опишите подробно платформу Example Tutorial EXAMPLE",
    max_tokens=200
)
print(f"Ограничено 200 токенами ({len(response_long.content)} символов):")
print(response_long.content)

Вывод:

限制 30 tokens (42 字符):
Example是一个面向编程初学者的在线学习平台,提供各种编程语言的教程和实例。

限制 200 tokens (306 字符):
Example是一个面向编程初学者的在线学习平台,提供了丰富的编程教程和参考资料。
该平台涵盖了 HTML、CSS、JavaScript、Python、Java、C、C++、PHP、SQL 等多种编程语言和技术。
Example的特点包括:
1. 内容系统化:从基础到进阶,帮助学习者逐步掌握编程知识
2. 实例丰富:每个知识点都配有可运行的代码示例
3. ...

max_tokens — это жёсткое ограничение на длину вывода. Если задать слишком низкое значение, ответ модели может быть резко обрезан посреди предложения. Обычно рекомендуется устанавливать его в диапазоне 100-2000 в зависимости от сценария. Для сценариев «ответ одним предложением» достаточно 30-100; для сценариев «подробное объяснение» рекомендуется 500-2000.


timeout и max_retries - Сетевая надёжность

В производственных средах сетевые запросы могут по разным причинам завершаться неудачно. Эти два параметра помогают управлять поведением запросов.

Пример

from langchain.chat_models import init_chat_model

# Рекомендуемая конфигурация для производственной среды
model = init_chat_model(
    "deepseek:deepseek-v4-flash",

    # Ожидать не более 30 секунд для одного запроса
    timeout=30,

    # Повторять до 3 раз после сбоя (всего 4 попытки запроса)
    max_retries=3,
)

# Имитировать обычный вызов
try:
    response = model.invoke("Что такое Python Tutorial Python?")
    print(f"Вызов успешен: {response.content[:50]}...")
except Exception as e:
    print(f"Вызов не удался: {e}")
ПараметрОписаниеРекомендуемое значение
timeoutМаксимальное время ожидания для одного запроса (секунды). None означает отсутствие ограничения30~60 (слишком короткое значение может приводить к тайм-аутам; слишком длинное ухудшает пользовательский опыт)
max_retriesКоличество повторных попыток после сбоя. 0 означает, что повторные попытки не выполняются2~3 (достаточно для обработки периодических проблем с сетью)

Анализ временных затрат при настройке timeout и max_retries:

假设 timeout=30, max_retries=3:
单次成功: ~2s
第1次失败+重试成功: ~2s + ~2s = ~4s
全部失败: 4次 × 30s = 最多 120s 才抛出异常

base_url - пользовательский адрес API

Параметр base_url очень полезен, когда нужно обращаться к моделям через прокси, службу ретрансляции или приватное развёртывание.

Пример

from langchain.chat_models import init_chat_model

# Сценарий 1: Доступ к OpenAI через прокси
model = init_chat_model(
    "deepseek:deepseek-v4-flash",
    base_url="https://your-proxy-domain.com/v1",  # Адрес прокси
)

# Сценарий 2: Использование стороннего сервиса, совместимого с OpenAI API
# Многие локальные модели предоставляют интерфейсы, совместимые с OpenAI
model = init_chat_model(
    "deepseek:deepseek-v4-flash",           # Установите provider в openai
    base_url="https://api.third-party.com/v1",  # Но на самом деле указывает на сторонний сервис
    api_key="your-third-party-key",  # Ключ стороннего API
)

# Сценарий 3: Подключение к локальным моделям (например, vLLM, Ollama)
model = init_chat_model(
    "openai:qwen2.5",               # Имя локальной модели
    base_url="http://localhost:8000/v1",  # Адрес локального сервиса
    api_key="not-needed",           # Локально обычно не требуется ключ
)

base_url изменяет адрес конечной точки API, но параметр provider определяет режим поведения. Например, provider="openai" будет использовать формат сообщений OpenAI, даже если base_url указывает на другой сервис. Убедитесь, что целевой сервис совместим с указанным вами форматом provider.


Другие распространённые параметры

top_p - Ядерная выборка

Пример

from langchain.chat_models import init_chat_model

# top_p — ещё один способ управлять случайностью
# Модель выбирает только из слов, совокупная вероятность которых достигает top_p
# top_p=0.1 означает выбор только из верхних 10% слов с наибольшей вероятностью
model = init_chat_model(
    "deepseek:deepseek-v4-flash",
    top_p=0.9,       # Учитывать только слова, входящие в верхние 90% совокупной вероятности
)

response = model.invoke("Представь Python Tutorial Python")
print(response.content[:100])

Обычно рекомендуется настраивать только один из параметров temperature или top_p, а не оба одновременно. Если заданы оба, поведение модели может быть трудно предсказуемым.

stop — Стоп-последовательность

Пример

from langchain.chat_models import init_chat_model

model = init_chat_model("deepseek:deepseek-v4-flash")

# Параметр stop задаёт стоп-последовательности; модель немедленно прекращает генерацию, когда встречает эти слова
response = model.invoke(
    "Перечисли пять сайтов для изучения программирования, по одному в строке",
    stop=["\n"]  # Остановиться при обнаружении новой строки, вернуть только первый
)
print(f"Ограничение stop=['\n']: {response.content}"\\n']: {response.content}")

Вывод:

限制 stop=['\n']: 1. Example

seed — Воспроизводимость (поддерживается некоторыми моделями)

Пример

from langchain.chat_models import init_chat_model

# Некоторые модели поддерживают параметр seed для получения детерминированного вывода
# Одинаковый seed + одинаковый ввод = одинаковый вывод
model = init_chat_model("deepseek:deepseek-v4-flash", seed=42, temperature=0)
resp1 = model.invoke("Представь Python Tutorial")
resp2 = model.invoke("Представь руководство по Python")
print(f"seed=42, результаты идентичны: {resp1.content == resp2.content}")

Краткая справочная таблица параметров

ПараметрTypeЗначение по умолчаниюКогда использовать
temperaturefloatЗависит от моделиУстановите 0~0.3, когда задача требует стабильности, и 0.7~1.0, когда это необходимо
max_tokensintВерхний предел моделиКогда нужно контролировать длину вывода
timeoutint/floatОтсутствуетРекомендуется всегда задавать в продакшене
max_retriesintЗависит от моделиРекомендуется 2~3 при нестабильной сети
base_urlstrОфициальный адресПри использовании прокси, ретранслятора или локального сервиса
top_pfloat1.0Когда требуется управление ядерной выборкой (как альтернатива temperature)
stoplist[str]ОтсутствуетКогда требуется точный контроль над окончанием вывода
Другие расширения