Общие параметры Chat Model в LangChain
В предыдущем разделе мы изучилиinit_chat_model()основное использование
В этом разделе будут подробно описаны общие параметры управления, используемые при вызове моделей, что поможет вам лучше контролировать поведение модели.
temperature — управление креативностью и детерминированностью
temperatureЭто наиболее часто используемый параметр с диапазоном значений от 0 до 2. Он управляет случайностью вывода модели.
Пример
# Сравнение разных значений 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 китайским иероглифам.
Пример
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 - Сетевая надёжность
В производственных средах сетевые запросы могут по разным причинам завершаться неудачно. Эти два параметра помогают управлять поведением запросов.
Пример
# Рекомендуемая конфигурация для производственной среды
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 очень полезен, когда нужно обращаться к моделям через прокси, службу ретрансляции или приватное развёртывание.
Пример
# Сценарий 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 - Ядерная выборка
Пример
# 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 — Стоп-последовательность
Пример
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 — Воспроизводимость (поддерживается некоторыми моделями)
Пример
# Некоторые модели поддерживают параметр 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 | Значение по умолчанию | Когда использовать |
|---|---|---|---|
| temperature | float | Зависит от модели | Установите 0~0.3, когда задача требует стабильности, и 0.7~1.0, когда это необходимо |
| max_tokens | int | Верхний предел модели | Когда нужно контролировать длину вывода |
| timeout | int/float | Отсутствует | Рекомендуется всегда задавать в продакшене |
| max_retries | int | Зависит от модели | Рекомендуется 2~3 при нестабильной сети |
| base_url | str | Официальный адрес | При использовании прокси, ретранслятора или локального сервиса |
| top_p | float | 1.0 | Когда требуется управление ядерной выборкой (как альтернатива temperature) |
| stop | list[str] | Отсутствует | Когда требуется точный контроль над окончанием вывода |