游乐游手机版
首页/AI热点日报/热点详情

告别提示工程,DSPy引领未来(上)

类型:热点整理2026-05-30
在进行大型语言模型(LLMs)应用开发时,开发者常常既爱又恨。爱的是模型强大的能力,恨的是其难以捉摸的脆弱性——应用高度依赖手工调整的提示,哪怕是微小改动也可能引发连锁反应,导致结果完全失控。这种不确定性令人困扰——幸运的是,DSPy框架正是为解决这一问题而诞生。它采用编程化方法,取代了传统的手工提

在进行大型语言模型(LLMs)应用开发时,开发者常常既爱又恨。爱的是模型强大的能力,恨的是其难以捉摸的脆弱性——应用高度依赖手工调整的提示,哪怕是微小改动也可能引发连锁反应,导致结果完全失控。这种不确定性令人困扰——幸运的是,DSPy框架正是为解决这一问题而诞生。它采用编程化方法,取代了传统的手工提示工程,使整个开发流程更稳定、更可控。

本文将深入探讨DSPy的核心概念、编程模型和编译器功能,并通过简单实例展示其强大之处。

1 DSPy介绍

DSPy(发音为“dee-es-pie”),由斯坦福大学自然语言处理(NLP)团队开发,从一开始就聚焦于“利用基础模型进行编程”。这与传统的依赖手工调整提示的开发模式截然不同。

在传统方法中,开发者必须精心设计提示模板,并谨慎监控模型响应。而DSPy的思路是将程序的信息流与步骤参数(包括提示和模型权重)分离,实现系统化开发。它能够自动优化程序,针对特定任务进行调整,无论是修改提示还是微调模型,都能轻松完成。

DSPy的核心特性有三个:

  • 签名(Signatures):取代传统的手写提示和微调流程。开发者无需再纠结“如何提示模型”,而是专注于“期望得到什么结果”。
  • 模块(Modules):将链式思维(Chain of Thought)、ReAct等提示技术封装为标准组件,开发者可像搭积木般灵活组合,大幅降低操作复杂度。
  • 远程提示器(Teleprompters)与DSPy编译器:这是最精彩的部分。它将提示工程完全自动化,开发人员只需设定优化目标,其余工作由编译器自动完成。

使用DSPy构建LLM应用的流程,其实和训练神经网络很相似:

  1. 收集数据集:准备输入输出示例(如问题和答案),作为后续优化的基础。
  2. 编写DSPy程序:借助签名和模块,清晰定义程序逻辑及组件间的信息流。
  3. 定义验证逻辑:设定验证指标和优化器(远程提示器),以控制优化方向和效果。
  4. 编译DSPy程序:编译器整合训练数据、程序代码、优化器和验证指标,自动执行全面优化。
  5. 迭代改进:通过持续调整数据、程序或验证逻辑,反复循环,直至性能达到理想状态。

1.1 比较DSPy、LangChain和LlamaIndex

LangChain、LlamaIndex和DSPy均为辅助开发者构建语言模型(LM)应用的框架,但实现路径差异显著。前两者重度依赖提示模板,导致应用对组件的任何变化极为敏感——例如更换模型,就可能需要重新调整大量提示。

DSPy的独特之处在于引入了编译器这一关键功能。当需要更换语言模型、调整数据源或修改程序逻辑时,它不会像其他框架那样要求重新进行提示工程或微调。只需重新编译程序,优化就会自动完成。这极大地减少了开发工作量,有时性能甚至优于LangChain或LlamaIndex。

可以说,尽管LangChain和LlamaIndex在社区中已颇具知名度,但DSPy正以更令人信服的方式,迅速赢得开发者的关注。

1.2 DSPy与PyTorch的联系

如果你具备数据科学背景,看到DSPy的语法时,会发现许多与PyTorch相似之处。

在PyTorch中,可以自由组合各种通用神经网络模块来构建模型。同样,DSPy允许开发者灵活组合模块,以搭建任何类型的LM应用。更关键的是,两者都强调自动化优化:PyTorch通过优化器自动调整模型参数,DSPy则通过编译器自动调整程序中的模块参数。

下面是PyTorch和DSPy之间的类比表:

PyTorch与DSPy类比表
PyTorch DSPy
神经网络模块(nn.Module) DSPy模块(dspy.Module)
损失函数 验证指标
优化器(optimizer) 远程提示器(teleprompter)
前向传播 程序执行
训练循环 编译过程

2 DSPy编程模型详解

2.1 签名:抽象提示和微调

在DSPy中,每次调用语言模型都依赖于自然语言签名。它取代了传统的手工编写提示,本质上是一个简短的函数定义,告诉模型需要完成什么转换任务,而非如何执行。例如,“consume questions and context and return answers”。

这种机制极大地简化了编程。签名本质上是输入和输出字段的组合,最简单的结构甚至仅包含这几个字段。

下面是一些常见的简写语法示例:

"question -> answer"
"long-document -> summary"
"context, question -> answer"

这些简写已经能满足大部分场景了。但如果你需要更精细的控制,也可以用更完整的签名定义方式,它包括三个部分:

  • 语言模型需要解决的子任务描述
  • 输入字段的详细说明
  • 输出字段的详细说明

举个例子:

class GenerateAnswer(dspy.Signature):
    """Answer questions with short factoid answers."""
    context = dspy.InputField(desc="may contain relevant facts")
    question = dspy.InputField()
    answer = dspy.OutputField(desc="often between 1 and 5 words")

关键点在于:与传统手工编写提示不同,DSPy的签名可以通过示例引导,自动编译成能够自我改进的提示或微调这意味着程序的灵活性和效率都得到了显著提升。

2.2 模块:抽象提示技术

DSPy的模块化设计将各种提示技术抽象为标准组件,极大简化了将签名应用于具体任务的过程。这些模块能处理提示、微调、增强和推理,充分发挥签名的能力。

以ChainOfThought模块为例,它可接受一个签名,并在处理输入时应用链式思维策略。传递签名有两种方式:

选项1:使用最小签名

generate_answer = dspy.ChainOfThought("context, question -> answer")

选项2:使用完整签名

generate_answer = dspy.ChainOfThought(GenerateAnswer)

在特定输入上调用模块,就像这样:

pred = generate_answer(context="Which meant learning Lisp, since in those days Lisp was regarded as the language of AI.",
                       question="What programming language did the author learn in college?")

DSPy还提供了其他几种常用模块:

  • dspy.Predict:处理输入输出字段,生成指令,为指定签名创建提示模板。
  • dspy.ChainOfThought:继承Predict,增加链式思维处理功能。
  • dspy.ChainOfThoughtWithHint:提供推理提示选项,增强ChainOfThought能力。
  • dspy.MultiChainComparison:添加多重链比较功能。
  • dspy.Retrieve:从检索模块获取相关信息。
  • dspy.ReAct:融合思考、行动与观察的循环。

这些模块可以灵活组合。通过继承dspy.Module并定义__init__forward方法,即可实现复杂的逻辑控制。

比如,一个经典的RAG类可以这样定义:

class RAG(dspy.Module):
    def __init__(self, num_passages=3):
        super().__init__()
        self.retrieve = dspy.Retrieve(k=num_passages)
        self.generate_answer = dspy.ChainOfThought(GenerateAnswer)

    def forward(self, question):
        context = self.retrieve(question).passages
        prediction = self.generate_answer(context=context, question=question)
        return dspy.Prediction(context=context, answer=prediction.answer)

这种设计使代码清晰简洁,大幅提升了可读性和可维护性,也让整个处理流程更加直观灵活。

推荐书单

《LANGCHAIN入门指南:构建高可复用、可扩展的LLM应用程序》

本书专门为对自然语言处理技术感兴趣的读者设计,系统讲解了大语言模型(LLM)应用开发的完整流程。全书共11章,从LLM基础入手,以LangChain开源框架为主线贯穿始终。第1-2章概述LLM技术发展背景与LangChain设计理念,第3章起逐一深入介绍LangChain的六大模块,包括模型I/O、数据增强、链、记忆等,每个部分均提供丰富的代码示例。第9章通过构建PDF问答程序,帮助读者串联前面所学知识;第10章介绍集成,扩展LangChain应用场景;第11章则为初学者梳理LLM基础理论,如Transformer模型。

本书适合大语言模型开发者、AI应用程序开发者,以及任何希望系统掌握LLM应用开发流程的读者。

来源:https://www.53ai.com/news/tishicijiqiao/2024090107639.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。