DSPy 编译的时候到底在做什么?
提示器(Teleprompters,或者以后叫Optimizer)是负责 DSPy “编译”的组件,它能自动优化生成提示词,从而让 LLM 自己学会提示自己(你已经是一个成熟的LLM了)。
DSPy 编译(compile)的时候,通过以下三个主要步骤自动优化提示词。
1. 生成候选提示词
- 遍历预测模块:提示器首先找到程序中所有所有的预测模块。
- 生成候选提示词:为每个模块生成提示指令、字段描述以及示例演示的候选值。简单的策略,比如从训练数据中抽样也能用于生成这些候选值。
2. 参数优化
- 随机参数:每个预测模块都会得到一些随机的候选参数值。
- 打分排序:整个优化过程是由特定的指标(如最大化准确度)所引导的。
- 选择:提示器运行超参数优化算法(如随机搜索),选择最佳的候选组合,调整提示词中
示例
的数量和内容。
3. 程序优化
- 修改程序结构:提示器不仅仅优化参数,还可以修改程序结构,如创建集成模型。
- 插回优化参数:最后,将优化后的参数插回原始程序中。
总结
在 DSPy 编译时,通过自动生成和选择提示词,为每个模块优化程序。免去了开发者靠经验和运气去猜 LLM 喜好。DSPy 能够高效地尝试大量提示词,找到高性能的提示词,并且可以在 module 被重用或组合成新 module 时灵活调整提示。
optimizer 让提示词工程由传统的手工工艺,变成了一个可以高效工业化生产的活儿。开发者能通过提供打分规则来让语言模型自己“想”出最合适的提示词。