用途
DSPy 是一个声明式语言模型编程框架,由斯坦福 NLP 团队创建,GitHub 星标超过 22,000。当你需要构建包含多个组件和工作流的复杂 AI 系统、以声明式方式编程语言模型而非手工编写提示词、使用数据驱动方法自动优化提示词、创建可维护且可移植的模块化 AI 流水线、通过优化器系统性地改进模型输出,或构建更可靠的 RAG 系统、智能体与分类器时,可以使用 DSPy。
安装
稳定版本:
pip install dspy
最新开发版本:
pip install git+https://github.com/stanfordnlp/dspy.git
按 LM 提供商安装:
pip install dspy[openai] # OpenAI
pip install dspy[anthropic] # Anthropic Claude
pip install dspy[all] # 所有提供商
主要能力
核心概念
Signature(签名):定义 AI 任务的结构(输入 → 输出)。支持内联签名(如 dspy.Predict("question -> answer"),适合快速原型和简单任务)和类签名(如继承 dspy.Signature 并定义 InputField/OutputField,适合复杂任务、类型提示和更好的文档)。
Module(模块):将输入转换为输出的可复用组件,包括:
dspy.Predict:基础预测模块。dspy.ChainOfThought:在回答前生成推理步骤,可访问rationale和answer。dspy.ReAct:带工具的智能体式推理。dspy.ProgramOfThought:生成并执行代码进行推理。
Optimizer(优化器):使用训练数据自动改进模块,包括:
BootstrapFewShot:从示例中学习。MIPRO(Most Important Prompt Optimization):迭代改进提示词。BootstrapFinetune:为模型微调创建数据集。
构建复杂系统
支持多阶段流水线(如 MultiHopQA:生成搜索查询 → 检索上下文 → 生成答案)和带优化的 RAG 系统(结合 ChromadbRM 检索器与 ChainOfThought 生成器,再用 BootstrapFewShot 优化)。
LM 提供商配置
支持 Anthropic Claude、OpenAI、本地模型(Ollama)等,并可通过 dspy.settings.context 为不同任务使用不同模型(如用廉价模型做检索、强模型做推理)。
常见模式
- 结构化输出(结合 Pydantic 的 TypedPredictor)。
- 断言驱动优化(dspy.Assert 与 backtrack_handler)。
- 自一致性(多次采样取众数)。
- 带重排序的检索(检索候选后按相关性打分取前几名)。
评估与指标
支持自定义指标(如精确匹配、F1 分数),并通过 dspy.evaluate.Evaluate 在测试集上评估,可对比优化前后的效果。
使用方式
基本流程:配置 LM(如 dspy.settings.configure(lm=lm))→ 定义 Signature → 创建 Module → 调用模块。有训练数据后,用 Optimizer 的 compile 方法优化模块,可保存(save)和加载(load)优化后的模型。通过 dspy.settings.configure(lm=lm, trace=[]) 启用追踪以监控和调试。
最佳实践包括:从简单开始迭代(Predict → ChainOfThought → 优化)、使用描述性签名、用有代表性的数据优化、保存和加载优化模型、监控和调试。
适用场景
- 拥有或能生成训练数据,需要系统性提示改进。
- 构建复杂多阶段系统。
- 希望跨不同 LM 进行优化。
限制
- 学习曲线为中等偏高。
- 快速原型或简单链式任务可能更适合手工提示或 LangChain。
- 需要自定义优化逻辑时可能不适合。
资源
- 文档:https://dspy.ai
- GitHub:https://github.com/stanfordnlp/dspy
- Discord:https://discord.gg/XCGy2WDCQB
- Twitter:@DSPyOSS
- 论文:"DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines"
另见:references/modules.md(模块详细指南)、references/optimizers.md(优化算法)、references/examples.md(真实示例)。