欢迎光临
我们一直在努力

企业知识库智能问答系统 —— 项目总览与架构设计

前言

最近完成了一个基于 RAGFlow + LangChain 的企业知识库智能问答系统。这篇文章对项目的整体架构、技术选型和模块划分做一个总览,后续文章会逐一深入每个模块的实现细节。

技术栈

层级技术
知识库引擎 RAGFlow SDK
LLM 框架 LangChain
模型服务 通义千问 (DashScope API)
后端框架 FastAPI
数据库 MongoDB (会话记忆持久化)
前端 Vue 3 + Element Plus + Vite

整体架构

┌─────────────────────────────────────┐
│           Vue.js 前端 (ui/)         │
│   Element Plus + EventSource 流式   │
└──────────────┬──────────────────────┘
              │ HTTP / SSE
┌──────────────▼──────────────────────┐
│       FastAPI 接口层 (api/)         │
│   路由、CORS、请求模型、流式响应     │
└──────────────┬──────────────────────┘
              │
┌──────────────▼──────────────────────┐
│     核心调度层 (output/)           │
│   会话管理、处理器缓存、流式转发     │
└──────────────┬──────────────────────┘
              │
┌──────────────▼──────────────────────┐
│     LangChain 工具层                 │
│ ┌─────────┬──────────┬──────────┐ │
│ │ 意图识别 │ 处理链   │ 记忆管理 │ │
│ │ intent │ chains   │ memory   │ │
│ └─────────┴──────────┴──────────┘ │
└──────────────┬──────────────────────┘
              │
┌──────────────▼──────────────────────┐
│     RAGFlow 集成层                   │
│ ┌─────────┬──────────┬──────────┐ │
│ │会话管理 │ 助手选择 │ 知识检索 │ │
│ └─────────┴──────────┴──────────┘ │
│         RAGFlow 知识库引擎           │
└─────────────────────────────────────┘

模块职责

api/ — 接口层

  • main.py: FastAPI 应用定义,提供 /api/chat(普通)和 /api/chat/stream(SSE 流式)两个聊天接口,以及 /api/memory/clear 清除会话记忆

  • run_api.py: 启动脚本

output/ — 调度层

  • main_service.py: 管理多个会话的处理器实例(字典缓存),对外暴露 get_response() 流式生成器和 clear_session_memory() 清理函数

Langchain_utils/ — 智能处理层

  • intent.py: 意图识别,使用 LangChain tool-calling 判断用户是想查知识库还是闲聊

  • chains.py: 两条处理链——知识库链(检索增强生成)和通用对话链(纯 LLM 回答)

  • memory.py: 基于 MongoDB 的对话记忆持久化

  • processor.py: 统一处理器,串联记忆加载 → 意图识别 → 链选择 → 流式输出

  • config.py: MongoDB 连接配置

RAGFlow_mcp/ — RAGFlow 集成层

  • chat.py: 对外极简封装,提供 RAGFlow_chat() 和 get_assistants()

  • handler.py: 分析用户输入的意图(查列表/指定助手/自动选择),路由到对应工具

  • tool.py: 三种工具——列出助手、指定助手回答、自动选择助手回答

RAGFlow_utils/ — RAGFlow 底层工具

  • create_ask_delete.py: 创建临时会话 → 提问 → 获取答案 → 删除会话,用于单次查询

  • list_chat_assistant.py: 获取所有聊天助手及其关联知识库

  • query_enhancer.py: 查询增强,解决代词指代和上下文依赖问题

ui/ — 前端

  • Vue 3 + Element Plus,支持流式接收(EventSource)和普通请求两种模式

请求处理全流程

一个用户问题的完整处理链路:

用户输入问题
  ↓
FastAPI 接收请求(带 session_id)
  ↓
output/main_service 查找/创建该会话的 processor
  ↓
processor 加载 MongoDB 中的对话历史
  ↓
intent.detect_intent() 判断意图(knowledge_base / general_chat)
  ↓
根据意图选择 chain:
– knowledge_chain → 查询增强 → RAGFlow 检索 → LLM 总结
– general_chain → 直接 LLM 对话
  ↓
流式输出 chunk(SSE → 前端逐字渲染)
  ↓
对话存入 MongoDB 记忆

关键设计决策

为什么用临时会话模式? RAGFlow 原生会话会累积历史。项目采用"创建→提问→获取答案→删除"的单次模式,每次查询都是全新的临时会话,避免 RAGFlow 侧会话膨胀,由 LangChain 侧负责对话记忆管理。

为什么有两层意图识别?

  • RAGFlow_mcp/handler.py 识别用户想用哪个助手(第一层)

  • Langchain_utils/intent.py 识别用户是否需要查知识库(第二层)

两层分工不同:第一层做助手路由,第二层做知识库/闲聊二分类。

为什么模块拆得这么细? 每个模块职责单一,方便独立测试和修改。比如想换一个 LLM 服务商,只需改 chains.py 和 intent.py 中的模型初始化,不影响其他模块。

小结

本文梳理了"万象智识库"的整体架构和模块划分。核心思路是:FastAPI 做接口、LangChain 做编排、RAGFlow 做检索、MongoDB 做记忆。后续文章会逐一深入每个模块的实现细节。

赞(0)
未经允许不得转载:171主机测评 » 企业知识库智能问答系统 —— 项目总览与架构设计
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址