极客时间已完结课程限时免费阅读

23|提示语工程(五):构建你自己的西部世界——AI小镇搭建实战

23|提示语工程(五):构建你自己的西部世界——AI小镇搭建实战-AI大模型系统实战-极客时间
下载APP

23|提示语工程(五):构建你自己的西部世界——AI小镇搭建实战

讲述: Tyler

时长10:53大小9.94M

你好,我是 Tyler。
在前几节课中,我们学习了如何使用提示语工程方法来辅助大语言模型解决复杂问题。为了让你更深入地理解这个过程,今天我会带你尝试构建自己的人工智能小镇。
相信经过前几节课的理论学习,你已经对这节课的内容提前有所了解了。我们需要注意的是,由于我们的专栏的重点不是游戏引擎,因此这节课的重点是智能体的实验环境搭建。

实验环境

首先我们来了解一下这个小镇的实体,也就是这个小镇的游戏开发环境。

Smallville 仿真游戏环境

因为具体的仿真游戏环境在代码里已经布置好了,所以游戏环境这部分内容你只要理解即可。Smallville 仿真游戏环境是一个虚拟世界,使用了 Phaser 框架构建。这个环境包括了视觉环境、地图和碰撞信息。生成式 AI 智能体可以访问这些信息,并通过后端服务器与仿真环境交互。
仿真世界中的每个智能体的信息都被存储在后端服务中的一个 JSON 数据结构中。该数据结构包含智能体的 ID、位置、方向、状态和记忆等信息。
在每个仿真时间步骤中,仿真服务器都会解析 JSON 数据结构,检查生成式 AI 智能体是否有任何数据更新,如果有则同步到仿真环境中。智能体的自主行为由记忆驱动,在最早期赋予它的记忆叫做种子记忆,后续随行为产生的记忆会随着智能体在仿真世界中的经验变化而不断更新。

智能体系统架构

上面的内容主要是为了帮助你更好地理解你的智能体所处的“西部世界”试验场地是一个怎样的环境,以及你的机器人在环境中能做什么事情。接下来我们要学习的则是如何通过编程,让机器人乐园中的机器人拥有意识。
生成式 AI 智能体系统的架构使用了自然语言作为各模块之间的沟通语言。因此,我们需要一种机制来将智能体的生成式推理结果与仿真世界联系起来。
为了实现这一点,我们将仿真环境中的区域和对象表示成一个树形数据结构,树中的边表示沙盒世界中的包含关系。我们可以用自然语言来描述这棵树,并将这个描述传递给生成式 AI 智能体。例如,“炉子”是“厨房”的子节点,表示为“厨房里有炉子”。

智能体行为

智能体在仿真世界行动时,会构建一个独立的环境树表示,该树是整个仿真环境树的子图。我们为每个智能体初始化一个环境树,以捕捉智能体应该关注的空间和对象,例如其住所、工作场所以及常去的商店和店铺。
智能体在仿真世界中行动时,会更新该树以反映新感知的区域。然而,智能体并非无所不知——当他们离开一个区域时,他们的树可能会过时,当他们重新进入该区域时,就会再次更新树。这有点像游戏中的战争迷雾。
在为智能体的某个意图行为寻找适当位置时(例如,他们应该去哪里睡觉),我们则会使用算法来遍历智能体的环境树,直到找到与“卧室”匹配的节点。

动作定位

为了确定动作的合适位置,我们会遍历智能体存储的环境树,把其中的一部分序列化为自然语言提示语。随后,我们从智能体环境树的根节点开始递归,询问模型哪个是最合适的位置
我给你举个例子。如果名为 Eddy 的智能体在它规划中,被设定在工作区周围散步,就会使用后面的提示语,获得具体的散步地点。
[智能体简介] Eddy Lin 目前在林家的住宅中,具体位于他的卧室。这个房子包括梅和约翰林的卧室、Eddy Lin 的卧室、一个公共休息室、厨房、浴室以及花园。Eddy Lin 了解以下几个地方:林家的住宅、约翰逊公园、哈维橡木供应店、威洛兹市场和药店、霍布斯咖啡厅以及玫瑰与皇冠酒吧。如果可能的话,Eddy Lin 更愿意留在当前区域完成活动。他计划在工作区域附近散步一下。那么,Eddy Lin 应该去哪个地方呢?
我们使用相同的过程,来递归确定所选区域内最适合的子区域。比如,在刚才说的示例中,算法得出的结果是“林家的住宅:花园”。

