4、基于 RAG 的数据治理智能问答系统——流式对话接口设计
概述InfoHelper 是一个面向数据治理领域的智能问答系统基于RAG检索增强生成架构结合Elasticsearch 向量检索、Neo4j 图数据库和MySQL 关系型数据库三种数据源实现对数据标准、数据质量、数据资产、数据集市、元数据、数据血缘、数据安全等场景的智能问答。核心入口/chat/send是一个SSEServer-Sent Events流式接口支持逐 token 推送 LLM 生成内容并在各个环节插入进度消息降低用户等待焦虑。接口定义基本信息属性值方法POST路径/chat/sendContent-Typeapplication/x-www-form-urlencoded响应类型text/event-streamSSE传输模式流式Flux请求参数参数类型必填说明示例userIdString是用户唯一标识用于会话归属、权限判断test_user_001contentString是用户问题文本支持中文人员相关的数据有哪些conversationIdString否会话 ID不传则自动创建格式为UUIDuserId1494ea83d8254fffbf63a9964baa791ctest_user_001响应格式响应是一个 SSE 事件流每一条消息以data:开头包含以下三类事件事件类型格式说明进度通知[PROGRESS]:xxx当前处理阶段提示LLM Token纯文本逐 token 流式输出的回答内容结束标记[DONE]:conversationId流结束返回会话 ID 供后续对话使用真实响应示例以下是一次实际请求userIdtest_user_001content人员相关的数据有哪些的 SSE 流输出data:[PROGRESS]:正在识别您的意图... data:[PROGRESS]:正在优化您的问题... data:[PROGRESS]:正在路由您的问题... data:[PROGRESS]:正在检索知识库内容... data:[PROGRESS]:正在排序筛选结果... data:[PROGRESS]:正在生成回答... data:在数据集市中与人员相关的数据主要分布在**教职工管理**、**学生管理**以及**一卡通用户信息**等主题域中。以下是具体的数据实体及其核心字段信息 data:### 1. 教职工基本数据 data:属于**教职工管理主题域BKJG**主要存储教职工的基础身份信息。 data:* **数据实体**RS_StaffInfo data:* **数据大类**教职工基本数据类 data:* **核心字段** data: * StfNo职工号 data: * Name姓名 data: * GenderCode性别码 data:### 2. 学生基本数据 data:* **核心字段** data: * StuNo学号 data: * Name姓名 data: * GenderCode性别码 data: * BirthDate出生日期 data: * MajorCode专业代码 data: * IDCard证件号码 data:* **责任单位**教务处 data:### 3. 卡用户信息数据 data:属于**用户基本信息数据类**关联一卡通或校园卡系统。 data:* **数据实体**YKT_CardUserInfo data:* **核心字段** data: * UserId用户ID data: * Name姓名 data: * CardNo卡号 data: * Balance余额 data:### 4. 项目经费相关人员 data:用于标识项目负责人。 data:* **数据实体**CW_Project data:* **数据大类**项目经费数据类 data:* **核心字段** data: * ChargerId负责人ID关联具体人员 data:[DONE]:1494ea83d8254fffbf63a9964baa791ctest_user_001处理流程整个对话链路可拆分为5 个阶段用户输入: 人员相关的数据有哪些 │ ▼ ┌─────────────────────────────────────────────────────┐ │ 1. 会话管理 │ │ 创建 conversationId UUID userId │ │ 临时标题 人员相关的数据有哪些 │ │ └─ 虚拟线程异步: qwen3.6-flash 生成标题 → 回写DB │ └────────┬────────────────────────────────────────────┘ │ ~0ms ▼ ┌─────────────────────────────────────────────────────┐ │ 2. 消息持久化 │ │ 保存用户消息 (typeUSER, content原始问题) │ │ 创建空助手消息 (typeASSISTANT, contentnull) 占位 │ └────────┬────────────────────────────────────────────┘ │ ~0ms ▼ ┌─────────────────────────────────────────────────────┐ │ 3. 意图识别 (qwen3.7-plus, ~11.5s) │ │ [PROGRESS]:正在识别您的意图... │ │ 输入: 人员相关的数据有哪些 │ │ 输出: intent数据集市查询, data_domain人员 │ │ → 清除意图缓存避免污染后续对话 │ └────────┬────────────────────────────────────────────┘ │ relatedtrue ▼ ┌─────────────────────────────────────────────────────┐ │ 4. RAG 检索增强生成 │ │ │ │ a. 问题改写 (qwen3.7-plus, ~9.3s) │ │ [PROGRESS]:正在优化您的问题... │ │ 输入: 人员相关的数据有哪些 │ │ 输出: 人员相关数据资产查询 │ │ │ │ b. 查询路由 (qwen3.7-plus, ~19.8s) │ │ [PROGRESS]:正在路由您的问题... │ │ 输入: 人员相关数据资产查询 │ │ 输出: strategyrelational_db │ │ │ │ c. 多源检索 (仅激活 relational_db 一路) │ │ [PROGRESS]:正在检索知识库内容... │ │ → Text-to-SQL: 查询 data_metadata 表 │ │ → ES 检索: 补充知识库文档 │ │ │ │ d. 重排序/融合 │ │ [PROGRESS]:正在排序筛选结果... │ │ → RRF 融合 去重取 Top-K │ │ │ │ e. 内容注入 Prompt 加载业务 prompt │ │ → 注入>阶段 1会话管理如果conversationId为空生成格式为UUID userId的会话 ID以用户问题截取前 20 个字符作为临时标题创建会话通过Java 虚拟线程异步调用qwen3.6-flash生成语义化标题回写到数据库不阻塞主流程用户无感知阶段 2意图识别调用qwen3.7-plus加载intent-recognition-new-prompt.txt约 3300 token 的 system prompt判断用户问题是否属于数据治理领域并提取关键实体。实际执行结果输入 “人员相关的数据有哪些”{reasoning:1.相关性涉及数据查询与数据治理相关。2.场景定位用户想了解有哪些与人员相关的数据处于浏览数据集市阶段。3.辨析属于按数据域/主题搜索公开数据目录而非查询自己已申请的数据资产。- 数据集市查询,related:true,intent:数据集市查询,entities:{database_name:null,table_name:null,column_name:null,data_domain:人员,data_owner:null,data_level:null,application_id:null,system_name:null}}支持 8 种意图意图数据来源适用场景示例数据标准咨询知识库了解规范定义“字段命名规范是什么”数据质量检查知识库检查/监控数据质量“数据完整性怎么检查”数据资产查询my_data_table我的查自己已申请的数据“我申请了哪些数据表”数据集市查询data_metadata公开浏览数据目录“人员相关的数据有哪些”数据申请审批data_application申请/查看审批状态“申请单 APP20240101 通过了吗”元数据管理知识库管理元数据“怎么修改表字段注释”数据血缘分析Neo4j追踪数据来源流向“uid 从哪个上游表来的”数据安全合规知识库脱敏/加密/合规“L3 数据需要怎么脱敏”核心区分带我的 → 数据资产查询不带我的且问有什么 → 数据集市查询。阶段 3RAG 检索增强生成如果问题与数据治理相关relatedtrue进入 RAG 管道。核心组件及职责环节组件输入 → 输出耗时参考问题改写InfoHelperQueryTransformer“人员相关的数据有哪些” → “人员相关数据资产查询”~9s查询路由InfoHelperQueryRouter改写后问题 →strategyrelational_db~20sSQL 检索InfoHelperSqlDatabaseContentRetriever自然语言 → SQL → 查询结果~1sES 检索InfoHelperElasticsearchContentRetriever向量/全文检索 → 文档片段~1s重排序BgeScoringModelOnnx检索结果 → 语义排序 Top-K本地推理内容聚合InfoHelperReRankingContentAggregator去重、截断、注入 Prompt~0s生成qwen3.7-plusstreamingPrompt 检索结果 → 逐 token 回答~8s查询路由策略QueryRouter LLM 智能判断走哪路LLM 返回 strategy实际走的检索器典型场景relational_dbSQLMySQL结构化查询、按数据域/主题查元数据graph_dbNeo4j血缘追踪、上下游依赖knowledge_baseES 向量/全文标准咨询、文档语义搜索其他/异常三路并行兜底模糊问题、无法判断注本例中 “人员相关的数据有哪些” 被路由到relational_db因为 QueryRouter 判断这是结构化元数据查询按数据域条件检索。阶段 4权限控制通过RoleEnum控制数据访问范围角色枚举值权限范围普通用户USER只能看公开文档已申请数据用户APPLICANT可见自己申请的数据管理员ADMIN全部可见模型架构用途模型说明意图识别qwen3.7-plus结构化 JSON 输出8 种意图分类问题改写qwen3.7-plus口语化 → 标准检索查询查询路由qwen3.7-plus判断走哪路检索器 置信度Text-to-SQLqwen3.7-plus自然语言 → SQLText-to-Cypherqwen3.7-plus自然语言 → CypherRAG 回答生成qwen3.7-plus结合检索结果流式生成temperature0.2标题生成qwen3.6-flash轻量快速异步非阻塞文本向量化text-embedding-v4ES KNN 向量检索重排序bge-reranker-v2-m3Onnx本地推理语义精排实际执行时序以content人员相关的数据有哪些为例完整链路耗时12:26:15 会话创建 (INSERT chat_conversation) 12:26:16 消息持久化 (INSERT chat_message) 12:26:16 异步标题生成开始 (qwen3.6-flash) 12:26:16 意图识别开始 (qwen3.7-plus) 12:26:28 意图识别完成 → intent数据集市查询, data_domain人员 (~11.5s) 12:26:28 问题改写开始 (qwen3.7-plus) 12:26:37 问题改写完成 → 人员相关数据资产查询 (~9.3s) 12:26:37 查询路由开始 (qwen3.7-plus) 12:26:57 查询路由完成 → strategyrelational_db (~19.8s) 12:27:46 SQL检索 ES检索 排序 注入Prompt 完成 12:27:47 LLM流式生成开始 (qwen3.7-plus, streaming) 12:27:55 流式生成完成回填回答 (UPDATE chat_message) ───────────────────────────────────────── 总耗时: ~100s其中 LLM 调用占 ~48s网络/检索占 ~52s技术要点1. 流式推送 进度通知使用Flux.concatWith()将 RAG 各环节的进度消息与 LLM token 流串联到同一个 Flux 中确保进度消息先于 token 到达前端returnFlux.just([PROGRESS]:正在识别您的意图...).concatWith(/* 意图识别 分支路由 */).concatWith(Mono.just([DONE]:finalConversationId));2. 多数据源指路不盲搜四路检索器全部构建但QueryRouter 只激活 1 路常规情况避免无效检索。只有路由失败时才走三路并行兜底。3. 异步标题生成会话创建后不阻塞主流程通过 Java 虚拟线程异步调用qwen3.6-flash生成标题Thread.ofVirtual().name(title-summary-conversationId).start(()-{StringaiTitletitleSummaryService.generateTitle(content);updateConversationTitle(conversationId,aiTitle);});实际效果临时标题 “人员相关的数据有哪些” → 语义标题 “人员相关数据有哪些”。4. 意图缓存隔离意图识别完成后立即清除 LLM 的历史记忆缓存避免意图识别的对话上下文污染后续 RAG 对话databaseChatMemoryStore.evictCache(finalConversationId);5. 消息占位-回填机制流式返回时无法预知最终内容先保存空消息占位获取messageId流结束后再回填完整内容INSERT chat_message (contentnull) → 获取 messageId → LLM 流式生成 → UPDATE chat_message SET content完整回答前端集成示例asyncfunctionchat(userId,content,conversationId){constresponseawaitfetch(/chat/send,{method:POST,headers:{Content-Type:application/x-www-form-urlencoded},body:newURLSearchParams({userId,content,conversationId})});constreaderresponse.body.getReader();constdecodernewTextDecoder();letbuffer;while(true){const{done,value}awaitreader.read();if(done)break;bufferdecoder.decode(value,{stream:true});constlinesbuffer.split(\n);bufferlines.pop();for(constlineoflines){if(line.startsWith(data:[PROGRESS])){showProgress(line.replace(data:,));}elseif(line.startsWith(data:[DONE])){constconvIdline.split(:)[2];saveConversationId(convId);}elseif(line.startsWith(data:)){appendToken(line.replace(data:,));}}}}总结/chat/send是 InfoHelper 的唯一对话入口封装了意图识别、多源 RAG 检索、流式生成、会话管理、权限控制等完整链路。通过 SSE 进度通知机制用户可以在每个处理阶段看到实时反馈。整个架构的设计亮点意图识别做第一道分拣无关问题走通用对话兜底降低 RAG 成本指路不盲搜QueryRouter 智能判断走哪路检索器只有失败时才三路并行兜底BGE Reranker 本地重排序Onnx 模型本地推理无需网络调用提升结果精度进度消息与 LLM 输出同流推送前端只需一个 SSE 连接降低复杂度全链路耗时透明意图识别 ~11s、改写 ~9s、路由 ~20s、生成 ~8s便于性能优化定位

