SkillAgentSearch skills...

MultiUserClaw

目前OpenClaw和NanoBot都是用于个人的,不太支持多用户,基于多用户重新修改Bot,没有对Openclaw进行任何更改,原生能力封装

Install / Use

/learn @johnson7788/MultiUserClaw
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

MultiUserClaw - 多用户 AI Sass OpenClaw平台。

基于Openclaw(其它分支有nanobot)改造的轻量级 AI 助手框架,可以很快打造商用Sass平台,支持多租户隔离部署、多平台渠道接入、工具调用、定时任务和 Web 实时通信。

在线体验地址,可以直接注册一个账号即可使用, https://ai.infox-med.com:13080/

🔔:simple_web分支是简单的单用户的Web界面。如果单用户的页面测试使用,可以使用simple_web分支。

🔔:nanobot014分支是nanobot的0.1.4版本

🔔:nanobot014v3分支是nanobot的0.1.4 post v3版本

🔔:openclaw_oldfrontend分支是基于openclaw版本的旧版本前端, 🦞 OpenClaw 2026.3.3 (eae1484)

🔔:当前的main分支是的Openclaw的版本:🦞 OpenClaw 2026.3.24


原理:

  • 新增platform作为控制容器的网关,每个用户单独创建容器进行管理。
  • frontend前端页面进行显示,调用platform进行交互, platform调用openclaw bridge对openclaw进行控制。
  • openclaw目录就是官方的openclaw,新建了1个openclaw/bridge作为中间层,对openclaw的控制。
  • 所以一共分有前端容器,platform容器,openclaw容器(包括bridge被platform控制,和控制openclaw)
  • 如果要升级openclaw,只需要替换openclaw整个目录,注意保留bridge目录,运行upgrade_openclaw.py文件。
  • 3月18日更新openclaw.json默认配置Agent2Agent模式,远程Terminal连接容器,对话完成的提示

更新:

  • 容器的端口信息显示
  • 可以直接下载目录了
  • 分离代码: frontend/src/components/Brand.tsx 单独设置Logo和简介信息
  • 离线部署脚本offline_deploy.py
  • 对话框中的slash,斜杠命令添加, 显示会话时,和哪个Agent的对话,回答需要刷新才能显示完整的多轮回答的Bug
  • 升级openclaw为0324版本和会话重命名
  • Openbrowser的浏览器支持,Agent的状态显示,Minmax也加到环境变量里面,微信二维码显示需要更好的字体和间距
  • simple_front 简化版本前端,只保留对话,微信扫码连接

目录

  1. 功能特性
  2. 界面预览
  3. 运行流程概览
  4. 多租户部署(Docker Compose)
  5. 单用户本地运行
  6. 整体架构
  7. 核心组件详解
  8. 安全设计
  9. 前端
  10. deploy_copy — 预置 Agent 与技能
  11. 文件索引
  12. API 调用示例

功能特性

本平台是一个功能丰富的多租户 AI 助手平台,支持以下核心功能:

🤖 AI Agent 管理

  • 创建、配置和管理多个 AI Agents
  • 每个 Agent 独立的对话上下文
  • Agent 身份设置(名称、Emoji 图标)
  • Agent 详情查看和删除

💬 智能对话

  • WebSocket 实时通信
  • Markdown 消息渲染(支持代码高亮)
  • 斜杠命令自动补全
  • 多会话管理
  • 语音输入支持
  • 文件/图片上传发送

⏰ 定时任务 (Cron Jobs)

  • 固定间隔执行
  • Cron 表达式调度
  • 单次定时执行
  • 任务启用/禁用
  • 手动立即执行
  • 执行结果通知(可选发送到渠道)

📚 知识库

  • 每个 Agent 独立的知识库目录
  • 支持上传文档、PDF、图片、数据文件
  • 文件夹创建和管理
  • 文件预览(支持文本、代码、JSON 等)
  • 文件下载和删除

