[ PROMPT_NODE_22900 ]
dspy
[ SKILL_DOCUMENTATION ]
# DSPy:声明式语言模型编程
## 何时使用此技能
当你需要以下功能时使用 DSPy:
- **构建复杂的 AI 系统**,包含多个组件和工作流
- **声明式编程 LM**,而非手动进行提示词工程
- **自动优化提示词**,使用数据驱动的方法
- **创建模块化 AI 流水线**,使其易于维护和移植
- **系统性改进模型输出**,使用优化器
- **构建 RAG 系统、智能体或分类器**,提高可靠性
**GitHub Stars**: 22,000+ | **创建者**: Stanford NLP
## 安装
bash
# 稳定版本
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] # 所有提供商
## 快速入门
### 基础示例:问答
python
import dspy
# 配置你的语言模型
lm = dspy.Claude(model="claude-sonnet-4-5-20250929")
dspy.settings.configure(lm=lm)
# 定义签名 (输入 → 输出)
class QA(dspy.Signature):
"""用简短的事实性答案回答问题。"""
question = dspy.InputField()
answer = dspy.OutputField(desc="通常在 1 到 5 个单词之间")
# 创建模块
qa = dspy.Predict(QA)
# 使用它
response = qa(question="法国的首都是哪里?")
print(response.answer) # "巴黎"
### 思维链推理
python
import dspy
lm = dspy.Claude(model="claude-sonnet-4-5-20250929")
dspy.settings.configure(lm=lm)
# 使用 ChainOfThought 进行更好的推理
class MathProblem(dspy.Signature):
"""解决数学应用题。"""
problem = dspy.InputField()
answer = dspy.OutputField(desc="数值答案")
# ChainOfThought 自动生成推理步骤
cot = dspy.ChainOfThought(MathProblem)
response = cot(problem="如果约翰有 5 个苹果,给了玛丽 2 个,他还剩几个?")
print(response.rationale) # 显示推理步骤
print(response.answer) # "3"
## 核心概念
### 1. 签名 (Signatures)
签名定义了 AI 任务的结构 (输入 → 输出):
python
# 内联签名 (简单)
qa = dspy.Predict("question -> answer")
# 类签名 (详细)
class Summarize(dspy.Signature):
"""将文本总结为关键点。"""
text = dspy.InputField()
summary = dspy.OutputField(desc="要点列表,3-5 项")
summarizer = dspy.ChainOfThought(Summarize)
**当...