用途:dspy.COPRO(Collaborative Prompting)用于自动生成、评估并选择 DSPy 程序各签名的最佳指令,替代手工编写提示。它同时优化签名的 docstring(指令)和输出字段前缀。
主要能力:用 LM 为每个预测器提出候选指令;在训练集上按指标为每个候选打分;多轮迭代,用上一轮表现最好的候选指导下一轮;对多预测器程序按顺序逐个优化,先锁定前一个预测器的最佳指令。
使用方式:需要程序、指标和训练数据三样。示例:dspy.configure(lm=dspy.LM("openai/gpt-4o-mini"));定义 dspy.ChainOfThought("text -> label");定义 metric(example, prediction, trace=None);准备 dspy.Example 训练集;optimizer = dspy.COPRO(metric=metric, breadth=10, depth=3);optimized = optimizer.compile(classify, trainset=trainset, eval_kwargs=dict(num_threads=4, display_progress=True))。
构造参数:prompt_model(生成候选的 LM,默认用全局配置)、metric(必填)、breadth(每轮候选数,须大于 1,默认 10)、depth(迭代轮数,默认 3)、init_temperature(默认 1.4)、track_stats(默认 False)。compile 的 trainset 与 eval_kwargs 为仅关键字参数,eval_kwargs 必须传入,即使为空。返回程序带 candidate_programs 和 total_calls 元数据。
适用场景:想系统搜索更好指令、有指标和 20-200 条样本、程序有一个或少数预测器、想探索多种指令措辞(用高 breadth)。
限制与注意:只优化指令,不优化 few-shot 示例,需要示例时用 dspy.MIPROv2;样本很少(<20)可用 dspy.GEPA;微调权重用 dspy.BootstrapFinetune;仅需 few-shot 用 dspy.BootstrapFewShot。breadth=1 会静默失效,至少用 5。compile() 会原地修改传入程序,需保留原程序应先克隆。成本随 breadth * depth * 训练集大小增长,例如 breadth=10、depth=3、100 条样本约 3000 次评估调用。安装命令:npx skills add lebsral/DSPy-Programming-not-prompting-LMs-skills --skill <name>。