斯坦福小镇升级版——AI-Town搭建指南

news2024/12/24 20:43:10

导语:
8月份斯坦福AI小镇开源之后,引起了 AIGC 领域的强烈反响,但8月份还有另一个同样非常有意义的 AI-Agent 的项目开源,a16z主导的 AI-Town
本篇文章主要讲解如何搭建该项目,如有英文基础或者对这套技术栈熟悉,可直接参考该项目的 Readme;搭建该项目需要一台服务器、OpenAI 的 Key,以及能够访问外网,需要自行准备

文章目录

      • 技术栈简介
      • 部署流程
      • 后话

技术栈简介

笔者之前搭建过斯坦福版本的AI小镇,也写过流程和代码分析,参见这篇文章

因此在搭建 AI-Town 的时候也对两者的技术栈和搭建过程进行了对比,后续还将再用一篇文章分析 AI-Town 的源码

对比来说,斯坦福的AI小镇是用 Python 搭建的环境,但用了H5的游戏引擎Phaser作为前端表现层,部署流程中遇到的问题靠自己摸索,还需要解决网络不通等问题(PS:笔者个人认为更像一个实验而非完整项目)

AI-Town 用 TypeScript/JavaScript 完成前后端所有代码的编写,虽然接入的组件和平台比较多,但相对的可扩展性更高(比如生成像素图和音乐等),搭建流程基本是全英文文档,但基本没有遇到什么卡点,列一下主要的技术栈:

  • 游戏引擎和数据库(Game engine & Database):Convex
  • 向量数据库(VectorDB):Pinecone
  • 登录认证(Auth):Clerk
  • 文本生成模型(Text model):OpenAI
  • 部署(Deployment):Fly(支持Docker)
  • 像素图生成(Pixel Art Generation):Replicate、Fal.ai

部署流程

因为 GitHub 上的部署教程是全英文的,笔者作为后台对其中的部分工具和平台也不甚熟悉,所以详细记录了下搭建时的流程以及遇到的问题,部分平台可能需要能访问外网,请自行解决

Convex 是由开发 AI-Town 的风投公司 a16z 投资的一款支持用 TypeScript 全栈开发应用程序的平台,能使各种规模的工程团队能够构建快速、可靠的动态应用程序,无需复杂的后端工程或数据库管理

目前为止笔者还不太熟悉 Convex 的架构和开发流程,但整个项目高度依赖 Convex,后续在阅读源码时会一起介绍该平台(目前中文资料很少,近乎没有)

  • 首先clone仓库以及安装环境,如果环境安装失败记得检查 node 版本;正常运行到 npm run dev 命令时会发现报错(提示缺失变量),因为这里缺少运行程序的必要变量
git clone https://github.com/a16z-infra/ai-town.git
cd ai-town
npm install
npm run dev
  • 从下一步开始将配置运行所需的工具和环境,注意里面提到的变量,需要汇总填入 Convex的变量
  • 配置 Clerk 组件,用于平台的登录验证,可以用 GitHub 账号登录,点击 Add application 后取个名字即可
    在这里插入图片描述
    进入创建的 application,点击左侧 API Keys 选项,把右侧的两条 NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY and CLERK_SECRET_KEY 写入 Git 项目根目录下的 .env.local 文件(在前面步骤中自动生成)
    在这里插入图片描述
  • Clerk 还需要点击左侧的 JWT Templates ,新建一个 template
    在这里插入图片描述
    保存这里的 JWKS Endpoint 值,作为下面的 CLERK_ISSUER_URL 配置项
    在这里插入图片描述
  • 下一步是配置 OpenAI Key,这里不做多说,会作为后面的 OPENAI_API_KEY 配置项
  • 配置Pinecone,Pinecone是一个向量数据库,点击右侧的 Create Index
    在这里插入图片描述
    这里页面中的 Name 将作为 PINECONE_INDEX_NAME 配置项,红框处填写 1536,其他部分都保持默认选项即可
    在这里插入图片描述
    创建成功后点击右侧 API Keys,创建或者直接用默认的API Key,保存 Environment 为 PINECONE_ENVIRONMENT 配置项,Value 为 PINECONE_API_KEY配置项(这里与Git里给的示例Environment前缀不一样也没事)
    在这里插入图片描述
  • (可选项)项目还用到了 Replicate 生成像素图片,通过 GitHub 账号登录,进入 API页面,选择任意一个Key 作为 REPLICATE_API_TOKEN
    在这里插入图片描述
  • 前面的步骤中提到的配置项都需要保存到 Convex 的控制台,进入自己创建的项目,点击右侧 Settings,然后弹出页面中选择 Environment variables
    在这里插入图片描述
    直接以 xxx = xxx 的格式将之前的 Key 都复制粘贴进来即可,下面是笔者配置的 Key,可以从前文中找到对应的值以及来源
    在这里插入图片描述
  • 全部都粘贴完成后,回到命令行,并运行下面的命令,即可启动程序
