# SmartDock **Repository Path**: rickie182/smart-dock ## Basic Information - **Project Name**: SmartDock - **Description**: SmartDock 是开源通用智能体(AI Agent)引擎与事件源用户画像引擎:支持多 agent 注册、ReAct 工具调用、工具 SPI、HITL 写操作确认、PII 脱敏与计费;内置 AI 助手应用与行为分析,Java 21 / Spring Boot 3.5 / Vue 3.5 / RuoYi,附完整后台基座。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 27 - **Forks**: 4 - **Created**: 2026-10-17 - **Last Updated**: 2026-10-29 ## Categories & Tags **Categories**: ai **Tags**: 智能体, agentscope, ruoyi, Harness, Agent ## README # SmartDock

SmartDock:通用智能体引擎 × 用户画像引擎

License Spring Boot AgentScope Vue PostgreSQL

SmartDock 是一套**通用智能体引擎**与**用户画像引擎**的参考实现:两条引擎在同一个 Spring Boot 进程里各管一摊,靠「业务事件」与「工具 SPI」两条缝对接;多租户、权限、计费、审计这些平台能力由底座提供,不重复造。 > **它是参考实现,不是装上就能用的成品。** 两条引擎可以拆开单独复用(画像引擎不依赖智能体,智能体也不依赖画像),平台基线可以直接当脚手架改。上线前需要接入自己的模型 Key、替换默认口令,并完成所在组织要求的安全与合规评估。 **不适合谁**(先说清楚,省得白折腾): - 想要开箱即用的 SaaS 成品、不愿碰 Java/Spring 的团队; - 只要一个聊天框套壳、不需要工具调用、权限与审计留痕的场景; - 需要多智能体自主协商编排的复杂流程——本项目按 `agentId` 注册与路由,不做多 agent 自主协同。 ## 界面速览
首页总览
首页总览:两条引擎的运行态与近 7 天使用次数
数据分析中心
数据分析中心:使用次数 / 人数 / 会话 / 单页离开率
AI 助手
AI 助手:工具调用链,查不到就说查不到

本地 10 分钟跑起来 | 分层与判定序 | 智能体引擎 | 画像引擎 | 业务接入指南

截图更新于 v3.34.1(单源重构 M1 批末,内部协作演示故事);界面数据由 `backend/script/demo/seed-internal-ops-demo.js` 生成的合成演示数据,不含真实个人信息。 ## 目录 - [界面速览](#界面速览) - [技术架构](#技术架构) - [核心能力](#核心能力) - [快速开始](#快速开始) - [核心模块](#核心模块) - [使用说明](#使用说明) - [更多界面](#更多界面) - [扩展指南](#扩展指南) - [技术栈](#技术栈) - [安全与上线前检查](#安全与上线前检查) - [测试与质量](#测试与质量) - [内置账号](#内置账号) - [文档导航](#文档导航) - [许可](#许可) - [🙏 特别鸣谢](#-特别鸣谢) ## 技术架构

SmartDock 技术架构