相关新闻

CVE-2026-50522 SharePoint RCE实战:漏洞原理、检测脚本、防御配置与溯源复盘

CVE-2026-50522 SharePoint RCE实战:漏洞原理、检测脚本、防御配置与溯源复盘

2026年7月微软月度补丁更新周期结束后,全网企业安全运维团队都迎来了一轮高强度应急压力。本月Patch Tuesday补丁库一次性收录并修复622个不同类型的安全漏洞,覆盖Windows服务器系统、SQL数据库、IIS中间件、Office全家桶以及企业高频部署的SharePoint协…

2026/7/22 13:24:42 阅读更多 →
I2C控制器Draining机制详解:解决FIFO非对齐传输与AERR中断问题

I2C控制器Draining机制详解:解决FIFO非对齐传输与AERR中断问题

1. 项目概述:I2C控制器中的Draining机制与FIFO管理 在嵌入式系统开发中,I2C总线因其简洁的两线制(SDA和SCL)和灵活的多主从架构,成为了连接各类传感器、EEPROM、RTC等外设的“血管”。但凡真正深入驱动过I2C控制器&…

2026/7/22 13:24:42 阅读更多 →
好客搜陈海伟专访:以文化凝聚人心,以自研助力企业全域获客

好客搜陈海伟专访:以文化凝聚人心,以自研助力企业全域获客

