LLM против Chat models и типы сообщений
Урок объясняет два вида моделей в LangChain и систему ролей в диалоге.
Chat model — модель, которая принимает на вход список сообщений с ролями (system, human, ai) и возвращает сообщение ассистента.
Два интерфейса моделей
Исторически LangChain различает два типа обёрток. LLM — простой интерфейс «строка на вход, строка на выход» (completion-стиль). ChatModel — интерфейс «список сообщений на вход, сообщение на выход». Современные модели почти все диалоговые, поэтому в новых проектах используют именно chat-модели (ChatOpenAI, ChatAnthropic и т.п.). Понимать разницу важно: если перепутать тип, не совпадут форматы ввода-вывода.
Роли сообщений
В chat-формате каждое сообщение имеет роль:
- System — задаёт поведение и роль ассистента («ты лаконичный технический помощник»).
- Human — реплика пользователя.
- AI — ответ модели (используется и в истории диалога).
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o-mini")
messages = [
SystemMessage(content="Отвечай одним предложением."),
HumanMessage(content="Что такое индекс в базе данных?"),
]
print(model.invoke(messages).content)Как работает под капотом
Список сообщений LangChain сериализует в формат, который ждёт API провайдера (как правило, массив объектов вида {role, content}). Ответ приходит как AIMessage с полем content и метаданными (число токенов, причина остановки). System-сообщение провайдер учитывает с повышенным приоритетом — поэтому именно туда кладут инструкции о стиле и ограничениях. Если положить инструкцию в Human-сообщение, модель может воспринять её как часть пользовательского запроса, а не как правило поведения.
Частые ошибки
- Передавать chat-модели голую строку и ждать строгого формата сообщений. Chat-модели принимают строку для удобства, но для контроля ролей передавайте список сообщений.
- Класть системную инструкцию в Human-сообщение. Правила поведения — в System.
- Читать ответ как строку. Результат — объект
AIMessage; текст лежит в.content.
Итог
- LangChain различает completion-LLM и chat-модели; в новых проектах берут chat-модели.
- Сообщения имеют роли System / Human / AI.
- Инструкции о поведении кладут в System-сообщение.
- Ответ chat-модели — объект
AIMessage, текст в.content.