dspy-better-together — скилл для Claude Code
Скилл помогает собрать цепочку из промпт- и весовых оптимизаторов DSPy, сравнить промежуточные программы и вернуть лучшую.
npx skills add OmidZamani/dspy-skills --skill dspy-better-together -a claude-codeЧто делает dspy-better-together
Скилл объясняет, как работать с dspy.BetterTogether: он запускает оптимизаторы по очереди, оценивает промежуточные программы и возвращает лучшего кандидата. Стратегия задаётся строкой вида "p -> w -> p", где p — промпт-оптимизатор, а w — весовой. Имена для цепочки берутся из именованных аргументов конструктора: если передать mipro=... и gepa=..., строка "mipro -> gepa" станет допустимой.
Внутри — примеры кода и таблица выбора стратегии. Для простого прохода хватит "p -> w", для повторной оптимизации промптов после файнтюнинга — "p -> w -> p", а "w -> p" берут, когда данные для файнтюнинга уже хороши. Аргументы конкретного оптимизатора передаются через optimizer_compile_args; student туда класть не нужно, потому что текущей программой управляет сам BetterTogether.
Нужен DSPy 3.2.1 или новее из стабильной ветки 3.2.x. LM придётся назначить каждому предиктору вручную через student.set_lm(lm) — без этого шага цепочка не соберётся как задумано. Валидационный набор держите отдельно или разрешите BetterTogether отложить часть trainset. Если в цепочку входит BootstrapFinetune, сначала проверьте, что провайдер модели вообще поддерживает файнтюнинг. После компиляции у программы есть candidate_programs со счётом и стратегией каждого кандидата и флаг flag_compilation_error_occurred, который показывает, упал ли какой-то шаг.
Какие задачи решает
- собрать цепочку из промпт- и весовых оптимизаторов DSPy
- сравнить промежуточные программы по метрике и выбрать лучшую
- переоптимизировать промпты после файнтюнинга весов
- передать отдельные аргументы компиляции одному оптимизатору в цепочке
- узнать, упал ли шаг компиляции до её завершения
Примеры запросов агенту
- Собери цепочку
p -> w -> pдля моей программы на DSPy и покажи лучшего кандидата - Добавь в компиляцию
optimizer_compile_argsсmax_metric_calls150 для шагаp - Проверь, поддерживает ли провайдер файнтюнинг, прежде чем включать
BootstrapFinetune
Как установить dspy-better-together
1Через Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-better-together -a claude-code2Вручную: положить файлы
~/.claude/skills/dspy-better-together/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/dspy-better-together/
1Через Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-better-together -a codex2Вручную: положить файлы
.agents/skills/dspy-better-together/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-better-together -a cursor2Вручную: положить файлы
.cursor/skills/dspy-better-together/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install OmidZamani/dspy-skills dspy-better-together2Вручную: положить файлы
.github/skills/dspy-better-together/SKILL.md1Через Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-better-together -a gemini-cli2Командой платформы
gemini skills install https://github.com/OmidZamani/dspy-skills --path skills/dspy-better-togetherВручную: положить файлы
.devin/skills/dspy-better-together/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add OmidZamani/dspy-skills --skill dspy-better-together -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о dspy-better-together
Как установить dspy-better-together в Claude Code?
Выполните npx skills add OmidZamani/dspy-skills --skill dspy-better-together -a claude-code, после чего скилл окажется в ~/.claude/skills/dspy-better-together/SKILL.md.
Что делает dspy-better-together?
Показывает, как через dspy.BetterTogether выстроить последовательность оптимизаторов, оценить промежуточные программы и вернуть лучшую из них.
Какие стратегии цепочек поддерживаются?
"p -> w", "p -> w -> p" и "w -> p", а также свои цепочки — например, "mipro -> gepa", если так названы аргументы конструктора.
Исходный текст
SKILL.md · MIT
---
name: dspy-better-together
version: "1.0.0"
dspy-compatibility: "3.2.1"
tags: ["optimizer"]
requires-extras: []
description: Use for BetterTogether, prompt plus weight optimization, fine-tuning sequences, and strategy chains like p -> w -> p.
allowed-tools:
- Read
- Write
- Glob
- Grep
---
# DSPy BetterTogether
## Goal
Sequence prompt and weight optimizers, evaluate intermediate programs, and return the best candidate.
## Prerequisites
- Use DSPy `3.2.1` or later in the stable `3.2.x` series.
- Assign an LM directly to every predictor with `student.set_lm(lm)`.
- Keep a validation set, or allow `BetterTogether` to hold out part of the trainset.
- Confirm the LM provider supports fine-tuning before including `BootstrapFinetune`.
## Basic Pattern
```python
import dspy
lm = dspy.LM("openai/gpt-4o-mini")
dspy.configure(lm=lm)
student = dspy.ChainOfThought("question -> answer")
student.set_lm(lm)
def metric(example, pred, trace=None):
return float(example.answer.lower() == pred.answer.lower())
optimizer = dspy.BetterTogether(
metric=metric,
p=dspy.GEPA(
metric=lambda gold, pred, trace=None, pred_name=None, pred_trace=None:
dspy.Prediction(score=metric(gold, pred), feedback="Check answer correctness."),
reflection_lm=dspy.LM("openai/gpt-4o"),
auto="light",
),
w=dspy.BootstrapFinetune(metric=metric),
)
compiled = optimizer.compile(
student,
trainset=trainset,
valset=valset,
strategy="p -> w -> p",
)
```
## Strategy Choices
| Strategy | Use it when |
|----------|-------------|
| `"p -> w"` | Start with a simple prompt-then-weight pass |
| `"p -> w -> p"` | Re-optimize prompts after fine-tuning |
| `"w -> p"` | Fine-tuning data is already strong |
| Custom chains | Comparing prompt optimizers or conducting controlled experiments |
Optimizer names come from constructor keyword arguments. For example, `mipro=...` and `gepa=...` make `"mipro -> gepa"` valid.
## Per-Optimizer Compile Arguments
Pass optimizer-specific arguments through `optimizer_compile_args`:
```python
compiled = optimizer.compile(
student,
trainset=trainset,
valset=valset,
strategy="p -> w",
optimizer_compile_args={
"p": {"max_metric_calls": 150},
},
)
```
Do not pass `student` inside `optimizer_compile_args`; `BetterTogether` manages the current program.
## Inspect Results
The returned program exposes:
- `candidate_programs`: evaluated candidates with score and strategy
- `flag_compilation_error_occurred`: whether a step failed before completion
## Related Skills
- Pick optimizers: [dspy-optimizer-selection](../dspy-optimizer-selection/SKILL.md)
- Fine-tune weights: [dspy-finetune-bootstrap](../dspy-finetune-bootstrap/SKILL.md)
- Reflect with GEPA: [dspy-gepa-reflective](../dspy-gepa-reflective/SKILL.md)
## Official Documentation
- **BetterTogether API**: https://dspy.ai/api/optimizers/BetterTogether/
- **Optimizer guide**: https://dspy.ai/learn/optimization/optimizers/
© OmidZamani · MIT · OmidZamani/dspy-skills