Гайд · TNWS AI

Как проверить промежуточное рассуждение DSPy ChainOfThought при ответе

4 мин—

Включаем ChainOfThought и отдельно сверяем reasoning и итоговый ответ по проверяемому вопросу.

Задача и применимость

Актуальный поисковый вопрос: «как посмотреть reasoning у результата dspy ChainOfThought». Понять, почему ответ на многошаговый тест ошибочен, не принимая рассуждение модели за доказательство. Материал основан на текущем официальном руководстве DSPy, проверенном 20 сентября 2026 года, и предназначен для Python 3.10+ с совместимым установленным dspy. У разных провайдеров разные доступные модели, лимиты и права: укажите собственный реально работающий provider/model в переменных окружения. Фиксируйте установленную версию пакета при повторении опыта, поскольку API может меняться.

Как устроено решение

DSPy документирует ChainOfThought как другую стратегию выполнения той же сигнатуры по сравнению с Predict. Модуль добавляет поле рассуждения, полезное для диагностики конкретного задания. Однако полученный текст — генерация модели, не формальная цепочка доказательства и не обязательно точное отображение внутренних вычислений. Поэтому статья строит независимый арифметический эталон. Место проверки — отдельная программа или человеческая сверка, а не совпадение риторики reasoning с ожидаемым объяснением.

Порядок действий

  1. Подготовьте короткую задачу с заранее рассчитанным ответом.
  2. Настройте LM и создайте ChainOfThought по сигнатуре question -> answer.
  3. Передайте вопрос, прочитайте поля answer и reasoning.
  4. Сравните конечное число с вычислением вне модели, затем проверьте шаги.
  5. Добавьте похожую отрицательную задачу с изменёнными входными числами.

Для сетевого запуска установите пакет командой 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 пользователей без политики хранения и разрешения: он может содержать исходные данные. Контроль семи карандашей имеет смысл как учебный тест формата, но не демонстрирует качество модели на сложном планировании, документах или таблицах.

Критерии приёмки

  1. Prediction содержит answer и reasoning.
  2. Числовой итог равен семи независимо от красоты объяснения.
  3. После смены условия эталон пересчитан, а не скопирован из первого теста.

Если критерий не выполнен, сначала разделите четыре причины: доступ к модели, контракт полей, поведение самого модуля и правильность предметного ответа. Один успешно выполненный Python-вызов подтверждает только часть этих условий. Сохраняйте минимальный безопасный пример и сравнивайте версии по одинаковым вопросам; не используйте реальные имена клиентов, токены или закрытые документы для отладки в общих журналах. Когда сценарий требует инференса, точные формулировки ответов и затраты зависят от выбранной модели, поэтому в статье заданы проверяемые свойства, а не выдуманные гарантии.

Типичные ошибки и чего не делать

  • Не воспринимайте reasoning как машинно проверенное доказательство.
  • Не объявляйте стратегию лучшей без серии одинаковых тестов.
  • Не логируйте личные вопросы только ради изучения цепочки.

Частые вопросы

Чем отличается ChainOfThought?

Стратегией выполнения и полем reasoning.

Обязателен ли один текст reasoning?

Нет, он генерируется моделью.

Нужно ли проверить окончательный ответ отдельно?

Да, например арифметикой.

Официальные источники

Частые вопросы

Чем отличается ChainOfThought?

Стратегией выполнения и полем reasoning.

Обязателен ли один текст reasoning?

Нет, он генерируется моделью.

Нужно ли проверить окончательный ответ отдельно?

Да, например арифметикой.

Читайте также

Комментарии

Пока тихо. Скажите первое слово