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

dspy-optimize-anything — скилл для Claude Code: суть и запуск

Настраивает эволюционную оптимизацию текстовых артефактов через библиотеку GEPA. Подходит для улучшения кода, промптов, архитектур агентов и SVG с опорой на диагностику.

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

Что делает dspy-optimize-anything

Скилл даёт агенту инструкции по вызову функции gepa.optimize_anything. Метод применяет рефлексивный эволюционный поиск к любым объектам, которые выражаются текстом: от алгоритмов упаковки до системных конфигураций. Без пакета gepa>=0.1.1,<0.2 в Python-окружении запустить такой поиск не получится.

Оптимизатор опирается на функцию оценки evaluator, возвращающую числовой балл и диагностику ASI (Actionable Side Information). В ASI передают текст ошибок, время работы, промежуточный вывод или картинки через gepa.Image. Доступны четыре режима: поиск решения для одной задачи, пакетная оптимизация задач, обучение с валидацией для обобщения и генерация без исходного образца.

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

  • найти эффективный алгоритм или код решения через эволюционный поиск
  • оптимизировать архитектуру агента и промпты под валидационный набор
  • настроить генерацию векторной графики SVG с оценкой через VLM
  • подобрать конфигурации без стартового шаблона по текстовому описанию

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

  • Настрой оптимизацию Python-солвера для задачи о рюкзаке через gepa.optimize_anything с метрикой времени.
  • Сделай evaluator для SVG-картинок с оценкой через vision-модель и запусти GEPAConfig на 100 вызовов.
  • Подготовь seedless-конфигурацию для генерации алгоритма сортировки с фидбеком по ошибкам выполнения.

Как установить dspy-optimize-anything

1Через Skills CLI (Vercel)

npx skills add OmidZamani/dspy-skills --skill dspy-optimize-anything -a claude-code

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

~/.claude/skills/dspy-optimize-anything/SKILL.md

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

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

Вопросы о dspy-optimize-anything

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

Запустите команду npx skills add OmidZamani/dspy-skills --skill dspy-optimize-anything -a claude-code. Навык будет добавлен в файл ~/.claude/skills/dspy-optimize-anything/SKILL.md.

Что делает скилл dspy-optimize-anything?

Он обучает ассистента строить скрипты оптимизации текстовых артефактов через библиотеку GEPA. Агент собирает функции оценки с диагностической обратной связью и конфигурирует движок поиска.

Какие зависимости нужны для запуска оптимизатора?

В среде Python требуется пакет gepa>=0.1.1,<0.2, рассчитанный на работу с DSPy версии 3.2.1.

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

SKILL.md · MIT
---
name: dspy-optimize-anything
version: "1.0.0"
dspy-compatibility: "3.2.1"
gepa-compatibility: "0.1.1"
tags: ["optimizer"]
requires-extras: ["gepa>=0.1.1,<0.2"]
description: Use for GEPA optimize_anything on text artifacts such as code, prompts, agent architectures, configs, and non-DSPy optimization targets.
allowed-tools:
  - Read
  - Write
  - Glob
  - Grep
---

# GEPA optimize_anything

## Goal

Optimize any artifact representable as text — code, prompts, agent architectures, vector graphics, configurations — using a single declarative API powered by GEPA's reflective evolutionary search.

## When to Use

- **Beyond prompt optimization** — optimizing code, configs, SVGs, scheduling policies, etc.
- **Single hard problems** — circle packing, kernel generation, algorithm discovery
- **Batch related problems** — CUDA kernels, code generation tasks with cross-transfer
- **Generalization** — agent skills, policies, or prompts that must transfer to unseen inputs
- When you can **express quality as a score** and provide **diagnostic feedback** (ASI)

## Inputs

