原贴链接

我希望这篇文章在这里是被允许的。我与Google和SpaceTraders都没有任何关联。我只是觉得分享这次实验的聊天记录会很有趣。

TL;DR: 我使用Gemini 1.5 Flash和Python将SpaceTraders的OpenAPI规范转换为一个功能性的Python库,Gemini模型完全控制了这个库。最终,作为自主代理的模型成功完成了游戏中给出的第一个合同。

SpaceTraders是一款仅使用HTTP端点即可玩的在线游戏,这意味着没有用户界面或应用程序可以运行。游戏的想法是“控制一支舰队并探索一个多人在线宇宙”。

SpaceTraders提供了一个OpenAPI规范,我使用Pydantic从端点创建可返回的模型,并创建了自己的脚本将功能端点(“路径”)转换为模型可以完全理解的Python代码。结合Pydantic模型和功能端点,实质上将OpenAPI规范转换为一个库。我将这个Python库(仅仅是源代码)与完整注释的函数一起输入到提示中。

由于Google在允许使用缓存之前有一个硬性限制(我认为是64k上下文长度),我不得不增加提示(我需要使用缓存来节省费用)。我使用ChatGPT创建了一个适合这款游戏的提示,因为它经常创建非常详细的答案,然后我只是将几个这样的答案连接在一起,总共达到了60k个令牌,包括完整的Python库和提示。

我认为完整的聊天记录最终大约有130k个令牌。其中很大一部分是由于API函数中非常详细地打印的完整JSON对象表示。

提示在这里可用:

https://pastebin.com/cnPmcCi3

Pydantic模型插入在[PYDANTIC_MODEL_CODE],函数在[API_FUNCTION_CODE]提供。

在对话过程中(除了提示和初始消息外,完全是自主的),AI需要执行Python代码。我在后台进程中运行了一个Jupyter Kernel,并允许AI使用代码块如python ...代码...tool_code ...代码...在上面执行代码。我在这个环境中预加载了生成的库以及游戏在初始注册时提供的某些对象。

成功运行的聊天记录(代理编号14)在这里可用:

https://pastebin.com/kmbMJ2sn

在这个运行中,AI正确地使用API接受合同,找到所需的铜矿石,移动到那里,购买铜矿石,并将其运送到目的地。在某些时候,它会犯一些错误,比如试图购买超过其承载能力的铜矿石,或者在没有铜矿石的地方试图购买。最终,AI赚了钱。注意,顺序可能会有些混乱。我最终的做法是,LLM提供一个完整的“消息”,然后我解析这个消息按顺序执行代码,这就是为什么在第一条消息后有四个返回的函数调用,因为模型调用了四个代码块。

我总共花了15美元来开发、调试、测试和运行这个模型。虽然我不想花更多。我使用了Google AI Studio和generativeai库(我进行了修改)来运行AI。

在测试过程中模型做了一些事情:

  • 不断向端点提供无效参数,试图暴力破解正确的语法。尝试10次后放弃,并在责怪SpaceTraders API本身的错误而不是其自身使用不当后发送了end_of_sentence令牌。我通过提供每个枚举的描述来修复了这个问题。
  • 有时AI试图在停靠之前进入一个系统,导致错误。AI不会取消停靠,而是在当前系统中收集更多信息。然后在某个时刻,AI再次停靠,并试图在不停靠的情况下移动,导致同样的错误。然后AI开始说它“忘记”了停靠,尽管错误消息完全在它的上下文中。我认为它试图模仿人类的健忘,或者像人类有时那样责怪自己的错误。
  • 不知道数字是如何工作的。它经常会试图购买超过其使用能力的货物,尽管它收到的错误消息提供了限制,或者它会试图飞到一个太远(以燃料单位计算)的系统,但它仍然试图加满油并前往。它似乎无法相对比较数字和容量。

我的最终目标是能够使用遵循OpenAPI规范的任何API,并使用AI以正确的语法调用端点——实质上将AI变成一个程序本身。

