跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

DSPy 技术详解:从 Prompt 工程到编程式大模型应用

DSPy 框架如何解决大模型应用中的提示词脆弱性问题。通过编程范式替代手工 Prompt 工程,DSPy 利用签名(Signature)、模块(Module)和提词器(Teleprompter)实现自动化优化。文章涵盖了环境搭建、核心概念解析及实战问答系统构建,对比了其与 LangChain 的差异,强调了其在构建稳定、可维护 LLM 管道中的优势。

芝士奶盖发布于 2025/2/7更新于 2026/10/2491 浏览
DSPy 技术详解:从 Prompt 工程到编程式大模型应用

DSPy 技术详解:从 Prompt 工程到编程式大模型应用

引言

随着大语言模型(LLM)的普及,开发者面临着新的挑战。传统的 Prompt 工程往往需要耗费大量精力去调整提示词的结构和措辞,且效果不稳定;而基于 RAG(检索增强生成)的方案虽然引入了知识库,但数据清洗、索引构建和维护成本高昂。

在这种背景下,DSPy(Declarative Self-improved Language Programs)应运而生。它旨在通过编程范式来解决基于语言模型的应用程序中的脆弱性问题,让开发者不再依赖手工调优的提示词,而是通过代码逻辑来定义和优化模型行为。

什么是 DSPy

DSPy 是一个 Python 框架,其核心理念是将提示词(Prompt)转化为编程语言的一部分。它允许开发者通过声明式的签名(Signature)和模块(Module)来构建 LLM 管道,并利用编译器自动优化这些组件。

一句话定性:它是一个旨在通过优先编程而不是 prompt 来解决基于语言模型 (LM) 的应用程序中的脆弱性问题的框架。

DSPy 强调编程而非提示,使构建基于 LM 的管道远离操作提示而更接近编程。这意味着开发者可以像编写传统软件一样编写 AI 应用,利用版本控制、调试工具和单元测试来管理 AI 逻辑。

环境搭建

在使用 DSPy 之前,需要安装相关依赖库。推荐使用 Python 3.8+ 环境。

pip install dspy-ai

确保已配置好 API Key(如 OpenAI),并在代码中初始化 DSPy 的配置。

import dspy
from dotenv import load_dotenv

load_dotenv() # 加载环境变量中的 API_KEY

# 初始化 DSPy 配置
dspy.configure(
    lm=dspy.LM('openai/gpt-4o', api_key='YOUR_API_KEY'),
    trace=True
)

核心概念

1. 签名 (Signature)

在 DSPy 程序中,每次调用语言模型时,都必须采用自然语言签名(Signature),而不是传统的手写提示。签名是一个简短的函数或类,用来明确说明转换的目标,而不是指导 LM 的提示方式。

签名包含 LLM 要解决的子任务的最小描述,包括输入字段的描述和输出字段的描述。

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")

与常规提示语相比,签名可以通过引导示例编译成自完善和自适应管道的 prompt 或 fine-tune。这种结构化的定义使得模型更容易理解任务的边界和期望的输出格式。

2. 模块 (Modules)

在 DSPy 中,通过模板化和参数化来抽象提示技术。开发者可以使用内置模块来处理不同的推理需求。

# Option 1 : Pass minimal signature to ChainOfThought module
generate_answer = dspy.ChainOfThought("context, question -> answer")


generate_answer = dspy.ChainOfThought(GenerateAnswer)


pred = generate_answer(
    context=,
    question=
)
(pred.answer)
# Option 2 : Or pass full notation signature to ChainOfThought module
# Call the module on a particular input.
"Which meant learning Lisp, since in those days Lisp was regarded as the language of AI."
"What programming language did the author learn in college?"
print

从以上代码看,DSPy 签名传递给 ChainOfThought 模块,然后使用输入字段 context 和 question 的值进行调用。

DSPy 内置了多个常用模块,分别有不同的作用:

  • dspy.Predict:基本预测变量,直接根据签名生成输出。
  • dspy.ChainOfThought:教 LLM 在对 Signatures 响应之前逐步思考,提高复杂推理能力。
  • dspy.ProgramOfThought:教 LLM 输出代码,适用于数学计算或逻辑验证场景。
  • dspy.ReAct:能够实现某个 Signatures 功能的代理,利用工具(如搜索、计算器)辅助回答。
  • dspy.MultiChainComparison:可以比较多个 ChainOfThought 输出以产生最终预测,提升准确率。

模块的优势在于它灵活的集成在管道之中,是参数化的,包括提示细节等,模块根据签名处理输入,返回输出。

3. 提词器 (Teleprompters)

DSPy 还有一个关键武器,就是 Teleprompters(提词器)。提词器使用特定度量,与编译器协同工作,学习和引导有效提示,从而优化 DSPy 程序的各个模块。

DSPy 内置了多种提词器,用于不同的优化目标:

  • dspy.LabeledFewShot:使用少量标记数据进行微调。
  • dspy.BootstrapFewShot:自动生成少样本示例并优化。
  • dspy.BootstrapFewShotWithRandomSearch:结合随机搜索策略优化提示。
  • dspy.BootstrapFinetune:结合微调策略优化。
  • dspy.Ensemble:集成多个模型或路径的结果。

不同的提词器在优化成本和质量等方面提供了不同的平衡。例如,对于资源受限的场景,可以选择 FewShot 方案;对于追求极致准确率的场景,可以使用 BootstrapFinetune。

