К основному содержанию
скилл CX Codex

dspy-gepa-reflective — скилл для Claude Code: оптимизация ReAct

Скилл помогает оптимизировать ReAct-агентов в DSPy по текстовой обратной связи и полным траекториям выполнения. Пригодится для многошаговых задач с инструментами.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add OmidZamani/dspy-skills --skill dspy-gepa-reflective -a claude-code
Открыть на GitHub

Что делает dspy-gepa-reflective

Скилл описывает, как применять GEPA к агентам и сложным программам на DSPy. Оптимизатор использует текстовую обратную связь о сбоях и анализирует траектории выполнения, чтобы менять инструкции; результатом становится скомпилированный dspy.Module.

В примерах показаны метрика с оценкой и пояснением, настройка ReAct-агента и вызов optimizer.compile с обучающей выборкой. Метрика GEPA должна принимать пять аргументов и возвращать dspy.Prediction с score и feedback. Нужна содержательная обратная связь, а для рефлексии используется сильная языковая модель.

Скилл рассчитан на DSPy 3.2.1. Оптимизация требует пользовательской метрики и может обходиться дорого из-за сильной модели для рефлексии; GEPA также описан как менее проверенный вариант по сравнению с MIPROv2. Это важно учитывать, если в проекте критична зрелость оптимизатора.

Какие задачи решает

  • оптимизировать инструкции агента с инструментами
  • передать GEPA текстовые объяснения ошибок
  • анализировать траектории многошагового выполнения
  • сравнить агента до и после компиляции

Примеры запросов агенту

  • Помоги оптимизировать моего ReAct-агента в DSPy через GEPA.
  • Составь метрику GEPA, которая возвращает оценку и объяснение ошибки.
  • Покажи, как скомпилировать агента с обучающей выборкой и сильной моделью для рефлексии.

Как установить dspy-gepa-reflective

1Через Skills CLI (Vercel)

npx skills add OmidZamani/dspy-skills --skill dspy-gepa-reflective -a claude-code

2Вручную: положить файлы

~/.claude/skills/dspy-gepa-reflective/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/dspy-gepa-reflective/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о dspy-gepa-reflective

Как установить dspy-gepa-reflective в Claude Code?

Выполните npx skills add OmidZamani/dspy-skills --skill dspy-gepa-reflective -a claude-code. Файл скилла появится по пути ~/.claude/skills/dspy-gepa-reflective/SKILL.md.

Что делает dspy-gepa-reflective?

Объясняет, как оптимизировать агента или сложную программу DSPy с помощью GEPA. Оптимизация использует текстовую обратную связь и траектории выполнения.

Какая метрика нужна для GEPA в этом скилле?

Метрика принимает пять аргументов и возвращает dspy.Prediction с оценкой и текстовой обратной связью. Одной оценки недостаточно.

Исходный текст

SKILL.md · MIT
---
name: dspy-gepa-reflective
version: "1.0.0"
dspy-compatibility: "3.2.1"
tags: ["optimizer", "agent"]
requires-extras: []
description: Use for GEPA reflective optimization, ReAct agent optimization, feedback metrics, LLM reflection, and execution trajectories.
allowed-tools:
  - Read
  - Write
  - Glob
  - Grep
---

# DSPy GEPA Optimizer

## Goal

Optimize complex agentic systems using LLM reflection on full execution traces with Pareto-based evolutionary search.

## When to Use

- **Agentic systems** with tool use
- When you have **rich textual feedback** on failures
- Complex multi-step workflows
- Instruction-only optimization needed

## Related Skills

- For non-agentic programs: [dspy-miprov2-optimizer](../dspy-miprov2-optimizer/SKILL.md), [dspy-bootstrap-fewshot](../dspy-bootstrap-fewshot/SKILL.md)
- Measure improvements: [dspy-evaluation-suite](../dspy-evaluation-suite/SKILL.md)

## Inputs

| Input | Type | Description |
|-------|------|-------------|
| `program` | `dspy.Module` | Agent or complex program |
| `trainset` | `list[dspy.Example]` | Training examples |
| `metric` | `callable` | Accepts five arguments and returns `dspy.Prediction(score=..., feedback=...)` |
| `reflection_lm` | `dspy.LM` | Strong LM for reflection (GPT-4) |
| `auto` | `str` | "light", "medium", "heavy" |

## Outputs

| Output | Type | Description |
|--------|------|-------------|
| `compiled_program` | `dspy.Module` | Reflectively optimized program |

## Workflow

### Phase 1: Define Feedback Metric

GEPA requires metrics that return *textual feedback*:

