【LLM】Generative Agents和代码实践

note

  • Generative Agents是2023年斯坦福提出的agent小镇,通过memory->reflection->planning的框架提高NPC的行为目标性,给游戏NPC的灵活设计带来了可能。
  • Generative Agents是一种多智能体交互的框架,它模拟现实中的人类行为。这些Agent可以起床,做早餐,上班;艺术家可以画画,作者可以写作;他们可以形成观点,注意到彼此,并发起对话;他们记住并反思过去的日子,同时规划下一天。这里可以看到其中每个Agent具有共同设定和特色设定,拥有记忆存储功能,和决策规划能力。

文章目录

  • note
  • 一、Generative Agents
    • A. 简介:
    • B. Tech Stack:
    • C. 本地运行:
  • 二、AI Town
    • A. 简介:
    • B. 相关论文总结:
    • C. Tech Stack:
    • D. AI-town Docker部署:
  • Reference

一、Generative Agents

Generative Agents: Interactive Simulacra of Human Behavior (新版)
链接:https://github.com/drudilorenzo/generative_agents?tab=readme-ov-file#setting-up-the-environment

在这里插入图片描述

A. 简介:

  • 由斯坦福大学与DeepMind团队联合发布的开源项目。
  • 该代码库是研究论文"Generative Agents: Interactive Simulacra of Human Behavior."的配套资源。旨在创建生成agents,这些agents能够在虚拟环境中表现出逼真的人类行为。
  • 结果显示,agents在控制条件下能够产生可信的个体行为。然而,在更复杂的社交情境中,仍存在一些局限。例如,agents有时会过度关注细节,导致行为不稳定。

Generative Agents项目的设计思路主要包括以下几个方面:

  • 为每个AI编写人设:例如,John Lin是Willow市场和药房的药店店员,他喜欢帮助别人。他总是想方设法使顾客买药的过程更容易。
  • 创建可互动的小镇:智能体将会在这个被称为SmallVille的小镇里生活。研究人员为小镇配置了很多可以互动的组件,有居民区,Cafe,酒吧,大学,商店,公园。
  • 为每个AI创建记忆流管理系统:智能体使用自然语言储存与它相关的完整记录,将这些记忆随着时间的推移合成为更高层次的思考,并动态地检索它们来规划行为。

在这里插入图片描述

B. Tech Stack:

  • Programming Languages: Python
  • Libraries/Frameworks:
    • NumPy (numerical operations)
    • Matplotlib (visualization)
    • Pygame (game development)
    • 3D Engine: Unity (for graphics and interactions)

C. 本地运行:

  1. 克隆GitHub存储库
git clone https://github.com/drudilorenzo/generative_agents.git
  1. 创建Conda环境 & 下载安装包
conda create -n simulacra python=3.9.12 pip
conda activate simulacra
pip install -r requirements.txt

run_frontend.shrun_backend.sh更改conda env path(改为你自己的)

#!/bin/bash
BACKEND_SCRIPT_PATH="reverie/backend_server"
BACKEND_SCRIPT_FILE="reverie.py"
CONDA_ENV="simulacra" // <-------- 若需要,修改这行为你的conda环境的名字
LOGS_PATH="../logs"echo "Running backend server at: http://127.0.0.1:8000/simulator_home"
cd ${BACKEND_SCRIPT_PATH}
source /Users/$USER/miniconda3/bin/activate ${CONDA_ENV} // <-------- 修改这行Timestamp=$(date +"%Y-%m-%d_%H-%M-%S")
echo "Timestamp: ${Timestamp}"
mkdir -p ${LOGS_PATH}
python ${BACKEND_SCRIPT_FILE} --origin ${1} --target ${2} | tee ${LOGS_PATH}/${Timestamp}.log
  1. Config 创建
    在根目录下创建一个名为 openai_config.json 的文件。把 "your-key" 换成开放平台的api key。
{"client": "openai","model": "glm-4","model-key": "your-key","model-costs": {"input": 0.5,"output": 1.5},"embeddings-client": "openai","embeddings": "embedding-3","embeddings-key": "your-key","embeddings-costs": {"input": 0.02,"output": 0.0},"experiment-name": "simulacra-test","cost-upperbound": 10
}
  1. 启动环境服务器
    可更改 PORT-NUMBER,可不填。默认port 8000
