Чат-модели¶
Обзор¶
Large Language Models (LLMs) — это продвинутые модели машинного обучения, которые превосходно справляются с широким спектром задач, связанных с языком, таких как генерация текста, перевод, суммирование, ответ на вопросы и многое другое, без необходимости тонкой настройки под каждую задачу.
Современные LLM обычно используются через интерфейс chat model, который принимает список сообщений (messages) в качестве входных данных и возвращает одно сообщение (message) как выход.
Новейшее поколение chat моделей предлагает дополнительные возможности:
- Tool calling: многие популярные chat модели предоставляют нативный API для вызова инструментов. Этот API позволяет разработчикам строить богатые приложения, в которых LLM могут взаимодействовать с внешними сервисами, API и базами данных. Вызов инструментов также может использоваться для извлечения структурированной информации из неструктурированных данных и выполнения различных других задач.
- Structured output: техника, позволяющая требовать от chat модели ответ в структурированном формате, например JSON, соответствующем заданной схеме.
- Multimodality: способность работать с данными, отличными от текста; например, изображения, аудио и видео.
Возможности¶
LangChain предоставляет единообразный интерфейс для работы с chat моделями разных провайдеров, а также дополнительные функции для мониторинга, отладки и оптимизации производительности приложений, использующих LLM.
- Интеграции со многими провайдерами chat моделей (например, Anthropic, OpenAI, Ollama, Microsoft Azure, Google Vertex, Amazon Bedrock, Hugging Face, Cohere, Groq). См. chat model integrations для актуального списка поддерживаемых моделей.
- Возможность использовать либо формат сообщений LangChain (messages) либо формат сообщений OpenAI.
- Стандартный API для tool calling: стандартный интерфейс для привязки инструментов к моделям, для доступа к запросам на вызов инструмента, сделанным моделями, и для передачи обратно результатов работы инструментов модели.
- Стандартный API для structuring outputs через метод
with_structured_output
. - Поддержка async programming, efficient batching, rich streaming API.
- Интеграция с LangSmith для мониторинга и отладки приложений, использующих LLM в продакшене.
- Дополнительные функции: стандартизированное отслеживание использования токенов (token usage), ограничение скорости запросов (rate limiting), кеширование (caching) и другие.
Интеграции¶
LangChain имеет множество интеграций с chat моделями, которые позволяют использовать разнообразие моделей от разных провайдеров.
Эти интеграции бывают двух типов:
- Official models: Это модели, которые официально поддерживаются LangChain и/или провайдером модели. Вы можете найти эти модели в пакетах
langchain-<provider>
. - Community models: Модели, в основном внесённые и поддерживаемые сообществом. Вы можете найти эти модели в пакете
langchain-community
.
Модели chat в LangChain именуются соглашением, которое добавляет префикс "Chat" к их именам классов (например, ChatOllama
, ChatAnthropic
, ChatOpenAI
и т.д.).
Примечание: Модели, которые не имеют префикса "Chat" в своём имени или содержат суффикс "LLM", как правило, относятся к старым моделям, которые не используют интерфейс chat model, а вместо этого используют интерфейс, принимающий строку (string) как вход и возвращающий строку как выход.
Интерфейс¶
Chat модели в LangChain реализуют интерфейс BaseChatModel. Поскольку BaseChatModel
также реализует Runnable Interface, chat модели поддерживают стандартный streaming интерфейс, async programming, оптимизированную батчинг (efficient batching) и другие возможности.
Многие ключевые методы chat моделей работают с входом в виде сообщений (messages) и возвращают сообщения как ответ.
Основные методы¶
Ключевые методы chat модели:
invoke
: основной метод для взаимодействия с chat моделью. Принимает список сообщений (messages) как вход и возвращает список сообщений как выход.stream
: метод, который позволяет получать выход chat модели по мере его генерации.batch
: метод, который позволяет группировать несколько запросов к chat модели вместе для более эффективной обработки.bind_tools
: метод, позволяющий связать инструмент с chat моделью для использования в контексте выполнения модели.with_structured_output
: оболочка вокруг методаinvoke
для моделей, которые нативно поддерживают structured output.
Другие важные методы см. в BaseChatModel API Reference.
Входы и выходы¶
Современные LLM обычно используются через интерфейс chat model, который принимает messages
как вход и возвращает messages
как выход. Сообщения обычно связаны с ролью (например, "system", "human", "assistant") и с одним или несколькими блоками содержимого (content), которые содержат текст или потенциально мультимодальные данные (например, изображения, аудио, видео).
LangChain поддерживает два формата сообщений для взаимодействия с chat моделями:
- LangChain Message Format: собственный формат сообщений LangChain, используется по умолчанию и внутри LangChain.
- OpenAI's Message Format: формат сообщений OpenAI.
Стандартные параметры¶
Многие chat модели имеют стандартизированные параметры, которые могут использоваться для настройки поведения модели:
Параметр | Описание |
---|---|
model |
Название или идентификатор конкретной AI модели, которую вы хотите использовать (например, "gpt-3.5-turbo" или "gpt-4" ). |
temperature |
Управляет случайностью вывода модели. Более высокое значение (например, 1.0) делает ответы более креативными, чем низкое (например, 0.0), которое делает их более детерминированными и сфокусированными. |
timeout |
Максимальное время (в секундах), чтобы ждать ответ от модели до отмены запроса. Гарантирует, что запрос не зависнет бесконечно. |
max_tokens |
Ограничивает общее число токенов (слов и пунктуации) в ответе. Управляет тем, насколько длинным может быть выход. |
stop |
Задаёт последовательности остановки, которые указывают, когда модель должна прекратить генерировать токены. Например, вы можете использовать специфические строки для обозначения конца ответа. |
max_retries |
Максимальное количество попыток, которые система предпримет, чтобы отправить запрос повторно, если он не удался из-за проблем вроде сетевых таймаутов или превышения лимита скорости. |
api_key |
API ключ, необходимый для аутентификации у провайдера модели. Обычно выдается при регистрации. |
base_url |
URL API конечной точки, куда отправляются запросы. Обычно предоставляется провайдером модели и необходим для направления ваших запросов. |
rate_limiter |
Необязательный параметр типа BaseRateLimiter , чтобы распределять запросы, избегая превышения лимитов. См. раздел про rate limiting для деталей. |
Некоторые важные замечания:
- Стандартные параметры применимы только к тем провайдерам моделей, которые открывают параметры с соответствующей функциональностью. Например, некоторые провайдеры не дают настройки максимального числа токенов в ответе, так что
max_tokens
может быть не поддержан. - Стандартные параметры в настоящее время применяются только к интеграциям, у которых есть собственные пакеты интеграции (например,
langchain-openai
,langchain-anthropic
и т.д.), они не принудительно поддерживаются моделями вlangchain-community
.
Chat модели также принимают другие параметры, специфичные для данной интеграции. Чтобы узнать все параметры, поддерживаемые определённой chat моделью, обратитесь к их соответствующему API Reference для этой модели.
Вызов инструментов (Tool calling)¶
Chat модели могут вызывать tools для выполнения задач, таких как получение данных из базы данных, выполнение API-запросов или запуск пользовательского кода. Более подробную информацию см. в руководстве по tool calling.
Структурированные ответы (Structured outputs)¶
Chat модели могут быть запрошены выдать ответ в определённом формате (например, JSON или соответствующем определённой схеме). Эта возможность крайне полезна для задач по извлечению информации. Подробнее см. в руководстве structured outputs.
Мультимодальность (Multimodality)¶
Large Language Models (LLMs) не ограничены обработкой только текста. Они также могут использоваться для обработки других типов данных, таких как изображения, аудио и видео. Это называется multimodality.
В настоящий момент лишь некоторые LLM поддерживают мультимодальные входы, и почти ни одна — мультимодальные выходы. Пожалуйста, проверьте документацию конкретной модели на предмет деталей.
Контекстное окно (Context window)¶
Контекстное окно chat модели — это максимальный размер входной последовательности, которую модель может обработать за один раз. Несмотря на то, что контекстные окна современных LLM довольно велики, они всё же представляют собой ограничение, о котором разработчикам необходимо помнить при работе с chat моделями.
Если вход превышает размер контекстного окна, модель может быть неспособна обработать весь ввод и может выдать ошибку. В разговорных приложениях это особенно важно, потому что контекстное окно определяет, сколько информации модель "запоминает" в ходе диалога. Разработчикам часто нужно управлять вводом так, чтобы он оставался в пределах контекстного окна, чтобы сохранять связный диалог без превышения лимита.
Размер входа измеряется в tokens — единицах обработки, которые модель использует.
Продвинутые темы¶
Ограничение скорости запросов (Rate-limiting)¶
Многие провайдеры chat моделей вводят ограничение на число запросов, которые можно сделать в течение определённого периода времени.
Если вы столкнулись с ограничением скорости (rate limit), вы обычно получите ошибку от провайдера, и вам придётся подождать, прежде чем делать новые запросы.
У вас есть несколько вариантов, как справиться с ограничениями скорости:
- Старайтесь избегать превышения лимитов, распределяя запросы: chat модели принимают параметр
rate_limiter
, который можно передать при инициализации. Этот параметр используется для регулирования того, с какой частотой отправляются запросы к провайдеру модели. Распределение запросов особенно полезно при benchmarking моделей для оценки их производительности. Подробнее см. how to handle rate limits для подробной информации. - Пытаться восстанавливаться после ошибок превышения лимита: если вы получаете ошибку rate limit, можно подождать некоторое время перед повторной попыткой запроса. Время ожидания можно увеличивать с каждой последующей ошибкой. Chat модели имеют параметр
max_retries
, который можно использовать для контроля числа таких попыток. Подробнее в разделе стандартных параметров. - Переключаться на другую chat модель: если с одной моделью вы столкнулись с превышением лимита, можно перейти на другую модель, у которой лимиты менее строгие или иные условия.
Кеширование (Caching)¶
API chat моделей могут работать медленно, поэтому естественный вопрос: стоит ли кешировать результаты предыдущих разговоров. Теоретически кеширование может помочь повысить производительность за счёт уменьшения числа запросов к провайдеру модели. На практике кеширование ответов chat модели — сложная задача, и к ней нужно подходить с осторожностью.
Причина в том, что шанс попадания в кеш мал после первого-второго взаимодействия в разговоре, если опираться на кеширование точных входов модели. Например: какова вероятность, что несколько разговоров начнутся с точно того же сообщения? А что насчёт трёх одинаковых сообщений подряд?
Альтернативный подход — семантическое кеширование (semantic caching), когда вы кешируете ответы на основе смысла ввода, а не точного ввода. Это может быть эффективным в некоторых ситуациях, но не во всех.
Семантический кеш вводит зависимость от другой модели на критическом пути приложения (например, семантический кеш может использовать embedding model для преобразования текста в вектор). И нет гарантии, что он точно уловит смысл ввода.
Однако могут быть ситуации, когда кеширование ответов chat модели выгодно. Например, если у вас есть chat модель, используемая для ответов на часто задаваемые вопросы, кеширование ответов может помочь уменьшить нагрузку на провайдера модели, сократить издержки и улучшить время отклика.
См. руководство how to cache chat model responses для более детальной информации.
Связанные ресурсы¶
- Руководства-How-to по использованию chat моделей: how-to guides
- Список поддерживаемых chat моделей: chat model integrations
Концептуальные руководства¶
Source: https://python.langchain.com/docs/concepts/chat_models