简体中文 | English
斯坦福AI小镇由斯坦福大学和谷歌于2023年8月开源,由25个智能体组成的虚拟世界,模拟了真实的人类生活。
25个智能体完全由ChatGPT驱动,自主组织派对、参加会议、在情人节筹办各种活动。他们能够展现出与人类相似的生活模式和行为习惯。
Generative Agents的原始代码工程化程度较低,难以持续维护或拓展功能,且时隔一年多,中文LLM的能力也已胜任此类任务。因此,我们对原项目进行了重构 深度汉化,旨在为中文用户提供一个利于维护的基础版本,以便后续实验或尝试更多玩法。
wounderland项目是原Generative Agents项目的重构版本,结构良好且代码质量远优于原版,因此本项目基于wounderland开发。
主要工作:
- 重写全部提示语,将智能体的“母语”切换为中文,以便对接Qwen-2.5或GLM-4等中文模型;
- 针对中文特点和Qwen2.5-7b/14b模型的能力,优化中文提示语及智能体之间的对话起止逻辑;
- 所有提示语模板化,便于后期维护;
- 修正原版的小问题(例如wounderland原版中智能体在入睡后便不再醒来);
- 增加对本地Ollama API的支持,同时将LlamaIndex embedding也接入Ollama,实现完全本地部署,降低实验成本。Ollama安装及配置可参考ollama.md;
- 增加“断点恢复”等特性;
- 回放界面基于原Generative Agents前端代码精简,同时将智能体活动的时间线及对话内容保存至Markdown文档。
回放画面:
注:地图及人物名称也同步汉化,是为了避免LLM在遇到中英混杂的上下文时,切换到英文语境。
git clone https://github.com/x-glacier/GenerativeAgentsCN.git
cd GenerativeAgentsCN
修改配置文件 generative_agents/data/config.json
:
- 默认使用Ollama加载本地量化模型,并提供OpenAI兼容API。需要先拉取量化模型(参考ollama.md),并确保
base_url
和model
与Ollama中的配置一致。 - 如果希望调用其他厂商的API,需要在
api_keys
中填入对应的key,并根据API文档修改base_url
和model
。
建议先使用anaconda3创建并激活虚拟环境:
conda create -n generative_agents_cn python=3.11
conda activate generative_agents_cn
安装依赖:
pip install -r requirements.txt
cd generative_agents
python start.py --name sim-test --start "20240213-09:30" --step 10 --stride 10
参数说明:
name
- 每次启动虚拟小镇,需要设定唯一的名称,用于事后回放。start
- 虚拟小镇的起始时间。resume
- 在运行结束或意外中断后,从上次的“断点”处,继续运行虚拟小镇。step
- 在迭代多少步之后停止运行。stride
- 每一步迭代在虚拟小镇中对应的时间(分钟)。假如设定--stride 10
,虚拟小镇在迭代过程中的时间变化将会是 9:00,9:10,9:20 ...
python compress.py --name <simulation-name>
运行结束后将在results/compressed/<simulation-name>
目录下生成回放数据文件movement.json
。同时还将生成simulation.md
,以时间线方式呈现每个智能体的状态及对话内容。
python replay.py
通过浏览器打开回放页面(地址:http://127.0.0.1:5000/?name=<simulation-name>
),可以看到虚拟小镇中的居民在各个时间段的活动。
可通过方向键移动画面
参数说明
name
- 启动虚拟小镇时设定的名称。step
- 回放的起始步数,0代表从第一帧开始回放,预设值为0。speed
- 回放速度(0-5),0最慢,5最快,预设值为2。zoom
- 画面缩放比例,预设值为0.8。
发布版本中内置了名为example
的回放数据(由qwen2.5:32b-instruct-q4_K_M生成)。若希望以较快速度从头开始回放,画面缩放比例为0.6,则对应的url是:
http://127.0.0.1:5000/?name=example&step=0&speed=2&zoom=0.6
也可直接打开simulation.md,查看example
中所有人物活动和对话信息。
画面中对话内容由qwen2.5:14b-instruct-q4_K_M生成
小镇全景
公园
咖啡馆
教室