AI服务器工作室
一个现代、功能丰富的AI桌面应用程序,具有本地LLM推理、多提供商支持、内置工具、MCP服务器集成、模型发现、语音/媒体工作室和完整的设置仪表板——所有这些都在一个时尚的Electron UI中。
______________________________________________________________________
特性
聊天界面
- 多标签对话 --同时打开、重命名和管理多个聊天会话
- 会话搜索 --从侧边栏快速查找过去的对话
- 流媒体响应 --带有动画打字指示器的实时令牌流
- Markdown渲染 --完全的markdown支持,语法突出显示代码块、复制到剪贴板和内联代码
- 思维障碍 --可折叠的AI推理/思维显示
- 图片附件 --在聊天中直接附加和发送图像
- 消息操作 --复制、删除或重新生成任何邮件
- 工具调用显示 --可折叠的工具调用结果内联到对话中
多提供商模型支持
- 本地引擎 --连接到内置的llama.cpp引擎或任何兼容OpenAI的本地服务器(
localhost:1234) - 云API提供商 --OpenAI、Anthropic、Google AI、Mistral、Groq、Together AI、OpenRouter或任何自定义端点
- 实时模型提取 --自动发现每个提供商的可用型号
- 每条消息模型徽章 --查看每个响应是由哪个模型生成的
- 模型配置面板 --调整温度、top-p、最大令牌、系统提示等
内置工具(函数调用)
人工智能可以在对话中自主调用这些工具:
| 工具 | 说明 |
|---|---|
| JS代码沙盒 | 在沙盒环境中执行JavaScript |
| 网络搜索 | 通过DuckDuckGo进行实时网络搜索(Supabase Edge功能) |
| URL获取器 | 从任何网页中提取干净的文本 |
| 计算器 | 安全数学表达式计算器 |
| JSON转换 | 解析、格式化、查询和转换JSON数据 |
| 随机发生器 | 生成UUID、密码、颜色、lorem ipsum、模拟数据 |
| Base64编码/解码 | 对Base64字符串进行编码或解码 |
| 哈希生成器 | SHA-256、SHA-1、SHA-384哈希 |
| 文件读取器 | 读取、列出和搜索用户上传的文件(Supabase) |
| 知识库(RAG) | 使用全文搜索搜索、添加和列出文档 |
| 当前时间 | 获取当前日期、时间、时区和UNIX时间戳 |
MCP(模型上下文协议)服务器
- 自动发现 --启动时自动从启用的MCP服务器中发现工具
- 本地+远程 --直接调用本地MCP服务器;远程服务器通过Supabase边缘函数进行代理
- 默认服务器 --预配置的文件系统、Brave Search、GitHub、Puppeteer和SQLite服务器
- 添加/删除/切换 --从聊天工具栏和“设置”页面管理服务器
- Supabase已同步 --服务器配置将持久化到您的Supabase数据库中
本地LLM发动机
- 捆绑羊驼.cpp --CPU(AVX2)、NVIDIA CUDA和Vulkan的预构建后端
- 兼容OpenAI的API --暴露
localhost:1234适用于任何与OpenAI兼容的客户端 - 模型管理 --加载/卸载GGUF模型,扫描模型目录,按路径加载
- 硬件检测 --侧边栏中带有实时使用小部件的CPU、GPU、RAM信息
- 下载管理器 --从HuggingFace下载带有进度跟踪的GGUF模型
语音与媒体工作室
- 语音工作室 --STT/TTS工作流与提供商选择
- 媒体工作室 --通过云提供商生成图像和视频
Aistlaw企业后端
- 团队和代理商 --企业级代理与团队管理
- 工作流自动化 --代理运行、任务和事件驱动组件
- 本地PostgreSQL --局部RAG的可选pgvector集成
- 双处理模式 --引擎+Aistclaw在开发中作为单独的进程运行
设置仪表板
- 个人资料和安全 --显示名称、头像、密码更改、活动会话信息
- API提供商 -添加、编辑、切换和删除API提供程序配置(加密密钥)
- MCP服务器 --带连接/测试、导入/导出JSON的完整CRUD
- 工具 --启用/禁用内置和自定义工具,编辑模式
- 服务器应用程序接口 -配置本地服务器端口、域、CORS和API密钥
- 路径 --配置模型、日志和缓存目录
- 基础 --主题、语言、字体大小、导航栏位置、聊天风格
- 高级 --GPU加速、上下文长度、调试日志记录、实验功能
- 运行时和硬件 --系统监控面板、后端浏览器
键盘快捷键
Ctrl + N--新聊天Ctrl + ,--打开设置Ctrl + J--跳转到聊天Ctrl + M--跳转到模型Ctrl + Shift + R--运行时面板Ctrl + Shift + H--硬件面板
______________________________________________________________________
建筑
open-studio-main/
├── electron/ # Electron main process + preload
├── src/
│ ├── pages/ # Application pages (one per route)
│ │ ├── Index.tsx # Root layout, routing, global state
│ │ ├── ChatPage.tsx # Main chat interface
│ │ ├── SettingsPage.tsx # Full settings dashboard
│ │ ├── ModelsPage.tsx # Local + API model management
│ │ ├── ServerPage.tsx # Local server management
│ │ ├── DiscoverPage.tsx # HuggingFace model browser
│ │ ├── ApiGatewayPage.tsx # API key & endpoint management
│ │ ├── VoicePage.tsx # Voice studio (STT/TTS)
│ │ ├── MediaPage.tsx # Media generation
│ │ ├── AuthPage.tsx # Authentication (Supabase Auth)
│ │ ├── AccountPage.tsx # User account page
│ │ └── ClawUiPage.tsx # Aistclaw enterprise UI host
│ ├── components/
│ │ ├── IconSidebar.tsx # Navigation sidebar (vertical/horizontal, role-filtered)
│ │ ├── WindowTitleBar.tsx # Custom Electron titlebar + theme toggle
│ │ ├── ModelConfigPanel.tsx# Model parameter configuration drawer
│ │ ├── DownloadManager.tsx # Download queue UI
│ │ ├── KeyboardShortcuts.tsx
│ │ ├── chat/ # Chat UI components
│ │ ├── server/ # Server monitor components
│ │ ├── settings/ # Settings tab panels
│ │ ├── discover/ # Model discovery components
│ │ ├── api-gateway/ # API gateway components
│ │ ├── voice/ # Voice studio components
│ │ └── ui/ # shadcn/ui primitives
│ ├── stores/
│ │ ├── chatStore.ts # Zustand: chat tabs, messages → localStorage
│ │ └── settingsStore.ts # Zustand: all app settings → localStorage
│ ├── hooks/
│ │ ├── useLocalEngine.ts # Engine status polling + load/unload
│ │ ├── useDownloadManager.ts # GGUF download queue
│ │ ├── useAuth.ts # Auth session management
│ │ └── useHardwareInfo.ts # CPU/GPU/RAM polling
│ ├── lib/
│ │ ├── api.ts # Backend HTTP client
│ │ ├── localEngine.ts # Local engine HTTP client
│ │ ├── toolExecutor.ts # Tool execution (parallel, retry, timeout)
│ │ ├── builtInTools.ts # Built-in tool implementations
│ │ └── mcpOperations.ts # MCP server discovery + tool execution
│ └── backend/ # Go backend source
│ ├── engine/ # llama.cpp wrapper + hardware detection
│ ├── aistclaw/ # Enterprise backend (teams, agents, workflows)
│ └── server/ # HTTP route handlers
├── extensions/
│ └── backends/ # Pre-built llama.cpp binaries (CPU, CUDA, Vulkan)
├── data/ # Runtime JSON data files
├── supabase/
│ └── functions/
│ ├── api-proxy/ # OpenAI-compatible API proxy
│ ├── mcp-proxy/ # MCP server proxy for remote servers
│ └── tool-execute/ # Edge function for web-search & url-fetch
├── index.html
├── tailwind.config.ts
├── vite.config.ts
└── vitest.config.ts看 结构.md 查看完整目录细分和 建筑.md 查看详细的图表和数据流。
______________________________________________________________________
技术栈
| 层 | 技术 |
|---|---|
| 桌面外壳 | Electron 34(主+预加载) |
| 前端框架 | React 18+TypeScript 5.8 |
| 构建工具 | Vite 5.4(SWC插件) |
| 造型 | 顺风CSS 3.4+自定义HSL设计标记 |
| UI组件 | shadcn/UI(基本UI图元) |
| 动画 | Framer Motion 12 |
| 路由 | React路由器DOM v6 |
| 客户端状态 | Zustand+localStorage持久化 |
| 服务器状态 | TanStack查询(React查询) |
| 后端数据库 | Supabase(身份验证、PostgreSQL、边缘函数) |
| 通过Go包装器+预构建的.dll二进制文件进行本地推理 | llama.cpp |
| 企业后端 | Go(Aistclaw--代理、团队、工作流) |
| 包管理器 | Bun |
| Linting | ESLint |
| 测试 | Vitest |
______________________________________________________________________
入门指南
先决条件
- 包子 >=1.0(推荐)或 Node.js >= 18
- 去 >=1.21(构建引擎和Aistclaw后端所需)
- Windows x86_64 (预构建的后端仅适用于Windows;其他平台需要从源代码构建)
- Supabase项目 --用于身份验证、数据库和边缘功能(仅本地模式可选)
安装
# 1. Clone the repository
git clone https://github.com/your-username/open-studio.git
cd open-studio
# 2. Install dependencies
bun install环境变量
创建一个 .env 项目根目录中的文件:
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key-here
# Required for Aistclaw backend features in Electron mode
AISTCLAW_POSTGRES_DSN=postgres://postgres:postgres@localhost:5432/aistclaw?sslmode=disable.env.local 覆盖 .env 并且是合法的。
发展
# Start the dev server (web UI only, no engine)
bun run dev
# Start desktop app with Electron (builds Go engine first)
bun run dev:electron
# Force single-engine mode in development
npx cross-env AIST_SINGLE_ENGINE=1 bun run dev:electron
# Force dual-process mode explicitly
npx cross-env AIST_SINGLE_ENGINE=0 bun run dev:electron
# Run engine standalone
bun run dev:engine
# Run engine with CUDA GPU layers
bun run dev:engine:cuda
# Run tests (single run)
bun run test
# Run tests in watch mode
bun run test:watch
# Lint the codebase
bun run lint
# Build for production
bun run build
# Build full Electron app
bun run build:electron______________________________________________________________________
可用脚本
| 脚本 | 描述 |
|---|---|
bun run dev | Vite开发服务器(仅限网络) |
bun run dev:electron | 完整的电子开发(首先构建Go引擎) |
bun run dev:engine | 独立运行Go引擎 |
bun run dev:engine:cuda | 使用CUDA GPU层运行引擎 |
bun run build | Vite生产大楼 |
bun run build:electron | 全电子生产大楼 |
bun run build:engine:dev | 编译Go引擎 engine.exe |
bun run build:aistclaw:dev | 编译Aistclaw后端 aistclaw.exe |
bun run lint | 埃斯林特 |
bun run test | Vitest(单次运行) |
______________________________________________________________________
运行时笔记(2026年4月)
运行时拓扑
| 模式 | 命令 | 运行什么 |
|---|---|---|
| 仅限Web用户界面 | bun run dev | 仅支持Vite+React UI(无本地引擎进程) |
| 桌面开发 | bun run dev:electron | Vite+Electron主进程+Go引擎后端 |
| 桌面打包 | bun run build:electron | 带有捆绑后端二进制文件的Production Electron应用程序 |
桌面模式下的执行行为
- 前端与本地Go后端通信
http://localhost:{enginePort}/v1. - 在开发过程中,Electron默认为 双加工 (
AIST_SINGLE_ENGINE=0):引擎进程+独立的Aistclaw进程。 - 在打包构建中,Electron默认为 单引擎监控 (
AIST_SINGLE_ENGINE=1). - 后端从以下位置选择自由端口
1234,然后通过stdout将其发送到Electron(engine:port).
本地数据持久性(桌面)
桌面模式将应用程序数据保存在本地JSON文件中 data/ (或 AI_SERVER_DATA_DIR 如果设置):
data/users.jsondata/auth_sessions.jsondata/providers.jsondata/provider_model_prefs.jsondata/mcp_servers.jsondata/documents.json
开发先决条件 bun run dev:electron
- Go工具链 必须可用(predev构建后端二进制文件)。
- 如果
AISTCLAW_POSTGRES_DSN指向localhost:5433Docker Desktop用于自动启动/停止aistclaw-pgvector集装箱。 - 如果Docker不可用,则跳过pgvector自动启动,启动取决于您的DSN配置。
______________________________________________________________________
导航页面
| 页面 | 路线 | 所需角色 | 描述 |
|---|---|---|---|
| 聊天 | /chat | 用户 | 通过工具调用进行多会话聊天 |
| AistLaw | /aistclaw/* | 高级用户 | 企业代理、团队、工作流 |
| 语音工作室 | /voice | 高级用户 | STT/TTS工作流程 |
| 媒体工作室 | /media | 高级用户 | 图像/视频生成 |
| 我的模特 | /models | poweruser | 本地+API模型管理 |
| 发现 | /discover | 高级用户 | HuggingFace模型浏览器+下载器 |
| API网关 | /api | 高级用户 | 密钥管理、使用日志 |
| 服务器 | /server | 高级用户 | 引擎监视器、日志、端点 |
| 设置 | (模态) | 用户 | 外观、聊天、高级、关于 |
______________________________________________________________________
Supabase设置
Supabase支持云工作流和边缘功能集成,但桌面模式只能使用本地后端存储运行。
对于启用了Supabase的部署,请配置以下资源:
数据库表
| 表 | 目的 |
|---|---|
profiles | 用户显示名称、头像 |
api_providers | 加密的API提供程序配置 |
mcp_servers | MCP服务器配置 |
api_keys | 用户生成的API密钥 |
api_usage_logs | 请求/令牌使用跟踪 |
user_files | 上传文件存储 |
documents | 知识库文档(RAG) |
边缘功能
| 功能 | 目的 |
|---|---|
api-proxy | 代理外部API提供商的聊天完成 |
mcp-proxy | 将JSON-RPC调用代理到远程MCP服务器 |
tool-execute | 在服务器端执行web搜索和url获取工具 |
部署边缘功能
supabase functions deploy api-proxy
supabase functions deploy mcp-proxy
supabase functions deploy tool-execute______________________________________________________________________
安全说明
- 桌面模式将提供程序密钥存储在本地后端数据文件中 (
data/providers.json)并通过本地经过身份验证的API为其提供服务 - Supabase RLS 应在所有表上启用(行级安全),以确保用户只能访问自己的数据
- 本地工具执行 (JS Sandbox、Calculator)在浏览器中运行——请谨慎对待
- 边缘功能 处理外部网络调用(网络搜索、URL获取、MCP代理)以避免CORS问题
- SSRF保护 在
url-fetch内置工具阻止私有IP范围 - 远程MCP服务器 在脱机执行模式下被阻止
______________________________________________________________________
贡献
- 分叉 存储库
- 创建一个 功能分支:
git checkout -b feature/my-feature - 承诺 您的更改:
git commit -m "feat: add my feature" - 推 到分行:
git push origin feature/my-feature - 打开A 拉取请求
代码风格
- 具有宽松严格模式的TypeScript(
noImplicitAny: false) - 带有React Hooks和React Refresh插件的ESLint
- 适用于所有样式的顺风CSS(没有内联样式)
- 组件遵循shadcn/ui模式
- 路径别名:
@/*为了src/*,@aistclaw/*适用于Aistclaw模块
______________________________________________________________________
许可证
该项目根据 Apache许可证2.0。参见 许可证 了解详情。
______________________________________________________________________
Built with ❤️ using React, Electron, Go, llama.cpp, and the power of open AI models.