npm run dev

运行起来后,默认监听的是 3000 端口,可通过 localhost:3000 访问页面(附一个跑起来的截图
在这里插入图片描述

后话

GitHub 的英文文档其实已经足够清晰,笔者只是补充了一些详细的说明,后续还会写一篇代码分析


原创不易,转载请注明出处

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

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

相关文章

监控系统prometheus部署

wget -c https://github.com/prometheus/prometheus/releases/downloa d/v2.37.1/prometheus-2.37.1.linux-amd64.tar.gz下载必要的组件。 mkdir -p /opt/prometheus创建目录。 此文章为9月Day 8学习笔记,内容来源于极客时间《运维监控系统实战笔记》。

docker安装开发常用软件MySQL,Redis,rabbitMQ

Docker安装 docker官网:Docker: Accelerated Container Application Development docker镜像仓库:https://hub.docker.com/search?qnginx 官网的安装教程:Install Docker Engine on CentOS | Docker Docs 安装步骤 1、卸载以前安装的doc…

Reqable项目技术栈全方面总结

大家好,最近有知乎网友问我Reqable技术选型的问题,恰好Reqable也刚刚发布了非常重要的1.3版本更新,所以此次写一篇关于Reqable项目技术栈的全方面总结。 本篇文章的目的,是向大家分享我关于Reqable项目的一些技术思考、细节和填坑…

鸿蒙应用程序入口UIAbility详解

一、UIAbility概述 UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。每一个UIAbility实例,都对应于一个最近任务列表中的任务。一个应用可以有一个UIAbility&am…

Kafka生产与消费示例

Kafka生产与消费流程 Kafka是一款消息中间件,消息中间件本质就是收消息与发消息,所以这节课我们会从一条消息开始生产出发,去了解生产端的运行流程,然后简单的了解一下broker的存储流程,最后这条消息是如何被消费者消…

GNU Linux 的退出码规定

参考:https://tldp.org/LDP/abs/html/exitcodes.html 从这张表里来看,小于 128 的是被程序员捕捉的错误,大于等于 128 的是真正的 bugs ?

MySQL卸载干净再重新安装【Windows】

家人们,谁懂啊? 上学期学的数据库,由于上学期不知道为什么抽风,过得十分的迷,上课跟老师步骤安装好了Mysql,但后面在使用的过程中出现了问题,而且还出现了忘记密码这么蠢的操作,后半…

linux设置登录超时自动退出

问题背景 最近登录某台linux服务器,经常遇到超时自动退出现象,如下图: 是因为服务器设置了超时时间,如果某个超时时间段内服务器没有任何操作,则会自动注销 解决方法 查看服务器设置的超时时间(TMOUT 变量的值)&am…

非科班菜鸡算法学习记录 | 代码随想录算法训练营第59天||503.下一个更大元素II 42. 接雨水

503. 下一个更大元素 II 知识点&#xff1a;单调栈 状态&#xff1a;不会&#xff0c;全靠卡哥 思路&#xff1a; 用i%nums.size()来代替i&#xff0c; 用for遍历时遍历两次 // 版本二 class Solution { public:vector<int> nextGreaterElements(vector<int>&am…

TLA+学习记录1——hello world

0x01 TLA是个好工具 编程人员一个好习惯是凡事都想偷懒&#xff0c;当然是指要科学地偷懒&#xff0c;而不是真的偷懒。一直想找到一种能检验写出的代码&#xff0c;做出的设计是否真的完全正确&#xff0c;而不是靠经验检视、代码Review、反复测试去检验。因为上述方法不管怎…

MATLAB中M文件编写

简介 所谓M文件就是将处理问题的各种命令融合到一个文件中&#xff0c;该文件以.m为扩展名。然后&#xff0c;由MATLAB系统编译M文件&#xff0c;得出相应的运行结果。M文件具有相当大的可开发性和扩展性。M文件有脚本文件和函数文件两种。脚本文件不需要输入参数&#xff0c;…

【美团3.18校招真题1】

大厂笔试真题网址&#xff1a;https://codefun2000.com/ 塔子哥刷题网站博客&#xff1a;https://blog.codefun2000.com/ 小美剪彩带 提交网址&#xff1a;https://codefun2000.com/p/P1088 题意&#xff1a;找出区间内不超过k种数字子数组的最大长度 使用双指针的方式&…

js使用crypto-js做加密解密

首先安装 crypto-js npm install crypto-js下面是完整代码&#xff0c;首先引入 crypto-js 里的 AES 和 enc&#xff0c;声明加密方法和解密方法进行测试 let { AES, enc } require("crypto-js");// 加密方法 function encryptString(str, key) {// 使用 AES 加密…

Unity Shader 溶解效果

一、效果图 二、原理分析 实现原理就是在片元着色器中&#xff0c;对像素点进行丢弃不显示。借助美术做的噪点图(利用噪点图中rgb中r值来做计算)。比如噪点图r值从0-1。我们从小到大让r值逐渐丢弃&#xff0c;比如刚开始r < 0.1丢弃&#xff0c;然后t < 0.2丢弃...知道t…

TinTin Web3 动态精选:以太坊基金会推出 EELS、Arbitrum Stylus 上线

TinTin 快讯由 TinTinLand 开发者技术社区打造&#xff0c;旨在为开发者提供最新的 Web3 新闻、市场时讯和技术更新。TinTin 快讯将以周为单位&#xff0c; 汇集当周内的行业热点并以快讯的形式排列成文。掌握一手的技术资讯和市场动态&#xff0c;将有助于 TinTinLand 社区的开…

基于SSM的汽车客运站管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

无涯教程-JavaScript - TODAY函数

描述 TODAY函数返回当前日期的序列号。序列号是Excel用于日期和时间计算的日期时间代码。如果在输入函数之前单元格格式为"常规",Excel会将单元格格式更改为"日期"。如果要查看序列号,必须将单元格格式更改为"常规"或"数字"。 语法 …

应用人脸活体检测技术,保障刷脸支付安全畅通

如今&#xff0c;人脸识别已经走进了我们生活中的方方面面&#xff0c;拿起手机扫脸付账&#xff0c;扫描人脸完成考勤&#xff0c;刷脸入住酒店纷纷便利了我们的生活。而人脸识别里一项必不可少的技术就是人脸活体检测&#xff0c;即AI不但要确定这是“你”&#xff0c;还需要…

揭秘iPhone 15 Pro Max:苹果如何战胜三星

三星Galaxy S23 Ultra在我们的最佳拍照手机排行榜上名列前茅有几个原因&#xff0c;但iPhone 15 Pro Max正在努力夺回榜首——假设它有一个特定的功能。别误会我的意思&#xff0c;苹果一直在追赶三星&#xff0c;因为它的iPhone 14 Pro和14 Pro Max都表现强劲。尽管如此&#…

百度地图3D棱柱鼠标事件

百度地图2D API JavaScript API | 百度地图API SDK 百度地图3D API jspopularGL | 百度地图API SDK 3D棱柱效果如下 一. 渲染地图 var map new BMapGL.Map(container, {style: {styleJson: styleJson2} }) map.centerAndZoom(new BMapGL.Point(116.404, 39.925), 9); map…