Skip to content

DSPy

DSPy (原名 Demonstrate-Search-Predict) 是一个用于系统性解决 Large Language Model (LLM) (LLM) 任务的声明式框架,由 Stanford NLP 团队开发,首席贡献者包括 Omar Khattab 等。DSPy 通过将提示词工程 (Prompt Engineering) 转变为编程问题,让开发者可以像编写传统软件一样构建复杂的 LLM 应用。

概览

传统的 LLM 开发通常需要大量的提示词调试和人工优化。DSPy 提出了一种新的范式:将 LLM 系统视为可编程的模块,通过组合简单的签署模块来构建复杂的 AI 系统,并自动优化提示词和模型参数。

核心概念

签署 (Signatures)

签署是 DSPy 的基本构建块,定义了输入和输出的类型:

python
import dspy

# 定义一个签署
class Summarize(dspy.Signature):
    """根据文档生成简洁的摘要"""
    document = dspy.InputField()
    summary = dspy.OutputField()

# 使用签署创建模块
summarizer = dspy.Predict(Summarize)
result = summarizer(document="长文档...")

模块 (Modules)

模块功能
Predict基础预测模块
ChainOfThought让模型进行推理链思考
ReAct结合推理和行动的 Agent
MultiChainComparison多个推理路径比较
Retrieve检索增强生成中的检索模块

提示词优化器 (Teleprompters)

DSPy 提供了自动优化提示词的工具:

  • BootstrapFewShot: 自动生成少样本示例
  • BootstrapFewShotWithRandomSearch: 随机搜索最佳少样本
  • MIPRO: 多阶段优化,结合指示和示例优化

主要功能

RAG 系统构建

python
class RAG(dspy.Module):
    def __init__(self, num_passages=3):
        self.retriever = dspy.Retrieve(k=num_passages)
        self.generator = dspy.ChainOfThought("context, question -> answer")
    
    def forward(self, question):
        context = self.retriever(question).passages
        return self.generator(context=context, question=question)

自动优化

python
# 定义评估指标
def validate_answer(example, pred, trace=None):
    return example.answer.lower() in pred.answer.lower()

# 使用优化器自动调优
teleprompter = BootstrapFewShot(metric=validate_answer)
optimized_rag = teleprompter.compile(RAG(), trainset=trainset)

技术亮点

  • 声明式编程: 将 LLM 应用视为可编程系统
  • 自动优化: 减少人工提示词工程的试错成本
  • 模型无关性: 同一个系统可以使用不同的 LLM 后端
  • 类型安全: 通过 Python 类型系统确保数据一致性

定价

DSPy 是开源软件,免费使用 (MIT 许可)。

生态定位

  • 与 LangChain 对比: DSPy 更偏向系统优化,LangChain 更偏向组件连接
  • 学术背景: 来自 Stanford NLP,强调理论与实践结合
  • 应用场景: 复杂 RAG 系统、多步推理、自动优化管道

相关实体

AI Knowledge Base — 持续积累