Suna: 开源多面手 AI 代理

news2025/5/17 5:23:02

GitHub:GitHub - kortix-ai/suna: Suna - Open Source Generalist AI Agent

更多AI开源软件:发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI

Suna 是一个完全开源的 AI 助手,可帮助您轻松完成实际任务。通过自然对话,Suna 成为您进行研究、数据分析和日常挑战的数字伴侣 — 将强大的功能与直观的界面相结合,了解您的需求并提供结果。

Suna 强大的工具包包括用于导航 Web 和提取数据的无缝浏览器自动化、用于文档创建和编辑的文件管理、Web 爬虫和扩展搜索功能、用于系统任务的命令行执行、网站部署以及与各种 API 和服务的集成。这些功能和谐地协同工作,使 Suna 能够解决您的复杂问题并通过简单的对话实现工作流程自动化!

主要功能

✅ 浏览器自动化:自动抓取网页数据,告别手动复制粘贴!
✅ 文件管理:智能生成报告、表格,支持多种格式,文档管理从未如此简单。
✅ 网络爬虫:精准抓取信息,自动生成总结,研究效率翻倍!
✅ 命令行执行:自动化脚本、系统管理,复杂操作一句话搞定。
✅ API集成:无缝对接LinkedIn、Crunchbase等平台,轻松获取第三方数据。
✅ 数据分析:市场趋势、投资建议、论文对比,Suna帮你深度挖掘数据价值!

安装和使用

先决条件
  1. Supabase:

    • 创建新的 Supabase 项目
    • 保存项目的 API URL、anon key 和服务角色 key 以备后用
    • 安装 Supabase CLI
  2. Redis 和 RabbitMQ:

    • 转到文件夹/backend​
    • 跑docker compose up redis rabbitmq​
  3. Daytona:

    • 在 Daytona 上创建帐户
    • 从您的账户设置中生成 API 密钥
    • 转到图片
    • 点击“添加图片”
    • Enter 作为映像名称kortix/suna:0.1.2​
    • 设置为 Entrypoint/usr/bin/supervisord -n -c /etc/supervisor/conf.d/supervisord.conf​
  4. LLM API 密钥:

    • 获取 API 密钥 Anthropic
    • 虽然其他提供程序应该通过 LiteLLM 工作,但建议使用 Anthropic – 需要调整提示,以便其他提供程序为工具调用输出正确的 XML。
  5. 搜索 API 密钥(可选):

    • 要增强搜索功能,请获取 Tavily API 密钥
    • 对于 Web 抓取功能,请获取 Firecrawl API 密钥
  6. RapidAPI API 密钥(可选):

    • 要启用 LinkedIn 等 API 服务,您需要一个 RapidAPI 密钥

    • 每个服务都需要在你的 RapidAPI 账户中单独激活:

      1. 在其相应的文件中找到服务的 (例如,在 backend/agent/tools/data_providers/LinkedinProvider.pybase_url"https://linkedin-data-scraper.p.rapidapi.com"​)
      2. 在 RapidAPI Marketplace 上访问该特定 API
      3. 订阅服务(许多服务提供免费套餐,但请求有限)
      4. 订阅后,您的代理将通过 API 服务工具使用该服务
安装步骤
  1. 克隆存储库:
git clone https://github.com/kortix-ai/suna.git
cd suna
  1. 配置后端环境:
cd backend
cp .env.example .env  # Create from example if available, or use the following template

编辑文件并填写您的凭据:.env​

NEXT_PUBLIC_URL="http://localhost:3000"

# Supabase credentials from step 1
SUPABASE_URL=your_supabase_url
SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key

# Redis credentials from step 2
REDIS_HOST=your_redis_host
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password
REDIS_SSL=True  # Set to False for local Redis without SSL

RABBITMQ_HOST=your_rabbitmq_host # Set to localhost if running locally
RABBITMQ_PORT=5672

# Daytona credentials from step 3
DAYTONA_API_KEY=your_daytona_api_key
DAYTONA_SERVER_URL="https://app.daytona.io/api"
DAYTONA_TARGET="us"

# Anthropic
ANTHROPIC_API_KEY=

# OpenAI API:
OPENAI_API_KEY=your_openai_api_key

# Optional but recommended
TAVILY_API_KEY=your_tavily_api_key  # For enhanced search capabilities
FIRECRAWL_API_KEY=your_firecrawl_api_key  # For web scraping capabilities
RAPID_API_KEY=
  1. 设置 Supabase 数据库:
# Login to Supabase CLI
supabase login

# Link to your project (find your project reference in the Supabase dashboard)
supabase link --project-ref your_project_reference_id

# Push database migrations
supabase db push

然后,再次转到 Supabase Web 平台 ->选择您的项目 -> 项目设置 -> 数据 API -> 并在“公开的架构”中添加“basejump”(如果还没有)

  1. 配置前端环境:
cd ../frontend
cp .env.example .env.local  # Create from example if available, or use the following template

编辑文件:.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"  # Use this for local development
NEXT_PUBLIC_URL="http://localhost:3000"

