CRM查询性能基准测试

针对Attio CRM的MCP工具包进行的可复现性能基准测试,测量查询表达能力和令牌效率。

  • by ArcadeAI
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 ArcadeAI/attio-mcp-benchmark

使用说明

Attio MCP基准测试

一个可重复的基准,比较了Attio CRM的MCP工具包在8个现实世界查询中的表现。衡量可表达性(查询是否可以表达?)和令牌效率(响应有多臃肿?)。

结果

查询 街机 组合
01-列出所有公司(限25家) ✅ 25条记录 ✅ 25条记录
02--“培育”阶段的交易 ✅ 22条记录 ✅ 22条记录
03--超过5万美元的优惠 ✅ 25条记录 ✅ 30条记录
04--名称中带有“技术”的公司 ✅ 8条记录 ✅ 8条记录
05--技术类公司 ✅ 25条记录 ✅ 29条记录
06-2026年3月1日之前创建的交易 ✅ 25条记录 ✅ 50条记录
07--科技公司,201+名员工(复合) ✅ 25条记录 ✅ 27条记录
08--最高价值交易(排序+限制1) ✅ 1条记录 ✅ 1条记录

所有8个查询:对两个工具包都是可表达的。

每次查询的令牌成本

查询 街机 组合 比率
01-列出所有公司 902 144363 160×
02--按阶段划分的交易 974 48792 50×
03--超过5万美元的优惠 1072 66752 62×
04--公司名称搜索 354 48103 136×
05--科技公司 1030 165958 161×
06--截止日期前的交易 1600 111829 70×
07--复合过滤器 1329 15932 120×
08--排序+限制1 165 2254 14×
总计 7,426 747,083 ~100×

代币计数 tiktoken (cl100k_base)在保存到磁盘的原始JSON响应上。

为什么会有差距?

Composio用完整的时间元数据包装每条记录的每个字段-- active_from, active_until, attribute_type,actor引用对象——在每个属性上。一家公司的记录扩大到约5800个代币。实际的数据有效载荷只是总响应大小的一小部分。

Arcade只返回请求的字段,没有包装器开销。

问题07——Composio进行了4次工具调用

需要复合筛选器查询:

  1. 尝试1--失败: $in Attio不支持运算符 select/option 字段(仅 $eq 允许)
  2. 尝试2--失败: 切换到 $or + $eq 但使用了基准的记录选项值(501-1000 等等)——这些蛞蝓不存在于这个工作区中
  3. 架构发现调用(ATTIO_LIST_ATTRIBUTES): 必须获取完整的公司属性模式才能了解实际的选项标题(5K-10K, 10K-50K, 50K-100K, 100K+)
  4. 尝试3——成功: 返回27条记录

这如实地反映在原始数据和元数据中。查询被标记为EXPRESSIBLE,因为它最终成功了,但它需要大量的试验和错误,而依赖工具包记录界面的用户是看不到的。


自己复制

沙盒工作区和所有查询都是完全可复制的。

1.播种一个新鲜的Attio工作空间

export ATTIO_API_KEY="your-attio-api-key"
pip install httpx tiktoken
python scripts/seed_workspace.py

这创建了50家财富100强公司、约100个联系人和50笔特定阶段/价值分布的交易,旨在使所有8个基准查询都有意义。请参阅脚本标题以了解完整的细分。

2.运行基准查询

使用 RUNNER-PROMPT.md 作为提示,它包含每个工具包的完整基准规范和说明。

3.清点代币

pip install tiktoken
python scripts/count_tokens.py

回购结构

raw/
  arcade/       # Raw JSON responses + metadata for Arcade toolkit
  composio/     # Raw JSON responses + metadata for Composio toolkit
  attio-official/ # (placeholder for official Attio MCP)
evals/          # Per-query evaluation notes
scripts/
  seed_workspace.py   # Idempotent seed script — run this to recreate the sandbox
  count_tokens.py     # Token counter (reads from raw/{toolkit}/)
RUNNER-PROMPT.md      # Full benchmark spec and runner instructions
seed-record-mapping.json  # Record IDs from the seeded workspace

原始响应是完整的、未删节的工具输出,没有摘要。