LLMs之Agent之Lares:Lares的简介、安装和使用方法、案例应用之详细攻略
导读 :这篇博文介绍了 Lares,一个由简单的 AI 代理驱动的智能家居助手模拟器,它展现出令人惊讶的解决问题能力。
>> 背景痛点 :每天都有新的 AI 代理被开发出来,但许多复杂的代理需要大量的代码。作者的目标是展示一个使用相对较少代码就能构建出具有令人惊讶的复杂涌现特性的基本代理的可行性。 现有的智能家居系统缺乏能够进行自主推理和解决问题的智能代理。
>> 具体的解决方案 :Lares 使用 OpenAI 的函数调用功能和 GPT-4 模型,通过一个简单的 AI 代理与智能家居模拟器进行交互。该代理通过 Web UI 接收指令,并通过一系列函数调用来完成任务。 这些函数包括:toggleLight(切换灯光)、moveRobot(移动机器人)、lookWithRobot(用机器人查看房间)、askUser(询问用户)、halt(停止操作)和 decideBestFunction(决定下一个要调用的函数)。
>> 核心思路步骤:Lares 的代理循环包含以下步骤:
● 设置:准备包含用户指令、代理的当前世界知识(已知哪些灯是开着的,但不知道可移动物体的具体位置)、历史函数调用和返回值的记录。
● 意图:代理调用 decideBestFunction 函数来选择下一个要调用的函数。 这部分引入了"分离意图和行动"的策略,通过中间推理步骤来提高可靠性。
● 行动:代理调用所选函数并执行相应的操作。
● 循环:如果所选函数不是 halt,则重复步骤 2 和 3,直到代理决定停止。
>> 优势:
● 代码简洁:Lares 使用相对较少的代码实现了复杂的智能家居控制和问题解决能力。
● 涌现行为:Lares 展示了基本的解决问题能力,例如,为了找到狗,它会先打开灯,再用机器人查看房间。 这种行为并非预先编程,而是 AI 模型根据环境和任务自主产生的。
● 函数调用机制:利用 OpenAI 的函数调用功能,使代理能够以结构化的方式与环境交互,提高了可靠性和可解释性。
● 分离意图和行动:提高了代理的可靠性。
● 动态世界知识管理:将代理的世界知识与隐藏的世界状态分开管理,提高了可靠性。
>> 结论和观点:
● 即使是简单的代理也能表现出涌现行为,例如基本的解决问题能力。
● Lares 的代码量很少,这表明可以开发出更多类似的简单而强大的 AI 代理。
● 未来将会出现大量的 AI 代理,这将对用户体验、标准化、底层技术平台和商业产生影响。
● Lares 的涌现能力源于大型语言模型本身,这引发了关于问题解决能力是否固有于语言结构、涌现能力是否可以量化等研究问题。
● 作者提出了关于代理面向 API 设计、代理运行时抽象、嵌入式模型、用户界面设计、安全性和多代理协调等方面的未来研究方向。
总而言之,这篇博文展示了一个简单的 AI 代理如何通过巧妙的设计和大型语言模型的能力,展现出超出预期能力的涌现行为,并对未来 AI 代理的发展方向进行了展望。
目录
Lares的简介
2024年5月,Lares是一个模拟智能家居系统的项目,核心是一个简单的AI代理。该代理接收用户的指令,并通过OpenAI的函数调用功能与模拟器交互,最终实现用户目标。
模拟器包含五个房间,每个房间都有一个可以开关的灯,以及一些可移动的物品(例如狗和人)。 代理可以通过机器人来查看房间内隐藏的物品,但机器人只能在光线充足的房间内工作。 项目旨在展示一个简单的AI代理如何通过相对较少的代码展现出令人惊讶的解决问题能力,例如自主决定打开灯光以便机器人能够查看房间。 项目的代码已开源,并提供Web UI用于用户交互,用户可以在UI的左侧看到模拟家居的实时状态(包括代理无法访问的信息,如宠物和人的位置),在右侧输入指令并查看代理的行动记录。
lares 项目提供了一个简洁而有效的 AI 代理实现,展示了简单的 AI 如何通过函数调用和大型语言模型展现出复杂的涌现行为。
GitHub地址:GitHub - genmon/lares: A simple AI agent controlling a simulation of a smart home
文章地址:Lares smart home assistant: A toy AI agent exhibiting emergent behavior (Matt Webb)
1、未来发展
项目计划将模拟器与真实世界集成,例如使用 HomeKit 调用来控制真实的智能家居设备。
Lares的安装和使用方法
1、安装
>> 准备工作:复制 .env.template 文件并重命名为 .env,然后在 .env 文件中填写 OPENAI_API_KEY (OpenAI API 密钥)。
>> 安装依赖:运行 npm install 命令安装项目所需的 Node.js 包。
>> 启动项目:运行 npm run dev 命令启动开发服务器。 这将会启动一个Web界面,用户可以通过该界面与Lares交互。
2、代码结构:
项目主要包含以下几个部分:
app/:用户界面 (UI),使用 React 构建。
party/:包含两个主要文件:
server.ts:模拟智能家居环境,维护隐藏的世界状态,并提供 HTTP API 供代理进行交互。 它还包含一个同步 WebSocket 消息,以便调试视图可以看到世界状态。
assistant.ts:AI 代理,接收指令,包含函数调用逻辑。
party/functions.ts:定义了AI代理可用的函数,包括一个 intentFunction 用于决定调用哪个实际函数。
party/openai.ts:负责与 OpenAI API 通信,将响应限制为单个工具调用(工具 == 函数)。
party/world.ts 和 party/messages.ts:类型和常量定义。
3、函数调用循环:
Lares 的 AI 代理通过一个循环来处理用户的指令:
获取最新的世界状态。
调用 intentFunction (OpenAI) 来决定下一个要调用的函数。
调用 OpenAI 来获取所选函数的参数。
将函数调用添加到消息记录中。
使用函数名称和参数向 server.ts 中的模拟器发送 HTTP 请求,修改世界状态并获取结果。
将函数调用的结果添加到代理的记录中。
重复上述步骤,直到收到 halt 函数调用或达到最大函数调用次数(默认为 10)。
Lares的案例应用
项目提供了几个演示案例,展现了Lares的解决问题能力:
简单的指令遵循:用户指令 "turn on the light in the kitchen",Lares 会调用 toggleLight 函数并传入 "kitchen-light" 作为参数,成功后会输出 "The light in the kitchen is now on"。
问题解决:用户指令 "turn on the light for my dog",Lares 由于不知道狗的位置,会先使用 lookWithRobot 函数查看各个房间,发现房间太暗无法查看时,会自主调用 toggleLight 函数打开灯光,然后继续寻找狗。找到狗后,会打开狗所在房间的灯,并输出 "The bedroom light is now on for your dog, Bruno."。 这展现了Lares的自主决策和问题解决能力。
代理主动与用户交互:用户指令 "set the light in the office depending on if it's daytime",Lares 由于不知道是否白天,会调用 askUser 函数询问用户 "Is it currently daytime?",根据用户的回答(例如 "yes"),决定是否关闭办公室的灯,并输出相应的反馈信息。