```python
def gepa_metric(example, pred, trace=None, pred_name=None, pred_trace=None):
    """Return score and actionable feedback for GEPA reflection."""
    is_correct = example.answer.lower() in pred.answer.lower()
    
    if is_correct:
        feedback = "Correct. The answer accurately addresses the question."
    else:
        feedback = f"Incorrect. Expected '{example.answer}' but got '{pred.answer}'. The model may have misunderstood the question or retrieved irrelevant information."
    
    return dspy.Prediction(score=float(is_correct), feedback=feedback)
```

### Phase 2: Setup Agent

```python
import dspy

def search(query: str) -> list[str]:
    """Search knowledge base for relevant information."""
    rm = dspy.ColBERTv2(url='http://20.102.90.50:2017/wiki17_abstracts')
    results = rm(query, k=3)
    return results if isinstance(results, list) else [results]

def calculate(expression: str) -> float:
    """Safely evaluate mathematical expressions."""
    with dspy.PythonInterpreter() as interp:
        return interp(expression)

agent = dspy.ReAct("question -> answer", tools=[search, calculate])
```

### Phase 3: Optimize with GEPA

```python
dspy.configure(lm=dspy.LM("openai/gpt-4o-mini"))

optimizer = dspy.GEPA(
    metric=gepa_metric,
    reflection_lm=dspy.LM("openai/gpt-4o"),  # Strong model for reflection
    auto="medium"
)

compiled_agent = optimizer.compile(agent, trainset=trainset)
```

## Production Example

```python
import dspy
from dspy.evaluate import Evaluate
import logging

logger = logging.getLogger(__name__)

class ResearchAgent(dspy.Module):
    def __init__(self):
        self.react = dspy.ReAct(
            "question -> answer",
            tools=[self.search, self.summarize]
        )
    
    def search(self, query: str) -> list[str]:
        """Search for relevant documents."""
        rm = dspy.ColBERTv2(url='http://20.102.90.50:2017/wiki17_abstracts')
        results = rm(query, k=5)
        return results if isinstance(results, list) else [results]
    
    def summarize(self, text: str) -> str:
        """Summarize long text into key points."""
        summarizer = dspy.Predict("text -> summary")
        return summarizer(text=text).summary
    
    def forward(self, question):
        return self.react(question=question)

def detailed_feedback_metric(example, pred, trace=None, pred_name=None, pred_trace=None):
    """Rich feedback for GEPA reflection."""
    expected = example.answer.lower().strip()
    actual = pred.answer.lower().strip() if pred.answer else ""
    
    # Exact match
    if expected == actual:
        return dspy.Prediction(score=1.0, feedback="Perfect match. Answer is correct and concise.")
    
    # Partial match
    if expected in actual or actual in expected:
        return dspy.Prediction(score=0.7, feedback=f"Partial match. Expected '{example.answer}', got '{pred.answer}'. Answer contains correct info but may be verbose or incomplete.")
    
    # Check for key terms
    expected_terms = set(expected.split())
    actual_terms = set(actual.split())
    overlap = len(expected_terms & actual_terms) / max(len(expected_terms), 1)
    
    if overlap > 0.5:
        return dspy.Prediction(score=0.5, feedback=f"Some overlap. Expected '{example.answer}', got '{pred.answer}'. Key terms present but answer structure differs.")
    
    return dspy.Prediction(score=0.0, feedback=f"Incorrect. Expected '{example.answer}', got '{pred.answer}'. The agent may need better search queries or reasoning.")

def optimize_research_agent(trainset, devset):
    """Full GEPA optimization pipeline."""
    
    dspy.configure(lm=dspy.LM("openai/gpt-4o-mini"))
    
    agent = ResearchAgent()
    
    # Convert metric for evaluation (just score)
    def eval_metric(example, pred, trace=None):
        return detailed_feedback_metric(example, pred, trace).score
    
    evaluator = Evaluate(devset=devset, num_threads=8, metric=eval_metric)
    baseline = evaluator(agent)
    logger.info(f"Baseline: {baseline:.2%}")
    
    # GEPA optimization
    optimizer = dspy.GEPA(
        metric=detailed_feedback_metric,
        reflection_lm=dspy.LM("openai/gpt-4o"),
        auto="medium"
    )
    
    compiled = optimizer.compile(agent, trainset=trainset)
    optimized = evaluator(compiled)
    logger.info(f"Optimized: {optimized:.2%}")
    
    compiled.save("research_agent_gepa.json")
    return compiled
```

## Metric Contract