注意:如果您使用的是 Docker Compose,请使用容器名称而不是 localhost:

NEXT_PUBLIC_BACKEND_URL="http://backend:8000/api"  # Use this when running with Docker Compose
  1. 安装依赖项:
# Install frontend dependencies
cd frontend
npm install

# Install backend dependencies
cd ../backend
poetry install
  1. 启动应用程序:
    在一个终端中,启动前端:
cd frontend
npm run dev

在另一个终端中,启动后端:

cd backend
poetry run python3.11 api.py

在另一个终端中,启动 backend worker:

cd backend
poetry run python3.11 -m dramatiq run_agent_background

5-6. Docker Compose 替代方案:

在使用 Docker Compose 运行之前,请确保您的环境文件已正确配置:

  • 在 中,如上所述设置所有必需的环境变量backend/.env​

    • 对于 Redis 配置,请使用 instead 而不是 localhostREDIS_HOST=redis​

    • 对于 RabbitMQ,请使用 localhostRABBITMQ_HOST=rabbitmq​

    • Docker Compose 设置将自动设置这些 Redis 环境变量:

      REDIS_HOST=redis
      REDIS_PORT=6379
      REDIS_PASSWORD=
      REDIS_SSL=False
      
      RABBITMQ_HOST=rabbitmq
      RABBITMQ_PORT=5672
      
  • 在 中,确保设置为使用容器名称frontend/.env.localNEXT_PUBLIC_BACKEND_URL="http://backend:8000/api"​

然后运行:

export GITHUB_REPOSITORY="your-github-username/repo-name"
docker compose -f docker-compose.ghcr.yaml up

如果您在本地构建镜像,而不是使用预构建的镜像:

docker compose up

Docker Compose 设置包括后端将自动使用的 Redis 和 RabbitMQ 服务。

  1. 访问 Suna:

    • 打开浏览器并导航到http://localhost:3000​
    • 使用 Supabase 身份验证注册一个帐户
    • 开始使用您的自托管 Suna 实例!

实战演习

我们让它规划下5.1的旅游行程

生成一次前往伦敦的个人旅行,5 月 1 日从深圳出发。行程将持续 10 天。在伦敦市中心寻找一家谷歌评价至少为 4.5 分的住宿,为我寻找旅途中有趣的户外活动。生成一份详细的行程计划。

可以看到suna做了一系列的推理,并且循环使用了:**网络搜索->命令执行->创建文件**等操作!经过了15次的tools调用,最终生成了一份完整的攻略计划!

可以看到,功能还是很强大的,目前看最大的缺点就是价格有点贵,每个月只能使用2小时,费用却需要20美元!

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

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

相关文章

25-05-16计算机网络学习笔记Day1

深入剖析计算机网络:今日学习笔记总结 本系列博客源自作者在大二期末复习计算机网络时所记录笔记,看的视频资料是B站湖科大教书匠的计算机网络微课堂,每篇博客结尾附书写笔记(字丑见谅哈哈) 视频链接地址 一、计算机网络基础概念 &#xf…

12 web 自动化之基于关键字+数据驱动-反射自动化框架搭建

文章目录 一、如何实现一条用例,实现覆盖所有用例的测试1、结合数据驱动:编辑一条用例,外部导入数据实现循环测试2、用例体:实现不同用例的操作步骤对应的断言 二、实战1、项目路径总览2、common 文件夹下的代码文件3、keywords 文…

动态IP赋能业务增效:技术解构与实战应用指南

在数字化转型加速的今天,IP地址作为网络通信的基础设施,其技术特性正深刻影响着企业业务架构的效率与安全性。动态IP(Dynamic IP)作为互联网资源分配的核心机制,早已突破传统认知中的"临时地址"定位&#xf…

【Java ee初阶】http(1)

HTTP 全称为“超文本传输协议”,由名字可知,这是一个基于文本格式的协议,而TCP,UDP,以太网,IP...都是基于二进制格式的协议。 如何区别该协议是基于哪种格式的协议? 形如这种协议格式&#xf…

day18-数据结构引言

一、 概述 数据结构:相互之间存在一种或多种特定关系的数据元素的集合。 1.1 特定关系: 1. 逻辑结构 2.物理结构(在内存当中的存储关系) 逻辑结构物理结构集合,所有数据在同一个集合中,关系平等顺…

我开源了一个免费在线工具!UIED Tools

UIED Tools - 免费在线工具集合 最近更新:修改了文档说明,优化了项目结构介绍 这是设计师转开发的第一个开源项目,bug和代码规范可能有些欠缺。 这是一个功能丰富的免费在线工具集合网站,集成了多种实用工具,包括 AI …

什么时候可以开始学习深度学习?

咱们先来聊聊机器学习和深度学习的关系~ 这个问题其实挺常见的,之前我也跟不少同事、同学聊过。最近有好几个同学也聊过。 简单说,深度学习是机器学习的一个子集,两者不是并列关系,而是“包含”关系。 你可以这么理解&#xff…

初学python的我开始Leetcode题8-5

