DSPy
DSPy — это фреймворк с открытым исходным кодом, который собирает конвейеры LLM из типизированных сигнатур и модулей, а затем оптимизирует их промпты по метрике.
DSPy — фреймворк с открытым исходным кодом на Python для создания приложений на базе больших языковых моделей (LLM) в виде кода, а не вручную написанных подсказок. Разработчик объявляет входные и выходные данные каждого шага, объединяет шаги в программу и поручает оптимизатору DSPy писать и настраивать подсказки или веса модели, чтобы максимизировать метрику на наборе примеров. Название расшифровывается как Declarative Self-improving Python, а сам проект описывает себя как фреймворк для программирования языковых моделей, а не для составления подсказок. Omar Khattab и коллеги из Стэнфордского университета представили DSPy в статье октября 2023 года «DSPy: компиляция декларативных вызовов языковых моделей в самоулучшающиеся конвейеры». За несколько минут компиляции несколько строк DSPy позволили GPT-3.5 и Llama-2-13B-chat создавать конвейеры, превосходившие стандартные подсказки с несколькими примерами более чем на 25% и 65% соответственно, а конвейеры с демонстрациями, написанными экспертами, — на 46% и 40%.
Сигнатуры, модули и оптимизаторы#
- Сигнатуры: типизированные объявления входных и выходных данных шага, записанные прямо в коде как
"question -> answer"или в виде класса с описанием задачи в docstring. Они задают назначение шага, оставляя формулировку подсказки DSPy. - Модули: стратегии выполнения сигнатуры.
dspy.Predictвызывает модель один раз,dspy.ChainOfThoughtдобавляет перед ответом поле для рассуждений, как при подсказках с цепочкой рассуждений, аdspy.ReActзапускает цикл с использованием инструментов в стиле подсказок ReAct. Модули объединяются в многошаговые программы, как слои PyTorch, например в конвейер генерации с дополнением поиском (RAG), который формирует поисковый запрос, извлекает фрагменты и отвечает на их основе. - Адаптеры: Преобразуют сигнатуру в сообщения чата для модели и разбирают её ответ на типизированные поля.
- Оптимизаторы: Алгоритмы, улучшающие программу по заданной метрике.
BootstrapFewShotзапускает программу на обучающих примерах и сохраняет в качестве демонстраций трассировки, прошедшие проверку по метрике;MIPROv2ищет подходящие инструкции и наборы демонстраций;BootstrapFinetuneдистиллирует программу в веса модели с помощью дообучения.
Цикл оптимизации похож на обучение модели, где параметры — это подсказки:
Оптимизатор GEPA 2025 года, доступный как dspy.GEPA, анализирует трассировки выполнения программы и текстовые отзывы, поручает LLM разобраться в причинах неудач и на этой основе улучшает инструкции. В шести задачах он в среднем превзошёл метод обучения с подкреплением GRPO на 6%, а в отдельных случаях — на 20%, используя при этом до 35 раз меньше развёртываний; результат MIPROv2 он превзошёл более чем на 10%.
От сигнатуры к подсказке#
DSPy формирует подсказку по сигнатуре, поэтому ту же программу можно заново оптимизировать для новой модели, а не переписывать. Здесь входные данные — сводка детекций от Ultralytics YOLO26: Results.verbose() возвращает результат режима predict в виде короткой строки с числом объектов каждого класса. Сигнатура может принимать эту строку как текст, чтобы оптимизатор настраивал этап рассуждений на реальных результатах детекции объектов. Для формирования сообщений не нужны ни модель, ни ключ API:
import dspy
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg")
class SceneQA(dspy.Signature):
"""Answer a question about a photo from the objects a detector found in it."""
detections: str = dspy.InputField()
question: str = dspy.InputField()
answer: str = dspy.OutputField()
# The adapter turns the signature and inputs into the chat messages the model will receive
inputs = {"detections": results[0].verbose(), "question": "How many people are in the photo?"}
messages = dspy.ChatAdapter().format(SceneQA, demos=[], inputs=inputs)
for message in messages:
print(f"--- {message['role']} ---\n{message['content']}")В системном сообщении перечислены входные и выходные поля, маркеры [[ ## field ## ]], которые DSPy использует для разбора ответа, и docstring в качестве цели; в пользовательском сообщении передаётся число объектов, обнаруженных детектором. Оптимизатор улучшает эту программу, переписывая цель и добавляя в сообщения демонстрации, при этом код Python не меняется.
DSPy и родственные термины#
- Промпт-инжиниринг: Ручное написание и редактирование подсказок. DSPy превращает эту работу в задачу оптимизации с метрикой и примерами.
- LangChain: Фреймворк с интеграциями, инструментами и циклами агентов для создания приложений на базе LLM; подсказки поддерживает разработчик.
- Настройка гиперпараметров: Поиск обучающих параметров по метрике на проверочной выборке — наиболее близкая аналогия поиска подсказок в DSPy.
- Составные системы ИИ: Приложения, построенные из нескольких вызовов моделей, поисковых систем и инструментов. DSPy создана для сквозной оптимизации таких конвейеров: подсказки на каждом шаге настраиваются по итоговой метрике.