客户端只调 REST/SSE;两个引擎同进程、互不依赖,靠「业务事件 → 画像」和「工具 SPI → 智能体」两条缝对接;平台能力(多租户、权限、计费、文件安全、风控、调度、监控、对象存储)全部来自底座。分层细节、模块边界与判定顺序见 [docs/architecture.md](docs/architecture.md)。 ## 核心能力 ### 🧩 智能体引擎(主打) - **多智能体注册**:按 `agentId` 注册与路由,共用工具注册、权限、记忆、技能与计费 - **ReAct 工具循环**:模型自主决策调用工具,全程流式输出(AGUI/SSE,28 类事件) - **工具 SPI 机制**:业务能力通过 `BizToolProvider` 扩展,无需修改引擎核心 - **安全防护**:PII 出网脱敏、工具结果注入打标、16K 输入闸、HITL 写操作确认 - **计费系统**:钱包/积分双轨、13 家预置供应商 + 自定义、多 Key 池 ### 📊 用户画像引擎 - **事件源评分**:业务动作 → 事件 → 规则 → 版本化快照,可回放、可对账 - **配置化维度**:六种算子 + 时间窗 + 打分映射 + 缺失策略,80% 维度零代码 - **通用接入**:任意业务源通过同构事件接入,配置维度即可产出画像 ### 🏢 平台基线 继承 RuoYi-Vue-Plus 5.6.1,多租户、权限、字典、OSS、文件安全、风控、调度、监控一应俱全。 ## 快速开始 > **只想最快看到第一张图?** 按下面「方式一」起好后端与前端(约 3 分钟), > 跑一次造数脚本、点一次「重建汇总」,然后直达 > **「画像与分析 → 数据分析」**——使用概览、漏斗、留存、明细等主要报表全部有数 > (约 292 事件 / 81 会话 / 4 位同事的内部协作演示口径;实时看板只统计最近 5 分钟,演示种子是历史数据、显示为空属正常)。Java 接入 10 分钟指南见 > [docs/profile-integration.md](docs/profile-integration.md),协议字段表见 > [docs/profile-engine.md](docs/profile-engine.md#2-通用接入协议)。 ### 前置条件 - JDK 21、Maven 3.8+ - Node.js ≥ 20.19.0、npm ≥ 8.19.0 - PostgreSQL 14+、Redis 7 - 本机演示建议可用内存 ≥ 4G;浏览器需支持 ES2020 - 可选:MinIO(附件存储) ### 方式一:本地开发 **1. 建库执行 SQL** ```bash export PGCLIENTENCODING=UTF8 createdb -U postgres -E UTF8 smartdock psql -U postgres -d smartdock -f backend/script/sql/baseline/01_schema.sql psql -U postgres -d smartdock -f backend/script/sql/baseline/02_reference.sql psql -U postgres -d smartdock -f backend/script/sql/baseline/03_identity.sql psql -U postgres -d smartdock -f backend/script/sql/baseline/04_role_menu.sql # 可选:一条演示任务;跳过即为干净空库 psql -U postgres -d smartdock -f backend/script/sql/baseline/05_demo_data.optional.sql psql -U postgres -d smartdock -f backend/script/sql/baseline/06_profile_protocol.sql psql -U postgres -d smartdock -f backend/script/sql/baseline/07_analytics.sql ``` Windows CMD 用 `set PGCLIENTENCODING=UTF8`,PowerShell 用 `$env:PGCLIENTENCODING='UTF8'`。 **2. 启动后端** ```bash cd backend mvn clean package -DskipTests java -Duser.timezone=GMT+8 -jar ruoyi-admin/target/ruoyi-admin.jar --server.port=8090 ``` 默认连接 PostgreSQL `127.0.0.1:5432/smartdock`(`postgres` / `postgres`)、Redis `127.0.0.1:6379` db0 无口令。 口令不同时用启动参数覆盖: ```bash java -Duser.timezone=GMT+8 -jar ruoyi-admin/target/ruoyi-admin.jar \ --spring.datasource.dynamic.datasource.master.password=你的库口令 \ --spring.data.redis.password=你的Redis口令 ``` **3. 启动前端** ```bash cd frontend npm ci npm run dev ``` 访问 http://localhost:5188,使用 `admin / admin123` 登录。端口冲突时,前端改 `frontend/.env.development` 的 `VITE_APP_PORT`,后端用 `--server.port=` 覆盖。 > 需要浏览器里的 Vue 调试面板时(默认关闭,避免向页面注入调试浮层):`VITE_DEVTOOLS=1 npm run dev`(Windows PowerShell:`$env:VITE_DEVTOOLS='1'; npm run dev`)。 **4. 造一份演示数据(可选)** 空库也能跑,但界面没数据。想快速看到截图里的效果: ```bash node backend/script/demo/seed-internal-ops-demo.js --base http://localhost:8090 --days 30 ``` 脚本走管理员登录 + CSV 导入端点写入合成事件(4 位同事 30 天的登录/发布/提交/审核/关闭,约 292 条),再到「数据分析 → 重建汇总」跑一次重建,即可得到约 81 会话 / 4 位同事的内部协作演示口径。同一天重复执行幂等;跨天重播请先清掉旧的 `demo-io-` 前缀数据,否则会叠加。 ### 方式二:Docker Compose(Linux 服务器推荐) 编排文件在 **`deploy/docker-compose.yml`**,包含 postgres / redis / minio / backend / frontend 五个服务。 Dockerfile 的构建上下文是**仓库根目录**,镜像会直接拷 `backend/ruoyi-admin/target/ruoyi-admin.jar` 与 `frontend/dist/`——所以**必须先构建产物**,再启动编排。 **1. 准备环境** - Docker Engine 24+ 与 Docker Compose v2(按官方文档安装:) - 构建工具:JDK 21、Maven 3.8+、Node.js ≥ 20.19 - 也可以在本地构建好 `ruoyi-admin.jar` 与 `dist/` 后上传到服务器,只装 Docker **2. 构建产物** ```bash git clone https://gitee.com/rickie182/smart-dock.git cd smart-dock cd backend && mvn clean package -DskipTests && cd .. cd frontend && npm ci && npm run build:prod && cd .. ``` **3. 配置口令并启动** 在 `deploy/` 下新建 `.env`(compose 会自动读取,勿提交): ```bash POSTGRES_PASSWORD=换成强口令 REDIS_PASSWORD=换成强口令 MINIO_PASSWORD=换成强口令 HTTP_PORT=80 ``` ```bash cd deploy docker compose up -d --build docker compose ps # 五个服务应为 running / healthy ``` **4. 访问与首启配置** 浏览器打开 `http://<服务器IP>/`,用 `admin / admin123` 登录并**立即改密**; 再到「AI 模型配置」录入供应商 Key 与 CNY 价格行,在「AI 助手管理」设为默认模型 (基线不含任何 Key,未配置时助手会明确提示)。 **5. Linux 运维要点** - **端口**:`HTTP_PORT`(默认 80)对外;MinIO API `9000` 对外供附件直链;管理台 `9001` 只绑 `127.0.0.1`,远程用 `ssh -L 9001:127.0.0.1:9001 user@host` 访问。 - **防火墙**:只放行 80/443 与 9000;不要暴露 9001 与数据库/Redis 端口。 - **数据**:持久化在 `deploy/data/{postgres,redis,minio}`,日志在 `deploy/logs/`;备份直接打包 `deploy/data`。 - **升级/回滚**:重新构建产物后 `docker compose up -d --build`;`docker compose down`(不加 `-v`)保留数据,可回退镜像。 - **初始化 SQL**:首次启动自动执行 `backend/script/sql/baseline/` 的 01→07(含 05 演示数据);不需要演示数据时,在**首次启动前**把 `05_demo_data.optional.sql` 移出该目录。修改 SQL 后需清空 `deploy/data/postgres` 才会重放。 - **HTTPS**:compose 只监听 80,生产建议在前面加 Nginx/Caddy 终止 TLS,再反代到 `HTTP_PORT`。 - 裸机部署、健康检查与更多细节见 [docs/deploy.md](docs/deploy.md)。 ## 核心模块 | 模块 | 职责 | |------|------| | `ruoyi-admin` | 启动模块,聚合全部运行时 | | `ruoyi-profile-engine` | 画像引擎:事件源、维度计算、快照版本化 | | `ruoyi-assistant` | 智能体运行时:ReActAgent、工具注册、AGUI 事件 | | `ruoyi-assistant-spi` | 业务工具 SPI 契约 | | `ruoyi-ai-billing` | AI 计费:供应商配置、钱包、积分、价格 | | `ruoyi-dcs` | 内置 Demo:任务/提交/审核/通知/画像事件 | | `ruoyi-system` | 平台基座:用户/租户/部门/角色/菜单/字典 | | `ruoyi-file-security` / `ruoyi-risk` / `ruoyi-job` | 文件安全、风控、调度 | ## 使用说明 ### AI 助手

