DSPy 框架简介
了解 DSPy 为何使用声明式签名取代手写提示词。
DSPy 框架简介 是 CoddyKit 上的免费 AI Prompt Engineering 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Prompt Engineering 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Prompt Engineering 课程共包含 4 节课。
手写提示词的脆弱性
手工编写的提示词很脆弱。只改动一个词,就可能大幅改变模型的行为;对 GPT-4 有效的方法,在 Claude 或 Gemini 上往往会失效。
提示词工程师会花数小时调整措辞,最后却发现这些改动无法跨数据集或模型版本泛化。这种脆弱性正是 DSPy 要解决的核心问题。
DSPy 是什么
DSPy(声明式自改进 Python)是斯坦福大学推出的框架,它将提示词编写视为编译问题,而不是手工创作问题。
您无需编写:"Think step by step and answer the following question...",而是声明您想要什么(一个 signature),让 DSPy 自行确定应如何做提示词构造,才能让模型实现目标。
安装 DSPy
PyPI 上提供了 DSPy。安装它并配置语言模型后端,即可开始使用。
pip install dspy-ai
# Basic setup in Python
import dspy
# Configure the language model
lm = dspy.LM('openai/gpt-4o-mini', api_key='sk-...')
dspy.configure(lm=lm)
print('DSPy configured successfully')核心理念:将逻辑与提示词分离
在传统的提示词编写中,程序逻辑和提示词文本纠缠在一起。如果您想改变模型的推理方式,就必须重写提示词字符串。
DSPy 将这两个关注点分离:您使用模块编写 Python 逻辑,DSPy 则在编译步骤中自动生成并优化实际的提示词文本。
signature:声明意图
DSPy 中的 signature 是对输入和输出的类型化声明。它说明的是要什么,而不是怎么做。
DSPy 使用 signature 在编译时构造合适的提示词,您无需亲自进行提示词工程。
import dspy
# Declare: given a question, produce an answer
class SimpleQA(dspy.Signature):
"""Answer questions with short factual responses."""
question: str = dspy.InputField()
answer: str = dspy.OutputField(desc='A concise factual answer')
# DSPy turns this declaration into a real prompt automatically
print(SimpleQA.__doc__)模块:可组合的推理构件
DSPy 提供了实现常见推理模式的模块。您可以像使用 PyTorch 层一样使用它们,将它们组合成更大的程序。
dspy.Predict— 直接预测dspy.ChainOfThought— 添加推理步骤dspy.ReAct— 推理 + 工具调用
import dspy
class SimpleQA(dspy.Signature):
"""Answer questions with short factual responses."""
question: str = dspy.InputField()
answer: str = dspy.OutputField()
# Three different module strategies for the same signature
predict_module = dspy.Predict(SimpleQA)
cot_module = dspy.ChainOfThought(SimpleQA)
# Call just like a function
result = predict_module(question='What is the capital of France?')
print(result.answer)编译的作用
编译是 DSPy 使用训练集和指标函数优化程序提示词的过程。
编译前:DSPy 使用基本的默认提示词。编译后:DSPy 找到了能最大化指标的少样本示例、更好的指令或思维链示例。优化后的提示词会被保存,并在推理时重复使用。
一个最小的 DSPy 程序
下面是一个完整的最小 DSPy 程序:一个 signature、一个模块和一次调用。整个程序中没有任何地方编写提示词字符串。
import dspy
# 1. Configure LM
lm = dspy.LM('openai/gpt-4o-mini', api_key='sk-...')
dspy.configure(lm=lm)
# 2. Define signature
class Summarize(dspy.Signature):
"""Summarize text into one sentence."""
text: str = dspy.InputField()
summary: str = dspy.OutputField()
# 3. Create module
summarizer = dspy.Predict(Summarize)
# 4. Use it
result = summarizer(text='DSPy is a framework for programming language models.')
print(result.summary)DSPy 与传统提示词工程
两者在理念上的关键区别:
- 传统方式:您编写提示词文本 → 模型执行提示词 → 您手动调整文本
- DSPy:您编写 Python 逻辑 → 优化器找出最佳提示词文本 → 模型执行优化后的提示词
DSPy 将提示词视为编译器应处理的实现细节,就像编译器将 Python 转换为字节码一样。
何时值得使用 DSPy
在以下情况下,DSPy 尤其有优势:
- 有明确的优化指标(准确率、F1、用户评分)
- 有一个训练集示例(即使只有 20–50 个也足够)
- 有一个包含会相互影响的多个推理步骤的流水线
对于一次性的简单提示词,DSPy 的额外开销并不值得。对于具有可衡量目标的生产环境 LLM 流水线,DSPy 会带来根本性的提升。
DSPy 生态系统概览
DSPy 不只是一个接口包装器,而是一套完整的生态系统:
- signature:声明输入/输出
- 模块:推理策略
- 优化器:BootstrapFewShot、MIPRO、COPRO
- Evaluate:内置评估工具
- 断言:以声明方式约束输出
您将在本课程接下来的课程中逐一探索这些内容。
知识检查:DSPy 核心概念
与手动编写提示词相比,DSPy 的主要区别是什么?
回顾:DSPy 框架基础
DSPy 将提示词编写视为编译问题,从而解决了手写提示词的脆弱性。您编写signature(类型化输入/输出声明),并将它们与 模块(如 Predict 和 ChainOfThought)组合起来。随后,优化器利用您的训练数据和指标自动找出最佳提示词文本。最终得到的提示词流水线具有可移植、可测试和可自动改进的特点,无需手动进行提示词工程。
常见问题解答
「DSPy 框架简介」课时是免费的吗?
是的 — 「DSPy 框架简介」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Prompt Engineering 课程的其余内容,请升级到 CoddyKit PRO。 AI Prompt Engineering 课程共包含 4 节课。
「DSPy 框架简介」这节课中我会学到什么?
了解 DSPy 为何使用声明式签名取代手写提示词。 你通过在浏览器中直接运行的动手代码来练习 AI Prompt Engineering,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI Prompt Engineering 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI Prompt Engineering 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「DSPy 框架简介」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI Prompt Engineering 课中编写并运行代码吗?
能。每节 AI Prompt Engineering 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- DSPy 框架简介
- 定义签名与模块
- 编译与优化提示词
- 评估 DSPy 流程