AI 宠物蛋 🥚🐣
一个100%本地化、由大语言模型生成和驱动的虚拟宠物,具有思想、感情和反馈。重温您对电子宠物的美好回忆!https://ai-tamago.fly.dev/
所有ASCII动画均使用ChatGPT生成(提示词包含在仓库中)。
有问题吗?加入AI Stack开发者,在#ai-tamago频道找我。
演示 🪄
https://github.com/ykhli/AI-tamago/assets/3489963/8d7cb2ac-537a-45d4-98a5-1802b773e364
技术栈
本地模式
- 🦙 推理:Ollama,可选使用OpenAI或Replicate
- 🔔 游戏状态:Inngest
- 💻 事务性和向量数据库:Supabase pgvector
- 🧠 LLM编排:Langchain.js
- 🖼️ 应用逻辑:Next.js
- 🧮 嵌入生成:Transformer.js和all-MiniLM-L6-v2
- 🖌️ 用户界面:Magic Patterns和Vercel v0
生产模式
除上述所有外,还包括:
概述
前提条件
快速开始
1. 复刻并克隆仓库
将仓库复刻到您的GitHub账户,然后运行以下命令克隆仓库:
git clone git@github.com:[您的GitHub账户名]/AI-tamago.git
2. 安装依赖
cd ai-tamago
npm install
所有客户端电子宠物代码都在Tamagotchi.tsx中
3. 安装Ollama
安装说明在这里。
4. 本地运行Supabase
- 安装Supabase CLI
brew install supabase/tap/supabase
- 启动Supabase
确保您在/ai-tamago
目录下,然后运行:
supabase start
提示:要运行迁移或重置数据库 -- seed.sql和migrations将运行
supabase db reset
5. 填写密钥
注意:这里的密钥是针对您的本地Supabase实例的
cp .env.local.example .env.local
然后通过运行以下命令获取SUPABASE_PRIVATE_KEY
supabase status
复制service_role key
并将其保存为.env.local
中的SUPABASE_PRIVATE_KEY
6. 设置Inngest
npx inngest-cli@latest dev
确保您的应用程序正在运行 -- Inngest函数(用于驱动游戏状态)应该自动注册。
7. 本地运行应用
现在您已准备好在本地测试应用程序!只需在项目根目录下运行npm run dev
,然后访问http://localhost:3000
。
部署指南
现在您已经在本地玩过AI宠物蛋了 -- 是时候将它部署到更持久的地方,这样您随时都可以访问它! 0. 选择你想在生产环境中使用的模型
- 如果你想在生产环境中测试Chatgpt,只需从
.env.local
中删除LLM_MODEL=ollama
,并填写OPENAI_API_KEY
- 如果你想尝试Replicate,设置
LLM_MODEL=replicate_llama
并填写REPLICATE_API_TOKEN
- 如果你想自己部署Ollama,可以参考这个很棒的指南 -- 使用Ollama将大型语言模型扩展到零。在
performance-4x
Fly虚拟机(CPU)上运行Ollama是可能的,需要100gb
的存储空间,但如果你能获得GPU访问权限,速度会快得多。如果你还没有访问权限,可以在这里加入Fly的GPU等待列表!
1. 切换到deploy
分支 -- 这个分支包含了部署类似这样应用所需的一切。
git co deploy
这个分支包含了一个多租户就绪(感谢Clerk)的应用,这意味着每个用户都可以获得自己的AI-tamago,并且内置了令牌限制 -- 你可以在应用中设置用户可以发送请求的次数(参见ratelimit.ts
)
2. 迁移到Supabase云:
- 在这里创建一个Supabase项目,然后转到项目设置 -> API。在
.env.local
中填写密钥 SUPABASE_URL
是"Project URL"下的URL值SUPABASE_PRIVATE_KEY
是Project API Keys下以ey
开头的密钥- 复制Supabase项目ID,你可以从URL https://supabase.com/dashboard/project/[project-id] 中找到
在你的Ai-tamago项目根目录下运行:
supabase link --project-ref [插入项目ID]
supabase migration up
supabase db reset --linked
3. 为限速创建Upstash Redis实例
这将确保没有单个用户过多调用任何API,占用所有推理工作负载。我们在这里使用的是Upstash的出色的限速SDK。
- 登录Upstash
- 在顶部导航栏的"Redis"下,点击"Create Database"
- 给它一个名称,然后根据你的偏好选择区域和其他选项。点击"Create"
- 向下滚动到"REST API"部分,点击".env"。现在你可以复制粘贴两个环境变量(
UPSTASH_REDIS_REST_URL
和UPSTASH_REDIS_REST_TOKEN
)到你的.env.local中
4. 现在你已准备好在Fly.io上部署所有内容!
- 在fly.io上注册一个账户,然后安装flyctl
- 在项目根目录下运行
fly launch
。这将生成一个包含你所需所有配置的fly.toml
- 运行
fly scale memory 512
来扩展这个应用的fly虚拟机内存。 - 运行
fly deploy --ha=false
来部署应用。--ha标志确保fly只启动一个实例,这包含在免费计划中。 - 对于任何其他非本地主机环境,现有的Clerk开发实例应该继续工作。你可以通过运行
cat .env.local | fly secrets import
将密钥上传到Fly - 如果你想把这变成一个真正的产品,你应该在当前Clerk实例下创建一个生产环境。有关使用Clerk部署生产应用的更多详情,请查看他们的文档。注意,作为流程的一部分,你可能需要管理自己的域名并进行域名验证。
- 在本地创建一个新文件
.env.prod
并填写所有生产环境密钥。记得通过从Clerk的生产实例复制密钥来更新NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
和CLERK_SECRET_KEY
-cat .env.prod | fly secrets import
上传密钥。
如果你有问题,加入AI Stack devs并在#ai-tamago频道找我。