核心洞察
AI 工程有五个重要组件。对于任何给定任务,其中某个子集更重要,但它们始终存在——你可能只是将决策委托给他人和环境。
Maxime Rivest 将 DSPy 的核心抽象转化为 AI 工程的通用语言:
| DSPy 名称 | 通用术语 | 职责 |
|---|---|---|
| Optimizers | Evals | 评估和改进 |
| Signatures | Interface | 在最高层定义任务、输入和输出 |
| LM | Inference | 使 pipeline 在不同提供商和模型上运行 |
| Modules | Call Graph | 分解任务、决定哪些用 AI、哪些用代码/传统 ML |
| Adapters | Rendering | 渲染、格式化和解析领域特定的 prompt 和 I/O 类型 |
实战背景
Maxime 的 credentials:
- 为大型学术出版商构建 pipeline,每周处理全球几乎所有科学出版物(约 1 亿次)
- 完全释放数据分析师 from 创建自定义科学分类的繁琐任务
- ChatGPT 成本:$400K/周
- vLLM + Llama 8B + Qwen embeddings + DSPy 成本:$50
- 另一个 pipeline:解析数百万扫描 PDF,人类水平质量,速度 10 倍
- 现为 DSPy 贡献者,今早刚提交第一个 PR
组件详解
1. Rendering(渲染)——最被低估的组件
Rendering 是关于如何向模型渲染你的指令和输入,以及如何指导模型渲染其输出。 两者通常一起进行。如果告诉模型使用 XML 标签,你的 prompt 也会使用 XML 标签。JSON 和自定义分隔符同理。
关键洞察:当你决定使用 XML 标签请求结构化输出时,你使用的是 inference strategy。这个策略独立于你的任务——它是关于如何渲染 prompt 给模型看,以及如何要求模型渲染其输出以便解析。
结构化输出的选项:
- XML
- JSON
- Native structured outputs
- Custom delimiters
- BAML
- CSV
- ...
Rendering 的多维性:
- 如何渲染 reasoning
- 如何渲染 images(logo → SVG、描述 → 模型接收描述、降低分辨率、拼接多图)
- 如何渲染 tool calls(JSON 是默认,但
#!runMarkdown cells、<toolcall>分隔符等往往更优) - 如何渲染 videos、PDFs、citations
三大最新进展本质上都是 rendering:reasoning、structured outputs、tool calls。
2. Call Graph(调用图)
将任务分解为多个 LLM 子调用,并委托给适当模型,是改变 AI pipeline 成本、性能和延迟 profile 的最有效方式。
策略:
- 同一模型多次调用
- 使用专用模型(guards)
- 调用最佳模型并组合响应
- 多语言/程序执行同一任务,取多数响应
- 「专用」模型 persona,每个聚焦不同元素
- AI 调用与代码和传统编程混合
在 module 内完成,应有独立于分解的端到端调用方式。这些是 compound AI systems——强大。
3. Inference(推理层)
需要 shopping around 和 evolve。开源和商业模型几乎每天发布。
最有效的方式:
- 为 AI 请求 targeting 一个通用格式
- 一次性将该格式映射到所有想尝试的提供商和模型
- 将响应映射回 pipeline 可解析、评估、渲染的通用格式
4. Interface(接口层)
AI 程序需要与世界交互:被 app 调用、每天在数据流上运行等。
接口必须稳定——因为它就是你的 true task。
关键原则:将接口与底层所有的 hacking、fiddling、optimizing、decomposing、rendering 分离并抽象。定义系统的 signature 一次,然后在内部 fiddling。
5. Evals(评估)
以上所有都没有意义,如果你不在尝试改进性能。
不要过早构建大而美的 evals。许多任务上,单个明显例子甚至无法工作。
渐进路径:
- 从零到几个工作例子:手工评估——交互、查看数据和 traces。rendering 有 bug?对 LLM 的请求有 bug?parsing 有 bug?
- 小数据集:足够运行自动 prompt optimization
- 生产运行:收集输入输出,获得真实数据分布
- 可能足够 fine-tuning
为什么 DSPy 重要
DSPy 让你可以专注于任何一个组件而无需过多担心其他,并让我们分享这些问题的最佳实践和通用解决方案。
大多数 AI 框架有其中几个组件;很少(如果有的话,除了 DSPy)拥有全部五个。
资源
- 作者:Maxime Rivest(DSPy 贡献者)
- 原文:https://x.com/MaximeRivest/status/2055293570119065875
- DSPy 仓库:https://github.com/stanfordnlp/dspy
- 相关:vLLM、Llama 8B、Qwen embeddings