一、项目介绍
Suna是一个完全开源的AI助手,旨在帮助用户轻松完成现实世界的任务。通过自然对话,Suna成为用户进行研究、数据分析和应对日常挑战的数字伙伴,它结合了强大的功能和直观的界面,能够理解用户需求并提供结果。
Suna Web 界面
Suna拥有强大的工具包,包括无缝的浏览器自动化功能,可用于浏览网页和提取数据;文件管理功能,支持文档创建和编辑;网页抓取和扩展搜索功能;用于系统任务的命令行执行功能;网站部署功能,以及与各种API和服务的集成。这些功能协同工作,使Suna能够通过简单的对话解决复杂问题并自动化工作流程。
二、项目架构
Suna由四个主要组件组成:
- 后端API:是一个Python/FastAPI服务,处理REST端点、线程管理,并通过LiteLLM与OpenAI、Anthropic等大型语言模型(LLM)集成。
- 前端:基于Next.js/React构建的应用程序,提供响应式用户界面,包括聊天界面、仪表盘等。
- Agent Docker:为每个代理提供隔离的执行环境,具备浏览器自动化、代码解释器、文件系统访问、工具集成和安全功能。
- Supabase数据库:负责数据持久化,包括身份验证、用户管理、对话历史记录、文件存储、代理状态、分析和实时订阅等功能。
Suna架构
三、使用场景
Suna可应用于多种场景,以下是一些示例:
- 竞争对手分析:例如分析英国医疗保健行业的市场,找出主要参与者、市场规模、优势和劣势,并生成PDF报告。
- 风险投资基金列表:获取美国按资产管理规模排名的重要风险投资基金列表,包括网站URL和联系邮箱。
- 保险政策查找:为意大利米兰的房屋寻找性价比最高的保险政策。
- 候选人搜索:在LinkedIn上寻找德国慕尼黑的初级软件工程师候选人,要求至少拥有计算机科学相关本科学位和一年工作经验。
- 报告撰写:撰写关于美国股市过去两周情况的详细报告,分析标准普尔500指数趋势,并预测未来几周市场走向。
- 产品评论分析:在亚马逊上查找Nespresso咖啡机的常见产品问题,并撰写关于如何将这些问题转化为竞争优势的报告。
- 游戏生成:生成一个90年代风格的迷你游戏,玩家驾驶宇宙飞船与绿色外星人战斗。
- 公司旅行规划:为公司规划从法国巴黎到美国加利福尼亚的7天旅行路线,考虑天气情况安排活动。
- Excel数据处理:创建一个包含意大利彩票游戏(Lotto、10eLotto和Million Day)基本信息的Excel电子表格。
- 数据库抓取:搜索开放招标数据库,如欧盟TED和美国SAM.gov,找出清洁技术行业的相关采购招标,总结要求并生成报告。
- 活动演讲者挖掘:从欧洲寻找20位过去一年在会议上发言的AI伦理演讲者,获取他们的联系信息和演讲摘要。
- 科学论文总结和交叉引用:研究并比较过去五年关于酒精对人体影响的科学论文,生成相关报告。
- 潜在客户生成:为新的AI客户支持工具生成至少20个西班牙巴塞罗那拥有10 - 50名员工的B2B潜在客户列表,包括公司名称、网站、员工规模和联系信息。
- 研究与初步联系草稿:在LinkedIn上研究清洁技术行业的潜在B2B客户,获取他们的网站和电子邮件地址,并根据公司概况生成个性化的初步联系电子邮件。
- SEO分析:为网站suna.so生成SEO报告分析,找出按关键词集群排名靠前的页面,并确定缺失的主题。
- 公众评论聚类:通过抓取麦当劳在公共页面(如Google Reviews)上的评论进行聚类,生成关于最常见反馈和评论的详细报告,以了解可改进之处和产生良好效果的方面。
- 个人旅行规划:规划从泰国曼谷到英国伦敦的10天个人旅行,在伦敦市中心找到谷歌评分为至少4.5的住宿,并安排有趣的户外活动,生成详细的行程计划。
- 股票抓取和监控:监控葡萄牙10家最大的上市公司,抓取过去30个交易日的股价数据并生成报告。
- 近期融资初创公司报告:在Crunchbase、Dealroom和TechCrunch上筛选SaaS金融领域的A轮融资初创公司,构建包含公司数据、创始人信息和联系信息的报告,用于外部销售。
- 论坛讨论抓取:通过谷歌搜索罗马美容中心的开放论坛讨论,找出评论最好的5家美容中心。
四、本地运行/自托管步骤
(一)所需组件
- 一个用于数据库和身份验证的Supabase项目。
- 一个用于缓存和会话管理的Redis数据库。
- 一个用于安全代理执行的Daytona沙箱。
- 用于API后端的Python 3.11。
- 大型语言模型(LLM)提供商(OpenAI或Anthropic)的API密钥。
- (可选但推荐)用于增强搜索功能的Tavily API密钥。
- (可选)用于启用API服务(如LinkedIn等)的RapidAPI密钥。
(二)前提条件
-
Supabase:
- 创建一个新的Supabase项目。
- 保存项目的API URL、匿名密钥和服务角色密钥,供后续使用。
- 安装Supabase CLI。
-
Redis:可以选择以下方式设置Redis实例:
- Upstash Redis(推荐用于云部署)。
- 本地安装:
- Mac:使用命令
brew install redis
进行安装。 - Linux:根据发行版的具体说明进行安装。
- Windows:使用WSL2或Docker。
- Mac:使用命令
- 保存Redis连接详细信息,供后续使用。
-
Daytona:
- 在Daytona上创建一个账户。
- 从账户设置中生成一个API密钥。
- 进入Images页面,点击“Add Image”。
- 输入
adamcohenhillel/kortix-suna:0.0.20
作为镜像名称。 - 设置
/usr/bin/supervisord -n -c /etc/supervisor/conf.d/supervisord.conf
作为入口点。
- LLM API密钥:从OpenAI或Anthropic获取API密钥。虽然其他提供商通过LiteLLM也应该可以工作,但推荐使用OpenAI和Anthropic。
- 搜索API密钥(可选):为了增强搜索功能,获取Tavily API密钥。
-
RapidAPI API密钥(可选):要启用API服务(如LinkedIn等),需要一个RapidAPI密钥。每个服务需要在RapidAPI账户中单独激活:
- 在相应文件中找到服务的
base_url
(例如,backend/agent/tools/data_providers/LinkedinProvider.py
中的"https://linkedin-data-scraper.p.rapidapi.com"
)。 - 在RapidAPI市场上访问该特定API。
- 订阅该服务(许多服务提供有限请求的免费层)。订阅后,该服务将通过API Services工具供代理使用。
- 在相应文件中找到服务的
(三)安装步骤
-
克隆仓库:
git clone https://github.com/kortix-ai/suna.git cd suna
-
配置后端环境:
编辑cd backend cp .env.example .env # 如果存在示例文件,则从示例创建,否则使用以下模板
.env
文件并填写凭据:NEXT_PUBLIC_URL="http://localhost:3000" # 步骤1中的Supabase凭据 SUPABASE_URL=your_supabase_url SUPABASE_ANON_KEY=your_supabase_anon_key SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key # 步骤2中的Redis凭据 REDIS_HOST=your_redis_host REDIS_PORT=6379 REDIS_PASSWORD=your_redis_password REDIS_SSL=True # 对于没有SSL的本地Redis,设置为False # 步骤3中的Daytona凭据 DAYTONA_API_KEY=your_daytona_api_key DAYTONA_SERVER_URL="https://app.daytona.io/api" DAYTONA_TARGET="us" # Anthropic或OpenAI: # Anthropic ANTHROPIC_API_KEY= MODEL_TO_USE="anthropic/claude-3-7-sonnet-latest" # 或OpenAI API: OPENAI_API_KEY=your_openai_api_key MODEL_TO_USE="gpt-4o" # 可选但推荐 TAVILY_API_KEY=your_tavily_api_key # 可选 RAPID_API_KEY=
-
设置Supabase数据库:
然后,再次访问Supabase web平台 -> 选择你的项目 -> 项目设置 -> 数据API -> 如果“Exposed Schema”中没有“basejump”,则添加。# 登录到Supabase CLI supabase login # 链接到你的项目(在Supabase仪表板中找到项目参考) supabase link --project-ref your_project_reference_id # 推送数据库迁移 supabase db push
-
配置前端环境:
编辑cd ../frontend cp .env.example .env.local # 如果存在示例文件,则从示例创建,否则使用以下模板
.env.local
文件:NEXT_PUBLIC_SUPABASE_URL=your_supabase_url NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key NEXT_PUBLIC_BACKEND_URL="http://localhost:8000/api" NEXT_PUBLIC_URL="http://localhost:3000"
-
安装依赖项:
# 安装前端依赖项 cd frontend npm install # 安装后端依赖项 cd ../backend pip install -r requirements.txt
-
启动应用程序:
- 在一个终端中,启动前端:
cd frontend npm run dev
- 在另一个终端中,启动后端:
cd backend python api.py
- 在一个终端中,启动前端:
-
访问Suna:
- 打开浏览器,导航到
http://localhost:3000
。 - 使用Supabase身份验证注册一个账户。
- 开始使用自托管的Suna实例!
- 打开浏览器,导航到