分享
AgentSims | 国产斯坦福AI小镇——框架详解篇
输入“/”快速插入内容
AgentSims
|
国产斯坦福AI小镇——框架详解篇
飞书用户4392
飞书用户5272
2023年11月24日修改
AgentSims 是一个国内高校联合开源的类斯坦福AI小镇项目,不了解的读者可以阅读项目官网的教程,也可参考笔者上一篇游戏实操课 | 国产开源交互式AI小镇——AgentSims搭建详解,本篇将分析该项目的特点、架构及关键函数流程
本文作者:龙思怡 | 个人主页:
https://cloud.tencent.com/developer/column/97462
(LitGate授权转载,未经作者允许请勿随意搬运)
写在前面的话
AgentSims
是一个国内高校联合开源的类斯坦福AI小镇项目,不了解的读者可以阅读
项目官网
的教程,也可参考笔者上一篇
游戏实操课 | 国产开源交互式AI小镇——AgentSims搭建详解
本篇将分析该项目的特点、架构及关键函数流程
1.
搭建进展更新
除了笔者之前文章和评论区提到的 openai sdk 的网络不通问题 (换成官方sdk并且替换base或者proxy)、WebGL的一些不兼容问题、客户端的固定
localhost:8000
访问问题,笔者没有遇到其他阻塞性问题,只是不清楚是不是没有动态屏幕适配,页面会显示不全,如下图所示:
但整体不影响体验,可以正常创建、查看 Agent,也可以正常对话
PS:注意不要用限速的 GPT 接口进行实验,可能会造成程序出错,如GPT接口调用失败后导致角色创建不成功、客户端无响应等问题,可按教程重置环境解决
2.
代码框架介绍
项目的客户端代码由 Unity WebGL 开发,目前无开源代码,这里不深入客户端实现
客户端/
服务器
交互流程如下所示:
后端的 game server 与 client 会建立起 websocket 的长链接,在启动了 game server 后开发者还需要额外的运行
tick.py / mayor.py
脚本,向 game server 发送请求以驱动时间循环
game server 在有动作进行时主动向 client 同步变更的状态(类似于游戏服务端的状态同步的实现),client 只在进行 UI 界面操作时才主动向 game server 发送请求
概念特点:
•
Tick模式和Mayor模式
Tick模式是普通的让 Agent 根据个人目标自由发挥的模式,而根据论文所述,Mayor模式则是让其中一个Agent(或者玩家本身)扮演“领导者”的角色,发布任务给其他Agent,譬如招聘员工、建立公司等,观察是否能够合作完成最终目标 这一概念本身非常具有吸引性,也能更加全面的测评LLM的能力,以及提升玩家对于城镇的参与度,笔者目前正在实验Mayor模式的可行性,本篇主要介绍Tick模式的流程
•
金钱属性
金钱系统也是非常有意思的概念,可以更好的模拟真实世界的环境和行为,考校LLM对货币的处理方式 项目为每个Agent,以及物品和设备都赋予了金钱属性,Agent可以进行购买、也可以获得收入,在Mayor模式下,金钱系统应该会发挥更大的潜力
项目架构特点:
•
异步非阻塞
项目构建了一个异步的、高性能的Generative Agent框架,譬如使用tornado这类异步非阻塞的Python Web Server、使用 WebSocket 协议进行通信、采用
asyncio
并发执行任务、封装了异步的openai sdk等等,在 LLM 返回延迟时间很难控制的情况下,异步确实是一个很好的解决方案
PS:这应该也是项目推荐在 Linux 或 MacOS 上搭建的原因之一,tornado对于支持epoll、kqueue等IO多路复用方法的系统可达到最佳性能,Windows 适配性不高
•
良好的可扩展性
动态路由管理(使用
importlib.import_module
根据传递的uri参数映射调用方法)、可自由组合的 plan 和 memory 模块、抽象化的 LLM 调用接口(方便替换其他LLM)、通过json组合建筑物和物品等等,对研究者和开发者而言都比较友好
3.
关键代码详解
command文件夹下包含所有的对外接口,每个接口类实现 execute 方法作为 handler,笔者将描述关键方法与接口
Register——创建Agent