Dotskills opik-optimizer
Optimize LLM prompts, tools, and agents in Opik using standardized optimizer workflows (prompt optimization, tool optimization, and parameter tuning), dataset/metric wiring, and result interpretation.
install
source · Clone the upstream repo
git clone https://github.com/vincentkoc/dotskills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/vincentkoc/dotskills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/opik-optimizer" ~/.claude/skills/vincentkoc-dotskills-opik-optimizer && rm -rf "$T"
manifest:
skills/opik-optimizer/SKILL.mdsource content
Opik Optimizer
Purpose
Design, run, and interpret Opik Optimizer workflows for prompts, tools, and model parameters with consistent dataset/metric wiring and reproducible evaluation.
When to use
Use this skill when a user asks for:
- Choosing and configuring Opik Optimizer algorithms for prompt/agent optimization.
- Writing
-based optimization runs and custom metric functions.ChatPrompt - Optimizing with tools (function calling or MCP), selected prompt roles, or prompt segments.
- Tuning LLM call parameters with
.optimize_parameter - Comparing optimizer outputs and interpreting
.OptimizationResult
Workflow
- Select optimizer strategy (
,MetaPromptOptimizer
,FewShotBayesianOptimizer
, etc.) based on the target optimization goal.HRPO - Build prompt/dataset/metric wiring and validate placeholder-field alignment.
- Run prompt, tool, or parameter optimization with explicit controls (
,n_threads
,n_samples
, seed).max_trials - Inspect
and compare score deltas against initial baselines.OptimizationResult - Summarize recommendations, risks, and next experiments.
Inputs
- Target optimization objective (prompt/tool/parameter) and success metric.
- Dataset source and expected schema fields.
- Model/provider constraints and runtime limits.
- Optional scope constraints (
segments, tool fields, project names).optimize_prompts
Outputs
- Optimizer run configuration and rationale.
- Result interpretation (
,score
, history trends).initial_score - Recommended next changes and follow-up experiment plan.
Use the reference files in this skill for details before implementing code:
references/algorithms.mdreferences/prompt_agent_workflow.mdreferences/example_patterns.md
Opik Optimizer quickstart
- Install and import:
pip install opik-optimizer
from opik_optimizer import ChatPrompt, MetaPromptOptimizer, HRPO, FewShotBayesianOptimizer from opik_optimizer import datasets
- Build a prompt and metric:
from opik.evaluation.metrics import LevenshteinRatio prompt = ChatPrompt( system="You are a concise answerer.", user="{question}", ) def metric(dataset_item: dict, output: str) -> float: return LevenshteinRatio().score( reference=dataset_item["answer"], output=output, ).value
- Load dataset and run:
dataset = datasets.hotpot(count=30) result = MetaPromptOptimizer(model="openai/gpt-5-nano").optimize_prompt( prompt=prompt, dataset=dataset, metric=metric, n_samples=20, max_trials=10, ) result.display()
Core workflow you should follow
- Pick optimizer class:
- Few-shot examples + Bayesian selection:
FewShotBayesianOptimizer - LLM meta-reasoning:
MetaPromptOptimizer - Genetic + MOO / LLM crossover:
EvolutionaryOptimizer - Hierarchical reflective diagnostics:
(HierarchicalReflectiveOptimizer
)HRPO - Pareto-based genetic strategy:
GepaOptimizer - Parameter tuning only:
ParameterOptimizer
- Few-shot examples + Bayesian selection:
- Define a single
(or dict of prompts for multi-prompt cases).ChatPrompt - Provide a dataset from
.opik_optimizer.datasets - Provide metric callable with signature
(or(dataset_item, llm_output) -> float
/list ofScoreResult
).ScoreResult - Set optimizer controls (
,n_threads
,n_samples
, seed, etc.).max_trials - Run one of:
for prompt/system behavior changes.optimize_prompt(...)
for model-call hyperparameters.optimize_parameter(...)
- Inspect
(OptimizationResult
,score
,initial_score
,history
,optimization_id
).get_optimized_parameters
Key execution details to enforce
- Prefer explicit
for Opik tracking if you are using org-level observability.project_name - Keep placeholders in prompts aligned with dataset fields (for example
).{question} - Start with
oroptimize_prompts="system"
when scope should be constrained."user" - Keep
names inmodel
/MetaPrompt
calls provider-compatible for your account.reasoning - Validate multimodal input payloads by preserving non-empty content segments only.
- For small datasets, use
andn_samples
carefully; over-allocation auto-falls back to full set.n_samples_strategy
Tooling and segment-based control
- Tools can be optimized with MCP/function schema fields, not only by changing prompt wording.
- For fine-grained text updates, use
values and helper functions fromoptimize_prompts
:prompt_segments
to inspect stable segment IDs.extract_prompt_segments(ChatPrompt)
for deterministic edits.apply_segment_updates(ChatPrompt, updates)
- Tool optimization is distinct from prompt optimization.
Runnable examples live upstream in the Opik repo:
If you need local runnable scripts, vendor the upstream examples into a
scripts/ folder and keep references one level deep.
Common mistakes to avoid
- Passing empty dataset or mismatched placeholder names.
- Mixing deprecated constructor arg
withnum_threads
.n_threads - Assuming tool optimization is the same as agent function-calling optimization.
- Running
(it raises and should not be used).ParameterOptimizer.optimize_prompt
Next actions
- For in-depth behavior and per-class parameter tables:
references/algorithms.md - For exact
signatures, prompts, tool constraints, and result usage:optimize_promptreferences/prompt_agent_workflow.md - For pattern examples and source-backed workflows:
references/example_patterns.md