扎根苏州创业园的江苏好客搜,十年成长为国内稀缺全链路 AI 自研厂商,企业每一步布局都来自创始人好客搜陈海伟。在他的经营逻辑里,企业文化凝聚团队、规范服务,自研产品开拓市场、解决客户痛点,二者缺一不可。 2016 年…

2026/7/22 13:24:42 阅读更多 →

最新新闻

从本地生活到AI安全:三个技术项目的实战之路

从本地生活到AI安全:三个技术项目的实战之路

一个技术团队的多元化探索:服务本地生活的信息平台、赋能开发者的开源框架、守护企业AI安全的管理系统引言 在技术快速迭代的今天,如何将技术落地到真实场景,解决实际问题,是每个技术团队都在思考的课题。今天分享我们团队上线的三…

2026/7/22 14:07:11 阅读更多 →
奇迹MU法师职业生存技巧与走位攻略

奇迹MU法师职业生存技巧与走位攻略

1. 奇迹MU荣耀出征法师职业深度解析 作为一款运营近20年的经典MMORPG,《奇迹MU》在移动端的荣耀出征版本完美继承了端游的核心玩法。法师职业凭借其高爆发AOE伤害和灵活机动性,始终是团队中不可或缺的核心输出。但想要真正玩好法师,必须掌握两…

