Skip to content

评测基于 MCP 的 LLM 应用

Evaluating MCP-powered LLM apps

决定一个 MCP 应用效果好坏的,主要是两个因素:

  • 模型是否选对了工具?
  • 以及它是否正确地准备了工具调用?

我们来看看,如何用 DeepEval(开源)最新推出的 MCP 评测功能,来评测任意一个 MCP 工作流。整体流程如下:

llm evaluation p342 1

  • 把 MCP 服务器接入 LLM 应用。
  • 发送查询,并把工具调用和工具输出记录到 DeepEval 中。
  • 完成之后,运行评测,获取关于这些 MCP 交互的洞察。

现在我们来看看具体代码!

#1)环境搭建

首先,安装 DeepEval,用来运行 MCP 评测。

llm evaluation p342 2

#2)创建一个 MCP 服务器

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

llm evaluation p343 1

注意,在这个实现里,我们故意没有写任何有说明性的 docstring,目的是给 LLM 制造一点难度。

#3)连接 MCP 服务器

接下来,我们建立一个客户端会话(client session),用它连接 MCP 服务器并管理工具交互。

llm evaluation p344 1

这一层,正是处于 LLM 与 MCP 服务器之间的中间层。

#4)追踪 MCP 交互

接下来,我们定义一个方法,它接收用户查询,并把查询连同 MCP 工具一起传给 Claude Opus,让它生成回复。

llm evaluation p345 1

我们从返回结果中筛选出工具调用,用它们创建一个 DeepEval 的 MCPToolCall 类对象。

#5)创建测试用例

到这一步,我们已经掌握了:

  • 输入的查询
  • 全部可用的 MCP 工具
  • 实际被调用的所有工具
  • 以及 LLM 最终的回复

因此,执行结束后,我们用这些信息创建一个 LLMTestCase。

llm evaluation p346 1

#6)定义指标

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

llm evaluation p346 2

  • LLM 对被赋予的 MCP 能力利用得如何?
  • LLM 在工具调用时,参数正确性把控得如何?

这两项得分中较低的那一个,就是最终分数。

#7)运行评测

最后,我们调用 DeepEval 的 evaluate() 方法,用这个指标对测试用例打分。

llm evaluation p347 1

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

llm evaluation p347 2

  • 查询(query)
  • 回复(response)
  • 成功/失败的原因
  • 被调用的工具及其参数等信息

正如预期,这个应用在大多数查询上都失败了,而我们的 MCPUseMetric 也准确地捕捉到了这一点。这次评测帮助我们通过完善 docstring 来改进这个应用,而

这个最初在 24 个测试用例中只能通过 1、2 个的应用,现在成功率达到了 100%:

llm evaluation p348 1

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

本站内容仅供学习交流,版权归原作者所有。