⚡ 技能商店 (Skills)

  • 搜索和安装来自 skills.sh 的 AI 技能
  • 技能启用/禁用
  • 内置技能 + 用户自定义技能

🔌 多渠道支持

  • Telegram
  • Discord
  • Email (SMTP)
  • WhatsApp Web
  • Signal
  • Slack
  • iMessage
  • 其他扩展渠道
  • 配置文档: https://my.feishu.cn/wiki/KfTlwurh7ix0PHkQmHic2L0Snue

🔑 API 访问

  • API Token 生成和管理
  • 支持命令行调用 Agent
  • 会话复用
  • 外部系统集成

🧠 多模型支持

| 提供商 | 模型示例 | |--------|---------| | DashScope | qwen3-coder-plus, qwen-turbo | | Anthropic | claude-sonnet-4-5, claude-opus-4-5 | | OpenAI | gpt-4o, gpt-4o-mini, o3-mini | | DeepSeek | deepseek-chat, deepseek-reasoner | | AiHubMix | aihubmix/模型名 | | OpenRouter | openrouter/任意模型(兜底) |

📊 仪表盘

  • Agent 总数统计
  • 会话总数统计
  • 技能总数统计
  • Agent 状态概览

📁 文件管理

  • 工作空间文件浏览
  • 文件上传/下载
  • 目录创建/删除

⚙️ 系统管理

  • 用户管理
  • 渠道配置
  • AI 模型配置
  • 审计日志
  • 系统设置

🏢 多租户隔离

  • 每个用户独立 Docker 容器
  • 容器级资源隔离(2GB RAM, 4 CPU)
  • 按需创建,空闲自动暂停
  • 数据完全隔离

界面示例截图

多个用户的聊天页面和它们独自隔离的容器环境 dashboard.png chat.png multi_users_docker.png

交互式创建skills skill_create1.png skill_create2.png

管理自己的skills skill_page.png

chat.png chat2.png 管理界面.png

一键修复用户的容器配置修改错误 一键容器修复.png

1. 运行流程概览

本项目的核心思路:用 OpenClaw 替代原来的 nanobot 作为每个用户的 AI Agent 运行时,通过一个 Bridge 适配层将 OpenClaw 接入到平台的多租户体系中。

1.1 一条消息的完整旅程

用户在浏览器输入消息
    |
    v
[Frontend] Vite+React (端口 3080)
    | WebSocket 连接
    v
[Platform Gateway] FastAPI (端口 8080) --对应platform目录和项目
    | 1. JWT 认证
    | 2. 查找/启动用户容器
    | 3. WebSocket 代理
    v
[用户容器] — 每个用户一个独立 Docker 容器
    |
    |  容器内部结构:
    |  ┌─────────────────────────────────────────┐
    |  │  Bridge (Node.js, 端口 18080)            │
    |  │    - HTTP API 服务器                      │
    |  │    - WebSocket 中继                       │
    |  │              |                            │
    |  │              v                            │
    |  │  OpenClaw Gateway (端口 18789, loopback)  │
    |  │    - Agent 处理引擎                       │
    |  │    - 工具调用 (bash/文件/搜索等)           │
    |  │    - Skills 系统                          │
    |  │    - Session 管理                         │
    |  └─────────────────────────────────────────┘
    |
    | Agent 需要调用 LLM 时:
    v
[Platform Gateway] /llm/v1/chat/completions
    | 1. 验证容器 Token
    | 2. 检查用户配额
    | 3. 根据模型名匹配 Provider
    | 4. 注入真实 API Key
    v
[LLM 提供商] (Anthropic / OpenAI / DashScope / DeepSeek / ...)
    |
    | 响应沿原路返回
    v
用户在浏览器看到回复