2026/7/22 14:07:11 阅读更多 →
macOS与iOS 26.5.2更新解析与升级指南

macOS与iOS 26.5.2更新解析与升级指南

1. macOS与iOS 26.5.2版本更新前瞻 作为长期跟踪苹果生态的开发者,每次系统更新都值得仔细研究。macOS Tahoe 26.5.2和iOS/iPadOS 26.5.2预计将在2026年6月底发布,从官方安全公告来看,这次更新主要聚焦在以下方面: 安全性增强&am…

2026/7/22 14:07:11 阅读更多 →
AI Agent评估方法论与实践指南

AI Agent评估方法论与实践指南

1. Anthropic官方AI Agent评估方法论深度解析最近Anthropic发布了一份关于AI Agent评估的详细方法论文档,这份万字长文系统地梳理了当前AI Agent的评估体系和实践方法。作为长期关注AI Agent发展的从业者,我仔细研读了这份文档,并将在本文中分…

2026/7/22 14:07:11 阅读更多 →
2026毕业论文工具怎么选?小白避坑榜单!Okbiye凭实力出圈✅

2026毕业论文工具怎么选?小白避坑榜单!Okbiye凭实力出圈✅

每年毕业季,都会被问爆:现在写论文到底用什么工具最稳? 2026年和往年不一样,只降重、不改AI痕迹的工具基本全部失效。很多同学查重过了、字数够了、格式改了,最后栽在AI痕迹超标、文稿查重反弹上。 市面上论文工具五…

2026/7/22 14:07:11 阅读更多 →
深入解析TI PRU-ICSS MII_RT模块:工业以太网硬实时数据通路实战

深入解析TI PRU-ICSS MII_RT模块:工业以太网硬实时数据通路实战

1. 项目概述与MII_RT模块的核心价值 在工业自动化、运动控制这些对时间要求严苛到微秒级的领域,传统的基于Linux或RTOS的处理器架构常常会面临一个根本性的挑战:操作系统调度、中断延迟以及内存访问的不确定性。当你需要确保一个以太网帧在精确的125微秒…

2026/7/22 14:06:10 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