知识库-实现原理
介绍
微语知识库是一个可立即在生产环境投入的企业级RAG(检索增强生成)知识库,实现智能文档理解和检索功能。该系统采用模块化设计,将文档理解、向量存储、推理文件等功能分离。
核心特性
- 模块化设计:文档解析、向量存储、检索推理等功能独立,便于扩展和维护
- 多模态支持:支持文本、图片、表格等多种内容类型的理解和检索
- 高性能架构:采用异步处理、并发优化等技术,支持大规模并发请求
Pipeline 处理流程
微语知识库处理文档需要多个步骤:插入 → 知识提取 → 索引 → 检索 → 生成,整个流程支持多种检索方法,确保信息检索的准确性和完整性。
完整数据流示例
以用户上传的一张住宿流水单PDF文件为例,详细介绍其数据流:
1. 接收请求与初始化
- 请求识别: 系统收到请求,分配唯一的
request_id=Lkq0OGLYu2fV
,用于追踪整个处理流程 - 租户与会话验证:
- 验证租户信息(ID: 1, Name: Default Tenant)
- 处理知识库问答请求,归属会话
1f241340-ae75-40a5-8731-9a3a82e34fdd
- 用户问题: "入住的房型是什么"
- 消息创建: 为用户提问和AI回答分别创建消息记录
2. 知识库问答流程启动
系统启动完整处理管道,包含9个事件:
[rewrite_query, preprocess_query, chunk_search, chunk_rerank, chunk_merge, filter_top_k, into_chat_message, chat_completion_stream, stream_filter]
3. 事件执行详情
事件1: rewrite_query
- 问题改写
- 目的: 结合上下文理解用户真实意图,提高检索精确度
- 操作:
- 检索当前会话最近20条历史消息作为上下文
- 调用
deepseek-r1:7b
大语言模型 - 根据聊天历史分析,将问题改写得更具体
- 结果: "入住的房型是什么" → "Liwx本次入住的房型是什么"
事件2: preprocess_query
- 问题预处理
- 目的: 将改写后的问题进行分词,转换为适合搜索引擎处理的关键词序列
- 结果: 生成关键词序列用于后续检索