2026-07-30技术4 分钟阅读

多智能体数据分析系统:为什么我们选了 dspy

评测先行。多智能体系统最容易翻车的地方不是编排,是「你不知道它什么时候变差了」。

我们做了一个让运维人员用自然语言查询、分析、归因数据的系统。 选型阶段在 LangGraph 和 dspy 之间摇摆,最终选了后者。

决定性因素:评测

多智能体系统有一个非常隐蔽的性质:它会慢慢变差,而且没人知道是什么时候变的。

提示词改一版、模型版本升一次、工具返回格式调整一下——都有可能在某个你测不到的 query 上引入退化。等到用户投诉才发现,通常已经过去两周了。

dspy 的核心价值不是「编排」,而是它把优化目标变成了可度量的指标:

import dspy

class Analyze(dspy.Module):
    def forward(self, question: str, schema: str) -> dspy.Prediction:
        plan = self.planner(question=question, schema=schema)
        query = self.query_writer(plan=plan.reasoning, schema=schema)
        return self.executor(sql=query.sql)

# 有一份真实的历史问题集,就能跑回归
metric = dspy.ExampleBasedMetric(
    examples=[
        dspy.Example(
            question="上周五晚高峰期的丢包主要来自哪些链路?",
            schema="network_metrics",
            reasoning="需要先筛出高丢包链路,再关联当时流量判断是否拥塞",
            sql="SELECT ...",
        ).with_inputs("question", "schema")
    ]
)

编排能力其实是最不重要的

这一点和大多数人的预期相反。

LangGraph 给你显式的状态机、循环、条件分支——这些在流程确定时是优点。 但数据分析这类任务,流程恰恰是不确定的:要查几张表、要几轮迭代、要不要回溯, 本身就要模型决策。用硬编码的状态机去套,等于替模型做了它最擅长的判断。

dspy 的选择是:流程尽量扁平,把复杂度藏在「模型能不能选对工具」里。

代价

诚实地讲,选 dspy 也付了代价:

  • 学习曲线陡,Signature 的心智模型需要几天才能建立
  • 调试链路长,出错时不好定位是提示词问题还是模型问题
  • 生态比 LangGraph 小,遇到冷门场景要自己造

什么情况下我会选 LangGraph

如果流程是确定的、需要严格的审批节点、或者涉及不可逆的外部动作, 显式状态机的价值就压倒一切了。没有普适最优解,只有和任务形态的匹配问题。

#大模型#多智能体#dspy#工程实践