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 代理驱动的智能家居助手模拟器,它展现出令人惊讶的解决问题能力。 >> 背景痛点:每天都有新的…...
实验3-实时数据流处理-Flink
1.前期准备 (1)Flink基础环境安装 参考文章: 利用docker-compose来搭建flink集群-CSDN博客 显示为这样就成功了 (2)把docker,docker-compose,kafka集群安装配置好 参考文章: …...
axios笔记
一、axios是什么 前端最流行的ajax请求库 二、json-server json-server可以帮助我们搭建http服务 为什么要搭建http服务? :是因为我们用axios的时候,需要向服务端发送请求 我们需要服务端这样一个角色,来与axios结合做实践 1.…...
python拆分Excel文件
按Sheet拆分Excel 或 按照某一列的不同值拆分Excel。文档样式如下: 结果:红色是按照Sheet名拆出的,蓝色和橙色是某个Sheet按照某列的不同值拆分的。 代码: # -*- coding: utf-8 -*- """ 拆分excel文件——按照…...
使用IntelliJ IDEA开发Gradle插件并发布到本地
博主所用软件版本为: IntelliJ IDEA 2024.1.4 (Community Edition) Android Studio Ladybug Feature Drop | 2024.2.2 Beta 1 1、制作gradle插件(IntelliJ IDEA 2024.1.4) 新建groovy工程,File–>New–>Project… 右键点…...
C# 通过smtp发送邮件(配置好了参数可以直接用)
可以直接用 using System; using System.Net; using System.Net.Mail;class EmailSender {// 发送邮件的函数,接收SMTP配置作为参数public static void SendEmail(string smtpServer, int smtpPort, string senderEmail, string senderPassword, string subject, s…...
【数据结构】栈和队列
目录 1.栈 1.1.栈的概念及结构 1.2.栈的实现 2.队列 2.1.队列的概念及结构 2.2.队列的实现 3.运用栈理解一道题 4.使用两个队列实现一个栈 1.栈 1.1.栈的概念及结构 首先,我们来了解一种新的数据结构——栈。栈是一种特殊的线性表,其只允许在固…...
使用 Spring Doc 为 Spring REST API 生成 OpenAPI 3.0 文档
Spring Boot 3 整合 springdoc-openapi 概述 springdoc-openapi 是一个用于自动生成 OpenAPI 3.0 文档的库,它支持与 Spring Boot 无缝集成。通过这个库,你可以轻松地生成和展示 RESTful API 的文档,并且可以使用 Swagger UI 或 ReDoc 进行…...
网络数据库安全和数据安全概述
1、数据安全的三要素 完整性,机密性,可用性 2、安全技术和措施 数据完整性技术、数据备份和恢复技术、数据加密技术、访问控制技术、用户管理和身份验证技术 3、数据库安全 数据库安全是指数据库的任何部分都不允许受到侵害,或未经授权的…...
STM32F10X与GD32工程创建区别
1.宏定义区别 GD32虽然与STM32F10X的管脚兼容,但是用keil创建工程时,GD32在选择芯片型号的时候就已经自己定义了宏。STM32F10x需要手动定义宏。在以下界面定义用到的单片机。 2.时钟区别。GD32最大时钟为120Mhz,所用的hal库里面的系统初始化会初始化时钟…...
cmakelist使用总结
支持能编译成在不同系统上运行程序的方法 我们代码就一份,但有时需要编译成arm32,有时需要编译成x86_64,或更多 1、首先先将代码定义一个名称: #将所有的源文件列为一个集合,集合名字叫做SRC_LISTS set(SRC_LISTS main.cpp A.cpp…...
【论文阅读】国际开源发展经验及其对我国开源创新体系建设的启示
作者:包云岗老师 包云岗老师是计算机体系结构方向的大牛,推动了体系结构方面的开源事业! 欢迎对本栏目感兴趣的人学习"一生一芯"~ 学习体会: 承接前文,唐志敏老师讲到已有的软硬件生态系统和开发成本制约了对新结构的探…...
React 初学者指南:从零开始构建第一个 React 应用
React 是一个用于构建用户界面的 JavaScript 库,它能够让我们高效地构建复杂的 UI。对于 React 初学者来说,最重要的就是理解它的基本概念以及如何开始使用它。本文将引导你从零开始构建你的第一个 React 应用 1.1. 安装 React 环境 首先,…...
力扣93题:复原 IP 地址
力扣93题:复原 IP 地址(C语言实现详解) 题目描述 给定一个只包含数字的字符串 s,复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址需满足以下条件: IP 地址由四个整数(每个整数位于 0 到 255 之间…...
字符编码发展历史
文章目录 发展历史- ASCII- ISO-8859- Unicode- UTF系列- UTF-8- UTF-16- UTF-32 - 中文编码- GB2312- GBK- GB18030 - 其他编码 归纳总结 发展历史 计算机的基础是二进制数字(0和1)。虽然人类日常使用的是各种字符(如字母、数字、符号等&am…...
aws codepipeline + github + sonarqube + jenkins实践CI/CD
https://blog.csdn.net/u011564831/article/details/144007981文章浏览阅读1.2k次,点赞31次,收藏21次。本文使用 Jenkins 结合 CodeBuild, CodeDeploy 实现 Serverless 的 CI/CD 工作流,用于自动化发布已经部署 lambda 函数。在 AWS 海外区&a…...
KNN_识别图片数字
1.实验过程省略灰度化处理过程,用已经处理好的txt数据进行训练 3.jpg from PIL import Image def imgtotxt(imgfile,txtfile,size (32,32)):image_file Image.open(imgfile).resize(size,Image.LANCZOS).convert(L)width,height image_file.sizef open(txtfile,…...
python 清华pip镜像源报HTTP error 403
报错信息 ERROR: HTTP error 403 while getting https://mirrors.tuna.tsinghua.edu.cn/pypi/web/packages/52/79/a64937a2185b91a96cc5406e3ea58120980c725543d047e112fb3084a972/fake_useragent-2.0.0-py3-none-any.whl (from https://mirrors.tuna.tsinghua.edu.cn/pypi/we…...
HTTP 网络技术学习:缓存;为什么有时候出现问题要清除浏览器缓存?客户端缓存和服务端缓存是什么。
目录: 问题的背景Http的缓存是什么客户端设置缓存,需要服务端允许?缓存分类:为什么会有客户端缓存和服务器端缓存?客户端缓存的参数设置,举例代码实现缓存 一、问题的背景 有时候网站出现问题࿰…...
极限科技三周年庆典:追求极致,共创未来科技新篇章
2024 年 12 月 3 日,一场盛大的庆典活动在香港 IFS 集团旗下长沙玛珂酒店璀璨启幕,极限科技迎来了其三周年的辉煌庆典。此次庆典不仅是对极限科技过往成就的回顾与庆祝,更是对未来科技梦想的展望并开始新的启航。 庆典现场,极限科…...
利用PHP和GD库实现图片拼接的方法
利用PHP和GD库实现图片拼接的方法主要涉及到加载图片资源、创建目标画布、将图片资源绘制到目标画布上,并最终输出或保存拼接后的图片。以下是实现图片拼接的基本步骤: 加载图片资源: 使用imagecreatefromjpeg()、imagecreatefrompng()或ima…...
SpringBoot自动配置底层核心源码
SpringBoot底层核心源码 一、工程创建二、进一步改造三、自动配置 探究SpringBoot的自动配置原理,我们可以自己写一个启动类的注解。 一、工程创建 首先创建一个工程,工程目录如下: 自定义一个启动函数: package org.springboo…...
故障识别 | GADF-CNN-SSA-XGBoost数据分类预测/故障识别(Matlab)
故障识别 | GADF-CNN-SSA-XGBoost数据分类预测/故障识别(Matlab) 目录 故障识别 | GADF-CNN-SSA-XGBoost数据分类预测/故障识别(Matlab)分类效果基本描述程序设计参考资料 分类效果 基本描述 格拉姆角场差(GADF&#…...
【VUE小型网站开发】优化通用配置 二
1. 引入 MyBatis Plus 1.1 添加依赖 <dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- My…...
基于阻塞队列的生产者消费者模型动画演示
一个基于阻塞队列的生产者消费者模型的动画演示: 这是打包好的程序。程序是用 QT 写的。 通过网盘分享的文件:CP模型.7z 链接: https://pan.baidu.com/s/1YjC7YiSqHGqdr6bbffaDWg?pwde6g5 提取码: e6g5 CP模型...
springSecurity认证流程
Spring Security 是spring家族中的一个安全管理框架。相比于另一个安全框架Shiro,它提供更丰富的功能和社区资源,但也较难上手。所以一般大项目用spring Security,小项目用Shiro。 一般web应用需要认证和授权,这也是spring Secur…...
vite5+vue3+Ts5 开源图片预览器上线
images-viewer-vue3:一款Vue3的轻量级图像查看器,它基于Flip动画技术,支持PC和h5移动网页预览照片,如果它是Vue3开发的产品。 npm开源地址:https://www.npmjs.com/package/images-viewer-vue3?activeTabreadme Flip 动画 < …...
Qt开发:元对象系统的介绍和使用
文章目录 概述元对象系统的概念和组成QObject 的详细介绍1.QObject 的主要特性信号与槽机制动态属性对象树(Object Trees)事件处理 2.QMetaObject的主要特性函数签名常用功能 概述 Qt本身并不是一种编程语言,它实质上是一个跨平台的C开发类库…...
.vscode文件中各个脚本需要修改的地方
NOTE: 此篇文章由VSCode编辑GCC for ARM交叉编译工具链Makefile构建OpenOCD调试(基于STM32的标准库)派生而来,对.vscode文件中各个脚本需要修改的地方作补充说明。 tasks.json 该json文件的主要作用:使用XX名称去执行…...
JavaScript模块化规范
欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...
第二篇:k8s工作流程
我们来看通过deployment部署pod的常规流程: kubectl向apiserver发送部署请求(例如使用 kubectl create -f deployment.yml)apiserver将 Deployment 持久化到etcd;etcd与apiserver进行一次http通信。controller manager通过watch a…...
什么是数据架构?
数据架构是如何使用数据的蓝图--它是数据和数据相关资源的高层结构,是整个组织的数据框架,包括模型、规则和标准。通过高效的数据架构,企业可以跟踪整个 IT 基础设施中数据的获取、移动、存储、安全性和可访问性。 数据架构总览 数据架构是…...
ChatGPT、Python和OpenCV支持下的空天地遥感数据识别与计算——从0基础到15个案例实战
在科技飞速发展的时代,遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究,空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。然而,对于许多专业人士而言,如何高效地处…...
微信小程序权限授权工具类
最近写微信小程序的时候需要在页面获取设备权限,又不想每个页面都写,就写了一个工具类方便管理 /*** 权限工具类用于获取授权* 权限工具类使用方法,注意调用时函数需要定义为异步函数 async* import PermissionUtils from "./permissio…...
CT中的2D、MPR、VR渲染、高级临床功能
CT中的2D、MPR、VR渲染 在CT(计算机断层扫描)中,2D、MPR(多平面重建)、VR(体积渲染)是不同的图像显示和处理技术,它们各自有独特的用途和优势。下面分别介绍这三种技术:…...
【MySQL】Windows下重启MySQL服务时,报错:服务名无效
1、问题描述 在终端中,停止、启动MySQL服务时报错:服务名无效 2、原因分析 1)权限不够 如果是权限不够,会提示:系统错误5,拒绝访问。 2)服务名错误 如果是服务名错误,会提示“…...
java枚举的基本用法
在 Java 中,枚举(enum)是一种特殊的类,用于定义一组常量。它可以使代码更具可读性和可维护性。枚举类型可以用于表示固定的、有限的值集合,比如星期几、季节、方向等。 以下是一些常见的枚举用法示例: 1.…...
Web网络安全
一. 浏览器系统安全方面,使用多进程方案,而js主线程运行在渲染进程中,渲染进程时运行在沙箱中的,没有对本地OS文件的直接读写权限,所以需要通过IPC与浏览器主线程通信,才可以获取cookie等信息,这…...
【分子材料发现】——GAP:催化过程中吸附构型的多模态语言和图学习(数据集处理详解)(二)
Multimodal Language and Graph Learning of Adsorption Configuration in Catalysis https://arxiv.org/abs/2401.07408Paper Data: https://doi.org/10.6084/m9.figshare.27208356.v2 1 Dataset CatBERTa训练的文本字符串输入来源于Open Catalyst 2020 (OC20…...
matlab Delaunay三角剖分提取平面点云的边界
目录 一、算法原理1、算法概述2、参考文献二、代码实现三、结果展示四、详细过程版一、算法原理 1、算法概述 Delaunay三角网在生成三角网过程中,以最近的三点形成三角形,且各三角形的边皆不相交,每条边都使用所在的三角形的顶点验算并记录相应的2个顶点坐标。整个验算过程…...
Spring07——AOP通知以及几个相关案例
切入点表达式 注意,不是参数,是参数类型 可以使用通配符描述切入点,快速描述 ■ *:单个独立的任意符号,可以独立出现,也可以作为前缀或者后缀的通配符出现 execution(public∗com.itheima.∗.UserServi…...
【AI工具】强大的AI编辑器Cursor详细使用教程
目录 一、下载安装与注册 二、内置模型与配置 三、常用快捷键 四、项目开发与问答 五、注意事项与技巧 参考资料 近日,由四名麻省理工学院(MIT)本科生共同创立的Anysphere公司宣布,其开发的AI代码编辑器Cursor在成立短短两年…...
CV工程师专用键盘开源项目硬件分析
1、前言 作为一个电子发烧友,你是否有遇到过这样的问题呢。当我们去查看函数定义的时候,需要敲击鼠标右键之后选择go to definition。更高级一些,我们使用键盘的快捷键来查看定义,这时候可以想象一下,你左手按下ALT&a…...
STM32标准固件库官网下载方法
Keil标准固件库官网下载方法 Keil中DFP.pack下载方法 打开keil官网 Keil 官网 www.keil.com 点击产品 点击“Products” 点击 “Arm Cortex-M” 下拉找到CMSIS-Packs 点击CMSIS-Pack index 搜索对应的MCU,我这里是STM32F4 注意搜索对应系列就好 点击下载...
数据库原理实验实验四 统计查询和组合查询
实验目的和要求加深对统计查询的理解,熟练使用聚簇函数。 实验环境SQL SERVER 2008 SQL Server Management Studio 20 实验内容与过程题目一: 学生(学号,年龄,性别,系名) 课程(课号,课名,学分,学时) 选课(学号,课号,成绩) 根据上面基本表的信息完成下列查…...
【电子通识】案例:USB Type-C USB 3.0线缆做直通连接器TX/RX反向
【电子通识】案例:连接器接线顺序评估为什么新人总是评估不到位?-CSDN博客这个文章的后续。最近在做一个工装项目,需要用到USB Type-C线缆做连接。 此前已经做好了线序规划,结果新人做成实物后发现有的USB Type-C线缆可用,有的不行。其中发现USB3.0的TX-RX信号与自己的板卡…...
【Linux从青铜到王者】数据链路层(mac,arp)以及ip分片
局域网通信 通过之前的学习,我们了解了应用层,传输层,网络层的协议和作用,这里先做个总结 应用层——http,https协议,也可以自己定义一套,作用是进行数据的处理传输层——tcp,udp协…...
MyBatis注解开发
1.配置MyBatis_ssm配置mybits-CSDN博客 2.Mybaits实现增删改查-CSDN博客 3.MyBatis构建动态SQL-CSDN博客 目录 一、注解开发的定义 二、SQL常用注解 三、使用注解完成CRUD 1.查找所有 2.通过id查询 3.增加 4.更新 5.删除 6.查询数量 7.模糊查询 一、注解开发的定义 …...
Unity引擎UI滚动列表——滚动复用扩展应用
大家好,我是阿赵。 之前介绍了滚动复用的基础用法。上一个例子里面,是一个竖向单列的滚动列表展示。这一次来扩展一下用法。如果不知道上一次例子的,可以先往前翻一下,上面有例子的详情、原理解释和代码。 一、 多列的滚动复…...
MySQL 死锁排查
私人博客传送门 MySQL 死锁排查...