当前位置: 首页 > news >正文

LLMs之Agent之Lares:Lares的简介、安装和使用方法、案例应用之详细攻略

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的简介

1、未来发展

Lares的安装和使用方法

1、安装

2、代码结构:

3、函数调用循环:

Lares的案例应用


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"),决定是否关闭办公室的灯,并输出相应的反馈信息。

相关文章:

LLMs之Agent之Lares:Lares的简介、安装和使用方法、案例应用之详细攻略

LLMs之Agent之Lares:Lares的简介、安装和使用方法、案例应用之详细攻略 导读:这篇博文介绍了 Lares,一个由简单的 AI 代理驱动的智能家居助手模拟器,它展现出令人惊讶的解决问题能力。 >> 背景痛点:每天都有新的…...

1-1.mysql2 之 mysql2 初识(mysql2 初识案例、初识案例挖掘)

一、mysql2 概述 mysql2 是一个用于 Node.js 的 MySQL 客户端库 mysql2 是 mysql 库的一个改进版本,提供了更好的性能和更多的功能 使用 mysql2 之前,需要先安装它 npm install mysql2 二、mysql2 初识案例 1、数据库准备 创建数据库 testdb CREAT…...

企业邮箱为什么不能经常群发邮件?

企业邮箱是用企业域名作为后缀的邮箱,虽然企业邮箱确实具备群发邮件的功能,但它更适用于企业内部的群发,而非用于外部推广。如果是在企业邮件域内进行群发,通常可以借助企业邮箱的邮件列表来实现。然而,对于域外的大量…...

集成运算放大电路反馈判断

集成运算放大电路 一种具有很高放大倍数的多级直接耦合放大电路,因最初用于信号运算而得名,简称集成运放或运放 模拟集成电路中的典型组件,是发展最快、品种最多、应用最广的一种 反馈 将放大电路输出信号的一部分或全部通过某种电路引回到输…...

媒体查询、浏览器一帧渲染过程

文章目录 媒体查询语法示例根据视口宽度应用不同的样式根据设备像素比应用不同的样式根据方向应用不同的样式 使用场景 浏览器一帧的渲染过程 媒体查询 媒体查询(Media Query)是CSS3中的一个重要特性,它允许开发者根据设备的特定条件&#x…...

高级排序算法(一):快速排序详解

引言 当我们处理大规模数据时,像冒泡排序、选择排序这样的基础排序算法就有点力不从心了。这时候,快速排序(Quick Sort)就派上用场了。 作为一种基于分治法的高效排序算法,快速排序在大多数情况下可以在O(n log n)的时…...

3.2 网络协议IP

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 1 定义2 虚拟互连网络3 分组在互联网中的传送4 IPv4 地址 1 定义 网际协议 IP是 TCP/IP 体系中两个最主要的协议之一,也是最重要的互连网协议之一。IPv4 和 IPv6 …...

2024 一带一路暨金砖国家技能发展与技术创新大赛【网络安全防护治理实战技能赛项】样题(中职组)

2024 一带一路暨金砖国家技能发展与技术创新大赛【网络安全防护治理实战技能赛项】样题(中职组) 1.基础设置和安全强化(xxx 分)1.3. 任务内容: 2.安全监测和预警(xxx 分)2.1. 任务一:建立目录安…...

excel如何让单元格选中时显示提示信息?

现象: 当鼠标放在单元格上,会出现提示信息: 先选中单元格选择上方的【数据】-【数据验证】图标选择【输入信息】勾上【选定单元格时显示输入信息】输入【标题】,如:最上方图中的:姓名:输入【输…...

oscp备考,oscp系列——Kioptix Level 3靶场

Kioptix Level 3 oscp备考,oscp系列——Kioptix Level 3靶场 nmap扫描 主机发现 └─# nmap -sn 192.168.80.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-09 00:33 CST Nmap scan report for 192.168.80.1 Host is up (0.00014s latency). MAC…...

信创改造-达梦数据库配置项 dm.ini 优化

设置模式:兼容MySQL,COMPATIBLE_MODE 4 内存占比:90%,MAX_OS_MEMORY 90 目标内存:2G(不影响申请内存超过2G,但这部分内存不会回收),MEMORY_TARGET 2000 参考 https:…...

日本IT-需要掌握哪些技术框架?一篇通读

在日本从事IT工作,需要掌握的技术框架与全球范围内的趋势相似,但也有一些特定的技术和框架在日本更为流行。以下是一些在日本IT行业中常用的技术框架: Java后端 Java语言:Java在日本是一门非常稳定且受欢迎的编程语言&#xff0…...

错题:Linux C语言

题目&#xff1a;手写代码&#xff1a;判断一个数&#xff08;int类型的整数&#xff09;中有有多少1 题目&#xff1a;手写代码&#xff1a;判断一个数(转换成二进制表示时)有几个1 #include <stdio.h> int main(int argc, const char *argv[]) { //判断一个数&#xf…...

多表设计-一对多一对多-外键

一.多表设计概述&#xff1a; 二.一对多&#xff1a; 1.需求&#xff1a; 根据 页面原型 及 需求文档&#xff0c;完成部门及员工模块的表结构设计 -->部门和员工就是一对多&#xff0c;因为一个部门下会有多个员工&#xff0c;但一个员工只归属一个部门 2.页面原型&…...

Ch1:古今的manipulation与仿真、ROS和Drake介绍

不同的机器人研究与仿真 以前&#xff08;15年左右&#xff09;只能用仿真环境训练行走机器人&#xff0c;对于manipulation任务&#xff0c;有两个问题&#xff1a;1&#xff09;相机不真实&#xff1b;2&#xff09;接触行为太复杂。 I remember just a few years ago (~201…...

JAVA秋招面试题精选-第一天总结

目录 分栏简介&#xff1a; 问题一&#xff1a;订单表每天新增500W条数据&#xff0c;分库分表应该怎么设计&#xff1f; 问题难度以及频率&#xff1a; 问题导向&#xff1a; 满分答案&#xff1a; 举一反三&#xff1a; 问题总结&#xff1a; 问题二&#xff1a;解释…...

服务器卸载安装的 Node.js

卸载安装的 Node.js 版本&#xff0c;具体步骤取决于你是通过包管理器&#xff08;如 yum 或 dnf&#xff09;安装的&#xff0c;还是通过 nvm (Node Version Manager) 安装的。以下是针对这两种情况的指南。 通过包管理器卸载 Node.js 如果你是通过 yum 或 dnf 安装的 Node.…...

深度解析 Ansible:核心组件、配置、Playbook 全流程与 YAML 奥秘(下)

文章目录 六、playbook运行playbook方式Playbook VS ShellScripts忽略错误 ignore_errorshandlers和notify结合使用触发条件playbook中tags的使用playbook中变量的使用invertory参数模板templates迭代与条件判断迭代&#xff1a;with_items迭代嵌套子变量roles 六、playbook 运…...

使用go生成、识别二维码

1、下载 # 创建目录 # 进入目录 # 执行 go mod init xxx 命令&#xff08;即&#xff1a;在当前目录初始化创建一个模块&#xff09;# 下载gozxing go get github.com/makiuchi-d/gozxing 2、生成二维码 package mainimport ("image/png""os""gith…...

LLama系列模型简要概述

LLama-1&#xff08;7B, 13B, 33B, 65B参数量&#xff1b;1.4T tokens训练数据量&#xff09; 要做真正Open的AI Efficient&#xff1a;同等预算下&#xff0c;增大训练数据&#xff0c;比增大模型参数量&#xff0c;效果要更好 训练数据&#xff1a; 书、Wiki这种量少、质量高…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...