DSPy заменяет ручные промпты на компилируемые программы. Вы описываете сигнатуру, DSPy оптимизирует.
pip install dspy-ai # DSPy компилирует ваши сигнатуры в оптимальные промпты под любую модель import dspy # Конфигурация LM — можно OpenAI, Anthropic, локальные модели lm = dspy.LM("openai/gpt-4o", api_key="sk-...") dspy.configure(lm=lm)
class TranslateToRussian(dspy.Signature): """Переведи английский текст на литературный русский язык.""" english_text = dspy.InputField(desc="текст на английском") russian_text = dspy.OutputField(desc="перевод на русском") # Простой вызов: DSPy сам построит промпт из сигнатуры translator = dspy.Predict(TranslateToRussian) result = translator(english_text="The future belongs to those who believe in the beauty of their dreams.") print(result.russian_text)
class FactChecker(dspy.Signature): """Проверь утверждение. Разбери по шагам. Вынеси вердикт.""" statement = dspy.InputField() verdict = dspy.OutputField(desc="TRUE/FALSE/UNKNOWN") reasoning = dspy.OutputField(desc="пошаговое рассуждение") # ChainOfThought автоматически добавляет "Let's think step by step" checker = dspy.ChainOfThought(FactChecker) result = checker(statement="Python был создан позже, чем JavaScript.") print(f"Вердикт: {result.verdict}") print(f"Рассуждение: {result.reasoning}")
class RAGModule(dspy.Module): """RAG-пайплайн как DSPy модуль: retrieve → generate answer.""" def __init__(self, k=3): super().__init__() self.retrieve = dspy.Retrieve(k=k) self.generate = dspy.ChainOfThought("context, question -> answer") def forward(self, question): context = self.retrieve(question).passages return self.generate(context=context, question=question)
from dspy.teleprompt import BootstrapFewShot # Оценочная метрика — что значит "хороший ответ" def answer_quality(example, pred, trace=None) -> bool: """Метрика: ответ не пустой и содержит хотя бы 20 символов.""" return pred.answer is not None and len(pred.answer) > 20 # Тренировочный датасет — минимальный, DSPy дополнит сам trainset = [ dspy.Example(question="Что такое квантовая запутанность?", answer="...").with_inputs("question"), dspy.Example(question="Объясни нейросети ребёнку", answer="...").with_inputs("question"), ] # Компиляция: BootstrapFewShot подбирает лучшие примеры в промпт optimizer = BootstrapFewShot(metric=answer_quality, max_bootstrapped_demos=4) compiled_rag = optimizer.compile(RAGModule(), trainset=trainset) # Готово! compiled_rag теперь использует оптимизированные few-shot промпты final = compiled_rag(question="Как работает attention в трансформерах?") print(final.answer)