实战案例:构建问答系统

下面是一个完整的 DSPy 问答系统示例,展示了如何定义签名、使用模块以及进行优化。

步骤一:定义签名

首先,我们需要定义一个用于提取信息的签名。

class ExtractInfo(dspy.Signature):
    """Extract specific information from the given text."""
    text = dspy.InputField(desc="The source text to analyze")
    entity_type = dspy.InputField(desc="Type of entity to extract (e.g., Person, Date)")
    extracted_info = dspy.OutputField(desc="List of extracted entities")

步骤二:创建模块

使用 dspy.Predict 或 dspy.ChainOfThought 创建模块实例。

extractor = dspy.ChainOfThought(ExtractInfo)

步骤三:运行预测

input_text = "Elon Musk was born on June 28, 1971, in South Africa. He is the CEO of Tesla."
result = extractor(text=input_text, entity_type="Person")
print(result.extracted_info)

步骤四:优化管道

为了进一步提升效果,我们可以引入提词器进行优化。

from dspy.teleprompt import BootstrapFewShot

# 准备一些训练数据
trainset = [
    dspy.Example(text="Apple Inc. was founded in 1976.", extracted_info=["Apple Inc."]).with_inputs("text"),
    dspy.Example(text="Google was established in 1998.", extracted_info=["Google"]).with_inputs("text"),
]

teleprompter = BootstrapFewShot(metric=lambda x, y: x == y)
optimized_extractor = teleprompter.compile(extractor, trainset=trainset)

通过编译,DSPy 会自动生成最佳的提示词组合,无需人工干预。

DSPy vs LangChain

LangChain 和 DSPy 都是构建 LLM 应用的流行框架,但侧重点不同。

  • LangChain:侧重于链式编排,通过组合各种组件(如记忆、检索器、工具)来构建应用。它的 RAG 技术是让提示词更详细、丰富,形成一个标准的提问模板。
  • DSPy:侧重于编程范式和自动化优化。它引入编译器,更改基于 LLM 的应用程序(如 LLM 或数据)时,消除额外的 prompt 工程 或 fine-tuning 微调;开发人员可以简单地重新编译程序来优化 pipelines(模型的组件构成流程)以适应新添加的更改。

简单来说,LangChain 的 RAG 技术是让提示词更详细、丰富,形成标准模板;而 DSPy 则是从编程的角度去跟大模型交流,通过签名和编译器自动优化提示。

总结

DSPy 代表了 LLM 应用开发的一个重要方向:将提示词工程转化为编程问题。它把传统的提示词工程通过一些语法糖进行了优雅的封装。

它可以解决基于语言模型的应用程序脆弱性问题的框架;优先考虑编程而不是提示,允许重新编译整个流水线以优化任务。

实现原理是前文提到的:引入了签名、模块和提词器等概念来抽象提示和微调;编译器可以自动优化程序,根据任务需求生成高质量的提示。

对于希望构建稳定、可维护的大模型应用的开发者来说,掌握 DSPy 将是提升工程效率的关键技能。未来,随着 DSPy 生态的成熟,它将更好地支持多模态、长上下文等复杂场景的开发。

目录

  1. DSPy 技术详解:从 Prompt 工程到编程式大模型应用
  2. 引言
  3. 什么是 DSPy
  4. 环境搭建
  5. 初始化 DSPy 配置
  6. 核心概念
  7. 1. 签名 (Signature)
  8. 2. 模块 (Modules)
  9. Option 1 : Pass minimal signature to ChainOfThought module
  10. Option 2 : Or pass full notation signature to ChainOfThought module
  11. Call the module on a particular input.
  12. 3. 提词器 (Teleprompters)
  13. 实战案例:构建问答系统
  14. 步骤一:定义签名
  15. 步骤二:创建模块
  16. 步骤三:运行预测
  17. 步骤四:优化管道
  18. 准备一些训练数据
  19. DSPy vs LangChain
  20. 总结

更多推荐文章

查看全部
  • test
  • Mac Mini M4 本地运行大模型:Ollama 与 Llama 环境配置
  • 基于 Claude MCP 协议的智能体落地示例
  • RabbitMQ 事务机制与消息限流实战详解
  • C++ 手写 List 容器实战:双向链表原理与源码实现
  • 金仓数据库全链路性能优化:从 SQL 到存储的效率提升方案
  • 二叉树层序遍历 BFS 算法详解与实现
  • AI 大模型在政务领域的落地应用与案例分析
  • Linux 线程池设计与实现
  • Python __slots__:减少内存占用的高级技巧
  • 2024 年大模型落地与前沿趋势研究
  • Python、PyCharm 与 Anaconda 的关系解析及环境配置指南
  • AJAX 原始请求详解:XMLHttpRequest 对象使用指南
  • 基于 Q-Learning 的无人机三维动态避障路径规划 (Matlab 实现)
  • Web 自动化测试入门指南:从概念到 Selenium 实战
  • 企业落地大模型路径:微调、RAG 与提示词工程对比
  • C++ STL string 类从零实现详解
  • DooTask:AI 赋能的开源项目协作工具部署与使用指南
  • MySQL 表约束核心指南:从基础到外键实战
  • 鸿蒙金融理财应用:运维监控、性能优化与安全加固

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online