<论文>(斯坦福)DSPy:将声明式语言模型调用编译为自我优化的pipeline

发布于:2025-07-25 ⋅ 阅读:(23) ⋅ 点赞:(0)

一、摘要

        本文介绍斯坦福团队发表于2023年10月的论文《DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines》。该论文提出了一个高效简洁的大模型pipeline创建方式,使得我们可以在不需要编写并反复调整prompt的前提下实现大模型的高效调用和自我优化。相应的开源第三方库dspy也可以在github上找到,官方使用文档给出了更多的使用示例。

译文:

        机器学习社区正在迅速探索用于提示语言模型(LMs)的技术,以及将它们堆叠成解决复杂任务的pipeline的技术。不幸的是,现有的语言模型pipeline通常使用硬编码的 “prompt模板” 来实现,即通过反复试验发现的冗长字符串。为了采用更系统的方法来开发和优化语言模型pipeline,我们引入了DSPy,这是一种编程模型,它将语言模型pipeline抽象为文本转换图,即在命令式计算图中,通过声明式模块调用语言模型。DSPy模块是参数化的,这意味着它们可以(通过创建和收集示例)学习如何应用提示、微调、增强和推理技术的组合。我们设计了一个编译器,它将优化任何DSPy pipeline,以最大化给定的指标。我们进行了两个案例研究,表明简洁的DSPy程序可以表达和优化复杂的语言模型pipeline,这些pipeline可以对数学应用题进行推理、处理多跳检索、回答复杂问题以及控制智能体循环。在编译几分钟内,几行DSPy代码就能让GPT - 3.5和llama2 - 13b - chat自引导构建出优于标准少样本提示的pipeline(通常分别超过25%和65%),以及优于使用专家创建示例的pipeline(分别高达5 - 46%和16 - 40%)。除此之外,编译到像参数为7.7亿的T5和llama2 - 13b - chat这样开放且相对较小的语言模型的DSPy程序,与依赖专家编写的提示链用于专有GPT - 3.5的方法相比具有竞争力。

二、DSPy主要架构

        作者指出当前大语言模型领域虽蓬勃发展, prompting技术与多阶段pipeline构建备受关注,但现有的大模型开发框架普遍依赖人工试错得到的硬编码“prompt模板”,也就是要手动反复试验并精心制作一长串的prompt指令和示例,存在脆性且难以跨场景泛化的问题。为此,论文提出DSPy编程模型,将pipeline抽象为文本转换图,通过声明式模块调用LM(意味着构建新的大模型pipeline不再是处理自由格式的文本字符串,二是更接近于模块化编程,由编译器根据程序自动生成优化的大模型调用策略和prompts)。该模型的模块可参数化,能通过创建和收集演示来学习组合提示、微调等技术,且配备编译器以最大化给定指标,从而优化任意DSPy pipeline。

        DSPy为模型的自优化提出了三个核心概念:签名(signatures)、模块(modules)和提词器(teleprompters)。

1、签名

        与自由格式的prompt不同,DSPy程序使用signature签名来向大模型分配任务,这是一种简短的声明式规范,用于告知程序当前任务需要做什么。程序将自动解析给出的签名并将字段名称拓展为可供大模型使用的有意义的指令。如下图示例。

2、参数化和模板化模块

        DSPy签名只是定义了一个接口,并且就预期行为提供类似类型的prompt提示。其后,程序将会把提示技术转化为支持任何签名的模块化函数,例如思维链模块、多链比较模块和ReAct模块等。所有的这些模块都只需要几行代码即可实现调用。例如下图中的内置思维链的简化实现示例。

        甚至还支持调用外部工具,例如下面实现RAG的示例。

3、提词器

        作者构建了一个teleprompter提词器,作为接收程序、训练集和度量指标并返回一个新的优化后的程序的工具。不同的提词器可以采用不同的优化策略。下图中给出了少样本提示的模型优化策略。

 


网站公告

今日签到

点亮在社区的每一天
去签到