DSPy 编译的时候到底在做什么?

提示器(Teleprompters,或者以后叫Optimizer)是负责 DSPy “编译”的组件,它能自动优化生成提示词,从而让 LLM 自己学会提示自己(你已经是一个成熟的LLM了)。

DSPy 编译(compile)的时候,通过以下三个主要步骤自动优化提示词。

1. 生成候选提示词

  • 遍历预测模块:提示器首先找到程序中所有所有的预测模块。
  • 生成候选提示词:为每个模块生成提示指令、字段描述以及示例演示的候选值。简单的策略,比如从训练数据中抽样也能用于生成这些候选值。

2. 参数优化

  • 随机参数:每个预测模块都会得到一些随机的候选参数值。
  • 打分排序:整个优化过程是由特定的指标(如最大化准确度)所引导的。
  • 选择:提示器运行超参数优化算法(如随机搜索),选择最佳的候选组合,调整提示词中示例的数量和内容。

3. 程序优化

  • 修改程序结构:提示器不仅仅优化参数,还可以修改程序结构,如创建集成模型。
  • 插回优化参数:最后,将优化后的参数插回原始程序中。

总结

在 DSPy 编译时,通过自动生成和选择提示词,为每个模块优化程序。免去了开发者靠经验和运气去猜 LLM 喜好。DSPy 能够高效地尝试大量提示词,找到高性能的提示词,并且可以在 module 被重用或组合成新 module 时灵活调整提示。

optimizer 让提示词工程由传统的手工工艺,变成了一个可以高效工业化生产的活儿。开发者能通过提供打分规则来让语言模型自己“想”出最合适的提示词。