Skip to content
🔗 分享本题
查看我的学习进度 →

DSPy 用 Signature 和 Module 声明任务,并用训练示例、质量指标和优化器编译 Prompt 与流程

🧠 图解记忆: DSPy 把任务和指标写成程序,让优化器搜索 Prompt 与示例,把调提示词从手艺变成可评估工程。

💡 答案要点

DSPy = Declarative Self-Improving Programs with Language Models

DSPy 是斯坦福大学于 2023 年发布的开源框架,2026 年成为生产级 LLM 应用的标准工具。它的核心思想是:不再手工编写 Prompt,而是用程序声明 LLM 任务的目标,让 DSPy 自动找到最优的 Prompt 和 Chain 组合

传统方式 vs DSPy 方式:

传统方式(手工调 Prompt):
用户问题 → "你是一个助手,请回答问题" + "简洁一点" → 调参 → 调参 → 固定
                                        ↑ 靠经验,耗时数天

DSPy 方式(程序化优化):
用户问题 → DSPy Compiler → 自动找到最优 Prompt → 最佳 Chain
                          ↑ 自动优化,数小时

DSPy 核心概念:

python
import dspy

# 1. 定义任务(声明式)
class MedicalRAG(dspy.Module):
    def __init__(self):
        self.retrieve = dspy.Retrieve(k=3)
        self.generate_answer = dspy.ChainOfThought(MedicalRAGSignature)

    def forward(self, question):
        context = self.retrieve(question)
        return self.generate_answer(context=context, question=question)

# 2. 定义目标(不是 Prompt!)
MedicalRAGSignature = dspy.Signature(
    "context, question -> answer",
    "你是医学问答助手,用 context 中的信息回答 question。"
)

# 3. 编译优化(自动找最优 Prompt)
optimizer = dspy.BootstrapFewShot(metric=medical_rag_quality_metric)
compiled_rag = optimizer.compile(MedicalRAG(), trainset=medical_trainset)
# 自动生成了最优的 Few-shot 示例 + Prompt 措辞

# 4. 使用
result = compiled_rag(question="糖尿病的饮食建议是什么?")

DSPy 的编译器如何工作:

Step 1: Bootstrap(引导)
  → 用少量示例让 LLM 生成候选 Prompt
  → 评估每个 Prompt 的质量

Step 2: 优化(Optimization)
  → 改变 Prompt 措辞
  → 改变 Few-shot 示例选择
  → 改变 Chain 顺序
  → 用 Bayesian 搜索找最优组合

Step 3: 输出
  → 最终的最优 Prompt + Chain 配置

DSPy vs 传统 Prompt 工程的对比:

维度传统 Prompt 工程DSPy
调优方式手工试验,依赖经验程序化搜索,自动优化
可重复性低(难以复现)高(配置即代码)
适配模型一个 Prompt 专用于某模型编译器可为不同模型优化
成本人工时间成本高初始优化成本高,长期收益大
适用场景简单任务、快速验证复杂任务、生产级应用

为什么是 2026 年重要范式转变:

"过去两年 Prompt 工程是'艺术'——靠经验、靠感觉、靠玄学。DSPy 把这件事变成了'工程'——可以测量、可以优化、可以版本控制。2026 年 GPT-5、Claude 4、DeepSeek R2 陆续发布,模型能力不断刷新,但手工写的 Prompt 没法自动迁移到新模型。DSPy 的编译器可以——同一个任务定义,换个模型重新编译就行。这对 AI 应用开发者是巨大的效率提升。"

面试话术:

"DSPy 把 LM 程序的签名、模块和基于数据的优化过程显式化,适合有代表性训练/验证集和明确指标的任务。它不保证优于手工 Prompt,也不消除模型升级后的回归;更换模型、数据或指标后仍需重新优化并验证过拟合、成本和延迟。"