智能体动作

最后,论文中使用了最传统的游戏路径算法来制作智能体的移动动画,确保智能体的“真身”移动到叶子节点所指示的位置。当智能体执行一个动作时,我们会触发对大语言模型的询问,来确定智能体与物体的交互方式,并观察物体的状态会如何变化。
我还是举个例子来帮你理解,如果 Isabella 的生成式 AI 智能体输出动作“为客户制作浓缩咖啡”,则查询语言模型的回应将指示 Hobbs Cafe 的咖啡机状态从“关闭”变为“冲泡咖啡”。
好了,现在我们已经了解了整个项目的架构和工作原理。接下来,让我们开始搭建属于自己的 AI 小镇。

镇长养成计划

首先,请请将项目文件克隆到本地,并确保你的电脑上已安装了项目所需的依赖,这些依赖在 requirements.txt 已经详细列出来了,你可以通过后面的指令找到它们。
$ git clone https://github.com/joonspk-research/generative_agents.git
$ pip install -r requirements.txt
接下来,将项目文件克隆到本地,并按照下面的代码创建一个配置文件,命名为 utils.py,将其放置在 reverie 目录下的 backend_server 文件夹中。在配置文件中,你需要填入一些必要的信息,特别是需要替换 OpenAI 的 API 密钥。
$ git clone https://github.com/joonspk-research/generative_agents.git
$ cd generative_agents
$ pip3 install -r requirements.txt
$ touch reverie/backend_server/utils.py
# Copy and paste your OpenAI API Key
openai_api_key = "<Your OpenAI API>"
# Put your name
key_owner = "<Name>"
maze_assets_loc = "../../environment/frontend_server/static_dirs/assets"
env_matrix = f"{maze_assets_loc}/the_ville/matrix"
env_visuals = f"{maze_assets_loc}/the_ville/visuals"
fs_storage = "../../environment/frontend_server/storage"
fs_temp_storage = "../../environment/frontend_server/temp_storage"
collision_block_id = "32125"
# Verbose
debug = True
完成配置后,我们就可以开始运行了。首先,我们在命令行中进入 environment/frontend_server。然后运行以下命令,启动后端服务。
$ cd environment/frontend_server
$ python manage.py runserver
环境启动成功后,我们可以通过浏览器访问 localhost:8000,以确保环境已经正常运行。如果一切顺利,你会看到以下信息。
“Your environment server is up and running.”
环境启动后,我们需要打开另一个命令行(上一步中使用的命令行用于运行环境服务器,因此请保持原样),回到 reverie 目录下的 backend_server 文件夹,并运行主程序。
$ python reverie.py
输入启动指令后,程序会提示你输入人物的名字,这些名字目前必须按照程序预设的列表要求,并且需要按照以下格式输入。
如果你想修改这个列表怎么办呢?最后我会告诉你如何修改这些人物和他们的初始记忆(下文 agent_history_init_nx 部分)。
base_the_ville_人物名1_人物名2……
如果你选择的人物是 Isabella Rodriguez、Maria Lopez 和 Klaus Mueller,那么输入的内容应该是后面这样,通过阅读代码可以发现,这里使用 first_name 的原因是 Persona 结构中对名字的 key 也是 first_name。
Enter the name of the forked simulation: base_the_ville_isabella_maria_klaus
然后,命令行将弹出:“Enter the name of the new simulation: ”。这里你可以输入任何名称,作为你的小镇名字。接下来,通过浏览器访问 localhost:8000/simulator_home,你的“AI 小镇”就会呈现在你的眼前。
Enter the name of the new simulation: test-simulation
这时我们回到命令行界面,你将会看到 “Enter option”: 。在这个时候,你可以输入以下命令以控制小镇中的角色活动。
run <step-count>
回车之后,小镇中的居民将开始模拟人类一样的生活,产生各种行动,与仿真环境以及其他居民交互。此外,整个模拟过程都可以回放,只需通过浏览器访问以下地址。
localhost:8000/replay/小镇名称/想看的步骤
注意替换其中的名字和步骤序号。你还可以在以下目录找到历史记录文件。
environment/frontend_server/static_dirs/assets/the_ville
此外,你还可以自行设定小镇中上演的故事开头,通过修改历史记录文件,你可以实现内容的个性化定制,为每个智能体植入你为它制定的人设。
在前面说的文件夹下,你会发现两个文件,一个是 agent_history_init_n25.csv,另一个是 agent_history_init_n3.csv。他们分别代表了该实验默认的两个社会关系设定,分别是 25 个智能体的小型社会和另一个 3 个智能体的微型社会。
还记得前几节课,我和你说过的设想吗?如果你有兴趣,甚至可以将你办公室中的同事也都放到这个小型社会,观察在他们的“人设”下的社会实验会出现哪些行为。
你只需要在 agent_history_init_nx 中,告诉每个智能体他的个人情况以及他对其他人的看法即可。
当然,在这个实验中最重要的不是“八卦”,而是实验我们所使用的具身智能方法,是否能够帮助智能体稳定地生活在一个“社会”中。这一点你可以通过观察智能体行为来判断,比如智能体是否按照“人设”正常生活和交际,有没有发生胡言乱语、一天吃八顿饭等异常行为。
除此之外,这个实验环境还有一个很重要的作用,那就是通过对比使用不同提示语工程的智能体在竞争中呈现的“能力”,来判定你的提示语工程方法是否更优秀。你甚至可以用类似 AutoML 的思想,让你的提示语引擎自动进化。