核心转发Openclaw的API的流程


   1. Frontend (前端)
      - 运行在 3080 端口
      - Vite 配置将 /api 代理到 http://localhost:8080(gateway)

   2. Gateway / Platform (平台后端)
      - 运行在 8080 端口,由 ./platform 构建
      - 处理认证、用户管理、数据库
      - 对于 /api/openclaw/* 路径,通过 platform/app/routes/proxy.py 反向代理到用户的 OpenClaw 容器

   3. OpenClaw Bridge (用户容器内)
      - 每个用户有独立的 Docker 容器
      - Bridge 服务运行在 18080 端口(WebSocket)和 8080 端口(HTTP API)
      - 提供 agents、sessions、skills、cron 等功能

1.2 关键设计决策

| 决策 | 说明 | |------|------| | OpenClaw 作为 Agent 核心 | 替代原有 nanobot Python Agent,使用 OpenClaw(TypeScript/Node.js)作为每个用户的 AI 运行时,功能更强大 | | Bridge 适配层 | 在 OpenClaw 外包装一层 Bridge,提供 HTTP API + WS 中继,适配平台的多租户管理 | | API Key 不进容器 | 所有 LLM API Key 只存在于 Gateway 环境变量中,容器通过 Token 代理访问 | | 容器级隔离 | 每个用户独立容器、独立 Volume,互不干扰 | | 按需创建 | 用户首次聊天时才创建容器,空闲 30 分钟暂停,30 天归档 |


2. 多租户部署(Docker Compose)

2.1 架构

浏览器 --> frontend:3080 --(JS请求)--> gateway(platform):8080 --> 用户容器(openclaw)
                                            |                   |
                                       postgres:5432      gateway/llm/v1
                                       (用户/配额)         (注入API Key)
                                                               |
                                                         实际 LLM 提供商
  • Frontend:Vite + React Web 界面,用户注册、登录、聊天
  • Gateway:平台网关(Python FastAPI),负责认证、用户容器管理、LLM 代理、配额控制
  • 用户容器:每个用户一个独立的 OpenClaw 实例(通过 Bridge 启动),自动创建,数据隔离
  • PostgreSQL:存储用户账户、容器元数据、用量记录

2.2 前置条件

  • Docker & Docker Compose
  • 至少一个 LLM 提供商的 API Key

2.3 配置 .env 文件

在项目根目录创建 .env 文件,填入你的 API Key 和配置:

# .env — docker compose 自动读取此文件

# ========== 必填:至少配置一个 LLM 提供商 ==========

# 阿里 DashScope(通义千问系列)
DASHSCOPE_API_KEY=sk-xxxxxxxxxxxx

# Anthropic(Claude 系列)
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxx

# OpenAI(GPT 系列)
OPENAI_API_KEY=sk-xxxxxxxxxxxx

# DeepSeek
DEEPSEEK_API_KEY=sk-xxxxxxxxxxxx

# OpenRouter(支持路由到任意模型,作为兜底)
OPENROUTER_API_KEY=sk-or-xxxxxxxxxxxx

# AiHubMix
AIHUBMIX_API_KEY=sk-xxxxxxxxxxxx

# ========== 可选配置 ==========

# 默认模型(新用户容器使用此模型)
DEFAULT_MODEL=dashscope/qwen3-coder-plus

# JWT 密钥(生产环境务必修改)
JWT_SECRET=your-secure-random-string

2.4 支持的模型

配置对应的 API Key 后,用户可以使用以下模型:

| 提供商 | 模型示例 | .env 变量 | |--------|---------|-------------| | DashScope | dashscope/qwen3-coder-plus, dashscope/qwen-turbo | DASHSCOPE_API_KEY | | Anthropic | claude-sonnet-4-5, claude-opus-4-5 | ANTHROPIC_API_KEY | | OpenAI | gpt-4o, gpt-4o-mini, o3-mini | OPENAI_API_KEY | | DeepSeek | deepseek/deepseek-chat, deepseek/deepseek-reasoner | DEEPSEEK_API_KEY | | AiHubMix | aihubmix/模型名 | AIHUBMIX_API_KEY | | OpenRouter | openrouter/任意模型(兜底) | OPENROUTER_API_KEY |

Gateway 根据模型名自动匹配提供商并注入对应的 API Key,用户容器内不存储任何密钥。

2.5 构建与启动

方式1:一键部署脚本

# 准备环境(检查 Docker、下载镜像等)
python prepare.py

# === Docker 部署(推荐) ===

# 本地 Docker 部署(localhost 访问)
python deploy_docker.py

# 重新构建指定服务
python deploy_docker.py --rebuild openclaw,gateway,frontend

# 仅重建某个服务
python deploy_docker.py --rebuild frontend

# 仅构建镜像不启动
python deploy_docker.py --build-only

# 完全清理重建,删除部署的数据
python deploy_docker.py --clean

# === 本地开发模式 ===

# 启动所有本地服务(postgres + bridge + gateway + frontend dev server)
python start_local.py

# 停止所有服务
python start_local.py --stop

# 检查服务状态
python check_status.py

提示:换网不需要重新 build 前端。前端使用相对路径 /api/...,由 nginx 反代转发,与 IP 无关。

本地测试启动后:

本地开发环境已启动
        PostgreSQL  http://127.0.0.1:5432  (存储用户表信息,参考doc/table.md)
  OpenClaw Bridge   http://127.0.0.1:18080  (每个用户容器启动时都会创建,用于控制openclaw)
  Platform Gateway  http://127.0.0.1:8080   # 控制openclaw的网关
      Frontend Dev  http://127.0.0.1:3080     #用户使用界面
      Manage Admin  http://127.0.0.1:3081  #管理界面

方式2:手动启动

  1. PostgreSQL (端口 5432)

    启动 Docker 容器

    docker run -d
    --name openclaw-local-postgres
    -e POSTGRES_USER=nanobot
    -e POSTGRES_PASSWORD=nanobot
    -e POSTGRES_DB=nanobot_platform
    -v openclaw-local-pgdata:/var/lib/postgresql/data
    -p 5432:5432
    postgres:16-alpine


  1. OpenClaw Bridge (端口 18080)

cd openclaw

方式一:使用 tsx(推荐)

tsx bridge/start.ts

方式二:使用 npx

npx tsx bridge/start.ts

方式三:使用编译后的 JS

node bridge/dist/start.js


  1. Platform Gateway (端口 8080)

cd platform

设置必要的环境变量

export PLATFORM_DATABASE_URL="postgresql+asyncpg://nanobot:nanobot@localhost:5432/nanobot_platform" export PLATFORM_DEV_OPENCLAW_URL="http://127.0.0.1:18080" export PLATFORM_DEV_GATEWAY_URL="ws://127.0.0.1:18789"

启动 uvicorn

python -m uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload

注意:从项目根目录 .env 文件读取 _API_KEY、_API_BASE、JWT_SECRET、DEFAULT_MODEL 等配置。


  1. Frontend Dev Server (端口 3080)

cd frontend

安装依赖(首次)

npm install

启动开发服务器

VITE_API_URL=http://127.0.0.1:8080 npm run dev


快速启动单个服务

你也可以用脚本指定只启动某个服务:

✦ # 只启动 bridge python start_local.py --only bridge

启动 gateway + frontend,跳过 db

python start_local.py --skip db,gateway

停止所有服务

python start_local.py --stop

容器方式手动启动

# 1. 构建 openclaw 基础镜像(包含 openclaw + bridge)
docker build -f openclaw/Dockerfile.bridge -t openclaw:latest openclaw/

# 2. 构建并启动所有服务
docker compose up -d --build

# 查看日志
docker compose logs -f

注意:前端使用相对路径 /api/... 访问后端,由 nginx 反代到 gateway 容器。 换网或更换 IP 不需要重新 build 前端

2.6 使用

  1. 打开浏览器访问 `http://local
View on GitHub
GitHub Stars157
CategoryDevelopment
Updated3h ago
Forks34

Languages

TypeScript

Security Score

95/100

Audited on Mar 30, 2026

No findings