MTG Bench:测试LLM在魔法游戏中的表现
结果 点击上面的图表查看每个基准测试的模拟情况。 例子成功 Fable 5 使用了一张抽牌土地,并查看了牌库顶牌。 Gemini 3.5 flash 执行了复杂的回合,包含抽牌、发现和导师效果。 例子失败 Opus 4.8 错误地将一张牌返回牌库,然后自我报告了错误。 Gpt 5.5 忘记将用发现驱逐的牌返回牌库,并自我报告了错误。 Fabel 5 出现了工具错误,然后默默尝试重新开始回合(稍后通过评估捕获到)。 基准测试如何运作 主要想法是,如果一个LLM足够聪明,能够玩好魔法,那么它也足够聪明,不需要规则引擎。 强制合法行为的规则引擎会提高性能下限,但我认为它不会提高模拟的整体质量。 每次LLM调用都可访问一个带有原始库操作的MCP服务器。 它可以执行如从牌库顶抽一张牌、将牌返回牌库底部和洗牌等操作。 为了模拟更高级的操作,如抽查或监视,它可以使用多个库工具调用。 除了库以外,其他所有管理工作都是由LLM完成的。 基准测试的合法性检查和评分都由gpt-5.5(中等)完成。 根据我的测试,LLM在评估模拟回合是否合法方面远远优于实际执行合法回合模拟。 我为什么选择使用MCP服务器 我对所有数据和LLM API调用都有完全控制权,那么为什么要使用MCP而不是基本功能/工具调用呢? 主要原因是OpenAI和Anthropic允许您在API请求中提供远程MCP服务器URL。 这意味着OpenAI或Anthropic处理代理循环。 这有两个主要好处。 由于这是一次API调用,您不会在每次使用工具后支付缓存输入的令牌费用(至少在OpenAI中,稍后会详细说明)。 您可以利用批量API节省50%的费用,而无需在每次工具调用后提交新的批次。 输入令牌缓存 在我看来,缓存输入令牌的收费方式对于代理循环来说并不合理。 定价适用于独立请求。 如果多个独立的API调用以相同的大型系统提示开始,输入缓存会使您免费获得折扣,或者收取较小的缓存费用。 然而,在代理循环中,您在每次工具调用后都会因为大型系统提示而收取缓存输入的费用。 设想一个例子。 假设系统提示已经缓存,且工具调用导致的令牌使用微不足道。 大型系统提示 = 10k令牌 代理调用10个工具函数(非并行) 计费的缓存输入令牌 = 10k + 10k * 10 = 110k令牌 我认为如果LLM仅在等待工具函数结果时暂停几分之一秒的话,为每个代理回合收取系统提示的费用是没有意义的。 这忽略了一些细节,比如调用工具需要输出令牌,而且工具函数结果仍需要处理为输入令牌。 但在我的情况下,API费用主要由在每个代理回合后作为缓存输入令牌收费的大型系统提示所主导。 当您的应用代码有代理循环,并且在每次工具调用后都进行新的API调用时,代理循环的定价是可以理解的。 但是,当您提供一个远程MCP服务器并且不自己处理代理循环时,这就没有意义了。 OpenAI正确处理了。 对OpenAI进行一次带有远程MCP服务器的API调用,只会对您的输入提示收费一次。 然而,带有远程MCP服务器的Anthropic API调用的工作方式与之前的例子相同。 一些真实数据,gpt-5.5(中等)基准每次魔法回合的平均输入令牌数为11,386。 claude-fable-5(中等)的平均数为51,610。 过于渴望调用工具 这个基准测试比大多数基准测试更惩罚那些过于渴望调用工具的模型。 在许多情况下,工具调用仅仅是检索信息,因此如果模型调用了太多工具,唯一的缺点就是浪费输入令牌和上下文窗口用于工具结果。 即使工具改变状态,通常也可以撤销,因此最终结果是正确的。 但在模拟魔法时情况并非如此。 如果您抽了一张牌,然后意识到这是个错误,您不能仅仅把它放回去。 即使您确实将牌返回牌库,您现在知道那张牌是什么,因此模拟就是非法的。 一个常见的失败模式是模型开始调用一个工具,然后意识到这是一个错误,却没有办法纠正它。 所有库MCP函数都有一个必填的原因字段。 如果您查看Opus 4.8中的这个例子,您可以看到它以“Draw for turn”(本回合抽牌)的理由抽了一张牌,然后以“No-op check not needed; cancel”(不需要做空操作检查;取消)的理由将牌返回牌库。 然后它继续以“noop”(不做任何操作)为理由将名为“x”的牌返回到牌库,然后再次使用“stop”(停止)的理由。 接下来是什么 我制作了MTG Auto Deck作为尝试Vibe编码的方式。 我并没有跟上基于LLM的编码状态,最终我做了这个。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