讨论总结

本次讨论主要围绕作者使用Gemini Flash和Python代码通过API调用自主完成SpaceTraders游戏中的第一个合同的做法展开。讨论内容涉及代码公开作为LLM的基准测试、数学问题改进、上下文大小讨论、Python模型的兴趣等多个方面。同时,也有评论对这种做法的风险和免费学习机会进行了讨论。

主要观点

  1. 👍 代码公开作为LLM的基准测试
    • 支持理由:公开代码可以作为大型语言模型(LLM)的基准测试,有助于推动技术发展。
    • 反对声音:暂无。
  2. 🔥 数学问题改进
    • 正方观点:为模型提供库存计算器和燃料检查工具,以帮助模型更好地执行任务。
    • 反方观点:暂无。
  3. 💡 上下文大小讨论
    • 讨论是否需要如此大的上下文来执行任务,以及其必要性和效率。

金句与有趣评论

  1. “😂 This would be a really cool LLM benchmark actually, any plans to release the code?”
    • 亮点:提出了将代码公开作为LLM基准测试的建议。
  2. “🤔 To fix your math problems (which are well known) give it inventory-calculator and fuel-checker tools that do the math and give LLM binary good/bad results.”
    • 亮点:提出了具体的数学问题改进方案。
  3. “👀 This is like putting money in the hands of a monkey. Your loss, our free lesson.”
    • 亮点:形象地描述了使用AI自主完成任务的风险和免费学习机会。

情感分析

讨论的总体情感倾向较为积极,多数评论对作者的做法表示兴趣和支持。争议点主要集中在使用AI自主完成任务的风险和效率上,部分评论对此表示担忧。

趋势与预测

  • 新兴话题:代码公开作为LLM的基准测试可能会引发更多关于AI技术应用和发展的讨论。
  • 潜在影响:数学问题改进和上下文大小讨论可能会对AI模型的性能和效率产生积极影响。

详细内容:

标题:使用 Gemini Flash 和 Python 在 SpaceTraders 中完成首份合同的创新尝试

近日,Reddit 上一篇有关在 SpaceTraders 游戏中通过技术手段实现自主完成合同的帖子引发了广泛关注。该帖子获得了众多点赞和大量评论。

原帖作者称,其使用 Gemini 1.5 Flash 和 Python 将 SpaceTraders 的 OpenAPI 规范转化为一个功能性的 Python 库,并让 Gemini 模型对其拥有完全控制权,最终模型作为自主代理成功完成了游戏中的第一份合同。帖子中还提到,SpaceTraders 是一款仅能通过 HTTP 端点进行操作的在线游戏,没有用户界面或应用程序。作者利用 Pydantic 创建了返回模型,并编写了自己的脚本将功能端点转化为 Python 代码,同时还详细说明了如何处理相关提示和代码块以实现模型的自主运行。作者还分享了相关的提示和聊天历史的链接。

此次讨论的焦点主要集中在技术实现的细节、代码的可用性以及这种尝试的价值。有人表示,“这实际上会是一个非常酷的 LLM 基准,有发布代码的计划吗?我很好奇本地模型在星际贸易中的表现。”还有用户称,“我更感兴趣的是您所描述的游戏 API 的 Python 模型,而非 LLM 绑定的实际代码。”也有人质疑,“真的需要如此大规模的上下文吗?”

有用户分享了自己类似的经历,“我在 WingmanAI by Shipbit 中做了类似的事情,创建了一个技能来运行 Python 代码,而不需要任何其他程序,但很好奇您是如何准确设置 Jupyter 内核来运行代码的。您有计划发布这部分吗?”原帖作者回复提供了相关代码链接。

然而,也有人对此持负面态度,比如有人说,“这就像是把钱交到猴子手里。您的损失,我们的免费教训。”

总体而言,这次讨论展示了技术爱好者在探索创新应用时的积极尝试和不同观点的碰撞,关于代码的分享和完善以及这种尝试的意义和价值仍存在争议和探讨的空间。