快速开始

先选择运行宿主

aibuddy 提供两条开发路径。Web 适合验证托管、多用户和后台执行;Desktop 适合验证本地数据、本机文件与 Shell。两者共享 @aibuddy/core 中的任务语义和 Agent 行为,不要求同时启动。

同一任务模型,两种运行宿主 平台能力分别适配,Agent 行为由共享运行时定义 Web 宿主 入口 浏览器 执行 Server Worker 持久化 PostgreSQL Redis Desktop 宿主 入口 Renderer 执行 Electron Main 持久化 SQLite Local FS 平台适配边界 共享 Task 与 Agent Runtime 上下文 · 工具 · 记忆 · 状态 · 取消 · 收尾 两端保持相同的任务语义与完成判定 首次运行的验证结果 ① 回复持续流入 ② 工具活动可见 ③ 任务状态收敛

如果要验证选择运行时组成
Web 前端、API、队列或多用户能力Web浏览器、Hono Server、PostgreSQL,以及按配置启用的 Redis/BullMQ
Electron、本地数据或本机执行DesktopRenderer、Electron Main、SQLite 与本地 Node sandbox

本页的目标不是搭建生产环境,而是完成一项任务,并确认回复、工具活动和最终状态均可观察。生产部署、跨实例恢复和远程沙箱不在首次运行范围内。

两条路径共享同一组基础准备

仓库要求 Node.js >=24 <25,并通过 Corepack 固定 pnpm 11.14.0。Web 还需要 PostgreSQL 15 或更高版本;Redis 只在验证 BullMQ、Schedule、跨实例事件和可恢复流时需要。

git clone https://github.com/lib4x/aibuddy.git
cd aibuddy
corepack enable
corepack prepare [email protected] --activate
pnpm install

安装完成后,只执行下面的一条平台路径。

Web 以最小服务集运行第一项任务

复制 Server 配置:

cp apps/server/.env.example apps/server/.env

首次本地运行至少需要数据库、鉴权密钥和一个可用的模型入口。下面使用 inline queue,因而不要求先启动 Redis:

DATABASE_URL=postgresql://postgres:postgres@localhost:5432/aibuddy
BETTER_AUTH_SECRET=replace-with-a-random-secret-at-least-32-characters
BASE_URL=http://localhost:8001
AI_GATEWAY_API_KEY=your-ai-gateway-key
SANDBOX_TYPE=node
JOB_QUEUE_MODE=inline

创建数据库并初始化 schema 与演示数据:

createdb aibuddy
pnpm --filter=@aibuddy/server db:setup

启动 Web、API 和 worker 开发进程:

pnpm dev:app

浏览器访问 http://localhost:8000。可以注册新账号,也可以使用 seed 创建的演示账号 [email protected] / admin@123。创建一项 Task,要求 Agent 读取或生成一个简单文件,以便同时验证消息流和工具执行。

JOB_QUEUE_MODE=inline 只适合最小开发路径。需要验证队列重试、Schedule、跨实例通知或可恢复流时,应配置 REDIS_URL,并使用 BullMQ 路径。

Desktop 在本机运行同一任务模型

复制 Desktop 配置并启动应用:

cp apps/desktop/.env.example apps/desktop/.env
pnpm dev:desktop

开发环境中的 ELECTRON_RENDERER_URL 应指向 http://localhost:8002。首次启动按以下顺序完成初始化:

  1. 在“设置 → API Keys”中添加并验证提供商密钥。
  2. 为该提供商添加至少一个模型。
  3. 创建 Task,并要求 Agent 读取或生成一个简单文件。

Desktop 在 Electron Main 中内联执行 Agent turn,不依赖 Server、PostgreSQL、Redis 或 BullMQ。任务、对话和模型配置保存在本地 SQLite,提供商凭证由 Electron safeStorage 保护。

三个信号共同证明运行成功

不要只以“界面出现一段回复”作为成功标准。首次运行应同时满足:

  1. 回复持续到达:界面能够看到流式文本,而不是一次无状态请求。
  2. 工具活动可检查:任务需要工具时,界面能够显示调用及其结果。
  3. 任务状态明确收敛:Task 最终进入完成、等待、取消或失败中的明确状态,而不是永久停留在运行中。

如果只需要验证模型连接,可以发送普通问题;如果要验证完整任务路径,应让 Agent 操作一个可安全丢弃的测试文件,并检查文件内容是否与回复一致。

故障应按所在边界排查

现象优先检查
Web 页面可打开,但 API 返回 404apps/server 是否运行在 localhost:8001
Web 登录失败或持续重定向BASE_URL 与鉴权密钥
Web 启动时数据库报错PostgreSQL、DATABASE_URL 与 db:setup
第一条消息返回模型鉴权错误Gateway 或提供商密钥,以及所选模型
Desktop 停留在初始设置是否同时存在已验证 API Key 和至少一个用户模型
Desktop 白屏ELECTRON_RENDERER_URL 是否指向 localhost:8002
Agent 回复但工具不可用SANDBOX_TYPE、任务工作区与对应进程日志
Task 长期保持运行中Server/Worker 或 Electron Main 日志

首次运行不代表平台能力完全对等

Web 与 Desktop 共享任务模型,不共享全部基础设施能力。Web 的多用户身份、BullMQ、跨实例事件与对象存储依赖服务端配置;Desktop 使用设备端身份、本地数据库和本机执行。Desktop 当前尚未接通 MCP provider;Node sandbox 也直接运行在宿主进程树中,不等同于远程隔离沙箱。

这些差异不会改变 Task、上下文、工具事件和最终状态的基本语义,但会改变数据保存位置、可用能力和故障恢复范围。

相关阅读

  • 系统总览——从首次运行进入完整系统模型。
  • 任务运行——Task、事件流、取消与恢复如何组成统一运行时。
  • 产品与平台——Web 与 Desktop 共享什么,又分别承担哪些平台责任。
  • 仓库架构——需要参与实现时再进入包边界和依赖关系。
这页有帮助吗?