总结

在这节课里,我们学习了一个实用的实验环境,搭建了自己的 AI 小镇。这个小镇里有虚拟世界、地图和碰撞信息,让智能体可以自主行动。我们还谈到了如何让 AI 角色理解小镇的环境,确定要去哪里,然后用自然语言和动画来表现他们的行动。
最后是实操环节,我带你创建了一个属于你自己的小镇,并在这个小镇中观察 AI 们的行为,这个实验环境不仅可以测试提示语工程的效果,还可以比较不同 AI 之间的竞争表现,让我们不断优化提示语工程方法。
学完这节课以后,我希望你能记住的不是这些智能体和小镇中发生的具体事件,而是如何针对一个世界构建以生成式人工智能大模型驱动的具身智能应用。这个世界既可以是数字世界(比如在线商业博弈系统),也可以是数字孪生世界(比如元宇宙),甚至可以是真实世界中的机器人。
你需要学会如何使用生成式 AI 的方法与这个世界进行交互,并且使用记忆、决策和规划策略来帮助你的智能体赢得这个世界中的竞争。还是那句爱因斯坦的名言,“教育就是忘记了在学校所学的一切之后,剩下的东西”。
这不仅是提示语工程这个系列,甚至是 AI 大模型系统这个专栏的最终目标,也是为了让你在忘记这些细节后,所能得到的能力最大化。因为那时,你凭借着强大的内力,仅挥舞树枝,都能在实战中战胜外强中干的对手们。
最后,希望你基于这几节课学习的内容认真完成课后思考题。

思考题

基于 AI 小镇的开源代码,完成以下任务(需改动处相关代码,在前面课程中已经学习)。
为智能体添加更为复杂的思维链能力。
使用高级提示语工程方法,为智能体优化提示词模板(提示:默认的各种提示词模板均在 reverie/backend_server/persona/prompt_template 下)。
为你的智能体添加使用外部工具(比如搜索引擎)的能力。
恭喜完成我们第 23 次打卡学习,期待你在留言区和我交流互动。如果你觉得有收获,也欢迎你分享给你身边的朋友,邀 TA 一起讨论。

本文介绍了如何使用提示语工程方法来构建人工智能小镇的实战过程。文章首先介绍了小镇的仿真游戏环境,包括视觉环境、地图和碰撞信息,并解释了生成式AI智能体如何访问这些信息并与仿真环境交互。接着详细介绍了智能体系统架构,包括智能体行为、动作定位和智能体动作的实现原理。文章还提供了搭建AI小镇的具体步骤,包括克隆项目文件、安装依赖和创建配置文件等。通过具体的实例和技术细节,帮助读者了解了如何利用提示语工程方法构建人工智能小镇的实际操作过程。文章还提到了在实验环境中观察AI角色的行为,测试提示语工程的效果,并比较不同AI之间的竞争表现,以不断优化提示语工程方法。最后,通过思考题,鼓励读者基于AI小镇的开源代码完成任务,如为智能体添加更为复杂的思维链能力、优化提示词模板以及添加使用外部工具的能力。整体而言,本文为读者提供了一个实用的实验环境,帮助他们学习如何构建以生成式人工智能大模型驱动的具身智能应用,并鼓励他们在实践中不断优化和提升技能。

