feat(ai): 新增AI对话与知识库功能模块

- 集成Fastjson2依赖优化JSON处理性能
- 配置专用文档处理异步线程池,提升任务并发处理能力
- 实现基于Spring AI的PgVectorStore向量存储配置
- 新增AI对话控制器,支持SSE流式对话及会话管理接口
- 新增AI知识库控制器,支持文件上传、文档管理及重新索引功能
- 定义AI对话和知识库相关的数据传输对象DTO与视图对象VO
- 建立AI对话消息和文档向量的数据库实体与MyBatis Mapper
- 实现AI对话服务接口及其具体业务逻辑,包括会话管理和RAG检索
- 完善安全校验和错误处理,确保接口调用的用户权限和参数有效性
- 提供对话消息流式响应机制,支持实时传输用户互动内容和引用文档信息
This commit is contained in:
2026-03-30 16:33:47 +08:00
parent e7a21ba665
commit d338490640
28 changed files with 2838 additions and 0 deletions

View File

@@ -0,0 +1,189 @@
package cn.yinlihupo.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.UUID;
/**
* AI文档向量实体
* 对应 ai_document 表
*/
@Data
@TableName("ai_document")
public class AiDocument {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 文档唯一标识(UUID)
*/
private UUID docId;
/**
* 关联项目ID
*/
private Long projectId;
/**
* 关联时间节点ID
*/
private Long timelineNodeId;
/**
* 关联知识库ID
*/
private Long kbId;
/**
* 来源类型: project-项目文档, risk-风险文档, ticket-工单,
* report-日报, upload-上传文件, knowledge-知识库, chat-对话记录
*/
private String sourceType;
/**
* 来源记录ID
*/
private Long sourceId;
/**
* 文档标题
*/
private String title;
/**
* 文档内容(纯文本)
*/
private String content;
/**
* 原始内容(带格式)
*/
private String contentRaw;
/**
* AI生成的摘要
*/
private String summary;
/**
* 向量嵌入(存储为字符串实际由pgvector处理)
*/
private String embedding;
/**
* 文档类型: requirement-需求, design-设计, plan-计划,
* report-报告, contract-合同, photo-照片, other-其他
*/
private String docType;
/**
* 语言: zh-中文, en-英文
*/
private String language;
/**
* 文件类型: pdf, doc, txt, md, jpg, png等
*/
private String fileType;
/**
* 文件大小(字节)
*/
private Long fileSize;
/**
* 文件存储路径
*/
private String filePath;
/**
* 文档日期(如日报日期、照片拍摄日期)
*/
private LocalDate docDate;
/**
* 文档时间戳
*/
private LocalDateTime docDatetime;
/**
* 分块序号
*/
private Integer chunkIndex;
/**
* 总分块数
*/
private Integer chunkTotal;
/**
* 父文档ID(分块时使用)
*/
private Long chunkParentId;
/**
* 标签数组(JSON)
*/
private String tags;
/**
* 分类
*/
private String category;
/**
* 查看次数
*/
private Integer viewCount;
/**
* 被检索次数
*/
private Integer queryCount;
/**
* 最后被检索时间
*/
private LocalDateTime lastQueriedAt;
/**
* 状态: active-可用, processing-处理中, error-错误, archived-归档
*/
private String status;
/**
* 错误信息
*/
private String errorMessage;
/**
* 创建人ID
*/
private Long createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新人ID
*/
private Long updateBy;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 删除标记
*/
private Integer deleted;
}