[ PROMPT_NODE_22906 ]
optimizers
[ SKILL_DOCUMENTATION ]
# DSPy 优化器 (Teleprompters)
DSPy 优化算法完整指南,用于改进提示词和模型权重。
## 什么是优化器?
DSPy 优化器(称为“Teleprompters”)通过以下方式自动改进你的模块:
- 从训练数据中**合成少样本示例**
- 通过搜索**提出更好的指令**
- **微调模型权重**(可选)
**核心理念**:与其手动调整提示词,不如定义一个指标并让 DSPy 进行优化。
## 优化器选择指南
| 优化器 | 适用场景 | 速度 | 质量 | 所需数据 |
|-----------|----------|-------|---------|-------------|
| BootstrapFewShot | 通用 | 快 | 好 | 10-50 个示例 |
| MIPRO | 指令微调 | 中 | 极好 | 50-200 个示例 |
| BootstrapFinetune | 微调 | 慢 | 极好 | 100+ 个示例 |
| COPRO | 提示词优化 | 中 | 好 | 20-100 个示例 |
| KNNFewShot | 快速基准 | 极快 | 一般 | 10+ 个示例 |
## 核心优化器
### BootstrapFewShot
**最受欢迎的优化器** - 从训练数据中生成少样本演示。
**工作原理:**
1. 获取你的训练示例
2. 使用你的模块生成预测
3. 选择高质量的预测(基于指标)
4. 在后续提示词中将这些作为少样本示例使用
**参数:**
- `metric`: 对预测进行评分的函数(必需)
- `max_bootstrapped_demos`: 要生成的最大演示数(默认:4)
- `max_labeled_demos`: 要使用的最大标注示例数(默认:16)
- `max_rounds`: 优化迭代次数(默认:1)
- `metric_threshold`: 可接受的最低分数(可选)
python
import dspy
from dspy.teleprompt import BootstrapFewShot
# 定义指标
def validate_answer(example, pred, trace=None):
"""如果预测与标准答案匹配则返回 True。"""
return example.answer.lower() == pred.answer.lower()
# 训练数据
trainset = [
dspy.Example(question="What is 2+2?", answer="4").with_inputs("question"),
dspy.Example(question="What is 3+5?", answer="8").with_inputs("question"),
dspy.Example(question="What is 10-3?", answer="7").with_inputs("question"),
]
# 创建模块
qa = dspy.ChainOfThought("question -> answer")
# 优化
optimizer = BootstrapFewShot(
metric=validate_answer,
max_bootstrapped_demos=3,
max_rounds=2
)
optimized_qa = optimizer.compile(qa, trainset=trainset)
# 现在 optimized_qa 已经学习了少样本示例!
result = optimized_qa(question="What is 5+7?")
**最佳实践:**
- 从