跳到内容
Skynet文档
页面

概念

优化的工作原理

运行与评分契约、制品类型,以及每种类型适用的引擎。

Skynet 就是 Optimize Anything:一个基于你的数据和指标改进任意产物的产品。每次运行都使用同一个运行契约和同一个指标契约。产物类型决定了哪些引擎可以处理它。

共享契约

每次运行都有两个文件。run.py 在一个用例上运行产物。metric.py 为输出打分。

from skynet import llm


def run(artifact, input):
    return llm(artifact, input=input)
  • 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 优化器运行时会发生以下过程:

  1. Skynet 找到你的模块,并用你的 run 函数包装它。每个用例都会经过你自己的 run。
  2. DSPy 优化器在训练用例上编译程序。
  3. 它在验证用例上进行选择。
  4. 胜出者是每个预测器的指令文本,加上模块完整的编译状态。该状态包含 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 程序产物

相关页面