./run_frontend.sh <PORT-NUMBER>
  1. 启动模拟服务器

在另外一个terminal

有两个场景可填,第一个是3个agent,第二个是25个agent:

  • base_the_ville_isabella_maria_klaus
  • base_the_ville_n25
./run_backend.sh <场景> <名字>

例如:

./run_backend.sh base_the_ville_isabella_maria_klaus test0

跑起来后,会让你enter option,请注意,您需要将上述的<step-count>替换为一个整数,以表示您想要模拟的游戏步骤数量。例如,如果您想模拟100个游戏步骤,您应该输入run 100。一个游戏步骤在游戏中代表10秒。

注意:刚开始agent都在睡觉,只有run 2000步以上,agent才会移动(等待时间略长)。

run <step-count>

当enter option再次出现:

  • 输入 fin 保存并离开游戏
  • 输入 exit 离开游戏
  • 输入 run <step-count> 继续游戏

二、AI Town

https://github.com/a16z-infra/ai-town
demo:https://www.convex.dev/ai-town
在这里插入图片描述

A. 简介:

AITown是一个虚拟小镇模拟项目,AI智能体可以彼此互动,也可以与用户进行对话、工作和活动等任务。受该研究论文启发Generative Agents: Interactive Simulacra of Human Behavior。

B. 相关论文总结:

这篇论文描述了一种生成型智能体的架构,该架构提供了一种机制,能够存储智能体的全面经历记录,通过反思加深其对自身和环境的理解,并从中检索出信息以指导智能体的行为。

C. Tech Stack:

Game engine, database, and vector search: Convex
Default chat model is llama3(我们换成了glm-4和智谱清言智能体)and embeddings with mxbai-embed-large(我们换成了embedding-3)。
Pixel Art Generation: Replicate, Fal.ai
Background Music Generation: Replicate using MusicGen

D. AI-town Docker部署:

  1. 克隆GitHub存储库
