外观
评测基于 MCP 的 LLM 应用
Evaluating MCP-powered LLM apps
决定一个 MCP 应用效果好坏的,主要是两个因素:
- 模型是否选对了工具?
- 以及它是否正确地准备了工具调用?
我们来看看,如何用 DeepEval(开源)最新推出的 MCP 评测功能,来评测任意一个 MCP 工作流。整体流程如下:

- 把 MCP 服务器接入 LLM 应用。
- 发送查询,并把工具调用和工具输出记录到 DeepEval 中。
- 完成之后,运行评测,获取关于这些 MCP 交互的洞察。
现在我们来看看具体代码!
#1)环境搭建
首先,安装 DeepEval,用来运行 MCP 评测。

#2)创建一个 MCP 服务器
接下来,我们定义自己的 MCP 服务器,其中包含两个可供 LLM 应用调用的工具。

注意,在这个实现里,我们故意没有写任何有说明性的 docstring,目的是给 LLM 制造一点难度。
#3)连接 MCP 服务器
接下来,我们建立一个客户端会话(client session),用它连接 MCP 服务器并管理工具交互。

这一层,正是处于 LLM 与 MCP 服务器之间的中间层。
#4)追踪 MCP 交互
接下来,我们定义一个方法,它接收用户查询,并把查询连同 MCP 工具一起传给 Claude Opus,让它生成回复。

我们从返回结果中筛选出工具调用,用它们创建一个 DeepEval 的 MCPToolCall 类对象。
#5)创建测试用例
到这一步,我们已经掌握了:
- 输入的查询
- 全部可用的 MCP 工具
- 实际被调用的所有工具
- 以及 LLM 最终的回复
因此,执行结束后,我们用这些信息创建一个 LLMTestCase。

#6)定义指标
我们定义一个 DeepEval 的 MCPUseMetric 指标,它会计算两个方面:

- LLM 对被赋予的 MCP 能力利用得如何?
- LLM 在工具调用时,参数正确性把控得如何?
这两项得分中较低的那一个,就是最终分数。
#7)运行评测
最后,我们调用 DeepEval 的 evaluate() 方法,用这个指标对测试用例打分。

这会输出一个 0 到 1 之间的分数,默认阈值是 0.5。我们会用多个查询来做评测。DeepEval 的可视化面板会展示完整的调用轨迹,比如:

- 查询(query)
- 回复(response)
- 成功/失败的原因
- 被调用的工具及其参数等信息
正如预期,这个应用在大多数查询上都失败了,而我们的 MCPUseMetric 也准确地捕捉到了这一点。这次评测帮助我们通过完善 docstring 来改进这个应用,而
这个最初在 24 个测试用例中只能通过 1、2 个的应用,现在成功率达到了 100%:

除了端到端的打分之外,LLM 应用还需要更细粒度的可见性。问题可能出在检索器、模型,或者工具处理逻辑的任何一个环节,因此我们需要对每个组件分别进行评测。