AI 助手:一次完整问答

1. 登录后进入「AI 模型配置」,配置模型供应商与 API Key; 2. 为模型维护 **CNY 价格行**(价格目录维护或自动探测)——无人民币价格行的模型不会进入可选列表; 3. 在「AI 助手管理」设置默认模型; 4. 打开助手抽屉,开始对话。 助手支持: - 页面感知:随当前页面推荐问题 - `@` 引用业务对象 - 思考档位切换(快 / 平衡 / 深) - 工具调用可视化(含耗时与来源数) - HITL 写操作确认
AI 助手:写操作确认卡
要写库之前先停下来问:卡片写明这一步会动真实数据,点「确认执行」才落库;待确认期间输入暂停、草稿保留
AI 助手管理端
管理端:开关、每日回合上限、联网次数与租户日预算,加上进程内运行健康,一页看清
> 基线不包含任何 AI Key;没有可用模型配置时,助手会明确提示未配置,不会静默降级到其他租户或平台配置。 > 工具面之外的问题它会直说「查不到」,不编数字——这一点在上面动图里能看到。 ### 用户画像 1. 业务系统通过 `ProfileEventPublisher` 发送事件([Java 接入示例与协议字段表](docs/profile-engine.md#2-通用接入协议)); 2. 在「画像工作室」配置维度、权重与覆盖度; 3. 触发重算,查看主体画像与历史快照。

