概念
优化的工作原理
运行与评分契约、制品类型,以及每种类型适用的引擎。
Skynet 就是 Optimize Anything:一个基于你的数据和指标改进任意产物的产品。每次运行都使用同一个运行契约和同一个指标契约。产物类型决定了哪些引擎可以处理它。
共享契约
每次运行都有两个文件。run.py 在一个用例上运行产物。metric.py 为输出打分。
from skynet import llm
def run(artifact, input):
return llm(artifact, input=input)def score(input, output, expected=None):
ok = output == expected
return (1.0 if ok else 0.0), {"feedback": "Match." if ok else "No match."}artifact是优化器提出的当前版本。input是一个 dict,包含一个用例的输入字段。expected是该用例的期望值;如果用例没有期望值,则为None。score返回一对值:一个数字,以及一个包含"feedback"字符串的 dict。
skynet 辅助模块提供 llm、Image 和 log。在运行代码中调用 llm 会使用任务模型。在指标中调用 llm 会使用指标模型。
完整的指标契约请阅读指标与评分器。
产物类型与引擎
| 产物类型 | 引擎 |
|---|---|
| 提示词 | Auto、GEPA、Best-of-N、AutoResearch、Meta-Harness、AutoSaddler、ShinkaEvolve |
| 代码 | 与提示词相同 |
| 文本 | 与提示词相同 |
| DSPy 程序 | Auto、DSPy GEPA、DSPy MIPROv2、DSPy BootstrapFewShot |
引擎分为两个系列:
- 原生引擎 把产物当作黑盒。它们处理提示词、代码和文本产物。
- DSPy 优化器 在 DSPy 程序内部工作。它们只处理 DSPy 程序产物。
DSPy MIPROv2 和 DSPy BootstrapFewShot 需要成对数据(带期望输出的用例)。如果只有单个输入,DSPy 程序只能使用 Auto 和 DSPy GEPA。
提示词、代码和文本产物
原生引擎把产物当作黑盒。引擎提出一个新版本,在用例上运行 run(artifact, input),然后读取分数和反馈。
六个原生引擎使用不同的搜索方法:
- GEPA 通过反思来演化版本,并维护一个 Pareto 前沿。
- Best-of-N 让反思模型给出相互独立的提议,并保留最好的一个。
- AutoResearch、Meta-Harness、AutoSaddler 和 ShinkaEvolve 使用编程智能体来提出版本。
每个引擎及其设置请阅读引擎。
DSPy 程序产物
DSPy 程序是一种产物类型。你的 run.py 在模块级构建一个 dspy.Module,并在 run 中调用它。如果文件中有多个模块,请把要优化的那个命名为 program。
DSPy 优化器运行时会发生以下过程:
- Skynet 找到你的模块,并用你的
run函数包装它。每个用例都会经过你自己的run。 - DSPy 优化器在训练用例上编译程序。
- 它在验证用例上进行选择。
- 胜出者是每个预测器的指令文本,加上模块完整的编译状态。该状态包含 few-shot 示例。
最终分数衡量的正是 Skynet 保存的那个程序。
| 优化器 | 是否读取反馈文本 |
|---|---|
| DSPy GEPA | 是 |
| DSPy MIPROv2 | 否,只读分数 |
| DSPy BootstrapFewShot | 否,只读分数 |
DSPy BootstrapFewShot 不使用反思模型。
Auto
Auto 是向导中的默认选项。
- 对于提示词、代码或文本产物,Auto 先用五个原生引擎进行探索,然后从最佳版本出发用 GEPA 继续优化。
- 对于 DSPy 程序,Auto 运行 DSPy GEPA。
两种形式的 Auto 都会读取你的指标给出的反馈文本。
该选哪个引擎
| 你的情况 | 使用 |
|---|---|
| 你有一个由模型运行的提示词 | 提示词产物。从 Auto 开始。 |
| 你有想要更快、更便宜或更正确的代码 | 代码产物。从 Auto 开始。 |
| 你有一份文档或一份配置 | 文本产物。从 Auto 开始。 |
| 你有一个 DSPy 程序 | DSPy 程序产物。从 Auto 开始。 |
| 你希望从数据中挑选 few-shot 示例 | 使用 DSPy BootstrapFewShot 或 DSPy MIPROv2 的 DSPy 程序产物 |