Гайд · TNWS AI
Как проверить промежуточное рассуждение DSPy ChainOfThought при ответе
Включаем ChainOfThought и отдельно сверяем reasoning и итоговый ответ по проверяемому вопросу.
Задача и применимость
Актуальный поисковый вопрос: «как посмотреть reasoning у результата dspy ChainOfThought». Понять, почему ответ на многошаговый тест ошибочен, не принимая рассуждение модели за доказательство. Материал основан на текущем официальном руководстве DSPy, проверенном 20 сентября 2026 года, и предназначен для Python 3.10+ с совместимым установленным dspy. У разных провайдеров разные доступные модели, лимиты и права: укажите собственный реально работающий provider/model в переменных окружения. Фиксируйте установленную версию пакета при повторении опыта, поскольку API может меняться.
Как устроено решение
DSPy документирует ChainOfThought как другую стратегию выполнения той же сигнатуры по сравнению с Predict. Модуль добавляет поле рассуждения, полезное для диагностики конкретного задания. Однако полученный текст — генерация модели, не формальная цепочка доказательства и не обязательно точное отображение внутренних вычислений. Поэтому статья строит независимый арифметический эталон. Место проверки — отдельная программа или человеческая сверка, а не совпадение риторики reasoning с ожидаемым объяснением.
Порядок действий
- Подготовьте короткую задачу с заранее рассчитанным ответом.
- Настройте LM и создайте ChainOfThought по сигнатуре question -> answer.
- Передайте вопрос, прочитайте поля answer и reasoning.
- Сравните конечное число с вычислением вне модели, затем проверьте шаги.
- Добавьте похожую отрицательную задачу с изменёнными входными числами.
Для сетевого запуска установите пакет командой pip install dspy, подготовьте свой доступ к модели и задайте DSPY_MODEL в форме provider/model и DSPY_API_KEY в окружении. Исключение — код, который только проверяет локальные настройки без сетевого вызова. Шаблон ниже содержит вымышленные входные данные и не включает секретов; перед запуском сверьте, что выбранная вами модель подходит для задачи и разрешена правилами провайдера.
Готовый пример программы
import os
import dspy
dspy.configure(lm=dspy.LM(os.environ["DSPY_MODEL"], api_key=os.environ["DSPY_API_KEY"]))
solver = dspy.ChainOfThought("question -> answer")
result = solver(question="В коробке 3 пакета по 4 карандаша. Отдали 5 карандашей. Сколько осталось?")
print("Ответ:", result.answer)
print("Рассуждение:", result.reasoning)
Вход и ожидаемый результат
Вход — три пакета по четыре карандаша минус пять. Проверяемый результат — 7 карандашей: 3 × 4 − 5 = 7. Поле reasoning должно быть доступно в Prediction и показывать промежуточное объяснение, но его текст может различаться между моделями и вызовами. Если explanation выглядит убедительно, а число не равно семи, опыт не пройден.
Проверка качества, а не только запуска
При сравнении с базовым Predict держите одинаковые задачу, модель и данные, иначе невозможно приписать изменение стратегии. Итоговой метрикой выбирайте правильный численный ответ на множестве примеров, а не объём reasoning. За более длинные ответы разные провайдеры могут начислять токены, поэтому влияние на задержку и стоимость измеряют фактически для своего аккаунта; здесь чисел не выдумано. Если задача требует строгой арифметики, используйте кодовую проверку, а не надеетесь на объяснение модели.
Промежуточный текст reasoning удобен для отладки арифметического теста, но не является доказательством корректности скрытых вычислений модели. Вместо поиска красивой цепочки сверяйте конечное число с обычным вычислением в Python и сохраняйте исходные данные рядом с результатом. Добавьте контрольный пример с нулём и ещё один с числами, где легко ошибиться в порядке операций. Если рассуждение выглядит убедительным, а число неверно, исправляйте постановку задачи либо применяйте вычисляющую функцию в собственном коде. Не публикуйте промежуточные рассуждения пользователям без проверки: в них могут оказаться неверные факты, служебные подсказки или фрагменты входного приватного текста.
Особые случаи и границы
Для второго теста замените количество отданных карандашей на 12: ожидается ноль, а не отрицательное число. Это позволяет поймать шаблонное повторение прежнего ответа. В продуктовой логике не сохраняйте reasoning пользователей без политики хранения и разрешения: он может содержать исходные данные. Контроль семи карандашей имеет смысл как учебный тест формата, но не демонстрирует качество модели на сложном планировании, документах или таблицах.
Критерии приёмки
- Prediction содержит answer и reasoning.
- Числовой итог равен семи независимо от красоты объяснения.
- После смены условия эталон пересчитан, а не скопирован из первого теста.
Если критерий не выполнен, сначала разделите четыре причины: доступ к модели, контракт полей, поведение самого модуля и правильность предметного ответа. Один успешно выполненный Python-вызов подтверждает только часть этих условий. Сохраняйте минимальный безопасный пример и сравнивайте версии по одинаковым вопросам; не используйте реальные имена клиентов, токены или закрытые документы для отладки в общих журналах. Когда сценарий требует инференса, точные формулировки ответов и затраты зависят от выбранной модели, поэтому в статье заданы проверяемые свойства, а не выдуманные гарантии.
Типичные ошибки и чего не делать
- Не воспринимайте reasoning как машинно проверенное доказательство.
- Не объявляйте стратегию лучшей без серии одинаковых тестов.
- Не логируйте личные вопросы только ради изучения цепочки.
Частые вопросы
Чем отличается ChainOfThought?
Стратегией выполнения и полем reasoning.
Обязателен ли один текст reasoning?
Нет, он генерируется моделью.
Нужно ли проверить окончательный ответ отдельно?
Да, например арифметикой.
Официальные источники
Частые вопросы
Чем отличается ChainOfThought?
Стратегией выполнения и полем reasoning.
Обязателен ли один текст reasoning?
Нет, он генерируется моделью.
Нужно ли проверить окончательный ответ отдельно?
Да, например арифметикой.
Читайте также
Как дать DSPy ReAct только читающий инструмент для ответа по справке
Подключаем read-only функцию словаря к ReAct, ограничиваем число итераций и проверяем источник ответа.
Как задать простой русскоязычный вопрос через DSPy Predict и Signature
Пишем сигнатуру question -> answer и проверяем поля Prediction на безопасном тесте справочного ответа.
Как оптимизировать инструкции DSPy через GEPA без утечки тестового набора
Разделяем примеры, метрику и reflection LM перед компиляцией GEPA; оцениваем итог на отдельном отложенном наборе.
Комментарии
Пока тихо. Скажите первое слово