| Input | Type | Description |
|-------|------|-------------|
| `seed_candidate` | `str \| dict[str, str] \| None` | Starting artifact text, or `None` for seedless mode |
| `evaluator` | `Callable` | Returns score (higher=better), optionally with ASI dict |
| `dataset` | `list \| None` | Training examples (for multi-task and generalization modes) |
| `valset` | `list \| None` | Validation set (for generalization mode) |
| `objective` | `str \| None` | Natural language description of what to optimize for |
| `background` | `str \| None` | Domain knowledge and constraints |
| `config` | `GEPAConfig \| None` | Engine, reflection, and tracking settings |

## Outputs

| Output | Type | Description |
|--------|------|-------------|
| `result.best_candidate` | `str \| dict` | Best optimized artifact |

## Workflow

### Phase 1: Install

```bash
pip install -U "gepa>=0.1.1,<0.2"
```

### Phase 2: Define Evaluator with ASI

The evaluator scores a candidate and returns Actionable Side Information (ASI) — diagnostic feedback that guides the LLM proposer during reflection.

**Simple evaluator (score only):**

```python
import gepa.optimize_anything as oa
from gepa.optimize_anything import EngineConfig, GEPAConfig

config = GEPAConfig(engine=EngineConfig(max_metric_calls=100))

def evaluate(candidate: str) -> float:
    score, diagnostic = run_my_system(candidate)
    oa.log(f"Error: {diagnostic}")  # captured as ASI
    return score
```

**Rich evaluator (score + structured ASI):**

```python
def evaluate(candidate: str) -> tuple[float, dict]:
    result = execute_code(candidate)
    return result.score, {
        "Error": result.stderr,
        "Output": result.stdout,
        "Runtime": f"{result.time_ms:.1f}ms",
    }
```

ASI can include open-ended text, structured data, multi-objectives (via `scores`), or images (via `gepa.Image`) for vision-capable LLMs.

### Phase 3: Choose Optimization Mode

**Mode 1 — Single-Task Search:** Solve one hard problem. No dataset needed.

```python
result = oa.optimize_anything(
    seed_candidate="<your initial artifact>",
    evaluator=evaluate,
    config=config,
)
```

**Mode 2 — Multi-Task Search:** Solve a batch of related problems with cross-transfer.

```python
result = oa.optimize_anything(
    seed_candidate="<your initial artifact>",
    evaluator=evaluate,
    dataset=tasks,
    config=config,
)
```

**Mode 3 — Generalization:** Build a skill/prompt/policy that transfers to unseen problems.

```python
result = oa.optimize_anything(
    seed_candidate="<your initial artifact>",
    evaluator=evaluate,
    dataset=train,
    valset=val,
    config=config,
)
```

**Seedless mode:** Describe what you need instead of providing a seed.

```python
result = oa.optimize_anything(
    evaluator=evaluate,
    objective="Generate a Python function `reverse()` that reverses a string.",
    config=config,
)
```

### Phase 4: Use Results

```python
print(result.best_candidate)
```

## Production Example