git clone https://github.com/a16z-infra/ai-town.git
  1. 在启动Docker之前
    修改你的 package.json 文件,给前端服务器(Vite)添加 --host 选项:
{"name": "ai-town","version": "0.0.0","private": true,"scripts": {"dev": "npm-run-all --parallel dev:frontend dev:backend","build": "tsc && vite build","lint": "eslint .","predev": "just convex dev --run init --until-success","dev:backend": "just convex dev --tail-logs","dev:frontend": "vite --host", // <--------- 修改这行"test": "NODE_OPTIONS=--experimental-vm-modules jest --verbose","le": "vite src/editor/"}
}
  1. 启动Docker Compose
    运行以下命令来启动Docker Compose:
docker-compose up --build
  1. 启动交互式Docker终端
    在另一个终端中,仍在 aitown 目录中,启动交互式Docker终端:
docker-compose exec ai-town /bin/bash
  1. 本地运行
  • 下载并解压本地Convex后端:
    curl -L -O https://github.com/get-convex/convex-backend/releases/download/precompile/convex-local-backend-x86_64-unknown-linux-gnu.zip
    unzip convex-local-backend-x86_64-unknown-linux-gnu.zip
    
  • 确认 convex-local-backend 文件在目录中,然后删除压缩包:
    rm convex-local-backend-x86_64-unknown-linux-gnu.zip
    
  • 将文件设为可执行:
    chmod +x /usr/src/app/convex-local-backend
    
  • 启动Convex后端服务器:
    ./convex-local-backend
    
  1. 启动 aitown 服务器的交互式Docker终端
  • 在另一个终端中,进入 aitown 目录,重新启动:
    docker-compose exec ai-town /bin/bash
    
  • 配置 socat:使用你主机的IP地址(不是Docker的IP):
    HOST_IP=YOUR-HOST-IP
    socat TCP-LISTEN:11434,fork TCP:$HOST_IP:11434 &
    
  • 启动 AI Town:
    npm run dev
    
  1. 重新启动
  • 启动容器后,只需在 AI-town 文件夹中打开两个终端,运行以下命令:
    docker-compose exec ai-town /bin/bash
    
  • 启动 Convex 后端服务器:
    bash ./convex-local-backend
    
  • 然后在第二个终端中配置 socat 并启动 AI Town:
    HOST_IP=YOUR-HOST-IP
    socat TCP-LISTEN:11434,fork TCP:$HOST_IP:11434 &
    npm run dev
    

Reference

[1] https://github.com/a16z-infra/ai-town
[2] 文献阅读与分析"Generative Agents: Interactive Simulacra of Human Behavior"
[3] 我让六个AI合租,居然出了个海王.林亦LYi_bzhan
[4] 斯坦福大学AI小镇论文《Generative Agents :interactive simulacra of human behavior》(全文翻译)
[5] LLM Agent智能体综述(万字长文)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/4965.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

K. Farm Management 【CCPC2024哈尔滨站】

K. Farm Management 思路: 很容易想到的策略&#xff1a; 给每个作物都安排最短的时长 l l l&#xff0c;剩下的时间作为可支配时间。选择删除收益最高的作物&#xff0c;然后将尽可能多的可支配时间用于这个作物。或者选择删除收益低时间还长的作物&#xff0c;然后将时间解…

智能 ODN 系统研究与设计

智能 ODN 系统研究与设计 摘 要&#xff1a;为了解决ODN面临的光纤错综复杂&#xff0c;故障定位低效等问题&#xff0c;引入电子标签&#xff0c;智能OTDR技术&#xff0c;提出了一种基于电子标签、光纤检测笔和智能OTDR故障监测的智能 ODN 解决方案,并重点讲述了智能ODN系统的…

Openlayers实现长度测量

概述 在 Openlayers 中,计算两点之间的距离,通常会用到ol/sphere模块。ol/sphere模块主要用于处理与球体(特别是地球球体)相关的数学和几何计算。而长度测量主要用到ol/sphere中的getDistance函数。 getDistance函数用于计算地球表面两点之间的距离,通常用于经纬度坐标。…

xftp连接中不成功 + sudo vim 修改sshd_config不成功的解决方法

我们使用sudo vim不成功&#xff0c;但是我们使用sudo su就可以 了&#xff01; root用户权利更大&#xff01; 喵的&#xff0c;终于成功了&#xff0c;一个xftp连接半天不成功。&#xff08;添加上面的内容就可以连接成功了↑&#xff09;

常用的c++特性-->day02

可调用对象 案例 #include <iostream> #include <string> #include <vector> using namespace std;using funcptr void(*)(int, string);int print(int a, double b) {cout << a << ", " << b << endl;return 0; } // …

应急车道占用检测算法的技术方案与应用

应急车道是高速公路上的生命通道&#xff0c;专门用于救护车、消防车、警车等紧急车辆通行&#xff0c;帮助应对突发状况。然而&#xff0c;一些驾驶员出于各种原因违规占用应急车道&#xff0c;阻碍救援车辆的正常通行&#xff0c;导致交通救援效率大幅下降&#xff0c;甚至加…

卡尔曼滤波算法Kalman filter algorithm

一、假如 状态向量服从高斯分布&#xff1a; 而且状态转移是线性的&#xff1a; 测量是状态的线性关系&#xff08;带噪声&#xff09; 初始状态的置信度也是正态分布 二、卡尔曼滤波的算法流程为 疑问&#xff1a;多测量融合&#xff0c;是不是用不同的传感器测量值去重复5…

java_继承

1.为啥用 继承? Pupil类 package com.hspedu.extend;// 小学生->模拟小学生考试的情况 public class Pupil {public String name;public int age;private double score;public void setScore(double score) {this.score score;}public void testing() {System.out.printl…

Redis 缓存击穿

目录 缓存击穿 什么是缓存击穿&#xff1f; 有哪些解决办法&#xff1f; 缓存穿透和缓存击穿有什么区别&#xff1f; 缓存雪崩 什么是缓存雪崩&#xff1f; 有哪些解决办法&#xff1f; 缓存预热如何实现&#xff1f; 缓存雪崩和缓存击穿有什么区别&#xff1f; 如何保…

【Redis的安装以及主从复制的搭建】配置Redis的哨兵模式

文章目录 一、安装Redis1、上传、解压、重命名2、安装GCC环境3、编译源码4、进行安装5、修改配置文件redis.conf 二、Redis主从复制搭建1、创建文件夹用来实现主从复制 三、配置Redis的哨兵模式1、创建文件夹2、修改sentinel.conf配置文件3、启动 一、安装Redis 1、上传、解压…

WPF中的转换器

单值转换器 1.创建项目后下载两个NuGet程序包 2.先定义一个转换器实现IValueConverter接口 using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; usin…

GEE Ui——批量查询Sentinel-2 图像无云区域的可视化应用(提供缩略图)

目录 简介 功能选项 函数 Map.clear() No arguments. Returns: ui.Map Map.onClick(callback) Arguments: Returns: String reduceRegion(reducer, geometry, scale, crs, crsTransform, bestEffort, maxPixels, tileScale) Arguments: Returns: Dictionary toLis…

汇编练习-1

1、要求 练习要求引自《汇编语言-第4版》实验10.3(P209页) -编程&#xff0c;将data段中的数据&#xff0c;以10进制的形式显示出来 data segment dw 123,12666,1,8,3,38 data ends 2、实现代码(可惜没找到csdn对8086汇编显示方式) assume cs:codedata segmentdw 16 dup(0) ;除…

xml格式转为txt格式?

数据集的标签格式为xml格式&#xff0c;转为yolo的训练格式&#xff1a; 1.创建一个格式转化的.py文件将下面代码复制&#xff1a; import os import glob import xml.etree.ElementTree as ETdef get_classes(classes_path):with open(classes_path, encodingutf-8) as f:cl…

M - Weird Ceiling 【CCPC2024哈尔滨站】

M - Weird Ceiling 思路: 注意到 f ( n , i ) f(n,i) f(n,i) 的值为 n y ( i ) \frac{n} {y(i)} y(i)n​ &#xff0c;其中 y ( i ) y(i) y(i) 为 n n n 小于等于 i i i 的最大因数。 那么先找到 n n n的所有因数&#xff0c;包括 1 1 1和它本身&#xff0c;在数组a[]中升…

机器学习与数学公式

目录 在机器学习中&#xff0c;将公式应用到算法程序上主要涉及以下几个步骤&#xff1a; 1、数学公式转换成编程逻辑&#xff1a; 2、选择合适的编程语言和工具&#xff1a; 3、使用矩阵运算和优化方法&#xff1a; 4、实现算法逻辑&#xff1a; 5、将公式封装成函数…

基于微信小程序的校园失物招领系统的研究与实现(V4.0)

博主介绍&#xff1a;✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

芯突破 | 国产PCIe桥接芯片掀起的连接革命

PCIe桥接芯片应运而生 随着计算机技术的快速发展&#xff0c;硬件性能不断提升&#xff0c;数据传输速度的需求日益增长&#xff0c;PCIe总线凭借其高带宽和低延迟的优势&#xff0c;已经成为主流。然而&#xff0c;由于不同设备和PCIe总线之间的接口差异&#xff0c;直接连接…

6款高效网页界面原型设计软件:提升设计效率的利器

在网页设计领域&#xff0c;原型设计是将创意转化为实际产品的关键环节。一款优秀的网页界面原型设计软件能够帮助设计师快速、准确地呈现设计思路&#xff0c;优化用户体验&#xff0c;并提高团队协作效率。以下是6款在网页界面原型设计方面表现出色的软件。 1. 即时设计 即…

计算机网络综合题

IP数据报的划分 CRC差错检测 冗余码的计算 因此&#xff0c;余数是1110&#xff0c;传输的数为11010110111110。在传输过程中最后两位变成o&#xff0c;接收端能够发现&#xff0c;因为11010110111110除以10011余数不为0。 子网划分 暴力求解法 &#xff08;定长子网划分大量…