提示:100道LeetCode热题-8-5主要是二叉树相关,包括三题:路径总和 III、二叉树的最近公共祖先、二叉树中的最大路径和。由于初学,所以我的代码部分仅供参考。 前言 二叉树完结撒花~ 下一次的图论会是一些有趣的应用案例~ 提示&am…

构建RAG混合开发---PythonAI+JavaEE+Vue.js前端的实践

写在前文:之所以设计这一套流程,是因为 Python在前沿的科技前沿的生态要比Java好,而Java在企业级应用层开发比较活跃; 毕竟许多企业的后端服务、应用程序均采用Java开发,涵盖权限管理、后台应用、缓存机制、中间件集成…

08.webgl_buffergeometry_attributes_none ,three官方示例+编辑器+AI快速学习

本实例主要讲解内容 这个Three.js示例展示了无属性几何体渲染技术,通过WebGL 2的gl_VertexID特性和伪随机数生成算法,在着色器中动态计算顶点位置和颜色,而不需要在CPU端预先定义几何体数据。 核心技术包括: WebGL 2的顶点ID特…

26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述

26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述 文章目录 26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述1.1 计算机的发展1.2 计算机硬件和软件1.2.1 计算机硬件的基本组成1.2.2 各个硬件的工作原理1.2.3 计算机软件1.2.4 计算机系统的层次结构1.2.5 计算机系统…

LeetCode100.2 字母异位词分组

观察题目&#xff0c;需要把strs中的元素按照字母进行归类&#xff0c;一个朴素的思路是&#xff1a;遍历strs&#xff0c;对每个元素排序后插入哈希表中&#xff0c;随后再遍历一遍表将其转化为vector<vector<string>>。 class Solution { public:vector<vect…

显示的图标跟UI界面对应不上。

图片跟UI界面不符合。 要找到对应dp的值。UI的dp要跟代码里的xml文件里的dp要对应起来。 蓝湖里设置一个宽度给对应上。然后把对应的值填入xml. 一个屏幕上的图片到底是用topmarin来设置&#xff0c;还是用bottommarin来设置。 因为第一节&#xff0c;5&#xff0c;7 车厢的…

高并发内存池(三):TLS无锁访问以及Central Cache结构设计

目录 前言&#xff1a; 一&#xff0c;thread cache线程局部存储的实现 问题引入 概念说明 基本使用 thread cache TLS的实现 二&#xff0c;Central Cache整体的结构框架 大致结构 span结构 span结构的实现 三&#xff0c;Central Cache大致结构的实现 单例模式 thr…

在Taro中开发一个跨端Svg组件,同时支持小程序、H5、React Native

Taro系列中一直没有跨端的绘图工具&#xff0c;小程序端支持canvas但是不支持svg&#xff0c;RN端有 react-native-svg 支持svg&#xff0c;但是没有很好原生的canvas插件&#xff0c;社区的canvas都是基于WebView实现的&#xff0c;或者skia&#xff0c;这个插件的书写方式和c…

【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最大化、最小化Vs界面

背景说明&#xff1a; 每次把教学照片上传csdn&#xff0c;都需要打开相册&#xff0c;一张张截图&#xff0c;然后ctrlV黏贴到CSDN内&#xff0c;我觉得太烦了。 改进思路&#xff1a; 是否可以先把所有照片都上传到csdn&#xff0c;然后再一张张的截图&#xff08;去掉幼儿…

Python零基础入门到高手8.4节: 元组与列表的区别

目录 8.4.1 不可变数据类型 8.4.2 可变数据类型 8.4.3 元组与列表的区别 8.4.4 今天彩票没中奖 8.4.1 不可变数据类型 不可变数据类型是指不可以对该数据类型进行原地修改&#xff0c;即只读的数据类型。迄今为止学过的不可变数据类型有字符串&#xff0c;元组。 在使用[]…

深度学习入门:深度学习(完结)

目录 1、加深网络1.1 向更深的网络出发1.2 进一步提高识别精度1.3 加深层的动机 2、深度学习的小历史2.1 ImageNet2.2 VGG2.3 GoogleNet2.4 ResNet 3、深度学习的高速化3.1 需要努力解决的问题3.2 基于GPU的高速化3.3 分布式学习3.4 运算精度的位数缩减 4、深度学习的应用案例4…

使用Scrapeless Scraping Browser的自动化和网页抓取最佳实践

引言&#xff1a;人工智能时代浏览器自动化和数据收集的新范式 随着生成性人工智能、人工智能代理和数据密集型应用程序的快速崛起&#xff0c;浏览器正在从传统的“用户互动工具”演变为智能系统的“数据执行引擎”。在这一新范式中&#xff0c;许多任务不再依赖单一的API端点…

java数组题(5)

&#xff08;1&#xff09;&#xff1a; 思路&#xff1a; 1.首先要对数组nums排序&#xff0c;这样两数之间的差距最小。 2.题目要求我们通过最多 k 次递增操作&#xff0c;使数组中某个元素的频数&#xff08;出现次数&#xff09;最大化。经过上面的排序&#xff0c;最大数…