```python
import gepa.optimize_anything as oa
from gepa import Image
from gepa.optimize_anything import EngineConfig, GEPAConfig
import logging

logger = logging.getLogger(__name__)

# ---------- SVG optimization with VLM feedback ----------

GOAL = "a pelican riding a bicycle"
VLM = "vertex_ai/gemini-3-flash-preview"

VISUAL_ASPECTS = [
    {"id": "overall",     "criteria": f"Rate overall quality of this SVG ({GOAL}). SCORE: X/10"},
    {"id": "anatomy",     "criteria": "Rate pelican accuracy: beak, pouch, plumage. SCORE: X/10"},
    {"id": "bicycle",     "criteria": "Rate bicycle: wheels, frame, handlebars, pedals. SCORE: X/10"},
    {"id": "composition", "criteria": "Rate how convincingly the pelican rides the bicycle. SCORE: X/10"},
]

def evaluate(candidate, example):
    """Render SVG, score with a VLM, return (score, ASI)."""
    image = render_image(candidate["svg_code"])  # via cairosvg
    score, feedback = get_vlm_score_feedback(VLM, image, example["criteria"])

    return score, {
        "RenderedSVG": Image(base64_data=image, media_type="image/png"),
        "Feedback": feedback,
    }

result = oa.optimize_anything(
    seed_candidate={"svg_code": "<svg>...</svg>"},
    evaluator=evaluate,
    dataset=VISUAL_ASPECTS,
    background=f"Optimize SVG source code depicting '{GOAL}'. "
               "Improve anatomy, composition, and visual quality.",
    config=GEPAConfig(engine=EngineConfig(max_metric_calls=100)),
)

logger.info(f"Best SVG:\n{result.best_candidate['svg_code']}")


# ---------- Code optimization (single-task) ----------

def evaluate_solver(candidate: str) -> tuple[float, dict]:
    """Evaluate a Python solver for a mathematical optimization problem."""
    import subprocess, json

    proc = subprocess.run(
        ["python", "-c", candidate],
        capture_output=True, text=True, timeout=30,
    )

    if proc.returncode != 0:
        oa.log(f"Runtime error: {proc.stderr}")
        return 0.0, {"Error": proc.stderr}

    try:
        output = json.loads(proc.stdout)
        return output["score"], {
            "Output": output.get("solution"),
            "Runtime": f"{output.get('time_ms', 0):.1f}ms",
        }
    except (json.JSONDecodeError, KeyError) as e:
        oa.log(f"Parse error: {e}")
        return 0.0, {"Error": str(e), "Stdout": proc.stdout}

result = oa.optimize_anything(
    evaluator=evaluate_solver,
    objective="Write a Python solver for the bin packing problem that "
              "minimizes the number of bins. Output JSON with 'score' and 'solution'.",
    background="Use first-fit-decreasing as a starting heuristic. "
               "Higher score = fewer bins used.",
    config=GEPAConfig(engine=EngineConfig(max_metric_calls=100)),
)

print(result.best_candidate)


# ---------- Agent architecture generalization ----------

def evaluate_agent(candidate: str, example: dict) -> tuple[float, dict]:
    """Run an agent architecture on a task and score it."""
    exec_globals = {}
    exec(candidate, exec_globals)
    agent_fn = exec_globals.get("solve")

    if agent_fn is None:
        return 0.0, {"Error": "No `solve` function defined"}

    try:
        prediction = agent_fn(example["input"])
        correct = prediction == example["expected"]
        score = 1.0 if correct else 0.0
        feedback = "Correct" if correct else (
            f"Expected '{example['expected']}', got '{prediction}'"
        )
        return score, {"Prediction": prediction, "Feedback": feedback}
    except Exception as e:
        return 0.0, {"Error": str(e)}

result = oa.optimize_anything(
    seed_candidate="def solve(input):\n    return input",
    evaluator=evaluate_agent,
    dataset=train_tasks,
    valset=val_tasks,
    background="Discover a Python agent function `solve(input)` that "
               "generalizes across unseen reasoning tasks.",
    config=GEPAConfig(engine=EngineConfig(max_metric_calls=100)),
)

print(result.best_candidate)
```

## Integration with DSPy

`optimize_anything` complements DSPy's built-in optimizers. Use DSPy optimizers (GEPA, MIPROv2, BootstrapFewShot) for DSPy programs, and `optimize_anything` for arbitrary text artifacts outside DSPy:

```python
import dspy
import gepa.optimize_anything as oa
from gepa.optimize_anything import EngineConfig, GEPAConfig

# DSPy program optimization (use dspy.GEPA)
optimizer = dspy.GEPA(
    metric=gepa_metric,
    reflection_lm=dspy.LM("openai/gpt-4o"),
    auto="medium",
)
compiled = optimizer.compile(agent, trainset=trainset)

# Non-DSPy artifact optimization (use optimize_anything)
result = oa.optimize_anything(
    seed_candidate=my_config_yaml,
    evaluator=eval_config,
    background="Optimize Kubernetes scheduling policy for cost.",
    config=GEPAConfig(engine=EngineConfig(max_metric_calls=100)),
)
```

