{"id":"db3de1c5-c20e-459a-ab1b-5784a71532c2","shortId":"aFHe4g","kind":"skill","title":"dspy-miprov2-optimizer","tagline":"This skill should be used when the user asks to \"optimize a DSPy program\", \"use MIPROv2\", \"tune instructions and demos\", \"get best DSPy performance\", \"run Bayesian optimization\", mentions \"state-of-the-art DSPy optimizer\", \"joint instruction tuning\", or needs maximum performance ","description":"# DSPy MIPROv2 Optimizer\n\n## Goal\n\nJointly optimize instructions and few-shot demonstrations using Bayesian Optimization for maximum performance.\n\n## When to Use\n\n- You have **200+ training examples**\n- You can afford longer optimization runs (40+ trials)\n- You need state-of-the-art performance\n- Both instructions and demos need tuning\n\n## Related Skills\n\n- For limited data (10-50 examples): [dspy-bootstrap-fewshot](../dspy-bootstrap-fewshot/SKILL.md)\n- For agentic systems: [dspy-gepa-reflective](../dspy-gepa-reflective/SKILL.md)\n- Measure improvements: [dspy-evaluation-suite](../dspy-evaluation-suite/SKILL.md)\n\n## Inputs\n\n| Input | Type | Description |\n|-------|------|-------------|\n| `program` | `dspy.Module` | Program to optimize |\n| `trainset` | `list[dspy.Example]` | 200+ training examples |\n| `metric` | `callable` | Evaluation function |\n| `auto` | `str` | \"light\", \"medium\", or \"heavy\" |\n| `num_trials` | `int` | Optimization trials (40+) |\n\n## Outputs\n\n| Output | Type | Description |\n|--------|------|-------------|\n| `compiled_program` | `dspy.Module` | Fully optimized program |\n\n## Workflow\n\n### Three-Stage Process\n\n1. **Bootstrap** - Generate candidate demonstrations\n2. **Propose** - Create grounded instruction candidates\n3. **Search** - Bayesian optimization over combinations\n\n### Phase 1: Setup\n\n```python\nimport dspy\nfrom dspy.teleprompt import MIPROv2\n\nlm = dspy.LM('openai/gpt-4o-mini')\ndspy.configure(lm=lm)\n```\n\n### Phase 2: Define Program\n\n```python\nclass RAGAgent(dspy.Module):\n    def __init__(self):\n        self.retrieve = dspy.Retrieve(k=3)\n        self.generate = dspy.ChainOfThought(\"context, question -> answer\")\n    \n    def forward(self, question):\n        context = self.retrieve(question).passages\n        return self.generate(context=context, question=question)\n```\n\n### Phase 3: Optimize\n\n```python\nfrom dspy.teleprompt import MIPROv2\n\noptimizer = MIPROv2(\n    metric=dspy.evaluate.answer_exact_match,\n    auto=\"medium\",  # Balanced optimization\n    num_threads=24\n)\n\ncompiled = optimizer.compile(RAGAgent(), trainset=trainset)\n```\n\n## Auto Presets\n\n| Preset | Trials | Use Case |\n|--------|--------|----------|\n| `\"light\"` | ~10 | Quick iteration |\n| `\"medium\"` | ~40 | Production optimization |\n| `\"heavy\"` | ~100+ | Maximum performance |\n\n## Production Example\n\n```python\nimport dspy\nfrom dspy.teleprompt import MIPROv2\nfrom dspy.evaluate import Evaluate\nimport json\nimport logging\n\nlogger = logging.getLogger(__name__)\n\nclass ReActAgent(dspy.Module):\n    def __init__(self, tools):\n        self.react = dspy.ReAct(\"question -> answer\", tools=tools)\n    \n    def forward(self, question):\n        return self.react(question=question)\n\ndef search_tool(query: str) -> list[str]:\n    \"\"\"Search knowledge base.\"\"\"\n    results = dspy.ColBERTv2(url='http://20.102.90.50:2017/wiki17_abstracts')(query, k=3)\n    return [r['long_text'] for r in results]\n\ndef optimize_agent(trainset, devset):\n    \"\"\"Full MIPROv2 optimization pipeline.\"\"\"\n    \n    agent = ReActAgent(tools=[search_tool])\n    \n    # Baseline evaluation\n    evaluator = Evaluate(\n        devset=devset,\n        metric=dspy.evaluate.answer_exact_match,\n        num_threads=8\n    )\n    baseline = evaluator(agent)\n    logger.info(f\"Baseline: {baseline:.2%}\")\n    \n    # MIPROv2 optimization\n    optimizer = MIPROv2(\n        metric=dspy.evaluate.answer_exact_match,\n        auto=\"medium\",\n        num_threads=24,\n        # Custom settings\n        num_candidates=15,\n        max_bootstrapped_demos=4,\n        max_labeled_demos=8\n    )\n    \n    compiled = optimizer.compile(agent, trainset=trainset)\n    optimized = evaluator(compiled)\n    logger.info(f\"Optimized: {optimized:.2%}\")\n    \n    # Save with metadata\n    compiled.save(\"agent_mipro.json\")\n    \n    metadata = {\n        \"baseline_score\": baseline,\n        \"optimized_score\": optimized,\n        \"improvement\": optimized - baseline,\n        \"num_train\": len(trainset),\n        \"num_dev\": len(devset)\n    }\n    \n    with open(\"optimization_metadata.json\", \"w\") as f:\n        json.dump(metadata, f, indent=2)\n    \n    return compiled, metadata\n```\n\n## Instruction-Only Mode\n\n```python\nfrom dspy.teleprompt import MIPROv2\n\n# Disable demos for pure instruction optimization\noptimizer = MIPROv2(\n    metric=metric,\n    auto=\"medium\",\n    max_bootstrapped_demos=0,\n    max_labeled_demos=0\n)\n```\n\n## Best Practices\n\n1. **Data quantity matters** - 200+ examples for best results\n2. **Use auto presets** - Start with \"medium\", adjust based on results\n3. **Parallel threads** - Use `num_threads=24` or higher if available\n4. **Monitor costs** - Track API usage during optimization\n5. **Save intermediate** - Bayesian search saves progress\n\n## Limitations\n\n- High computational cost (many LLM calls)\n- Requires substantial training data\n- Optimization time: hours for \"heavy\" preset\n- Memory intensive for large candidate sets\n\n## Official Documentation\n\n- **DSPy Documentation**: https://dspy.ai/\n- **DSPy GitHub**: https://github.com/stanfordnlp/dspy\n- **MIPROv2 API**: https://dspy.ai/api/optimizers/MIPROv2/\n- **Optimizers Guide**: https://dspy.ai/learn/optimization/optimizers/","tags":["dspy","miprov2","optimizer","skills","omidzamani","agent-skills","claude-code","claude-skills","llm","prompt-optimization","rag"],"capabilities":["skill","source-omidzamani","skill-dspy-miprov2-optimizer","topic-agent-skills","topic-claude-code","topic-claude-skills","topic-dspy","topic-llm","topic-prompt-optimization","topic-rag"],"categories":["dspy-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/OmidZamani/dspy-skills/dspy-miprov2-optimizer","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add OmidZamani/dspy-skills","source_repo":"https://github.com/OmidZamani/dspy-skills","install_from":"skills.sh"}},"qualityScore":"0.487","qualityRationale":"deterministic score 0.49 from registry signals: · indexed on github topic:agent-skills · 74 github stars · SKILL.md body (5,134 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T06:55:44.491Z","embedding":null,"createdAt":"2026-04-18T22:14:14.184Z","updatedAt":"2026-05-02T06:55:44.491Z","lastSeenAt":"2026-05-02T06:55:44.491Z","tsv":"'-50':101 '/api/optimizers/miprov2/':572 '/dspy-bootstrap-fewshot/skill.md':107 '/dspy-evaluation-suite/skill.md':122 '/dspy-gepa-reflective/skill.md':115 '/learn/optimization/optimizers/':577 '/stanfordnlp/dspy':567 '0':482,486 '1':169,187,489 '10':100,269 '100':277 '15':399 '2':174,203,381,420,454,498 '20.102.90.50':334 '200':70,135,493 '2017/wiki17_abstracts':335 '24':256,394,515 '3':180,216,237,338,509 '4':403,520 '40':79,153,273 '5':528 '8':373,407 'adjust':505 'afford':75 'agent':109,349,356,376,410 'agent_mipro.json':425 'answer':221,310 'api':524,569 'art':37,87 'ask':13 'auto':142,250,262,390,477,500 'avail':519 'balanc':252 'base':330,506 'baselin':361,374,379,380,427,429,435 'bayesian':30,60,182,531 'best':26,487,496 'bootstrap':105,170,401,480 'call':541 'callabl':139 'candid':172,179,398,556 'case':267 'class':207,300 'combin':185 'compil':158,257,408,415,456 'compiled.save':424 'comput':537 'context':219,226,232,233 'cost':522,538 'creat':176 'custom':395 'data':99,490,545 'def':210,222,303,313,321,347 'defin':204 'demo':24,92,402,406,468,481,485 'demonstr':58,173 'descript':126,157 'dev':441 'devset':351,365,366,443 'disabl':467 'document':559,561 'dspi':2,17,27,38,47,104,112,119,191,284,560,563 'dspy-bootstrap-fewshot':103 'dspy-evaluation-suit':118 'dspy-gepa-reflect':111 'dspy-miprov2-optimizer':1 'dspy.ai':562,571,576 'dspy.ai/api/optimizers/miprov2/':570 'dspy.ai/learn/optimization/optimizers/':575 'dspy.chainofthought':218 'dspy.colbertv2':332 'dspy.configure':199 'dspy.evaluate':290 'dspy.evaluate.answer':247,368,387 'dspy.example':134 'dspy.lm':197 'dspy.module':128,160,209,302 'dspy.react':308 'dspy.retrieve':214 'dspy.teleprompt':193,241,286,464 'evalu':120,140,292,362,363,364,375,414 'exact':248,369,388 'exampl':72,102,137,281,494 'f':378,417,449,452 'few-shot':55 'fewshot':106 'forward':223,314 'full':352 'fulli':161 'function':141 'generat':171 'gepa':113 'get':25 'github':564 'github.com':566 'github.com/stanfordnlp/dspy':565 'goal':50 'ground':177 'guid':574 'heavi':147,276,550 'high':536 'higher':517 'hour':548 'import':190,194,242,283,287,291,293,295,465 'improv':117,433 'indent':453 'init':211,304 'input':123,124 'instruct':22,41,53,90,178,459,471 'instruction-on':458 'int':150 'intens':553 'intermedi':530 'iter':271 'joint':40,51 'json':294 'json.dump':450 'k':215,337 'knowledg':329 'label':405,484 'larg':555 'len':438,442 'light':144,268 'limit':98,535 'list':133,326 'llm':540 'lm':196,200,201 'log':296 'logger':297 'logger.info':377,416 'logging.getlogger':298 'long':341 'longer':76 'mani':539 'match':249,370,389 'matter':492 'max':400,404,479,483 'maximum':45,63,278 'measur':116 'medium':145,251,272,391,478,504 'memori':552 'mention':32 'metadata':423,426,451,457 'metric':138,246,367,386,475,476 'miprov2':3,20,48,195,243,245,288,353,382,385,466,474,568 'mode':461 'monitor':521 'name':299 'need':44,82,93 'num':148,254,371,392,397,436,440,513 'offici':558 'open':445 'openai/gpt-4o-mini':198 'optim':4,15,31,39,49,52,61,77,131,151,162,183,238,244,253,275,348,354,383,384,413,418,419,430,432,434,472,473,527,546,573 'optimization_metadata.json':446 'optimizer.compile':258,409 'output':154,155 'parallel':510 'passag':229 'perform':28,46,64,88,279 'phase':186,202,236 'pipelin':355 'practic':488 'preset':263,264,501,551 'process':168 'product':274,280 'program':18,127,129,159,163,205 'progress':534 'propos':175 'pure':470 'python':189,206,239,282,462 'quantiti':491 'queri':324,336 'question':220,225,228,234,235,309,316,319,320 'quick':270 'r':340,344 'ragag':208,259 'reactag':301,357 'reflect':114 'relat':95 'requir':542 'result':331,346,497,508 'return':230,317,339,455 'run':29,78 'save':421,529,533 'score':428,431 'search':181,322,328,359,532 'self':212,224,305,315 'self.generate':217,231 'self.react':307,318 'self.retrieve':213,227 'set':396,557 'setup':188 'shot':57 'skill':6,96 'skill-dspy-miprov2-optimizer' 'source-omidzamani' 'stage':167 'start':502 'state':34,84 'state-of-the-art':33,83 'str':143,325,327 'substanti':543 'suit':121 'system':110 'text':342 'thread':255,372,393,511,514 'three':166 'three-stag':165 'time':547 'tool':306,311,312,323,358,360 'topic-agent-skills' 'topic-claude-code' 'topic-claude-skills' 'topic-dspy' 'topic-llm' 'topic-prompt-optimization' 'topic-rag' 'track':523 'train':71,136,437,544 'trainset':132,260,261,350,411,412,439 'trial':80,149,152,265 'tune':21,42,94 'type':125,156 'url':333 'usag':525 'use':9,19,59,67,266,499,512 'user':12 'w':447 'workflow':164","prices":[{"id":"ac50b3e5-9065-4158-8bf0-946c60d94f58","listingId":"db3de1c5-c20e-459a-ab1b-5784a71532c2","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"OmidZamani","category":"dspy-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:14:14.184Z"}],"sources":[{"listingId":"db3de1c5-c20e-459a-ab1b-5784a71532c2","source":"github","sourceId":"OmidZamani/dspy-skills/dspy-miprov2-optimizer","sourceUrl":"https://github.com/OmidZamani/dspy-skills/tree/master/skills/dspy-miprov2-optimizer","isPrimary":false,"firstSeenAt":"2026-04-18T22:14:14.184Z","lastSeenAt":"2026-05-02T06:55:44.491Z"}],"details":{"listingId":"db3de1c5-c20e-459a-ab1b-5784a71532c2","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"OmidZamani","slug":"dspy-miprov2-optimizer","github":{"repo":"OmidZamani/dspy-skills","stars":74,"topics":["agent-skills","claude-code","claude-skills","dspy","llm","prompt-optimization","rag"],"license":"mit","html_url":"https://github.com/OmidZamani/dspy-skills","pushed_at":"2026-02-21T12:49:43Z","description":"Collection of Claude Skills for DSPy framework - program language models, optimize prompts, and build RAG pipelines systematically","skill_md_sha":"4e7bae9e8eb1bfbb98fe4e3a55ae1dab93b6958b","skill_md_path":"skills/dspy-miprov2-optimizer/SKILL.md","default_branch":"master","skill_tree_url":"https://github.com/OmidZamani/dspy-skills/tree/master/skills/dspy-miprov2-optimizer"},"layout":"multi","source":"github","category":"dspy-skills","frontmatter":{"name":"dspy-miprov2-optimizer","description":"This skill should be used when the user asks to \"optimize a DSPy program\", \"use MIPROv2\", \"tune instructions and demos\", \"get best DSPy performance\", \"run Bayesian optimization\", mentions \"state-of-the-art DSPy optimizer\", \"joint instruction tuning\", or needs maximum performance from a DSPy program with substantial training data (200+ examples)."},"skills_sh_url":"https://skills.sh/OmidZamani/dspy-skills/dspy-miprov2-optimizer"},"updatedAt":"2026-05-02T06:55:44.491Z"}}