DSPy + Ertas
使用 DSPy 建構可最佳化的 LLM 管線——Stanford 的宣告式框架以編譯器設計硬體的方式為語言模型設計程式,與 Ertas 訓練本地模型無縫運作。
Overview
DSPy 是來自 Stanford NLP 的宣告式 LLM 程式設計框架,圍繞著一個與大多數代理框架根本不同的哲學設計:與其手寫提示與鏈,你描述每個步驟的*簽章*(輸入型別、輸出型別、任務描述),而 DSPy 的最佳化器找出讓系統表現良好的提示、示範與少量範例(few-shot)。專案使用的比喻是 DSPy 之於語言模型,就像編譯器之於硬體——它將模型程式設計為滿足宣告的規格,而非要求開發者手動調整每個提示。
實務含意是 DSPy 系統相較於等同的手寫提示鏈既更易維護又更高效能。當模型改變(不同大小、不同廠商、不同微調)時,DSPy 的最佳化器為新模型重新編 譯提示,而非要求開發者手動調整每一個。當任務規格改變時,相同的重新編譯產生新系統,無需定義大多數 LLM 應用維護工作的提示工程動盪。
DSPy 完全模型無關。框架透過其 LM 抽象支援任何 chat-completion 風格端點,包括 OpenAI、Anthropic、Together、本地伺服器(Ollama、vLLM、llama.cpp)以及任何實作簡單 LM 介面的自訂後端。對於在 Ertas 上執行微調模型的團隊,DSPy 的最佳化層成為強力補充:微調模型處理特定領域的專業能力,DSPy 在其上處理提示最佳化。
How Ertas Integrates
Ertas 訓練的模型透過其 `LM` 抽象與 DSPy 協同運作。在 Studio 微調並匯出為 GGUF 後,你透過 Ollama、vLLM 或 Ertas Cloud 提供模型服務,再設定 `dspy.LM`(或 OpenAI provider)指向你的端點。然後 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 訓練本地模型協同運作
- 源自 Stanford 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.