Как тестировать LLM-цепочку без вызовов модели
Без живого вызова модели можно проверить значительную часть логики приложения: подготовку входа, разбор ответа, маршрутизацию и обработку ошибок. Для этого замените границу модели управляемой заглушкой. Такой тест не измеряет качество генерации, но помогает находить обычные программные дефекты.
Начните с одного контракта
Допустим, цепочка классифицирует обращение как billing или technical. После классификации код выбирает очередь. Для теста маршрутизатора не нужна модель: подайте заранее заданный результат и проверьте выбранную очередь.
def route(result):
queues = {"billing": "finance", "technical": "support"}
return queues.get(result.get("category"), "manual")
assert route({"category": "billing"}) == "finance"
assert route({"category": "unknown"}) == "manual"
assert route({}) == "manual"
Этот пример проверяет только маршрутизацию. Он не доказывает, что модель правильно распознаёт финансовые обращения. Для этого понадобится отдельный набор писем с ожидаемыми категориями и прогон реальной конфигурации.
Какие ответы должна уметь выдавать заглушка
Подготовьте правильный результат, отсутствующее поле, неизвестную категорию, таймаут и некорректный формат. Если код поддерживает повтор, задайте последовательность «ошибка, затем успех» и проверьте число попыток. Для отказа после лимита нужна отдельная последовательность.
Стабильные фиктивные ответы позволяют воспроизводить ошибку без сетевых расходов и изменений внешней модели. Важен явный интерфейс: вход и выход заглушки должны соответствовать тому уровню, который подменяется. Нельзя возвращать готовую категорию, если вы утверждаете, что проверили ещё и JSON-парсер.
Соберите два независимых набора
Первый набор проверяет код с контролируемыми ответами. Второй оценивает качество на реальных запросах к модели. Не заменяйте один другим: зелёные unit-тесты могут сосуществовать с плохой классификацией, а удачная демонстрация может скрывать неисправную обработку ошибок.
LangChain предоставляет средства тестирования компонентов. Конкретный способ подмены выбирайте по используемой версии и интеграции. Сохраняйте в отчёте, что именно выполнялось локально и какие проверки требуют внешнего сервиса.
Этот разбор подготовлен Latorn. Если вы уже знаете основы Python и API и хотите практиковать такие решения системно, сравните программу платного курса LangChain 1.0.x со своей задачей. Открытый пример выше можно проверить самостоятельно; он не заменяет полный проект.
Технические источники: LangChain testing. Учебные ситуации и числа в статье придуманы для объяснения механизма.
Следующий шаг: LangChain: практические разборы формата, памяти и потоков. По смежным вопросам: Отсутствующее поле и null в ответе LLM: как не стереть данные, Обрезка истории LangChain: как сохранить договорённости.