GEPA metrics must accept `(gold, pred, trace, pred_name, pred_trace)`. Return `dspy.Prediction(score=..., feedback=...)` when textual feedback is available. Do not pass `enable_tool_optimization`; it is not a DSPy 3.2.1 `GEPA` constructor argument.

## Best Practices

1. **Rich feedback** - More detailed feedback = better reflection
2. **Strong reflection LM** - Use GPT-4 or Claude for reflection
3. **Agentic focus** - Best for ReAct and multi-tool systems
4. **Trace analysis** - GEPA analyzes full execution trajectories

## Limitations

- Requires custom feedback metrics (not just scores)
- Expensive: uses strong LM for reflection
- Newer optimizer, less battle-tested than MIPROv2
- Best for instruction optimization, less for demos

## Official Documentation

- **DSPy Documentation**: [https://dspy.ai/](https://dspy.ai/)
- **DSPy GitHub**: [https://github.com/stanfordnlp/dspy](https://github.com/stanfordnlp/dspy)
- **GEPA Optimizer**: [https://dspy.ai/api/optimizers/GEPA/](https://dspy.ai/api/optimizers/GEPA/)
- **Agents Guide**: [https://dspy.ai/tutorials/agents/](https://dspy.ai/tutorials/agents/)

© OmidZamani · MIT · OmidZamani/dspy-skills

Похожие скиллы

Каталог скиллов SKILL.md →
find-skills vercel-labs Ищет и устанавливает готовые скиллы для ИИ-агентов через каталог skills.sh. Пригодится, когда для рабочей задачи нужен специализированный воркфлоу. CX Codex +1 4 000 000установок frontend-design официальный anthropics Скилл задаёт осмысленное визуальное направление для новых интерфейсов и редизайна. Подойдёт, когда стандартный шаблонный UI не устраивает. 1 025 790установок grill-me Matt Pocock Скилл проводит жёсткое интервью по плану или дизайну, чтобы найти пробелы и уточнить решения. Подойдёт перед началом разработки. 1 424 476установок grill-with-docs Matt Pocock Скилл проводит жёсткое интервью по плану или дизайну и по ходу создаёт ADR и глоссарий. Подойдёт перед началом сложной разработки. 1 219 756установок improve-codebase-architecture Matt Pocock Скилл ищет архитектурные узкие места в кодовой базе и показывает варианты углубления модулей в HTML-отчёте. Подойдёт для ревью перед рефакторингом. 1 163 035установок design-taste-frontend Leonxlnx Скилл задаёт арт-дирекцию для публичных страниц и рабочих экранов, а затем проверяет результат в браузере по скриншотам. Нужен, когда интерфейс выглядит шаблонным или недоработанным. CX Codex +1 678 700установок

Из того же набора17

dspy-output-refinement-constraints Скилл помогает настраивать проверку и итерационную доработку ответов в DSPy через dspy.Refine и dspy.BestOfN. Пригодится, когда результат должен соответствовать формату или содержать заданные данные. CX Codex +1 ★ 124звёзд репо dspy-optimizer-selection Помогает выбрать оптимизатор DSPy под данные и бюджет: от LabeledFewShot до GEPA и BetterTogether. Пригодится, когда неясно, с чего начать компиляцию программы. CX Codex +1 ★ 124звёзд репо dspy-miprov2-optimizer Скилл помогает оптимизировать программы DSPy с помощью MIPROv2: подбирать инструкции и few-shot-примеры через байесовскую оптимизацию. Нужен для настройки по обучающим данным. CX Codex +1 ★ 124звёзд репо dspy-mcp-tool-integration Скилл показывает, как подключить MCP-сервер к DSPy: конвертировать его инструменты в dspy.Tool и вызывать их из async-агента. CX Codex +1 ★ 124звёзд репо dspy-finetune-bootstrap Дистиллирует работающую DSPy-программу в веса меньшей модели через BootstrapFinetune, чтобы снизить стоимость инференса и ускорить ответы. CX Codex +1 ★ 124звёзд репо dspy-embedding-retrieval Скилл настраивает семантический поиск по текстовому корпусу через DSPy, эмбеддинги и FAISS. Нужен для retrieval и RAG. CX Codex +1 ★ 124звёзд репо dspy-debugging-observability Скилл для отладки и мониторинга программ на DSPy: история вызовов, трассировка через MLflow, свои колбэки для учёта цены и ошибок. CX Codex +1 ★ 124звёзд репо dspy-custom-module-design Помогает проектировать кастомные модули DSPy с наследованием от dspy.Module, сохранением состояния, сериализацией и валидацией ответов. CX Codex +1 ★ 124звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой