跳到主要内容
基于 DeepSeek 的企业级知识管理系统设计与实现 | 极客日志
Java SaaS AI 大前端 java
基于 DeepSeek 的企业级知识管理系统设计与实现 基于 DeepSeek 大语言模型构建的企业级知识管理平台,采用 Spring Boot 2.7 与 React 18 前后端分离架构。系统支持 JWT 无状态认证、多部门细粒度权限控制及基于向量的语义搜索。核心功能涵盖文档全生命周期管理、AI 智能问答、分类检索及可视化配置。通过 AI 技术实现知识资产的动态服务与高效复用,适用于中大型企业及技术团队的知识沉淀与协作需求,降低知识获取成本并促进组织经验传承。
HadoopMan 发布于 2026/3/15 更新于 2026/5/3 18 浏览一、项目背景及简介
1.1 背景概述
在当今信息化时代,企业积累了海量的文档资料、技术规范、业务流程、项目经验等知识资产。然而,传统的知识管理方式面临着诸多挑战:
知识孤岛问题 :各部门文档分散存储,缺乏统一管理平台
查找效率低下 :员工需要花费大量时间在多个系统中查找所需信息
权限管理混乱 :难以实现细粒度的部门级权限控制
知识传承困难 :新员工难以快速获取历史经验和最佳实践
重复工作频发 :相同问题被反复咨询,缺乏知识沉淀机制
1.2 项目简介
企业知识库管理系统 是一个面向中大型企业的智能化知识管理解决方案。系统采用现代化的前后端分离架构,深度集成 DeepSeek AI 大语言模型,为企业提供文档管理、智能搜索、AI 问答、权限控制等一站式知识服务。
[图片]
1.3 核心价值
智能化 :AI 驱动的语义搜索和智能问答,让知识查找从"搜索"变为"对话"
安全性 :多层级权限体系,确保敏感信息仅在授权范围内访问
易用性 :直观的用户界面,零学习成本,开箱即用
可扩展性 :模块化设计,支持企业定制化需求
成本效益 :开源技术栈,降低企业 IT 成本
1.4 技术特点
系统基于Spring Boot 2.7 + React 18 技术栈构建,采用JWT 无状态认证 、RESTful API 设计 、向量化语义搜索 等先进技术,确保系统的安全性、性能和可维护性。
[图片]
二、目标客户
2.1 主要客户群体
中大型企业
特征 :拥有多个部门(5 个以上),员工规模 100+,知识资产丰富
需求 :统一的知识管理平台,跨部门知识共享,权限精细化管理
典型行业 :制造业、金融业、零售业、物流业等
技术型公司
特征 :以技术为核心,需要管理大量技术文档、API 文档、开发规范
需求 :技术文档集中管理,代码规范传承,技术问题快速解答
典型行业 :软件开发公司、互联网公司、IT 服务公司
咨询服务公司
特征 :项目经验丰富,需要沉淀和复用最佳实践
需求 :项目案例库,行业知识库,方案模板管理
典型行业 :管理咨询、财务咨询、法律咨询、工程咨询
教育培训机构
特征 :教学资料丰富,课程内容需要统一管理
需求 :教学资源库,课程资料管理,培训材料共享
典型行业 :企业大学、培训机构、在线教育平台
政府机关及事业单位
需求 :政策法规库,工作流程文档,规章制度查询
典型行业 :政府部门、事业单位、行业协会
医疗机构
特征 :医疗知识专业性强,诊疗指南需要及时更新
需求 :诊疗指南管理,病例库建设,医疗知识传承
典型行业 :医院、诊所、医疗研究机构
2.2 适用场景 场景类型 应用描述 核心价值 企业内部知识共享 打破部门壁垒,实现知识资产统一管理 提升知识利用率,减少重复工作 技术文档管理 集中管理 API 文档、技术规范、开发指南 技术传承,降低新人上手成本 客服知识库 构建智能客服系统,快速响应客户咨询 提升服务效率,降低人工成本 培训资料管理 统一管理培训材料,支持在线学习 标准化培训,提升培训效果 政策法规查询 快速查询相关政策文件和工作流程 提升工作效率,确保合规性
三、平台定位
3.1 产品定位 智能化企业知识管理平台 - 致力于成为企业知识资产管理的核心基础设施
核心定位
AI 驱动的知识管理 :不仅仅是文档存储,更是智能化的知识服务
企业级安全标准 :满足中大型企业对数据安全和权限管理的严格要求
开箱即用 :提供完整的解决方案,无需复杂配置即可投入使用
差异化优势
多部门权限管理 :支持细粒度的部门级权限控制,确保数据安全隔离
AI 智能问答 :集成 DeepSeek 大语言模型,提供自然语言交互体验
语义搜索 :基于向量相似度的智能检索,超越传统关键词搜索
零代码配置 :管理员通过可视化界面完成所有配置,无需技术背景
价值主张
让知识资产活起来 :从静态存储到动态服务,提升知识利用效率
降低知识获取成本 :从平均 15 分钟缩短到 2 分钟的知识查找时间
促进知识传承 :避免因人员流动造成的知识流失
3.2 市场定位
技术先进性
采用最新的 AI 技术和现代化架构
支持向量化语义搜索和智能问答
前后端分离,微服务友好
易用性
简洁直观的用户界面,遵循 Material Design 设计规范
零学习成本,员工可快速上手
响应式设计,支持 PC 和移动端访问
安全性
企业级安全标准,多层次权限控制
JWT 无状态认证,支持分布式部署
数据加密传输,部门间严格隔离
扩展性
模块化设计,支持定制化开发
RESTful API 设计,易于集成第三方系统
支持插件化扩展,满足企业个性化需求
四、平台技术与系统架构
4.1 整体架构 系统采用经典的三层架构设计,前后端完全分离,支持独立部署和扩展:
┌─────────────────────────────────────────────────────────────┐
│ 用户访问层 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Web 浏览器 │ │ 移动端 │ │ API 调用 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
↓ HTTPS
┌─────────────────────────────────────────────────────────────┐
│ Nginx 反向代理层 │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 静态资源服务 │ API 路由转发 │ SSL 终端 │ │
│ └────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 前端应用层 │
│ ┌────────────────────────────────────────────────────┐ │
│ │ React 18 + TypeScript + Material-UI │ │
│ │ - 文档管理界面 - AI 问答界面 - 搜索界面 │ │
│ │ - 用户管理界面 - 部门管理界面 - 权限配置 │ │
│ └────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↓ RESTful API
┌─────────────────────────────────────────────────────────────┐
│ 后端服务层 │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Spring Boot 2.7 + Spring Security │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │文档服务 │ │AI 服务 │ │权限服务 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │搜索服务 │ │用户服务 │ │部门服务 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 数据存储层 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ MySQL 8.0 │ │ H2 Database │ │ 文件存储 │ │
│ │ (生产环境) │ │ (开发环境) │ │ (文档文件) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ AI 服务层 │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ DeepSeek API │ │ OpenAI API │ │
│ │ (智能问答) │ │ (向量化) │ │
│ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
4.2 核心技术栈
前端技术栈
采用函数式组件和 Hooks,代码简洁高效
支持服务端渲染(SSR),提升首屏加载速度
虚拟 DOM 机制,确保高性能渲染
TypeScript - 类型安全的 JavaScript 超集
编译时类型检查,减少运行时错误
提供完整的 IDE 智能提示和代码补全
增强代码可维护性和团队协作效率
Material-UI 5 - Google Material Design 组件库
丰富的 UI 组件,快速构建现代化界面
响应式设计,适配各种屏幕尺寸
主题定制,支持企业品牌化
React Router 6 - 单页应用路由管理
声明式路由配置,代码清晰易维护
支持路由守卫,实现权限控制
懒加载路由,优化应用性能
拦截器机制,统一处理请求和响应
支持请求取消和超时控制
自动处理 JSON 数据转换
后端技术栈 Spring Boot 2.7 - 企业级 Java 框架
自动配置,减少样板代码
内嵌 Tomcat,简化部署流程
丰富的 Starter 依赖,快速集成各种功能
基于 JWT 的无状态认证机制
支持方法级权限控制(@PreAuthorize)
跨域资源共享(CORS)配置
Spring Data JPA - 数据持久化框架
自动生成 SQL,减少手写代码
支持复杂查询和分页
事务管理,确保数据一致性
支持 50+ 种文档格式(PDF、Word、Excel、PPT 等)
自动提取文档元数据和文本内容
处理各种编码和字符集
用于调用 DeepSeek API 和 OpenAI API
连接池管理,提升性能
支持超时和重试机制
数据库技术
支持 JSON 数据类型,存储向量数据
全文索引,支持中文分词
事务 ACID 特性,确保数据一致性
零配置,快速启动
支持 SQL 标准,便于开发测试
可导出为 SQL 脚本,方便迁移
AI 集成技术
提供智能问答能力
支持多轮对话和上下文理解
可配置的模型参数(temperature、max_tokens 等)
OpenAI Embeddings API - 文本向量化服务
将文档内容转换为高维向量
支持余弦相似度计算
实现语义级别的相似度搜索
基于余弦相似度算法
支持大规模向量检索
可扩展为向量数据库(如 Milvus、Pinecone)
4.3 系统架构设计
分层架构
表现层(Presentation Layer)
React 前端应用,负责用户交互
路由管理、状态管理、UI 渲染
业务逻辑层(Business Layer)
Spring Boot 服务层,处理业务逻辑
文档处理、AI 服务、权限验证
数据访问层(Data Access Layer)
Spring Data JPA,封装数据库操作
实体映射、查询优化、事务管理
数据持久层(Persistence Layer)
MySQL 数据库,存储结构化数据
文件系统,存储文档文件
安全架构 用户请求
↓ JWT Token 验证 (JwtAuthenticationFilter)
↓ 用户认证 (AuthenticationManager)
↓ 权限检查 (@PreAuthorize )
↓ 部门权限过滤 (PermissionUtil)
↓ 业务逻辑处理
数据流架构 用户上传文档
↓ 文件验证和解析 (Apache Tika)
↓ 内容提取和分块
↓ 生成向量嵌入 (OpenAI Embeddings)
↓ 存储到数据库 (MySQL)
↓ 建立索引 (KnowledgeEntry)
用户提问
↓ 生成查询向量 (OpenAI Embeddings)
↓ 向量相似度搜索 (EmbeddingService)
↓ 获取相关文档片段
↓ 构建上下文提示 (ChatService)
↓ 调用 DeepSeek API
↓ 返回答案和来源
4.4 关键技术实现
JWT 认证机制
public String generateToken (String username) {
return Jwts.builder()
.setSubject(username)
.setIssuedAt(new Date ())
.setExpiration(new Date (System.currentTimeMillis() + expiration))
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
}
public boolean validateToken (String token) {
try {
Jwts.parser().setSigningKey(secret).parseClaimsJws(token);
return true ;
} catch (JwtException | IllegalArgumentException e) {
return false ;
}
}
向量相似度搜索
public double calculateCosineSimilarity (String embedding1, String embedding2) {
double [] vec1 = parseEmbedding(embedding1);
double [] vec2 = parseEmbedding(embedding2);
double dotProduct = 0.0 ;
double norm1 = 0.0 ;
double norm2 = 0.0 ;
for (int i = 0 ; i < vec1.length; i++) {
dotProduct += vec1[i] * vec2[i];
norm1 += vec1[i] * vec1[i];
norm2 += vec2[i] * vec2[i];
}
return dotProduct / (Math.sqrt(norm1) * Math.sqrt(norm2));
}
部门权限过滤
public List<Document> filterByUserDepartments (User user, List<Document> documents) {
Set<Long> userDepartmentIds = user.getDepartments()
.stream()
.map(Department::getId)
.collect(Collectors.toSet());
return documents.stream()
.filter(doc -> userDepartmentIds.contains(doc.getDepartmentId()))
.collect(Collectors.toList());
}
五、平台核心业务功能
5.1 用户权限管理
多角色体系 系统支持三种用户角色,每种角色具有不同的权限范围:
拥有系统所有权限
可以访问所有部门的文档
可以管理所有用户和部门
可以配置系统参数
可以管理本部门的用户和文档
可以上传、编辑、删除本部门文档
可以查看本部门的统计数据
只能查看本部门授权的文档
可以使用 AI 问答功能(仅限本部门范围)
可以搜索和浏览文档
部门权限管理
CREATE TABLE user_departments (
user_id BIGINT NOT NULL ,
department_id BIGINT NOT NULL ,
PRIMARY KEY (user_id, department_id)
);
用户只能访问其所属部门的文档
超级管理员可以访问所有部门
文档上传时自动关联到指定部门
搜索和 AI 问答结果自动按权限过滤
JWT 认证机制 系统采用 JWT(JSON Web Token)实现无状态认证:
用户登录,提交用户名和密码
后端验证用户凭证
生成 JWT Token,包含用户信息和权限
前端存储 Token,后续请求携带 Token
后端验证 Token 有效性,提取用户信息
无状态:服务器不需要存储 Session
安全:使用 HS512 算法签名,防止篡改
可扩展:支持分布式部署
过期控制:Token 设置有效期,自动过期
5.2 文档管理
文档上传
办公文档 :PDF、Word (.doc, .docx)、Excel (.xls, .xlsx)、PowerPoint (.ppt, .pptx)
文本文件 :TXT、Markdown、HTML、XML、JSON
图片文件 :JPG、PNG、GIF(OCR 提取文字)
其他格式 :CSV、RTF 等
@PostMapping("/upload")
public ResponseEntity<Document> uploadDocument (
@RequestParam("file") MultipartFile file,
@RequestParam("departmentId") Long departmentId,
@RequestParam("category") String category
) {
validateFile(file);
String content = extractContent(file);
Document document = saveDocument(file, departmentId, category);
createKnowledgeEntries(document, content);
return ResponseEntity.ok(document);
}
使用 Apache Tika 自动识别文档类型
提取文档文本内容和元数据
处理各种编码和字符集
支持 OCR 识别图片中的文字
文档分类与组织
按部门分类 :每个文档必须关联到一个部门
按类别分类 :支持自定义类别(如:技术文档、政策文件、培训材料等)
按时间分类 :自动记录上传时间和更新时间
按上传者分类 :记录文档上传者信息
文档上传后自动创建知识条目(KnowledgeEntry)
将长文档分割为多个条目,便于检索
为每个条目生成向量嵌入(Embedding)
建立全文索引,支持关键词搜索
批量操作
批量上传 :一次选择多个文件上传
批量删除 :选择多个文档进行删除
批量索引 :为未索引的文档批量生成向量
批量导出 :导出文档列表和元数据
5.3 智能搜索
关键词搜索
全文索引 :对文档内容建立全文索引
关键词匹配 :支持多关键词组合搜索
模糊匹配 :支持部分匹配和通配符
结果排序 :按相关度、时间等排序
public List<Document> searchByKeywords (String query, User user) {
List<String> keywords = tokenize(query);
List<Document> documents = documentRepository
.findByContentContainingIgnoreCase(query);
return filterByUserDepartments(user, documents);
}
语义搜索
将查询文本转换为向量(使用 OpenAI Embeddings API)
计算查询向量与文档向量的余弦相似度
返回相似度最高的文档片段
支持语义理解,不局限于关键词匹配
语义理解 :理解查询意图,而非简单匹配
同义词识别 :自动识别同义词和相关概念
上下文感知 :考虑查询的上下文含义
多语言支持 :支持中英文混合搜索
public List<KnowledgeEntry> searchSimilarEntries (String query, int limit) {
String queryEmbedding = generateEmbedding(query);
List<KnowledgeEntry> allEntries = knowledgeEntryRepository.findAll();
List<ScoredEntry> scoredEntries = allEntries.stream()
.map(entry -> new ScoredEntry (
entry,
calculateCosineSimilarity(queryEmbedding, entry.getEmbedding())
))
.sorted((a, b) -> Double.compare(b.score, a.score))
.limit(limit)
.collect(Collectors.toList());
return scoredEntries.stream()
.map(ScoredEntry::getEntry)
.collect(Collectors.toList());
}
部门筛选
权限自动过滤 :普通用户只能搜索本部门文档
多部门选择 :管理员可以选择多个部门进行搜索
全部部门 :超级管理员可以搜索所有部门
5.4 AI 智能问答
对话式交互
自然语言提问 :用户可以用自然语言提问
上下文理解 :支持多轮对话,理解上下文
答案来源标注 :显示答案引用的文档来源
会话管理 :保存对话历史,支持会话恢复
用户提问
↓ 向量搜索相关文档片段
↓ 构建系统提示(包含上下文)
↓ 调用 DeepSeek API 生成回答
↓ 返回答案和来源文档
实现机制 private String buildSystemPrompt (List<KnowledgeEntry> relevantEntries) {
StringBuilder prompt = new StringBuilder ();
prompt.append("你是一个企业知识库助手。请根据以下知识库内容回答问题:\n\n" );
for (int i = 0 ; i < relevantEntries.size(); i++) {
KnowledgeEntry entry = relevantEntries.get(i);
prompt.append("知识片段" ).append(i + 1 ).append(":\n" );
prompt.append(entry.getContent()).append("\n\n" );
}
prompt.append("请基于以上知识库内容回答问题。如果知识库中没有相关信息,请说明。" );
return prompt.toString();
}
private String callDeepSeekApi (List<ChatMessage> history,
ChatMessage userMessage,
String systemPrompt) {
ObjectNode requestBody = objectMapper.createObjectNode();
requestBody.put("model" , model);
requestBody.put("temperature" , 0.7 );
requestBody.put("max_tokens" , 2000 );
ArrayNode messages = objectMapper.createArrayNode();
ObjectNode systemMsg = objectMapper.createObjectNode();
systemMsg.put("role" , "system" );
systemMsg.put("content" , systemPrompt);
messages.add(systemMsg);
for (ChatMessage msg : history) {
ObjectNode msgNode = objectMapper.createObjectNode();
msgNode.put("role" , msg.getRole().toLowerCase());
msgNode.put("content" , msg.getContent());
messages.add(msgNode);
}
ObjectNode userMsg = objectMapper.createObjectNode();
userMsg.put("role" , "user" );
userMsg.put("content" , userMessage.getContent());
messages.add(userMsg);
requestBody.set("messages" , messages);
Request request = new Request .Builder()
.url(apiUrl + "/chat/completions" )
.header("Authorization" , "Bearer " + apiKey)
.header("Content-Type" , "application/json" )
.post(RequestBody.create(
requestBody.toString(),
MediaType.parse("application/json" )
))
.build();
try (Response response = client.newCall(request).execute()) {
JsonNode responseBody = objectMapper.readTree(response.body().string());
return responseBody.get("choices" ).get(0 )
.get("message" ).get("content" ).asText();
}
}
权限控制
普通用户 :只能基于本部门文档进行问答
管理员 :可以选择本部门或下属部门
超级管理员 :可以选择任意部门或全部部门
public List<KnowledgeEntry> searchSimilarEntriesByUserDepartments (
String query,
int limit,
User user,
List<Long> departmentIds
) {
Set<Long> allowedDepartments = user.getDepartments()
.stream()
.map(Department::getId)
.collect(Collectors.toSet());
if (departmentIds != null && !departmentIds.isEmpty()) {
allowedDepartments.retainAll(departmentIds);
}
List<KnowledgeEntry> entries = searchSimilarEntries(query, limit * 2 );
return entries.stream()
.filter(entry -> allowedDepartments.contains(
entry.getDocument().getDepartmentId()
))
.limit(limit)
.collect(Collectors.toList());
}
5.5 系统管理
部门管理
部门创建 :创建新部门,设置部门名称和描述
部门编辑 :修改部门信息
启用/禁用 :可以临时禁用部门,禁用后该部门文档不可访问
部门列表 :查看所有部门及其状态
CREATE TABLE departments (
id BIGINT AUTO_INCREMENT PRIMARY KEY ,
name VARCHAR (100 ) NOT NULL UNIQUE ,
description TEXT,
enabled BOOLEAN NOT NULL DEFAULT TRUE ,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
用户管理
创建用户 :设置用户名、密码、角色、部门
编辑用户 :修改用户信息,调整部门和角色
删除用户 :删除用户(级联删除关联数据)
启用/禁用 :临时禁用用户账号
密码重置 :管理员可以重置用户密码
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY ,
username VARCHAR (50 ) NOT NULL UNIQUE ,
password VARCHAR (255 ) NOT NULL ,
full_name VARCHAR (100 ) NOT NULL ,
email VARCHAR (100 ) UNIQUE ,
role ENUM('SUPER_ADMIN' , 'ADMIN' , 'USER' ) NOT NULL DEFAULT 'USER' ,
enabled BOOLEAN NOT NULL DEFAULT TRUE ,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
权限配置
一个用户可以属于多个部门
用户可以访问所有所属部门的文档
支持动态调整用户的部门归属
可视化选择用户和部门
批量分配部门权限
查看用户的部门权限列表
系统监控
文档统计 :总文档数、已索引文档数、按部门分类统计
用户统计 :总用户数、活跃用户数、按角色分类统计
部门统计 :部门数量、每个部门的文档数和用户数
使用统计 :AI 问答次数、搜索次数、上传次数
5.6 用户体验优化
响应式设计
PC 端 :完整功能,最佳体验
平板端 :自适应布局,触控优化
移动端 :简化界面,核心功能可用
主题定制
浅色主题 :默认主题,适合白天使用
深色主题 :护眼模式,适合夜间使用
品牌定制 :支持企业 Logo 和品牌色
实时反馈
加载状态 :操作进行中的加载提示
成功提示 :操作成功后的确认消息
错误提示 :操作失败时的错误信息
进度显示 :文件上传、索引生成的进度条
六、平台独特优势
6.1 技术优势
现代化架构设计
前端和后端完全解耦,可以独立开发和部署
支持多前端(Web、移动 App、小程序)共用同一后端 API
便于团队协作,前端和后端可以并行开发
RESTful API 设计,易于拆分为微服务
无状态服务,支持水平扩展
服务间通过 HTTP 通信,松耦合设计
采用最新的稳定版本技术
TypeScript 提供类型安全
Spring Boot 提供企业级特性
AI 深度集成
集成 DeepSeek API,提供强大的自然语言理解能力
支持多轮对话和上下文理解
可配置的模型参数,适应不同场景
基于 OpenAI Embeddings 的向量化技术
余弦相似度算法,实现语义级别的搜索
支持大规模向量检索(可扩展为向量数据库)
自动文档解析和内容提取
智能分块,优化检索效果
自动生成向量嵌入
类型安全与代码质量
编译时类型检查,减少运行时错误
完整的 IDE 支持,提升开发效率
代码可读性和可维护性更高
自动配置,减少样板代码
统一异常处理
完善的日志系统
6.2 安全优势
多层权限体系
三级角色体系:超级管理员、管理员、普通用户
基于角色的访问控制(RBAC)
方法级权限注解(@PreAuthorize)
用户与部门多对多关联
文档自动关联部门
搜索和问答结果自动按权限过滤
部门间数据严格隔离
普通用户无法访问其他部门文档
超级管理员可以跨部门访问
安全认证机制
无需服务器存储 Session
Token 包含用户信息和权限
支持分布式部署和负载均衡
BCrypt 加密存储密码
密码强度验证
支持密码重置功能
CORS 跨域配置
CSRF 防护
SQL 注入防护(JPA 自动处理)
安全最佳实践
@Bean
public PasswordEncoder passwordEncoder () {
return new BCryptPasswordEncoder (10 );
}
String token = Jwts.builder()
.setSubject(username)
.setExpiration(new Date (System.currentTimeMillis() + 86400000 ))
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
@PreAuthorize("hasRole('ADMIN') or @permissionUtil.canAccessDepartment(#departmentId, authentication.name)")
public Document getDocument (Long departmentId) {
}
6.3 业务优势
零代码配置
部门管理:通过界面创建和配置部门
用户管理:可视化添加用户和分配权限
权限配置:拖拽式分配用户到部门
提供默认配置,无需复杂设置
初始化脚本自动创建示例数据
快速部署,30 分钟内完成安装
即开即用
包含前端、后端、数据库的完整系统
提供部署脚本和配置文件
详细的安装文档和使用指南
预置示例部门和用户
示例文档和知识条目
帮助用户快速理解系统功能
扩展性强
服务层模块化,易于扩展
支持插件化开发
接口标准化,便于集成
RESTful API 设计
完整的 API 文档
支持第三方系统集成
支持企业定制化需求
可扩展的权限模型
可配置的业务规则
6.4 性能优势
快速响应
单页应用(SPA),无需整页刷新
代码分割和懒加载
静态资源 CDN 加速
批量处理
异步处理向量生成
批量 API 调用
失败重试机制
可扩展性
无状态服务,支持多实例部署
负载均衡支持
数据库读写分离(可扩展)
七、平台安装使用
7.1 环境要求
开发环境
Java : JDK 8 或更高版本(推荐 JDK 11+)
Node.js : 16.x 或更高版本(推荐 LTS 版本)
Maven : 3.6+ 用于 Java 项目构建
MySQL : 8.0+ 用于生产环境数据库
Git : 用于版本控制
IDE : IntelliJ IDEA 或 Eclipse(Java 开发)
IDE : Visual Studio Code 或 WebStorm(前端开发)
数据库工具 : MySQL Workbench 或 Navicat
生产环境
操作系统 : Linux (Ubuntu 20.04+ / CentOS 7+)
CPU : 2 核心以上
内存 : 4GB 以上(推荐 8GB+)
磁盘 : 50GB 以上(根据文档数量调整)
网络 : 稳定的互联网连接(用于调用 AI API)
Java 运行环境 : JRE 8+
Nginx : 1.18+ 用于反向代理
MySQL : 8.0+ 数据库服务器
SSL 证书 : 用于 HTTPS(推荐 Let's Encrypt 免费证书)
7.2 快速安装
步骤 1:克隆项目
git clone [repository-url]
cd company-knowledge-base
步骤 2:数据库初始化
mysql - u root - p
CREATE DATABASE knowledgebase
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'kb_user' @'localhost' IDENTIFIED BY 'your_password' ;
GRANT ALL PRIVILEGES ON knowledgebase.* TO 'kb_user' @'localhost' ;
FLUSH PRIVILEGES;
mysql -u root -p knowledgebase < database/init.sql
数据库表结构(users、departments、documents 等)
初始部门数据(技术部、人力资源部等)
初始用户数据(admin/admin123、manager/admin123、user/admin123)
示例文档数据
步骤 3:后端配置与启动 cd backend
cp src/main/resources/application-prod.properties.example \
src/main/resources/application-prod.properties
vim src/main/resources/application-prod.properties
# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/knowledgebase
spring.datasource.username=kb_user
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# JWT 配置
jwt.secret=your-secret-key-here-make-it-long-and-secure-at-least-256-bits
jwt.expiration=86400000
# DeepSeek API 配置(可选,用于 AI 问答)
deepseek.api.url=https://api.deepseek.com/v1
deepseek.api.key=your_deepseek_api_key_here
deepseek.model=deepseek-chat
# Embeddings API 配置(可选,用于语义搜索)
embeddings.api.url=https://api.openai.com/v1/embeddings
embeddings.api.key=your_openai_api_key_here
embeddings.model=text-embedding-3-small
embeddings.enabled=true
# 服务器端口
server.port=13085
# 文件上传配置
spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=50MB
mvn clean package -DskipTests
mvn spring-boot:run
java -jar target/knowledgebase.jar --spring.profiles.active=prod
nohup java -jar target/knowledgebase.jar \
--spring.profiles.active=prod \
> knowledgebase.log 2>&1 &
步骤 4:前端构建 cd frontend
npm install
yarn install
**配置 API 地址:**编辑 src/services/api.ts 或 src/services/api.prod.ts:
const API_BASE_URL = process.env .REACT_APP_API_URL || 'http://localhost:13085/api' ;
步骤 5:Nginx 配置 server {
listen 80;
server_name your-domain.com;
# 前端静态资源
location /knowledgeWeb/ {
alias /path/to/frontend/build/;
index index.html;
try_files $uri $uri/ /knowledgeWeb/index.html;
}
# 后端 API 代理
location /knowledgeWeb/api/ {
proxy_pass http://localhost:13085/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 支持(如需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# SSL 配置(HTTPS)
# listen 443 ssl;
# ssl_certificate /path/to/cert.pem;
# ssl_certificate_key /path/to/key.pem;
}
sudo nginx -t
sudo nginx -s reload
sudo systemctl restart nginx
7.3 详细配置说明
数据库配置 # 生产环境推荐配置
spring.datasource.url=jdbc:mysql://localhost:3306/knowledgebase?useSSL=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.connection-timeout=30000
CREATE INDEX idx_document_department ON documents(department_id);
CREATE INDEX idx_document_uploaded_by ON documents(uploaded_by);
CREATE INDEX idx_knowledge_entry_document ON knowledge_entries(document_id);
AI 服务配置
注册 DeepSeek 账号并获取 API Key
配置 API 地址和模型名称
设置合理的超时时间
注册 OpenAI 账号并获取 API Key
选择适合的 Embedding 模型(推荐 text-embedding-3-small)
可以禁用 Embeddings 功能,使用关键词搜索
# 如果不需要 AI 功能,可以禁用
embeddings.enabled=false
# 系统将自动使用关键词搜索作为备选方案
安全配置 # 生成强密钥(至少 256 位)
# 可以使用以下命令生成:
# openssl rand -base64 32
jwt.secret=your-very-long-and-secure-secret-key-at-least-256-bits-long
jwt.expiration=86400000 # 24 小时(毫秒)
使用 Let's Encrypt 免费证书
或使用企业购买的 SSL 证书
配置 Nginx SSL 证书路径
7.4 Docker 部署(可选)
Dockerfile 配置 FROM openjdk:8-jre-slim
WORKDIR /app
# 复制 jar 文件
COPY target/knowledgebase.jar app.jar
# 暴露端口
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]
FROM node:16-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Docker Compose 部署 version: '3.8'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD:root_password
MYSQL_DATABASE:knowledgebase
MYSQL_USER:kb_user
MYSQL_PASSWORD:kb_password
volumes:
- mysql_data:/var/lib/mysql
- ./database/init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "3306:3306"
restart:always
backend:
build:./backend
environment:
- SPRING_PROFILES_ACTIVE=prod
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/knowledgebase
- SPRING_DATASOURCE_USERNAME=kb_user
- SPRING_DATASOURCE_PASSWORD=kb_password
ports:
- "13085:8080"
depends_on:
- mysql
restart:always
frontend:
build:./frontend
ports:
- "80:80"
depends_on:
- backend
restart:always
volumes:
mysql_data:
docker-compose up -d
docker-compose logs -f
docker-compose down
7.5 运维管理
服务管理
ps aux | grep knowledgebase
sudo systemctl status nginx
sudo systemctl status mysql
tail -f backend/logs/knowledgebase.log
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
tail -f /var/log/mysql/error.log
sudo kill -9 $(pgrep -f knowledgebase.jar)
sudo nohup java -jar knowledgebase.jar \
--spring.profiles.active=prod \
> knowledgebase.log 2>&1 &
sudo systemctl restart nginx
sudo systemctl restart mysql
备份与恢复
mysqldump -u username -p knowledgebase > backup_$(date +%Y%m%d).sql
mysqldump -u username -p --no-data knowledgebase > structure_backup.sql
mysqldump -u username -p --no-create-info knowledgebase > data_backup.sql
mysqldump -u username -p knowledgebase | gzip > backup_$(date +%Y%m%d).sql.gz
mysql -u username -p knowledgebase < backup_20240101.sql
gunzip < backup_20240101.sql.gz | mysql -u username -p knowledgebase
tar -czf documents_backup_$(date +%Y%m%d).tar.gz /path/to/documents/
tar -czf config_backup_$(date +%Y%m%d).tar.gz \
backend/src/main/resources/application-prod.properties \
nginx.conf
性能监控
top
htop
df -h
du -sh /path/to/application
netstat -an | grep :13085
查看 Spring Boot Actuator 端点(如已启用)
监控数据库连接池状态
检查 API 响应时间
监控 AI API 调用频率和成本
故障排查
服务无法启动
检查端口是否被占用:netstat -an | grep :13085
检查 Java 版本:java -version
查看启动日志:tail -f knowledgebase.log
数据库连接失败
检查 MySQL 服务状态
验证数据库用户名和密码
检查防火墙设置
前端无法访问后端
检查 CORS 配置
验证 API 地址配置
检查 Nginx 代理配置
AI 功能不可用
验证 API Key 是否正确
检查网络连接
查看 API 调用日志
八、应用场景及使用案例说明
8.1 企业场景案例
案例一:技术型公司知识管理
公司规模:某软件开发公司,员工 200+,其中技术人员 150+
业务特点:多个项目并行,技术栈多样(Java、Python、前端等)
痛点问题:
技术文档分散在各个项目仓库和 Wiki 中
新员工入职需要花费大量时间熟悉技术规范
相同技术问题被反复咨询,缺乏统一的知识库
代码规范和最佳实践难以传承
按技术栈分类:Java 技术文档、Python 技术文档、前端技术文档
按项目分类:项目 A 文档、项目 B 文档、共享技术文档
按类型分类:API 文档、开发规范、部署指南、故障排查
Department techDept = new Department ();
techDept.setName("技术部" );
techDept.setDescription("技术开发和维护部门" );
Document apiDoc = new Document ();
apiDoc.setTitle("RESTful API 开发规范" );
apiDoc.setDepartmentId(techDept.getId());
apiDoc.setCategory("开发规范" );
documentService.uploadDocument(apiDoc, file);
技术人员通过自然语言提问:"如何实现 JWT 认证?"
系统自动搜索相关文档并生成答案
显示答案来源,便于深入阅读
用户:如何实现 JWT 认证?
AI 助手:根据技术文档,JWT 认证实现步骤如下:
1. 生成 Token:使用 JWT 库生成包含用户信息的 Token
2. 客户端存储:将 Token 存储在 localStorage 或 Cookie 中
3. 请求携带:每次 API 请求在 Header 中携带 Token
4. 服务端验证:验证 Token 有效性和过期时间
来源文档:《RESTful API 开发规范》第 3.2 节
不同项目组只能访问相关技术文档
核心架构文档仅限高级技术人员访问
公共技术文档所有技术人员可访问
✅ 新员工入职效率提升 60%:从平均 2 周缩短到 3-5 天
✅ 技术问题解决时间缩短 40%:从平均 30 分钟缩短到 10-15 分钟
✅ 知识重用率提升 80%:减少重复性技术咨询
✅ 代码规范统一性提升:新项目遵循统一规范
案例二:咨询公司项目知识库
公司规模:某管理咨询公司,员工 80+,其中咨询顾问 50+
业务特点:项目制工作,每个项目都有独特的解决方案
痛点问题:
项目经验难以沉淀和复用
行业知识分散,查找困难
客户方案缺乏标准化模板
新顾问需要大量时间学习历史项目经验
按行业分类:金融行业案例、制造业案例、零售业案例
按业务类型分类:战略咨询、运营优化、数字化转型
按项目阶段分类:项目启动、需求分析、方案设计、实施交付
项目案例:某银行数字化转型项目
- 行业:金融
- 业务类型:数字化转型
- 项目周期:6 个月
- 核心挑战:传统系统改造、数据整合
- 解决方案:微服务架构、数据中台建设
- 实施效果:系统响应速度提升 50%,客户满意度提升 30%
将成功项目的经验总结为最佳实践
将失败项目的教训总结为注意事项
形成可复用的知识模板
顾问输入新项目需求:"为某制造企业设计数字化转型方案"
AI 自动推荐相似的历史项目案例
提供可参考的解决方案框架
顾问:我需要为某制造企业设计数字化转型方案,有什么可以参考的案例吗?
AI 助手:根据知识库,我为您推荐以下相似案例:
1. 《某汽车制造企业数字化转型项目》(相似度 85%)
- 核心方案:工业互联网平台、智能制造系统
- 实施周期:8 个月
- 投资回报:生产效率提升 40%
2. 《某电子制造企业数字化升级项目》(相似度 78%)
- 核心方案:ERP 系统升级、供应链优化
- 实施周期:6 个月
- 投资回报:成本降低 25%
来源文档:《制造业数字化转型案例库》
✅ 项目准备时间缩短 50%:从平均 2 周缩短到 1 周
✅ 方案质量一致性提升:基于历史经验的方案更可靠
✅ 顾问工作效率提升 35%:减少重复性方案设计工作
✅ 客户满意度提升:方案更贴合实际,实施成功率更高
案例三:医疗机构知识管理
机构规模:某三甲医院,医护人员 300+,科室 20+
业务特点:医疗知识专业性强,需要及时更新
痛点问题:
医疗指南和诊疗规范查找困难
科室间知识共享不足
新医生培训材料分散
罕见病例处理经验难以传承
按科室设置访问权限:内科、外科、儿科等
公共医疗知识所有科室可访问
专科知识仅限相关科室访问
// 内科医生可以访问
- 内科诊疗指南
- 内科病例库
- 公共医疗知识
// 外科医生可以访问
- 外科手术规范
- 外科病例库
- 公共医疗知识
// 所有医生可以访问
- 医院规章制度
- 医疗安全规范
- 紧急处理流程
统一管理各种医疗指南和标准
支持版本控制和更新通知
快速查询相关诊疗方案
医生:患者出现胸痛症状,如何诊断?
AI 助手:根据《胸痛诊疗指南》,建议按以下步骤诊断:
1. 初步评估:询问病史、体格检查
2. 辅助检查:心电图、心肌酶、胸部 CT
3. 鉴别诊断:心绞痛、心肌梗死、肺栓塞等
4. 治疗方案:根据诊断结果选择相应治疗方案
来源文档:《胸痛诊疗指南》2024 版
匿名化病例分享和学习
按疾病类型和科室分类
支持病例搜索和相似病例推荐
✅ 诊疗标准化程度提升:统一遵循最新指南
✅ 医生查询效率提升 70%:从平均 20 分钟缩短到 5 分钟
✅ 知识传承更加规范:新医生快速学习历史经验
✅ 医疗质量提升:基于循证医学的诊疗决策
8.2 功能应用场景
场景一:智能问答日常使用 **场景描述:**员工在日常工作中遇到问题,通过自然语言提问获取答案。
用户:公司的年假申请流程是什么?
AI 助手:根据《员工手册》,年假申请流程如下:
1. 登录 HR 系统,选择"请假申请"
2. 填写请假类型为"年假",选择起止日期
3. 提交申请,等待直属上级审批
4. 审批通过后,系统自动扣除年假天数
注意事项:
- 需提前 3 个工作日申请
- 年假不能跨年使用
- 连续请假超过 5 天需部门经理审批
来源文档:《员工手册》第 5.3 节
用户:Spring Boot 如何配置多数据源?
AI 助手:根据《Spring Boot 开发规范》,多数据源配置方法如下:
1 . 在 application .properties 中配置多个数据源
spring .datasource .primary .url =jdbc :mysql :
spring .datasource .secondary .url =jdbc :mysql :
2 . 创建配置类,定义多个 DataSource Bean
@Configuration
public class DataSourceConfig {
@Bean
@Primary
public DataSource primaryDataSource () { ... }
@Bean
public DataSource secondaryDataSource () { ... }
}
3 . 在 Repository 中指定使用的数据源
@Repository
@Qualifier ("secondaryDataSource" )
public class SecondaryRepository { ... }
来源文档:《Spring Boot 开发规范》第 4.2 节
用户:客户投诉处理的标准流程是什么?
AI 助手:根据《客户服务手册》,投诉处理流程如下:
第一阶段:接收投诉(1 小时内)
- 记录投诉内容、客户信息、联系方式
- 初步判断投诉类型和紧急程度
- 分配处理人员
第二阶段:调查处理(24 小时内)
- 联系客户了解详细情况
- 调查问题原因
- 制定解决方案
第三阶段:反馈跟进(48 小时内)
- 向客户反馈处理结果
- 确认客户满意度
- 记录处理过程
来源文档:《客户服务手册》第 3.1 节
场景二:部门权限管理 **场景描述:**不同部门只能访问授权范围内的文档,确保数据安全。
角色 技术部文档 财务部文档 人力资源部文档 市场部文档 技术部员工 ✅ 可查看 ❌ 不可查看 ❌ 不可查看 ❌ 不可查看 财务部员工 ❌ 不可查看 ✅ 可查看 ❌ 不可查看 ❌ 不可查看 部门管理员 ✅ 可管理本部门 ✅ 可管理本部门 ✅ 可管理本部门 ✅ 可管理本部门 超级管理员 ✅ 全部权限 ✅ 全部权限 ✅ 全部权限 ✅ 全部权限
User techUser = userService.getUserByUsername("tech_user" );
List<Document> searchResults = documentService.search("Spring Boot" , techUser);
User financeUser = userService.getUserByUsername("finance_user" );
List<Document> financeResults = documentService.search("Spring Boot" , financeUser);
场景三:文档生命周期管理
const uploadDocument = async (file : File , departmentId : number ) => {
const formData = new FormData ();
formData.append ('file' , file);
formData.append ('departmentId' , departmentId.toString ());
formData.append ('category' , '技术文档' );
const response = await documentApi.upload (formData);
return response.data ;
};
public Document parseDocument (MultipartFile file) {
Tika tika = new Tika ();
String content = tika.parseToString(file.getInputStream());
Metadata metadata = new Metadata ();
tika.parse(file.getInputStream(), metadata);
Document document = new Document ();
document.setContent(content);
document.setFileType(metadata.get(Metadata.CONTENT_TYPE));
return document;
}
public void indexDocument (Document document) {
List<String> chunks = splitDocument(document.getContent());
for (String chunk : chunks) {
KnowledgeEntry entry = new KnowledgeEntry ();
entry.setContent(chunk);
entry.setDocumentId(document.getId());
if (embeddingsEnabled) {
String embedding = generateEmbedding(chunk);
entry.setEmbedding(embedding);
}
knowledgeEntryRepository.save(entry);
}
}
public void assignPermissions (Document document, Long departmentId) {
document.setDepartmentId(departmentId);
List<User> departmentAdmins = userRepository
.findByDepartmentsIdAndRole(departmentId, UserRole.ADMIN);
documentRepository.save(document);
}
public Document updateDocument (Long documentId, MultipartFile newFile) {
Document oldDocument = documentRepository.findById(documentId)
.orElseThrow(() -> new RuntimeException ("Document not found" ));
Document newDocument = parseDocument(newFile);
newDocument.setId(null );
newDocument.setVersion(oldDocument.getVersion() + 1 );
newDocument.setPreviousVersionId(oldDocument.getId());
documentRepository.save(newDocument);
oldDocument.setActive(false );
documentRepository.save(oldDocument);
return newDocument;
}
@Scheduled(cron = "0 0 2 * * ?")
public void cleanupExpiredDocuments () {
LocalDateTime cutoffDate = LocalDateTime.now().minusYears(2 );
List<Document> expiredDocuments = documentRepository
.findByUpdatedAtBefore(cutoffDate);
for (Document doc : expiredDocuments) {
notificationService.sendExpirationNotice(doc);
}
}
8.3 ROI 效益分析
时间效益 场景 传统方式 使用系统 提升 查找技术文档 15-30 分钟 2-5 分钟 80% 咨询业务流程 20-40 分钟 3-8 分钟 75% 新员工培训 2-4 周 3-5 天 60% 重复性问题解答 每次 10-20 分钟 即时回答 90%
某技术公司:平均每天节省查找时间 2 小时/人,200 人 × 2 小时 = 400 小时/天
某咨询公司:项目准备时间从 2 周缩短到 1 周,每年可多完成 20% 的项目
某医院:医生查询效率提升 70%,每天可多服务 10% 的患者
成本效益
减少知识管理专员工作量:从 2 人减少到 0.5 人,节省 75% 人力成本
减少重复性咨询:客服工作量减少 60%
降低培训成本:新员工培训时间缩短,培训成本降低 40%
员工工作效率提升:平均提升 25-30%
项目交付速度提升:平均提升 20%
客户满意度提升:响应速度更快,服务质量更高
质量效益
基于历史经验的决策更可靠
减少因信息不足导致的错误决策
提高决策的一致性和标准化
统一的工作流程和规范
减少因个人经验差异导致的工作质量波动
提高工作成果的可预测性
避免因人员流动造成的知识流失
新员工快速学习历史经验
形成组织记忆,提升组织能力
8.4 最佳实践建议
文档管理最佳实践
文档分类规范
建立统一的文档分类体系
使用清晰的命名规范
定期整理和归档文档
文档质量要求
确保文档内容准确、完整
及时更新过时文档
添加必要的元数据和标签
权限配置原则
遵循最小权限原则
定期审查权限配置
记录权限变更日志
AI 问答最佳实践
问题提问技巧
使用清晰、具体的问题
提供必要的上下文信息
可以追问获取更详细信息
答案验证
查看答案来源文档
验证答案的准确性
对重要信息进行二次确认
知识库维护
定期更新知识库内容
根据问答反馈优化文档
补充常见问题的标准答案
相关免费在线工具 Keycode 信息 查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
Escape 与 Native 编解码 JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
JavaScript / HTML 格式化 使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
JavaScript 压缩与混淆 Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online