构建者聚焦——DSPy
一句话概括:DSPy(“Declarative Self-improving Python”)是 Stanford NLP 推出的框架,旨在通过编程而非提示来使用语言模型。它用可组合的代码取代手工调试的 prompt 字符串,再由优化器将这些代码编译成高质量的 prompts 和权重。
它要解决的问题
Prompt engineering 很脆弱。你需要手写一大段指令,在几个示例上反复调整,刚能用,一换模型、数据,或给 pipeline 增加一步,就可能悄无声息地失效。每次改动都意味着重新通过试错调整字符串,而这些经验也无法复用。对于“检索—推理—验证—总结”这类多阶段 LLM 系统,问题会成倍恶化:各个 prompt 彼此影响,却没有一种系统的方法能够一次性优化整条 pipeline。Omar Khattab 和 Stanford NLP 团队看到,许多团队把大量工程时间耗在脆弱的 prompt 字符串上,而这些字符串既无法像真正的软件那样测试、版本管理,也无法优化。
核心洞见
把 prompting 看作编译目标,而不是源代码。你只需声明想要什么——每一步的输入和输出——再让优化器决定该怎么表达。在 DSPy 中,你先编写一个signature(类型化的输入/输出契约,例如 question -> answer),再将它封装进一个module(例如 chain-of-thought 或 ReAct 这样的策略)。这样一来,整个程序就是普通且可组合的 Python。接着,只要提供一个 metric 和少量示例,DSPy 的optimizer 就能针对你指定的模型,自动搜索最佳指令和 few-shot 示例。最终,prompt 不再是需要你反复维护的东西,而是由机器生成的一种产物。
它是如何工作的(通俗解释)
这三部分共同构成了 DSPy。Signatures 用来声明任务的结构(context, question -> answer)。Modules 针对 Signature 实现具体的 prompting 技术,并且可以像组合函数一样,灵活串联成任意 pipeline。Optimizers(以前称为“teleprompters”)接收你的 pipeline、训练集和评估指标,通过实际运行程序并保留有效结果,自动生成更好的 prompts 和 few-shot 示例。近期的 optimizers 又更进一步:MIPRO 会同时优化指令和示例,SIMBA 引入随机搜索,GEPA(Genetic-Pareto Prompt Evolution)会读取完整的执行轨迹,分析失败原因并提出针对性修复,而不是随机变异;dspy.GRPO 则将在线强化学习引入 pipeline,用于优化其权重,同时无需改动程序原有的抽象结构。
实际用起来是什么样
import dspy
# 将 DSPy 指向任意后端模型
dspy.configure(lm=dspy.LM("openai/gpt-4.1-nano"))
# Signature 声明任务,Module 选择实现策略
class GenerateAnswer(dspy.Signature):
"""用简短、基于事实的回答解答问题。"""
context: str = dspy.InputField()
question: str = dspy.InputField()
answer: str = dspy.OutputField()
rag = dspy.ChainOfThought(GenerateAnswer)
# 编译:让 optimizer 自动为你生成 prompt
optimized = dspy.MIPROv2(metric=my_metric).compile(
rag, trainset=train_examples
)
# 之后更换模型,只需重新编译,无需手动重写 prompt
print(optimized(context=ctx, question="Who built DSPy?").answer)
为什么这很重要
- Prompt 变成了可测试的软件:pipeline 是带有评估指标的代码,因此可以进行版本管理、评估和回归测试。“效果变差了”不再只是主观感受,而是一个具体的数字。
- 跨模型移植:同一个程序可以针对新模型重新编译。当前沿模型不断变化时,你只需重新运行 optimizer,而不必手动重写 prompts。
- 优化胜过直觉:DSPy 的 optimizers 经常能找到人类不会尝试的 few-shot 与指令组合,自动缩小快速原型与调优系统之间的差距。
接下来可以了解
- GitHub:github.com/stanfordnlp/dspy — 查看源代码和示例,了解项目的持续开发进展
- 文档:dspy.ai — 提供 signatures、modules 和 optimizers 教程,以及项目路线图
- 论文:DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines — 最早系统提出“编译提示词”理念的论文