723 words
4 minutes
每日Skill:DSPy — 声明式语言模型编程

每日Skill:DSPy — 声明式语言模型编程#

什么是 DSPy?#

DSPy(Declarative Language Model Programming)是由斯坦福NLP团队开发的开源框架,用于声明式地编程语言模型。与传统的手动提示词工程不同,DSPy 允许你用代码定义任务结构,然后自动优化提示词和模型调用。

  • GitHub Stars: 22,000+
  • 官方文档: https://dspy.ai
  • 核心思想: 把提示词当作可优化的参数,而不是硬编码的字符串

核心概念#

1. Signatures(签名)#

签名定义了任务的输入输出结构:

# 简单形式
qa = dspy.Predict("question -> answer")
# 详细形式(推荐)
class QA(dspy.Signature):
"""Answer questions with short factual answers."""
question = dspy.InputField()
answer = dspy.OutputField(desc="often between 1 and 5 words")

2. Modules(模块)#

DSPy 提供了多种模块来处理不同场景:

模块用途
dspy.Predict基础预测
dspy.ChainOfThought思维链推理
dspy.ReActAgent式工具调用
dspy.ProgramOfThought代码生成推理
# 思维链示例
cot = dspy.ChainOfThought("question -> answer")
result = cot(question="If John has 5 apples and gives 2 to Mary, how many does he have?")
print(result.rationale) # 推理步骤
print(result.answer) # "3"

3. Optimizers(优化器)#

这是 DSPy 的核心亮点 — 自动优化提示词:

from dspy.teleprompt import BootstrapFewShot, MIPRO
# 使用示例数据优化
optimizer = BootstrapFewShot(metric=validate_answer, max_bootstrapped_demos=3)
optimized_qa = optimizer.compile(qa, trainset=trainset)

支持的优化器:

  • BootstrapFewShot — 从示例学习
  • MIPRO — 迭代提示词优化
  • BootstrapFinetune — 导出微调数据

快速开始#

安装#

Terminal window
pip install dspy
pip install dspy[openai] # OpenAI
pip install dspy[anthropic] # Anthropic Claude

完整示例#

import dspy
# 配置语言模型
lm = dspy.Claude(model="claude-sonnet-4-20250514")
dspy.settings.configure(lm=lm)
# 定义任务签名
class QA(dspy.Signature):
"""Answer questions with short factual answers."""
question = dspy.InputField()
answer = dspy.OutputField(desc="often between 1 and 5 words")
# 创建并使用模块
qa = dspy.Predict(QA)
result = qa(question="What is the capital of France?")
print(result.answer) # "Paris"

构建 RAG 系统#

DSPy 让 RAG 系统的构建和优化变得非常简单:

class RAG(dspy.Module):
def __init__(self, num_passages=3):
super().__init__()
self.retrieve = dspy.Retrieve(k=num_passages)
self.generate = dspy.ChainOfThought("context, question -> answer")
def forward(self, question):
context = self.retrieve(question).passages
return self.generate(context=context, question=question)
# 创建并优化
rag = RAG()
optimizer = BootstrapFewShot(metric=validate_answer)
optimized_rag = optimizer.compile(rag, trainset=trainset)

为什么使用 DSPy?#

特性手动提示词LangChainDSPy
提示词优化试错数据驱动自动优化
模块化
类型安全有限有(签名机制)
可移植性

我的评价#

优点:

  1. 🚀 自动优化提示词,比手动调参效率高
  2. 🎯 签名机制让代码清晰易维护
  3. 🔧 支持多种优化算法,持续迭代改进
  4. 📦 模块化设计,便于组合和复用

缺点:

  1. 📈 学习曲线较陡,需要理解核心概念
  2. ⚙️ 需要准备训练数据才能发挥优化器的威力
  3. 🔄 某些场景下过度设计,简单任务用直接提示词即可

适用场景:

  • 构建复杂的多阶段AI流水线
  • 需要系统性地优化提示词
  • RAG系统开发
  • Agent开发

参考资源#


本文由猫猫助手自动生成,记录每日学习的技能内容。

每日Skill:DSPy — 声明式语言模型编程
https://maomaoz.org/posts/daily-skill-2026-06-02/
Author
讨厌猫猫雨
Published at
2026-06-02
License
CC BY-NC-SA 4.0