画像详情:维度雷达、总分趋势与逐维证据

### 配置与运营
画像工作室
画像工作室:7 套场景模板一键预填,维度/权重/分群/漏斗可完全自建
AI 模型与钥匙
AI 模型与钥匙:按厂商管模型、价格、钥匙与巡检
### 内置 Demo 任务采集系统演示了两个引擎的接入方式: - 任务发布 → 成员填报 → 审核 → 通知 - 每次状态迁移产生画像事件 - 助手可查询任务、待办、提交,甚至创建草稿任务 执行基线 `05_demo_data.optional.sql` 后可直接看到一条演示任务;跳过时 Demo 页为空,可自行创建任务体验。 任务与提交的状态机见 [docs/architecture.md](docs/architecture.md)。 ## 更多界面 四张图分别证明分析深度、画像运营与企业合规:
转化漏斗
转化漏斗:内置 demo 的真实任务链路——任务发布 → 数据提交 → 审核通过,每一步的流失去向都写在下方
标签分群
标签分群:规则只写一次,成员按最新快照实时求值,运行记录可追溯
低分复核
低分复核:低于阈值自动入队;确认或驳回后,分数没有继续下降就不再重复打扰
合规中心
合规中心:敏感字段打码规则、主体级删除、导出审计,一页管齐并全部留痕
## 扩展指南 ### 新增画像维度 向 `profile_score_dimension` 插入配置(`prop` / `dedupKey` 键名需匹配 `^[A-Za-z][A-Za-z0-9_]{0,62}$`): ```json { "metric": { "operator": "COUNT", "target": { "eventType": "task.published" } }, "window": { "type": "all" }, "score": { "type": "linear", "direction": "higher", "lo": 0, "hi": 100 }, "missing": "neutral" } ``` ### 新增业务工具 实现 `BizToolProvider` 接口,返回工具列表: ```java @Bean public BizToolProvider taskToolProvider() { return () -> List.of( BizToolSpec.readOnly("query_tasks", "查询任务列表", "按标题模糊查询与我相关的任务") ); } ``` ### 新增智能体 注册工厂到 AGUI 注册表: ```java @Bean public AguiAgentRegistryCustomizer myAgentCustomizer() { return registry -> registry.registerFactory("my-agent", factory); } ``` ## 技术栈 | 类别 | 组件 | |------|------| | 后端 | Java 21、Spring Boot 3.5.14、Spring AI 1.1.5、AgentScope 2.0.3 | | 框架 | Sa-Token、MyBatis-Plus、Redisson、Hutool、SnailJob | | 前端 | Vue 3.5、TypeScript、Element Plus、Vite、Pinia、ECharts | | 数据库 | PostgreSQL 14+、Redis 7、MinIO | | 基础 | RuoYi-Vue-Plus 5.6.1 (MIT) | ## 安全与上线前检查 - 基线**不包含任何真实 AI Key**;`dcs.assistant.websearch.key` 默认留空(联网搜索未启用)。 - `application.yml` 的 `jwt-secret-key`、RSA/AES 密钥以及数据库/Redis/MinIO 默认口令均为演示值,**上线前必须全部替换**。 - 默认账号仅用于本地演示;生产环境请删除或改密,并按组织要求配置密码策略。 - AI 只负责起草与建议:所有写操作都经过 HITL 确认,但模型输出不保证正确,关键结论请保留证据链。 - 仓库提供的是技术实现,不构成等保、隐私或行业合规的认证或法律意见。 ## 测试与质量 后端 JUnit **447** 用例 + 前端 Vitest **200** 用例,覆盖权限矩阵、状态机、PII 脱敏、注入打标、HITL、AGUI 协议与计费。 ```bash # 后端(根 pom 默认 skipTests=true,必须显式覆盖) cd backend && mvn test -DskipTests=false # 前端 cd frontend && npm test && npm run build:prod ``` README 里的界面截图由 `frontend/scripts/readme-screenshots.mjs` 生成(1440×900、亮色、同一套演示数据),改版后可一条命令重拍。 ## 内置账号 | 账号 | 密码 | 角色 | |------|------|------| | admin | admin123 | 超级管理员 | | user001 | admin123 | 成员 | | user002 | admin123 | 成员 | | user003 | admin123 | 成员 | > 演示账号仅用于本地开发,首次登录请立即修改密码。 ## 文档导航 - [智能体引擎深度文档](docs/agent-engine.md) - [用户画像引擎深度文档](docs/profile-engine.md) - [业务接入指南(10 分钟)](docs/profile-integration.md) - [架构设计](docs/architecture.md) - [使用说明(按角色走读)](docs/usage.md) - [部署指南](docs/deploy.md) - [基线 SQL 说明](backend/script/sql/baseline/README.md) - [前端开发说明](frontend/README.md) - [NOTICE(上游版权与署名)](NOTICE) ## 许可 本项目使用 Apache License 2.0,详见 [LICENSE](LICENSE)。 基础框架来自 [RuoYi-Vue-Plus](https://gitee.com/dromara/RuoYi-Vue-Plus) 5.6.1 (MIT),AI 运行时基于 [AgentScope (Java)](https://github.com/agentscope-ai/agentscope-java) 2.0.3,模型访问基于 [Spring AI](https://spring.io/projects/spring-ai) 1.1.5。 ## 🙏 特别鸣谢 > 感谢以下优秀的开源项目为本项目提供支持: - [AgentScope(Java)](https://github.com/agentscope-ai/agentscope-java) — 智能体运行时框架:ReActAgent 工具循环、权限上下文与 AGUI 事件协议 - [RuoYi-Vue-Plus](https://gitee.com/dromara/RuoYi-Vue-Plus) — 成熟的企业级快速开发框架:多租户、权限与平台基座 - [Spring AI](https://spring.io/projects/spring-ai) — Spring 生态的模型访问网关与抽象 - [Vue 3](https://github.com/vuejs/core) & [Element Plus](https://github.com/element-plus/element-plus) — 现代化的前端框架与组件库 - [Sa-Token](https://sa-token.cc) / [MyBatis-Plus](https://baomidou.com) / [Redisson](https://redisson.org) / [Hutool](https://hutool.cn) — 认证鉴权、ORM、分布式协调与工具库 ---

SmartDock · 让「接得进来、用得放心、看得明白」成为可运行的代码