commit e70e2878c467b1b368687e2d61f8b3bd816005be Author: phezzan Date: Mon Dec 16 11:22:52 2024 +0800 first commit diff --git a/接口文档.docx b/接口文档.docx new file mode 100644 index 0000000..dcb8548 Binary files /dev/null and b/接口文档.docx differ diff --git a/接口文档.md b/接口文档.md new file mode 100644 index 0000000..2819dfc --- /dev/null +++ b/接口文档.md @@ -0,0 +1,370 @@ +# 小维AI问答系统接口文档 + +## 1. /upload_qa + +- **方法**: POST +- **描述**: 该端点用于上传问答文件。上传的文件可以是 `.txt`, `.md`, `.xls`, `.xlsx` 格式。系统会对上传的文件进行以下处理: + - 文本分割:将大文本拆分为小段落以提高向量化的效率。 + - 向量化:使用嵌入模型将文本转化为向量。 + - 存储:将向量和元数据存储到数据库和本地向量文件中。 + - **异步处理**:若上传文件较大,处理可能耗时较长,任务会以异步方式执行,前端需通过 `/task_status/` 查询任务状态。 + +- **请求参数**: + - `token` (Header): 用户的身份验证令牌。 + - `method` (FormData): 上传操作的类型,如 `create` 或 `delete`。 + - `qa_name` (FormData): 问答库的名称。 + - `private_flag` (FormData): 问答库的私有标志(整数,1 表示私有,0 表示公开)。 + - `files` (FormData): 上传的文件列表。 + +- **返回值**: + ```json + { + "code": 1, + "message": "任务已提交", + "task_id": "unique-task-id", + "qa_name": "知识库名称", + "time_left": "预计剩余时间(秒)" + } + ``` + +--- + +## 2. /operate_qa + +- **方法**: POST +- **描述**: 该端点用于操作向量库,包括以下功能: + - 查询问答库中的文件或内容。 + - 编辑现有问答记录。 + - 删除指定问答内容。 + - 新增问答记录。 + +- **请求参数**: + - `token` (Header): 用户的身份验证令牌。 + - `method` (JSON): 操作类型,支持以下值: + - `list_qa_files`: 列出问答库中的文件。 + - `list_qa_content`: 列出问答内容。 + - `query_qa_content`: 根据条件查询问答内容。 + - `edit_qa_content`: 编辑问答内容。 + - `delete_qa_content`: 删除指定问答内容。 + - `add_qa_content`: 新增问答内容。 + - `query_fields` (JSON): 查询条件字段(用于精确匹配)。 + - `fuzzy_fields` (JSON): 模糊查询字段(仅对 `query_qa_content` 有效)。 + - `edit_fields` (JSON): 编辑字段(仅对 `edit_qa_content` 有效)。 + +- **返回值**: + ```json + { + "code": 1, + "message": "操作成功", + "records": [ + { + "sys_id": "记录ID", + "question": "问题内容", + "answer": "回答内容", + "qa_name": "知识库名称", + "source": "来源文件名", + "raw_text": "原始文本", + "score": "相似度分数" + } + ] + } + ``` + +--- + +## 3. /chat_qa + +- **方法**: POST +- **描述**: 用户可以通过该端点与问答系统进行交互。系统会根据用户输入的问题,从向量库中查找最相关的问答记录并返回结果。 + +- **请求参数**: + - `token` (Header): 用户的身份验证令牌。 + - `qa_name` (JSON): 问答库的名称(支持多个)。 + - `query` (JSON): 用户输入的问题。 + - `uuid` (JSON): 用户会话的唯一标识符(可选)。 + +- **返回值**: + ```json + { + "code": 1, + "message": "问题答案", + "qa_name": "相关知识库", + "source": "来源文件名", + "flag": true, + "related_content": [ + { + "question": "相关问题", + "answer": "相关回答", + "qa_name": "知识库名称", + "source": "来源文件名", + "score": "相似度分数" + } + ] + } + ``` + +--- + +## 4. /task_status/ + +- **方法**: GET +- **描述**: 查询后台任务的状态。通过任务 ID 检查任务的执行情况。 + +- **请求参数**: + - `task_id` (Path): 任务的唯一标识符。 + +- **返回值**: + ```json + { + "code": 200, + "message": "任务已完成", + "status": "SUCCESS" + } + ``` + 或: + ```json + { + "code": 200, + "message": "后台任务正在运行", + "status": "PENDING" + } + ``` + +--- + +## 5. /change_question + +- **方法**: POST +- **描述**: 用户可以通过该端点更改问题的内容,系统会返回相关的问答记录。 + +- **请求参数**: + - `qa_name` (JSON): 问答库的名称(支持多个)。 + - `query` (JSON): 用户输入的问题。 + - `cur_page` (JSON): 当前页码(默认为 1)。 + +- **返回值**: + ```json + { + "code": 1, + "message": "", + "flag": true, + "related_content": [ + { + "question": "相关问题", + "answer": "相关回答", + "qa_name": "知识库名称", + "source": "来源文件名", + "score": "相似度分数" + } + ], + "question_counts": "相关问题总数", + "cur_page": 1 + } + ``` + +--- + +## 6. /default_answers + +- **方法**: POST +- **描述**: 管理默认回答,包括新增、更新、删除和查询。 + +- **请求参数**: + - `token` (Header): 用户的身份验证令牌。 + - `method` (JSON): 操作类型(`add`, `update`, `delete`, `list`)。 + - `qa_name` (JSON): 知识库的名称。 + - `answer` (JSON): 默认回答内容(新增或更新时必填)。 + - `keywords` (JSON): 关键字(可选)。 + +- **返回值**: + ```json + { + "code": 1, + "message": "操作成功", + "data": [ + { + "sys_id": "回答ID", + "answer": "回答内容", + "keywords": "相关关键字", + "create_time": "创建时间" + } + ] + } + ``` + +--- + +## 7. /transfer_qa + +- **方法**: POST +- **描述**: 将问答记录从一个知识库转移到另一个知识库。 + +- **请求参数**: + - `token` (Header): 用户的身份验证令牌。 + - `target_qa` (JSON): 目标知识库的名称。 + - `qa_ids` (JSON): 要转移的问答记录 ID 列表。 + +- **返回值**: + ```json + { + "code": 1, + "message": "成功转移 3 条问答对", + "data": { + "transferred_records": [ + { + "sys_id": "记录ID", + "question": "问题", + "answer": "答案", + "source_qa": "源知识库" + } + ], + "target_qa": "目标知识库" + } + } + ``` + +--- + +## 8. /update_qa_fields + +- **方法**: POST +- **描述**: 更新问答记录的字段。 + +- **请求参数**: + - `token` (Header): 用户的身份验证令牌。 + - `sys_id` (JSON): 要更新的问答记录的 ID。 + - `answer_type` (JSON): 新的答案类型。 + - `category` (JSON): 新的分类。 + +- **返回值**: + ```json + { + "code": 1, + "message": "更新成功", + "data": { + "sys_id": "记录ID", + "question": "问题", + "answer_type": "新答案类型", + "category": "新分类" + } + } + ``` + +--- + +## 数据结构描述 + +### 数据库结构 +- **Roles**: 用户角色表,包含角色 ID 和角色名称。 +- **Users**: 用户表,包含用户 ID、账号、密码哈希和角色 ID。 +- **QAKnowledge**: 问答知识库表,包含问题、答案、来源、知识库名称等。 +- **DefaultAnswers**: 默认回答表,包含默认回答 ID、回答内容、关键字等。 +- **DefaultAnswerConfig**: 默认回答配置表,包含配置的回答 ID 列表、随机使用标志等。 + +--- + +## 交互逻辑 + +1. **前端应用**: 用户通过前端应用发送请求。 +2. **Java 服务**: 接收请求并调用本服务的 API。 +3. **本服务**: 处理 API 请求并返回结果。 +4. **数据库更新**: Java 服务和本服务分别更新其数据库。 + +```mermaid +graph TD; +A[前端应用] -->|发送请求| B[Java 服务] +B -->|处理请求| C[本服务] +C -->|返回结果| B +B -->|返回结果| A +A -->|用户输入| B +B -->|更新数据库| D[Java 服务数据库] +C -->|更新数据库| E[本服务数据库] +``` + +在上述代码中,涉及 **异步操作** 的部分主要集中在需要执行时间较长的任务,例如文件处理、向量化、模型预测等。以下是需要前端轮询 `task_status` 以获取任务完成状态的部分,以及每个部分的详细说明。 + +--- + +## **异步操作** +### 1. **`upload_qa` 方法的异步任务** +```python +future = executor.submit(add_qa_task_, upload_path, vs_path, create_id, private_flag, file_list, hash_list, qa_name) +tasks[task_id] = future +``` + +**描述**: +- 在 `upload_qa` 接口中,`add_qa_task_` 函数通过 `ThreadPoolExecutor` 异步执行。 +- 该任务负责对上传的文件进行处理,包括文本加载、拆分、向量化、存储和数据库操作。 +- 返回的 `task_id` 供前端使用,通过轮询 `/task_status/` 获取任务进度。 + +**需要轮询字段**: +- `task_id`: 任务唯一标识。 +- 状态值包括: + - `PENDING`: 正在处理。 + - `SUCCESS`: 完成。 + - `ERROR`: 出错。 + +--- + +### 2. **`test_qa` 方法的异步任务** +```python +future = executor.submit(add_qa_task_, upload_path, vs_path, 3, False, file_list, hash_list, 'test') +tasks[task_id] = future +``` + +**描述**: +- 用于测试上传和处理文件的功能,逻辑与 `upload_qa` 类似。 +- 前端需要通过 `task_id` 查询任务状态。 + +**需要轮询字段**: +- 同上,`task_id` 是关键字段。 + +--- + +### **通用异步任务的状态查询接口** +#### `task_status` 接口 +```python +@app.route('/task_status/', methods=['GET']) +def task_status(task_id): + ... + if task.done(): + ... + ret_dict['status'] = "SUCCESS" if result else "ERROR" + else: + ret_dict['status'] = "PENDING" +``` + +**描述**: +- 通用接口,用于查询所有异步任务的状态。 +- 返回值 `status` 表示任务的当前状态: + - `PENDING`: 任务尚未完成。 + - `SUCCESS`: 任务成功完成。 + - `ERROR`: 任务失败。 + +--- + +### **轮询场景详细说明** +1. **轮询间隔**: + - 前端每隔 1-2 秒向 `/task_status/` 发起一次请求。 + - 使用任务完成 (`SUCCESS` 或 `ERROR`) 的响应作为停止轮询的标志。 + +2. **任务完成后的操作**: + - **任务成功 (`SUCCESS`)**: + - 显示任务处理完成的消息。 + - 根据任务结果更新页面数据或触发后续操作。 + - **任务失败 (`ERROR`)**: + - 显示失败原因,允许用户重新发起任务。 + +3. **接口使用示例**: + - `GET /task_status/`: + - **请求参数**:`task_id`。 + - **响应示例**: + ```json + { + "code": 200, + "message": "后台任务已完成", + "status": "SUCCESS" + } + ``` + +--- diff --git a/数据库关系图(ER).png b/数据库关系图(ER).png new file mode 100644 index 0000000..8af5f4d Binary files /dev/null and b/数据库关系图(ER).png differ diff --git a/系统架构.png b/系统架构.png new file mode 100644 index 0000000..5dd8f6c Binary files /dev/null and b/系统架构.png differ diff --git a/系统部署图.png b/系统部署图.png new file mode 100644 index 0000000..6e55988 Binary files /dev/null and b/系统部署图.png differ diff --git a/维达AI建议.pdf b/维达AI建议.pdf new file mode 100644 index 0000000..68fed7f Binary files /dev/null and b/维达AI建议.pdf differ diff --git a/维达文档.docx b/维达文档.docx new file mode 100644 index 0000000..4b21655 Binary files /dev/null and b/维达文档.docx differ diff --git a/维达文档.md b/维达文档.md new file mode 100644 index 0000000..93aa9be --- /dev/null +++ b/维达文档.md @@ -0,0 +1,193 @@ +# 维达系统设计文档 + +## 1. 系统架构设计 +描述系统各模块之间的数据交互与流程,需标注数据交互模块的名称和方式,具体设计如下: + +- **数据交互模块**: + - 模块间通过 RESTful API 实现数据交互。 + - 数据传输方式采用 JSON 格式。 +- **关键模块**: + - 用户管理模块:包括用户注册、登录和权限分配。 + - 问答知识库模块:提供问答记录存储、查询和更新功能。 + - 文件管理模块:实现文件的上传、解析和存储。 + - 向量化模块:将文本内容进行向量化处理,便于相似度计算。 + - 任务管理模块:负责异步任务的状态跟踪。 + +--- + +## 2. 系统部署的服务器架构 +系统基于分布式部署,架构如下: + +- **应用服务器**:运行 Flask 应用,提供 API 服务。 +- **数据库服务器**:采用 MySQL,存储用户数据、知识库数据和日志记录。 +- **端口分配**: + - 应用服务器端口:`5103` + - 数据库服务端口:默认 MySQL 端口 `3306` + +**相关源代码文件**: +- `mainserver.py`:Flask 应用的入口文件。 +- `config.py`:存储配置文件,包括数据库连接等信息。 + +--- + +## 3. 系统功能的业务流程和标准流程步骤 + +### 核心功能: +#### (1)用户管理 +- **业务流程**: + 1. 用户通过 `/regist` 进行注册。 + 2. 系统校验用户输入信息,若无冲突则写入数据库。 + 3. 用户通过 `/login` 登录,返回权限标识。 +- **实现文件**: + - `mainserver.py`:包含用户注册和登录的逻辑。 + - 数据表: + - `users`:存储用户账号及密码。 + +#### (2)问答知识库管理 +- **业务流程**: + 1. 用户上传问答文件,通过 `/upload_qa` 接口。 + 2. 系统解析文件,分割内容并存储到数据库。 + 3. 用户通过 `/operate_qa` 查询、编辑、删除问答记录。 + 4. 问答检索通过 `/chat_qa` 完成,支持模糊查询。 +- **实现文件**: + - `mainserver.py`:包含问答知识库的解析和存储逻辑。 + - 数据表: + - `qa_knowledge`:存储问答记录。 + +#### (3)向量化处理 +- **业务流程**: + 1. 上传的文本内容由 `add_qa_task_` 方法解析。 + 2. 使用 FAISS 向量化文本并存储。 + 3. 系统通过 `task_status` 查询向量化任务状态。 +- **实现文件**: + - `mainserver.py`:包含向量化处理的异步逻辑。 + - 数据表: + - `qa_knowledge`:存储向量化的文本及相关元数据。 + +--- + +## 4. 系统中所有表、字段的说明和表关联 +### (1)Roles 表 +- **表名**:`roles` +- **字段描述**: + - `id` (int):主键,角色 ID。 + - `name` (string):角色名称。 + +### (2)Users 表 +- **表名**:`users` +- **字段描述**: + - `id` (int):主键,用户 ID。 + - `account` (string):用户账号。 + - `password_hash` (string):用户密码哈希。 + - `roles` (int):关联的角色 ID。 + +### (3)History 表 +- **表名**:`history` +- **字段描述**: + - `id` (int):主键,历史记录 ID。 + - `account` (string):用户账号。 + - `history` (JSON):操作历史。 + - `datetime` (datetime):操作时间。 + - `uuid` (string):操作标识符。 + +### (4)LocalKnowledge 表 +- **表名**:`local_knowledge` +- **字段描述**: + - `id` (int):主键,知识库 ID。 + - `name` (string):知识库名称。 + - `files` (JSON):文件列表。 + - `create_id` (int):创建者 ID。 + - `private_flag` (boolean):是否为私有。 + +### (5)QAKnowledge 表 +- **表名**:`qa_knowledge` +- **字段描述**: + - `sys_id` (int):主键,系统 ID。 + - `question` (text):问题内容。 + - `answer` (LONGTEXT):答案内容。 + - `source` (string):来源。 + - `qa_name` (string):问答库名称。 + - `create_id` (int):创建者 ID。 + - `private_flag` (boolean):是否为私有。 + - `delete_flag` (boolean):是否被删除。 + - `hash` (string):哈希值。 + - `raw_text` (text):原始文本。 + - `score` (float):相似度得分。 + - `answer_type` (string):回答类型。 + - `category` (string):问题分类。 + +--- + +## 5. 接口之间交互设计 +### 接口设计文档: +#### (1)/upload_qa +- 用于上传问答文件,返回处理任务 ID。 + +#### (2)/operate_qa +- 对问答库进行操作,包括增删改查。 + +#### (3)/task_status +- 查询上传问答文件的任务状态。 + +**系统架构图**: +```mermaid +graph TD; +A[前端] -->|API 请求| B[Flask 应用] +B -->|数据库交互| C[MySQL 数据库] +B -->|文件处理| D[文件存储] +``` + +--- + +## 6. 相关代码 + +### 1. **核心 Flask 应用文件** +- **文件名**:`mainserver.py` +- **功能**:处理 API 路由逻辑,包含核心业务流程的实现,包括用户验证、问答逻辑、文件上传处理、异步任务管理等。 + +### 2. **数据库模型定义文件** +- **文件名**:`db_models.py` +- **功能**:定义系统所用的数据库表结构及模型,包括用户表、问答知识库表、历史记录表等。 + +### 3. **配置文件** +- **文件名**:`config.py` +- **功能**:存储系统的全局配置参数,包括数据库连接信息、API 密钥等。 + +--- + +## 代码清单 + +### **主文件:mainserver.py** +- 负责处理核心路由和业务逻辑。 +- 示例代码: +```python +@app.route("/chat_qa", methods=['POST']) +def chat_qa(): + token = request.headers.get('token') + auth_dict = authaccess(token) + if auth_dict['code'] != 200: + return {"code": auth_dict['code'], "message": auth_dict['msg']}, auth_dict['code'] + # 核心逻辑省略... +``` + +### **数据库模型:db_models.py** +- 定义所有数据库表结构。 +- 示例代码: +```python +class QAKnowledge(db.Model): + __tablename__ = 'qa_knowledge' + sys_id = db.Column(db.Integer, primary_key=True) + question = db.Column(db.Text, comment="问题文本") + answer = db.Column(LONGTEXT, comment="答案文本") + # 其他字段... +``` + +### **配置文件:config.py** +- 示例配置: +```python +class Config: + SQLALCHEMY_DATABASE_URI = "mysql+pymysql://user:password@localhost/dbname" + SECRET_KEY = "your_secret_key" +``` + +--- \ No newline at end of file diff --git a/维达未来.md b/维达未来.md new file mode 100644 index 0000000..7ddf139 --- /dev/null +++ b/维达未来.md @@ -0,0 +1,121 @@ + +# HR AI 应用场景落地与 HR 大数据及数据分析可行性分析 + +## 1. 当前 AI 技术能力与现状 + +### **1.1 小维 AI 的当前能力** +- **技术基础**:目前使用的是九鑫自研的 LLM(大语言模型),参数规模为 **6B**,在特定业务场景下表现稳定。 +- **能力对比**:与通用 AI(如 ChatGPT)相比,小维 AI 在通用对话能力上有一定局限性,但具备专注于业务场景应用的优势。 +- **核心应用**: + - **智能问答**:基于 HR 数据库,支持常见 HR 问题的自动化应答。 + - **文本解析**:能够处理和解析 HR 文档(如政策、规章制度等)。 + +### **1.2 技术潜力与挖掘方向** +目前小维 AI 具有未被充分利用的潜力,尤其在以下几个方面: +1. **情感分析与用户需求把握**: + - 在问答过程中,可以通过 NLP 技术识别用户的情绪状态,优化用户体验,提高服务满意度。 + - 例如,候选人对于 HR 问题的提问情绪分析,可帮助 HR 进行更精准的沟通策略调整。 + +2. **简历自动筛查与初步评估**: + - 基于 LLM 与规则引擎的结合,对候选人简历进行初步筛查和分类,匹配岗位需求。 + - 优势:提高招聘效率,减轻 HR 人工筛查的压力。 + +3. **场景化任务扩展**: + - 除问答场景外,还可以扩展到更复杂的任务,比如**面试问卷自动生成**、**入职流程自动化指引**等。 + +--- + +## 2. 非 LLM 的 AI 应用场景 + +除大语言模型(LLM)外,还有多种可行的 AI 技术在 HR 场景落地中具备实际价值: + +### **2.1 智能推荐系统** +- **应用**: + - 面向候选人的**职位推荐系统**:根据候选人简历与岗位需求匹配度进行智能推荐。 + - 面向 HR 的**人才推荐系统**:自动筛选最符合岗位需求的候选人名单。 +- **技术支持**:结合机器学习算法(如协同过滤、内容推荐、深度学习),实现人岗精准匹配。 +- **效果**:提升招聘效率,缩短招聘周期。 + +### **2.2 HR 数据分析与可视化** +- **应用**: + - **员工流动性分析**:预测离职率,帮助 HR 提前采取留人策略。 + - **绩效与培训效果分析**:通过数据分析评估培训的 ROI 和绩效提升效果。 + - **薪酬与福利优化**:通过大数据分析优化薪酬体系,提升员工满意度。 +- **技术支持**:结合数据挖掘与 BI(商业智能)工具,提供可视化分析报告。 + +### **2.3 面向 HR 的智能助手** +- **应用**: + - **日常行政自动化**:如自动化会议记录、员工反馈收集与整理。 + - **智能问卷与调查工具**:自动生成员工满意度调查、入职评估等问卷,并进行结果分析。 +- **效果**:降低 HR 的事务性工作压力,释放精力用于战略性工作。 + +--- + +## 3. 专门定制的 AI 应用场景 + +根据 HR 的需求,我们还可以提供定制化 AI 解决方案,具体包括: + +### **3.1 招聘流程自动化平台** +- 从**职位发布**、**简历筛选**、**面试管理**到**结果评估**的一站式自动化平台。 +- **优势**: + - 提高招聘效率,缩短流程周期。 + - 通过 AI 技术与数据分析帮助 HR 做出更精准的决策。 + +### **3.2 企业文化与员工关怀系统** +- 通过情感分析与自然语言处理技术,自动识别员工情绪,优化员工沟通策略。 +- 提供员工关怀方案,如生日提醒、工作纪念日自动化推送等。 + +### **3.3 基于 HR 数据的大数据预测分析** +- **员工绩效预测**:通过历史数据和当前表现,预测员工未来的绩效和发展潜力。 +- **流失风险预警**:基于员工行为数据,预测流失风险并提供应对建议。 +- **培训效果跟踪与优化**:自动化跟踪培训数据,输出效果评估报告,优化后续培训内容。 + +--- + +## 4. 系统功能分拆与整合建议 + +### **4.1 HR AI 应用场景落地** +主要关注 AI 模型在招聘、绩效管理、员工关怀等核心场景中的实际落地与应用,强调技术与业务场景的紧密结合。 + +### **4.2 HR 大数据与数据分析** +- 专注于数据的采集、清洗、分析和可视化,结合 AI 技术提供数据驱动的决策支持。 +- **核心模块**: + - 数据存储与管理(如 MySQL、数据仓库等)。 + - 分析与建模(如员工流动分析、绩效预测等)。 + - 可视化展示(如 Tableau、Power BI 等)。 + +### **4.3 合并与分拆建议** +- **分开实施**:对于需求明确的企业,可以将 **AI 应用** 与 **大数据分析** 独立实施,分别落地部署。 +- **整合实施**:对于具备更大数据基础和技术整合需求的企业,可以将 AI 技术与大数据分析融合,实现一体化 HR 智能管理系统。 + +--- + +## 5. 合作模式建议 + +### **5.1 技术咨询与场景共创** +- 提供技术咨询服务,帮助维达HR梳理业务需求,定制 AI 应用场景解决方案。 +- 与维达HR共创特定场景的落地实施,进行持续迭代优化。 + +### **5.2 产品定制与部署** +- 提供现有产品的定制化开发与二次部署,确保符合维达HR业务需求。 +- 提供端到端的解决方案,包含需求分析、开发、部署与后续运维支持。 + +### **5.3 数据合作与算法优化** +- 在大数据合作基础上,优化现有算法,提升模型效果。 +- 提供数据分析与报告服务,帮助维达HR实现数据驱动的 HR 战略目标。 + +--- + +## 6. 总结 + +本次可行性分析表明,九鑫的小维 AI 具备在 HR 领域进行场景化落地的能力,且潜力巨大。在**问答交互**、**智能推荐**、**情感分析**等领域已有技术基础,同时可以结合大数据分析进一步拓展 HR 战略应用。 + +通过分步实施与定制化开发,九鑫可以与维达HR共同挖掘更多 AI 与大数据的应用场景,助力 HR 领域的智能化与数据化转型。 + +--- + +### 后续步骤 +1. 详细梳理对方的具体业务需求。 +2. 提供技术演示与落地方案。 +3. 探讨项目合作模式与实施路径。 + \ No newline at end of file