# 智枢 ExpertHub **Repository Path**: xphai/expert-hub ## Basic Information - **Project Name**: 智枢 ExpertHub - **Description**: 面向行业公司的专家资产智能管理平台 —— 统一建档、智能检索、对话问答、分级管控,让每一次「找人」、「找资产」快人一步。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-09-02 - **Last Updated**: 2026-09-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智枢 ExpertHub · 行业专家资产智能管理平台 ![智枢 ExpertHub Logo](expert-thinktank-web/public/favicon.svg) **行业专家资产智能管理平台 · 专家资源沉淀为企业核心资产** ![Java 17](https://img.shields.io/badge/Java-17-orange) ![Spring Boot 3.5.4](https://img.shields.io/badge/Spring%20Boot-3.5.4-brightgreen) ![Spring AI 1.0.0](https://img.shields.io/badge/Spring%20AI-1.0.0-green) ![PostgreSQL 16 + pgvector](https://img.shields.io/badge/PostgreSQL-16%20%2B%20pgvector-blue) ![Vue 3](https://img.shields.io/badge/Vue-3-42b883) ![Element Plus](https://img.shields.io/badge/Element%20Plus-2.x-409eff) > 专家资源沉淀为企业核心资产 —— 面向行业公司的专家资产智能管理平台:统一建档、智能检索、对话式找人、分级管控。 智枢 ExpertHub 以「专家资产数字化 + 对话式智能体」为核心,把散落在各处的行业专家资源沉淀为可检索、可治理、可安全共享的企业核心资产。内置混合检索(关键词 + 语义向量 + 重排)与基于大模型的对话式智能助手,支持自然语言「找人」、澄清反问、统计分析与推荐。 --- ## ✨ 功能特色 * **专家资产数字化**:专家统一建档(基本信息 / 教育经历 / 工作经验 / 合作记录 / 附件资料),档案完整度自动评估,查重与合并治理,待治理清单驱动持续完善。 * **多源数据导入**:Excel 批量导入 + 简历 / 论文 / PPT 等文档解析(Apache Tika),结合大模型自动抽取专家信息与标签建议,导入即进入人工审核队列,人机协同保证资产质量。 * **混合检索**:BM25 关键词召回 + pgvector 语义向量召回 + BGE 重排模型二次排序,多维度标签筛选,让「找人」又快又准。 * **对话式智能助手**:SSE 流式对话,多轮会话历史,槽位驱动的澄清反问(「搞建筑的专家」→ 主动追问细分领域),内置 Text2SQL 统计问答与相似专家推荐。 * **密钥配置化(免改配置文件)**:大模型 / 嵌入 / 重排的 API Key 与地址全部在「系统管理 → 模型与密钥」界面配置,AES-256-GCM 加密入库、脱敏回显、一键连通性测试,保存后对话 / 检索**热生效**,无需重启。 * **企业级安全管控**:Sa-Token RBAC 角色权限、手机号 / 邮箱默认脱敏(眼睛图标点击揭示,揭示行为审计 + 频控)、全操作审计日志、TraceId 全链路追踪。 ## 🏗 技术架构 ```mermaid flowchart LR subgraph client["浏览器"] fe["Vue 3 + Element Plus\n(Pinia / ECharts / SSE)"] end subgraph server["服务端(模块化单体 · Spring Boot 3)"] ng["Nginx\n静态资源 / 反向代理 / SSE 透传"] subgraph boot["expert-boot 启动装配"] flyway["Flyway 迁移\n(普通 + 向量库)"] init["DataInitializer\n默认账号 / 旧密钥迁移"] end subgraph biz["expert-business 业务域"] domain["专家域"] ingestion["导入域"] agent["智能体域"] tag["标签域"] stat["统计域"] gov["治理域"] end auth["expert-auth\n认证 / 用户 / 审计 / 模型配置"] infra["expert-infra\n系统配置 / 动态AI装配 / 重排 / SSE / 存储"] common["expert-common\n统一响应 / 加密 / 脱敏 / 审计 / 追踪"] end subgraph storage["存储层"] pg[("PostgreSQL 16 + pgvector\n业务库 + 向量库")] rd[("Redis 7\n会话 / 缓存 / 澄清状态")] mio[("MinIO / 本地盘\n附件对象存储")] llm["大模型服务\nOpenAI 兼容协议\n(对话 / 嵌入 / 重排)"] end fe -->|HTTP / SSE| ng --> app["Spring Boot 应用"] app --- boot app --- biz app --- auth app --- infra infra --- common auth --- common biz --- infra infra --> pg infra --> rd infra --> mio infra -->|密钥热生效| llm ``` **技术栈** | 层次 | 技术 | | ----- | ------------------------------------------------------------------- | | 后端框架 | Java 17 · Spring Boot 3.5.4 · Spring MVC | | AI 能力 | Spring AI 1.0.0(OpenAI 兼容协议)· pgvector 向量检索 · BGE 重排 | | 数据访问 | MyBatis Plus 3.5.12 · PostgreSQL 16(pgvector)· Redis 7 | | 认证安全 | Sa-Token 1.44(RBAC,会话存 Redis)· AES-256-GCM 字段加密 | | 文档处理 | Apache Tika 3.0(简历 / 论文 / PPT 解析)· Fesod 2.0(Excel 导入) | | 对象存储 | MinIO 8.5 / 本地磁盘双模式 | | 前端 | Vue 3 · TypeScript · Vite · Element Plus · Pinia · ECharts · 原生 SSE | | 运维部署 | Docker Compose 一键编排 · Nginx · Spring Boot Actuator | ## 📦 模块划分 后端为**模块化单体**:域间仅通过对方暴露的 service 接口依赖,由 `expert-boot` 统一装配。 ``` expert-thinktank/ 后端 Maven 聚合工程 ├── expert-common/ 通用基建:统一响应 R / 全局异常 / 审计注解 │ AES 加密(EncryptTypeHandler)/ 脱敏工具 / TraceId ├── expert-infra/ 技术设施:系统配置库(t_sys_config) │ DynamicAiConfig(对话/嵌入密钥热生效) │ RerankerClient(重排)/ SSE 工厂 / 文件存储 / 异步配置 ├── expert-auth/ 认证授权:登录 / 用户管理 / RBAC │ 审计日志 / 模型配置管理接口(脱敏 + 连通测试) ├── expert-business/ 六大业务域 │ ├── domain/ 专家域:档案 / 完整度 / 向量资料 / 文档 │ ├── ingestion/ 导入域:Excel 导入 / 文档解析 / AI 抽取 / 审核队列 │ ├── agent/ 智能体域:会话编排 / 澄清门控 / 混合检索 │ │ Text2SQL 统计 / 推荐 │ ├── tag/ 标签域:标签树 / 专家标签 │ ├── stat/ 统计域:工作台与看板指标 │ └── governance/ 治理域:查重 / 合并 / 治理任务 └── expert-boot/ 启动装配:Application / Flyway 迁移 DataInitializer(默认账号 + 旧密钥迁移) expert-thinktank-web/ 前端工程(Vue 3 + Vite) ├── src/api/ 接口封装(axios 统一拦截) ├── src/views/ 页面:登录 / 工作台 / 专家库 / 详情 / 导入 │ 智能助手 / 统计看板 / 标签管理 / 系统管理 ├── src/layouts/ 主布局(品牌 Logo / 导航) ├── src/stores/ Pinia 状态(auth / tagTree) ├── src/composables/ 组合式函数(SSE 流式消费) └── public/ 品牌图标(favicon.svg / favicon.ico) docs/ ├── pictures/ 效果图 └── docker/ Docker 部署(compose / Dockerfile / nginx) deploy/ 开发期基础设施编排(PostgreSQL / Redis / MinIO) 及 nginx 反代配置,供本地开发快速拉起依赖 ``` ## 🖼 效果图 ### 登录页 ![登录页](docs/pictures/login.png) ### 工作台 ![工作台](docs/pictures/dashboard.png) ### 专家库 ![专家库](docs/pictures/experts.png) ### 专家数据资产导入 ![专家数据资产导入](docs/pictures/import.png) ### 智能助手(带聊天历史) ![智能助手](docs/pictures/agent.png) ### 统计看板 ![统计看板](docs/pictures/statistic.png) ### 标签管理 ![标签管理](docs/pictures/tags.png) ### 模型配置(系统管理 → 模型与密钥) ![模型配置](docs/pictures/modelset.png) ## 🚀 快速开始(本地开发) **环境要求**:JDK 17 · Maven 3.8+ · Node.js 18+ · Docker(基础设施) ```bash # 1. 启动基础设施(PostgreSQL/pgvector、Redis、MinIO) cd deploy copy .env.example .env # Windows;Linux/macOS 为 cp .env.example .env docker compose -f docker-compose.infra.yml up -d # 2. 启动后端(首次启动自动执行 Flyway 迁移与默认数据初始化) cd expert-thinktank mvn spring-boot:run -pl expert-boot # 3. 启动前端 cd expert-thinktank-web npm install npm run dev ``` 访问 http://localhost:5173 ,默认账号:`admin / admin123`(管理员)、`planner / planner123`(高级用户演示号)。 > 大模型密钥无需改任何配置文件:登录后进入「系统管理 → 模型与密钥」,直接在界面填写 DeepSeek / SiliconFlow 等服务的 API Key,保存即生效。也可通过 `LLM_API_KEY` 等环境变量注入,首次启动时自动迁移入配置库。 ### ⚙️ 关键环境变量速查 | 变量 | 说明 | 默认值 | | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | | `PG_HOST` / `PG_PORT` / `PG_DB` / `PG_USER` / `PG_PASSWORD` | PostgreSQL 连接 | `localhost` / `5432` / `expert_db` / `postgres` / `postgres` | | `REDIS_HOST` / `REDIS_PORT` / `REDIS_PASSWORD` | Redis 连接(会话 / 缓存) | `localhost` / `6379` / 空 | | `APP_CRYPTO_AES_KEY` | 密钥加密根密钥(Base64 32 字节,`openssl rand -base64 32` 生成) | 开发默认密钥(**生产必填**) | | `STORAGE_MODE` | 附件存储模式:`local` / `minio` | `local` | | `MINIO_ENDPOINT` / `MINIO_USER` / `MINIO_PASSWORD` / `MINIO_BUCKET` | MinIO 对接(`minio` 模式时生效) | `localhost:9000` / `minioadmin` / `minioadmin` / `expert` | | `FLYWAY_LOCATIONS` | Flyway 迁移位置:全量模式含 `db/migration-vector`(需 pgvector);无 pgvector 环境设为 `classpath:db/migration` 走降级模式 | 全量 | | `LLM_BASE_URL` / `LLM_API_KEY` / `LLM_MODEL` | 对话模型兜底配置(数据库配置优先) | DeepSeek | | `EMBEDDING_BASE_URL` / `EMBEDDING_API_KEY` | 嵌入模型兜底配置(数据库配置优先) | SiliconFlow | | `RERANK_API_KEY` | 重排模型兜底配置(数据库配置优先) | SiliconFlow | ## 🐳 Docker 一键部署 > 两套编排的定位:[`deploy/`](deploy) 面向**本地开发**(仅拉起 PostgreSQL / Redis / MinIO 基础设施,应用以前后端热加载方式运行);[`docs/docker/`](docs/docker) 面向**完整部署**(前后端全部容器化,一键起全栈)。 全套部署文件位于 [`docs/docker`](docs/docker): ``` docs/docker/ ├── docker-compose.yml 全栈编排:web / app / postgres(pgvector) / redis / minio ├── Dockerfile 后端镜像(多阶段:容器内 Maven 打包 + JRE 运行) ├── Dockerfile.web 前端镜像(多阶段:容器内 Vite 打包 + Nginx 托管) ├── nginx.conf 静态资源 / API 反代 / SSE 流式透传 └── .env.example 环境变量模板 ``` **部署步骤** ```bash cd docs/docker cp .env.example .env # 编辑 .env:必须设置 PG_PASSWORD 与 APP_CRYPTO_AES_KEY(openssl rand -base64 32 生成) docker compose up -d --build ``` 启动完成后访问 http://localhost (端口由 `WEB_PORT` 控制,默认 80)。 **说明** * 首次构建会在容器内完成前后端打包(Maven / npm 依赖通过 BuildKit 缓存挂载加速),后续构建增量提速。 * `app` 服务带健康检查(`/actuator/health`),`web` / 依赖服务按健康状态编排启动顺序。 * 数据持久化:`pg_data`(数据库 + 向量)、`redis_data`、`minio_data`、`app_data`(本地存储模式的附件)四个 Docker 卷。 * 模型密钥两种注入方式:`.env` 中的 `LLM_API_KEY` 等仅作首次兜底,运行期统一以「系统管理 → 模型与密钥」界面配置为准,保存后热生效。 ## 🔐 安全说明 * 所有密钥经 AES-256-GCM 加密落库(根密钥 `APP_CRYPTO_AES_KEY`),界面仅脱敏回显(保留前 5 后 4)。 * 敏感联系方式默认遮挡,明文揭示走独立接口并记录审计日志 + 每日频控。 * 关键操作(登录 / 导出 / 明文查看 / 模型密钥变更等)全量写入审计日志,可按动作类型检索。 ## ❓ 常见问题 **Q:启动时报数据库连接失败(password authentication failed)?** 检查基础设施是否已启动(`docker compose -f docker-compose.infra.yml ps`),以及环境变量 `PG_PASSWORD` 与 `deploy/.env` 中的配置一致(示例环境为 `expert123`)。 **Q:修改了模型密钥 / Base URL 什么时候生效?** 「系统管理 → 模型与密钥」保存后**立即生效**(对话 / 嵌入 / 重排在下一次调用即使用新配置);仅「模型名称」变更需要重启应用。 **Q:数据库没有 pgvector 扩展能运行吗?** 可以。设置 `FLYWAY_LOCATIONS=classpath:db/migration` 走降级模式(跳过向量库迁移),语义检索 / 向量入库相关功能不可用,其余功能正常。推荐直接使用 `pgvector/pgvector:pg16` 镜像。 **Q:Docker 首次构建很慢?** 多阶段构建会在容器内执行 Maven / npm 打包,首次需下载全部依赖;已通过 BuildKit 缓存挂载(`--mount=type=cache`)持久化依赖目录,再次构建仅增量下载。也可先在本地完成 `mvn package` 与 `npm run build` 后改用挂载产物的方式加速。 --- © 2026 智枢 ExpertHub · 行业专家资产智能管理平台