跳至主要內容
item3 - 12 聊天模块

Redis 接口设计

用户到会话的映射

  • Key: user:{userId}:current_conversation
  • Value: 当前用户的 conversationId
  • TTL: 7 天
  • 用途: 快速查找某个用户的当前会话 ID

对话历史记录

  • Key: conversation:{conversationId}
  • Value: JSON 格式的对话历史记录数组,每个元素包含 role、content、timestamp 字段
  • TTL: 7 天
  • 用途: 存储用户的对话上下文,支持多轮对话,限制最多保存 20 条消息
  • 示例:

codejava_itemPaiSmart大约 3 分钟
item3 - 10 知识库检索

知识库检索模块主要是基于 Elasticsearch 实现的文档混合检索能力,将语义检索和关键词检索结果结合起来,为用户提供更高质量的搜索体验

该模块依赖于文件上传与解析模块完成的向量化处理,直接使用存储在 Elasticsearch 中的向量数据进行检索

通过 阿里千问Embedding模型成文本向量,并将向量存储在 Elasticsearch 中

主要模块

知识库检索

  • 混合检索:结合语义检索和关键词检索结果,按权重排序返回搜索结果
  • 支持指定返回结果数量:通过 topK 参数控制结果数量

codejava_itemPaiSmart大约 16 分钟
item3 - 11 聊天模块

聊天模块通过 WebSocket 协议实现双向通信,支持大语言模型(接入了 DeepSeek)输出内容的流式返回;为支持多轮连续对话,该模块集成了 Redis 用于存储和维护用户会话上下文,确保大模型在生成回答时能够“记住”前文内容,维持语义连贯性

为了更好地引导大语言模型生成高质量回答,系统特别强化了 Prompt 构建与模板管理能力:

  • 根据检索结果动态生成 Prompt;
  • 支持多种 Prompt 模板配置与调优;
  • 确保内容组织清晰、有重点,引导模型围绕核心信息生成响应

功能实现


codejava_itemPaiSmart大约 8 分钟
item3 - 9 文件解析模块2

实现大文件的分片上传、断点续传、文件合并以及文档解析功能

目的

  • 通过 Redis 和 MinIO 的结合,确保大文件上传的可靠性
  • 并通过 Kafka 实现异步处理,进行文件解析等操作
  • 模块支持多种文档格式(PDF、Word、Excel)的解析,并提取文本内容用于后续向量化处理
  • 文本向量化通过调用阿里向量化 API 实现,生成的向量数据目前存储在 Elasticsearch 中,未来将同时支持 FAISS 存储

文件处理(解析+向量化)


codejava_itemPaiSmart大约 12 分钟
item3 - 5 文件上传解析模块1

实现大文件的分片上传、断点续传、文件合并以及文档解析功能

目的

  • 通过 Redis 和 MinIO 的结合,确保大文件上传的可靠性
  • 并通过 Kafka 实现异步处理,进行文件解析等操作
  • 模块支持多种文档格式(PDF、Word、Excel)的解析,并提取文本内容用于后续向量化处理
  • 文本向量化通过调用阿里向量化 API 实现,生成的向量数据目前存储在 Elasticsearch 中,未来将同时支持 FAISS 存储

主要实现功能

文件分片上传与断点续传


codejava_itemPaiSmart大约 3 分钟
item3 - 6 文件上传解析模块2

实现大文件的分片上传、断点续传、文件合并以及文档解析功能

目的

  • 通过 Redis 和 MinIO 的结合,确保大文件上传的可靠性
  • 并通过 Kafka 实现异步处理,进行文件解析等操作
  • 模块支持多种文档格式(PDF、Word、Excel)的解析,并提取文本内容用于后续向量化处理
  • 文本向量化通过调用阿里向量化 API 实现,生成的向量数据目前存储在 Elasticsearch 中,未来将同时支持 FAISS 存储

文件上传

首先前端对于用户上传的文件,由前端来计算对应的MD5值 (分片读取 + 增量计算)


codejava_itemPaiSmart大约 21 分钟
item3 - 7 文件上传解析模块3

实现大文件的分片上传、断点续传、文件合并以及文档解析功能

目的

  • 通过 Redis 和 MinIO 的结合,确保大文件上传的可靠性
  • 并通过 Kafka 实现异步处理,进行文件解析等操作
  • 模块支持多种文档格式(PDF、Word、Excel)的解析,并提取文本内容用于后续向量化处理
  • 文本向量化通过调用阿里向量化 API 实现,生成的向量数据目前存储在 Elasticsearch 中,未来将同时支持 FAISS 存储

文件合并

会自动触发,应该是每次成功上传完分片会检查是否全部完成了 (检查逻辑在前端)


codejava_itemPaiSmart大约 14 分钟
item3 - 8 文件解析模块1

实现大文件的分片上传、断点续传、文件合并以及文档解析功能

目的

  • 通过 Redis 和 MinIO 的结合,确保大文件上传的可靠性
  • 并通过 Kafka 实现异步处理,进行文件解析等操作
  • 模块支持多种文档格式(PDF、Word、Excel)的解析,并提取文本内容用于后续向量化处理
  • 文本向量化通过调用阿里向量化 API 实现,生成的向量数据目前存储在 Elasticsearch 中,未来将同时支持 FAISS 存储

文件处理(解析+向量化)


codejava_itemPaiSmart大约 11 分钟
item3 - 2 整体架构

简介

这是一个基于 RAG 的 AI 知识库智能问答平台,结合了大语言模型以及向量化的技术来提供高效、准确的问答服务

用户可以通过上传各自的文档来构建相应专属的私有知识库,并可以与对应的agent实时交互提问。支持多轮对话、语义检索和动态知识库更新


codejava_itemPaiSmart小于 1 分钟
item3 - 3 用户管理模块1

解决用户注册、登录以及权限控制

目的

  • 确保用户身份安全性
  • 有灵活权限管理机制,基于角色的访问控制,通过 RBAC 实现不同角色(管理员|普通用户)功能权限区分
  • 为其他模块提供信息支持

实现功能

用户注册

允许用户使用用户名和密码进行注册,成功注册后默认分配普通用户的角色

流程

  • 接收用户注册请求,验证用户名和密码
  • 检查用户名是否已存在
  • 使用 BCrypt 加密密码
  • 创建用户记录,设置默认角色为USER => 存 users 表
  • 创建用户私人组织标签(PRIVATE_username) => 存 organization_tag 表
  • 将私人组织标签设置为用户的主组织标签
  • 返回注册成功响应

codejava_itemPaiSmart大约 10 分钟