## Best Practices

1. **Rich ASI** — The more diagnostic feedback you provide, the better the proposer can reason about improvements
2. **Use `oa.log()`** — Route prints to the proposer as ASI instead of stdout
3. **Structured returns** — Return `(score, dict)` tuples for multi-faceted diagnostics
4. **Seedless for exploration** — Use `objective=` when the solution space is large and unfamiliar
5. **Background context** — Provide domain knowledge via `background=` to constrain the search
6. **Generalization mode** — Always provide `valset` when the artifact must transfer to unseen inputs
7. **Images as ASI** — Use `gepa.Image` to pass rendered outputs to vision-capable LLMs
8. **Bound every run** — Set `GEPAConfig(engine=EngineConfig(max_metric_calls=...))`

## Limitations

- Requires the `gepa` package (`pip install -U "gepa>=0.1.1,<0.2"`)
- Evaluator must be deterministic or low-variance for stable optimization
- Compute cost scales with number of candidates explored
- Single-task mode does not generalize; use mode 3 with `valset` for transfer
- Currently powered by GEPA backend; API is backend-agnostic for future strategies

## Official Documentation

- **GEPA optimize_anything guide**: https://gepa-ai.github.io/gepa/blog/introducing-optimize-anything/
- **GEPA quick start**: https://gepa-ai.github.io/gepa/guides/quickstart/
- **GEPA GitHub**: https://github.com/gepa-ai/gepa

© OmidZamani · MIT · OmidZamani/dspy-skills

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

Все скиллы по теме «ИИ и ML» →
skill-creator официальный anthropics Помогает создать новый скилл, доработать существующий и проверить результат через тестовые промпты и оценки. 414 180установок writing-for-agents Matt Pocock Помогает писать скиллы и документы с инструкциями для агентов. Пригодится при правках AGENTS.md, CLAUDE.md и связанных справочных файлов. 466 719установок media-use heygen-com Находит и генерирует ассеты для видео в HyperFrames — музыку, дикторский голос, аватары и эффекты. Сохраняет всё локально в assets. CX Codex +1 1 100 000установок mcp-builder официальный anthropics Скилл проводит через создание MCP-сервера на TypeScript или Python: от изучения протокола до тестов и оценки качества. 130 949установок subagent-driven-development Jesse Vincent Скилл выполняет план через отдельных субагентов для каждой задачи и проверяет результат после каждого шага. Подходит для независимых задач в одной сессии. CX Codex 237 746установок orchestration stablyai Координирует воркеров Orca через DAG задач, циклы супервизора и цепочки сообщений. Пригодится для распределения сложной работы между агентами. CX Codex +1 350 300установок

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

dspy-rag-pipeline Строит пайплайны retrieval-augmented generation с ColBERTv2, которые можно систематически улучшать. Пригодится, если вопросы требуют поиска по собственному корпусу документов и факт-чекирования ответов. CX Codex +1 ★ 124звёзд репо dspy-production-deployment Скилл учит агента развёртывать пайплайны DSPy 3.2.1 с безопасным кэшированием, асинхронным запуском, трекингом токенов и стримингом ответов в продакшене. CX Codex +1 ★ 124звёзд репо 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-haystack-integration Автоматизирует подбор промптов для пайплайнов Haystack с помощью DSPy. Помогает настроить метрики качества и перенести оптимизированный шаблон в генератор. CX Codex +1 ★ 124звёзд репо dspy-gepa-reflective Скилл помогает оптимизировать ReAct-агентов в DSPy по текстовой обратной связи и полным траекториям выполнения. Пригодится для многошаговых задач с инструментами. CX Codex +1 ★ 124звёзд репо

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

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