DSPy + Ertas
用 DSPy 构建可优化的 LLM 流水线——斯坦福的声明式框架,像编译器编程硬件一样编程语言模型,与 Ertas 训练的本地模型无缝配合。
Overview
DSPy 是斯坦福 NLP 推出的声明式 LLM 编程框架,其设计哲学与大多数智能体框架根本不同:你不再手写提示和链,而是描述每个步骤的*签名*(输入类型、输出类型、任务描述),由 DSPy 的优化器找出能让系统表现良好的提示、示范与少量样本。该项目使用的隐喻是:DSPy 之于语言模型,就像编译器之于硬件——它编程模型以满足声明的规范,而不是要求开发者手工调每一条提示。
实际意义在于,DSPy 系统比等价的手写提示链更易维护也更高性能。当模型更换时(不同尺寸、不同厂商、不同微调),DSPy 的优化器为新模型重新编译提示,而不是要求开发者手工调整每一条。当任务 规范变化时,同样的重新编译会产出新系统,无需定义大多数 LLM 应用维护工作的提示工程动荡。
DSPy 完全与模型无关。该框架通过其 LM 抽象支持任何聊天补全风格的端点,包括 OpenAI、Anthropic、Together、本地服务器(Ollama、vLLM、llama.cpp),以及任何实现简单 LM 接口的自定义后端。对于在 Ertas 上运行微调模型的团队,DSPy 的优化层成为有力的补充:微调模型负责领域专业能力,DSPy 在其上负责提示优化。
How Ertas Integrates
Ertas 训练的模型通过 DSPy 的 `LM` 抽象与之协同工作。在 Studio 中微调并导出为 GGUF 后,你通过 Ollama、vLLM 或 Ertas Cloud 提供模型服务,然后将 `dspy.LM`(或 OpenAI 提供商)配置为指向你的端点。DSPy 的优化器——BootstrapFewShot、MIPROv2、BootstrapFewShotWithRandomSearch——随后会编译出能让你的微调模型发挥最佳性能的提示。
微调与 DSPy 优化的组合具有非同寻常的力量。微调向模型教授领域词汇、输出格式与模式。DSPy 优化随后在具体任务上找到能引出模型最佳表现的提示结构与示范集。从经验上看,两者改进的维度不同且会叠加:带 DSPy 编译提示的微调模型常常显著优于单独使用任一方法,在基准任务上有时差距很大。
对于在智能体系统上迭代的团队,DSPy 的声明式模型有一个特别好的性质:当你收集到新的训练数据并在 Studio 中微调出新模型后,可以一步重新编译你的 DSPy 程序面向新模型。系统会自动让其提示与示范适配新模型的行为,而不需要手动重新调整流水线中的每一条提示。
Getting Started
- 1
在 Ertas Studio 中微调你的领域模型
在能够捕获领域术语、输出模式与推理风格的数据上训练。DSPy 将优化提示以引出该微调底座的最佳行为。
- 2
部署到兼容 OpenAI 的端点
导出为 GGUF 并通过 Ollama、vLLM 或 Ertas Cloud 提供服务。DSPy 通过其 LM 抽象调用任何兼容端点。
- 3
安装 DSPy 并配置 LM
安装 dspy。配置 `dspy.LM(model='openai/ertas-...', api_base='http://localhost:11434/v1')` 并通过 `dspy.configure(lm=...)` 设为默认 LM。
- 4
声明式地定义签名与模块
把每个步骤描述为 DSPy 签名:输入字段、输出字段、任务描述。组合为模块(Predict、ChainOfThought、ProgramOfThought、ReAct)。框架处理提示构造。
- 5
用优化器编译并评估
使用 `BootstrapFewShot`、`MIPROv2` 或其他 DSPy 优化器,配合一个小型训练集与评估指标。优化器会编译能在微调模型上最大化你的指标的提示。
import dspy
# Point DSPy at your Ertas-trained model served via Ollama
lm = dspy.LM(
"openai/ertas-financial-analyst-7b",
api_base="http://localhost:11434/v1",
api_key="not-needed",
)
dspy.configure(lm=lm)
# Declarative signature: describe the task, not the prompt
class FinancialQuestion(dspy.Signature):
"""Answer questions about a company's financial filings with citations."""
filing: str = dspy.InputField(desc="Excerpt from the company's 10-K filing")
question: str = dspy.InputField()
answer: str = dspy.OutputField(desc="A precise answer with section citations")
# Module: chain-of-thought reasoning over the signature
analyst = dspy.ChainOfThought(FinancialQuestion)
# Compile with an optimizer using a small labeled training set
optimizer = dspy.BootstrapFewShot(metric=citation_quality_metric)
compiled_analyst = optimizer.compile(analyst, trainset=labeled_train)
# Run the compiled program — DSPy handles all the prompt construction
result = compiled_analyst(
filing="In Q4 we recognized $42M in deferred revenue...",
question="What was the change in deferred revenue and why?"
)
print(result.answer)Benefits
- 声明式——描述签名而非提示
- 自动提示优化——编译器风格的 LLM 工程方法
- 模型变更时重新编译,而非手工调整提示
- 可与微调叠加——优化维度不同,收益相加
- 完全与模型无关——可与任何 LM 端点协作,包括 Ertas 训练的本地模型
- 源自斯坦福 NLP 的强大研究血统,社区开发活跃
Related Resources
Fine-Tuning
Prompt Engineering
Structured Output
Fine-Tuning for Structured Output: Beyond JSON Mode to Guaranteed Schemas
Building Reliable AI Agents with Fine-Tuned Local Models: Complete Guide
LangGraph
Ollama
OpenAI Agents SDK
Pydantic AI
vLLM
Ertas for SaaS Product Teams
Ertas for Data Extraction
Ertas for Compliance Report Generation
Ship AI that runs on your users' devices.
Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.