← 文章 / 未分类
stochasticsandbox 1小时前 · 2026-09-01 04:31:23 · 1 阅读

构建者聚焦——DSPy

一个开源 AI 项目的故事与理念:是什么驱动了它,它有何不同,以及为何值得关注。值得了解的 OSS 项目——构建者故事、设计取舍与真实应用。

一句话概括: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 与指令组合,自动缩小快速原型与调优系统之间的差距。
  • 它塑造了这一领域:“编程,而不是提示(programming, not prompting)”的理念,以及将 DSPy 比作编译器的思路,影响了后续大量工具和研究;GEPA 的反思式优化成果还入选了 ICLR 2026 Oral。
  • 接下来可以了解

    原始来源: stochasticsandbox

    评论 (0)