Skip to content

测试「Bash 就够了」假设:SQL vs Bash 智能体对比实验

作者:Ankur Goyal, Andrew Qu

原文:查看原文

本文来源Vercel 官方博客作者:Ankur Goyal(Braintrust 创始人兼 CEO)、Andrew Qu(Vercel 软件负责人)

AI 社区里有一个越来越流行的判断:文件系统和 Bash 可能是 AI 智能体最合适的抽象层。这个思路并不难理解——大语言模型在代码、终端和文件导航上接触过大量训练数据,所以给智能体一个 Shell,让它自己去查、去跑、去拼上下文,听上去很合理。

模型确实从以编码为主的训练数据中继承了很强的 Shell 操作熟练度。

即便不是编码场景,这条路径也可能成立。Vercel 之前在使用文件系统和 Bash 构建智能体一文中就展示过:把销售电话、支持工单等结构化数据映射成文件系统后,智能体可以通过 grep 找到相关片段、抽取必要内容,再按需构建上下文。

但还有一个更值得认真回答的问题:文件系统也许很适合探索与检索上下文,那在查询结构化数据时,它是不是依然是最优解?为此,团队构建了一套评估框架来做系统比较。

设置评估实验

实验让智能体去查询一个包含 GitHub issues 和 pull requests 的数据集。这类半结构化数据,很接近真实场景中的客户工单、销售对话或协作记录。

问题复杂度从简单到复杂不等:

  • 简单查询:“有多少个开放的 issue 提到了 security?”
  • 复杂查询:“找出有人先报告 bug,后来又有人提交声称修复该 bug 的 pull request 的 issue。”

一共比较了三种方法:

  1. SQL 智能体:直接查询包含同样数据的 SQLite 数据库
  2. Bash 智能体:使用 just-bash 在文件系统上浏览并查询 JSON 文件
  3. 文件系统智能体:只提供基础文件工具(搜索、读取),不开放完整 Shell 权限

所有智能体拿到完全相同的问题,并按照准确率进行评分。

初步结果

智能体准确率平均 Token 数成本耗时
SQL100%155,531$0.5145s
Bash52.7%1,062,031$3.34401s
文件系统63.0%1,275,871$3.89126s

结果很鲜明:SQL 明显占优。它拿到了 100% 的准确率,而 Bash 只有 52.7%。与此同时,Bash 消耗了约 7 倍的 token,成本高出 6.5 倍,耗时也长了将近 9 倍。即便只是基础文件系统工具,表现也优于完整 Bash 访问,准确率达到了 63%。

你可以直接查看 SQL 实验Bash 实验文件系统实验的具体结果。

有一个现象很值得注意:Bash 智能体会生成非常复杂的 Shell 命令,把 findgrepjqawkxargs 组合成非常复杂的流水线。模型显然掌握了不少 Shell 技巧,但这些技巧并没有自动转化成更好的任务结果。

复杂的 shell 脚本并未转化为准确性

复杂的 Shell 脚本并未转化为更高准确率

调试结果

评估结果也暴露出几个关键问题。

性能瓶颈。 本该在毫秒级完成的命令,在 10 秒后超时。问题最终定位到对 68,000 个文件进行 stat() 调用上。just-bash 后来做了优化来解决这个问题。

缺少 schema 上下文。 Bash 智能体一开始并不知道 JSON 文件的结构。后续在系统提示里补充了 schema 说明与示例命令,确实有帮助,但依然不足以抹平与 SQL 的差距。

评估标准本身也有问题。 团队手工复核失败案例后发现,有几道题的“标准答案”本身就不准确,或者 Bash 智能体找到了额外但同样有效的结果,反而被评分器误判为错误。最终有五道题得到了修正:

  • “哪些仓库有最多独立 issue 报告者”这道题在组织维度和仓库维度之间存在歧义
  • 几道题的预期输出与真实数据集并不一致
  • Bash 智能体有时找到了比参考答案更完整的有效结果

Vercel 团队随后提交了一个修正这些问题的 PR

just-bash 和评估框架都修复之后,方法之间的表现差距缩小了很多。

混合方案

接下来,团队尝试了另一种思路:不要在两种抽象之间二选一,而是把两种能力同时给到智能体。

  • 用 Bash 负责探索和操作文件
  • 同时在适合的时候提供 SQLite 查询能力

这个混合智能体发展出了一种很有意思的行为:它先运行 SQL 查询,再回到文件系统里用 grep 做交叉验证。也正是这种“先查、再验”的策略,让混合方案能稳定达到 100% 准确率,而不是只靠一次查询就结束。

你可以直接查看混合实验结果

代价当然也有:混合方案的 token 消耗大约是纯 SQL 的两倍,因为模型需要额外思考工具选择,并对结果进行验证。

关键学习

在修复 just-bash、评估数据集和数据加载问题之后,bash + sqlite 组合成了最可靠的方法。真正的赢家不是某一次跑分里的“原始准确率”,而是能否把自我验证纳入工作流,持续得到稳定结果。

混合方法在准确性上与 SQL 持平,同时增加了自我验证

混合方法在准确率上追平 SQL,同时引入了自我验证

在 200 多条消息和数百条追踪之后,团队最终得到这些收获:

  • 修复了 just-bash 的性能瓶颈
  • 更正了评估中五个模糊或错误的预期答案
  • 找到了导致结果偏差的数据加载 bug
  • 观察到智能体会自然发展出复杂的验证策略

Bash 智能体“习惯复查自己结果”的倾向证明很有价值。它不只是提高准确率,也帮助发现了纯 SQL 路径容易忽略的问题。

这对智能体设计意味着什么

对于 schema 清晰的结构化数据,SQL 依然是最直接、最高效的路径:快、清晰,而且更省 token。

但在探索与验证环节,Bash 仍然很有价值。它让智能体可以检查文件、抽样核对结果,并通过文件系统访问覆盖更多边缘情况。

更大的启发其实在于评估本身。Braintrust 和 Vercel 团队来回迭代、逐条追踪、修正基准,才真正推动了工具和评估框架变好。如果没有这种可见性,大家很容易在一份有缺陷的数据上争论“哪种抽象更强”。

运行你自己的基准测试

这套评估框架已经开源

你可以把里面的内容替换成自己的真实场景:

  • 数据集(客户工单、销售电话、日志,或任何你正在处理的数据)
  • 智能体实现方式
  • 对你业务真正重要的问题集合

本文由 Ankur GoyalBraintrust 团队撰写,他们专注于为 AI 应用构建评估基础设施。评估框架已开源,并与 Vercel 的 just-bash 集成。

Alpha内测提示:当前为早期内部构建版本,部分章节仍在完善中,也可能存在问题,欢迎在下方评论区留言。