分享给需要的人,Ta购买本课程,你将得18
生成海报并分享
2023-10-11

赞 5

提建议

上一篇
22|提示语工程(四):如何让智能体学会反思过去和规划未来?
下一篇
24|提示语工程(六):超越智能,让你的AI系统成为全知超人
unpreview
 写留言

全部留言(2)

  • 最新
  • 精选
  • 顾琪瑶
    2023-10-11 来自上海
    想问下老师, 您在开篇时谈论过, python和langchain不适合应用在工业级场景下, 但是目前的课程下来还是基于这些来教授的. 那么最终在工业级会怎么使用呢?

    作者回复: 你好,顾琪瑶!首先回答你的问题,在前面的课程中没有否定过 python 在工业界的价值。其次,这门课自始至终也没有使用 langchain 作为工业级系统的方案一部分。 下面再详细介绍一下这门课中使用示例的来源:首先,对于重要系统组件,我为大家提供了工业级方案,如 HA3 和 LoRA。其次,有一部分比较前沿的知识,目前的主要示例还来自于学术界,所以我使用了开源的 python 代码作为演示,方便大家的学习。因为相信大家在完成课程的学习后,有能力将这部分功能加入到工业级组件的实现中,这也是工业界现在的普遍做法和基础能力要求。在后面的课程中期待与你继续交流!

    9
  • 天心
    2024-01-30 来自北京
    运行的时候报错,请问老师是什么原因呢:TOKEN LIMIT EXCEEDED === persona/prompt_template/v2/generate_hourly_schedule_v2.txt ~~~ persona --------------------------------------------------- Isabella Rodriguez ~~~ gpt_param ---------------------------------------------------- {'engine': 'text-davinci-003', 'max_tokens': 50, 'temperature': 0.5, 'top_p': 1, 'stream': False, 'frequency_penalty': 0, 'presence_penalty': 0, 'stop': ['\n']} ~~~ prompt_input ---------------------------------------------- ['[Monday February 13 -- 00:00 AM] Activity: [Fill in]\n[Monday February 13 -- 01:00 AM] Activity: [Fill in]\n[Monday February 13 -- 02:00 AM] Activity: [Fill in]\n[Monday February 13 -- 03:00 AM] Activity: [Fill in]\n[Monday February 13 -- 04:00 AM] Activity: [Fill in]\n[Monday February 13 -- 05:00 AM] Activity: [Fill in]\n[Monday February 13 -- 06:00 AM] Activity: [Fill in]\n[Monday February 13 -- 07:00 AM] Activity: [Fill in]\n[Monday February 13 -- 08:00 AM] Activity: [Fill in]\n[Monday February 13 -- 09:00 AM] Activity: [Fill in]\n[Monday February 13 -- 10:00 AM] Activity: [Fill in]\n[Monday February 13 -- 11:00 AM] Activity: [Fill in]\n[Monday February 13 -- 12:00 PM] Activity: [Fill in]\n[Monday February 13 -- 01:00 PM] Activity: [Fill in]\n[Monday February 13 -- 02:00 PM] Activity: [Fill in]\n[Monday February 13 -- 03:00 PM] Activity: [Fill in]\n[Monday February 13 -- 04:00 PM] Activity: [Fill in]\n[Monday February 13 -- 05:00 PM] Activity: [Fill in]\n[Monday February 13 -- 06:00 PM] Activity: [Fill in]\n[Monday February 13 -- 07:00 PM] Activity: [Fill in]\n[Monday February 13 -- 08:00 PM] Activity: [Fill in]\n[Monday February 13 -- 09:00 PM] Activity: [Fill in]\n[Monday February 13 -- 10:00 PM] Activity: [Fill in]\n[Monday February 13 -- 11:00 PM] Activity: [Fill in]', "Name: Isabella Rodriguez\nAge: 34\nInnate traits: friendly, outgoing, hospitable\nLearned traits: Isabella Rodriguez is a cafe owner of Hobbs Cafe who loves to make people feel welcome. She is
    展开
    1