背景介绍
近年来,大语言模型在传统行业的赋能改造中发挥了重要作用,越来越多基于大语言模型的业务解决方案相继被提出。PolarDB开源社区作为一个活跃的平台,鼓励用户在其中分享数据库使用体验、询问数据库相关操作,同时联合华东师范大学推出“PolarDB知识问答助手”,帮助用户更好学习PolarDB基础知识,从而有效促进社区内的知识流通。
近期,“PolarDB知识问答助手”完成进一步升级,基于阿里自研的云原生数据仓库AnalyticDB+通义千问大模型,实现了一站式的全链路RAG能力,避免因AI系统引入多个引擎造成数据孤岛和复杂的运维问题,大幅提高了查询检索效率和问答准确率,为用户带来更流畅和精准的使用体验。
架构介绍
(PolarDB开源社区机器人的问答框架)
该问答框架基于云原生数据仓库AnalyticDB PostgreSQL版引入私域知识(PolarDB操作文档、数据库概念文档、用户会话、社区历史、反馈标注等)构建专属知识库,提供文档处理、向量检索、Embedding、Rerank和查询召回等能力,利用通义千问大模型强大的意图理解和人性化表达能力,最后通过RAG架构调优提升知识匹配精准性,输出问答结果。
RAG自动问答原理
如上图所示为传统的检索增强生成(Retrieval-augmented Generation,简称RAG)框架。这一框架在处理用户问题时,首先会从静态知识库如技术文档、手册等和历史对话库中检索出相关的文本片段。接下来,系统利用大语言模型对这些检索到的文本片段进行上下文整合和深度理解,然后生成并输出一个准确且有针对性的答案作为回复。鉴于通义千问大模型在理解和生成方面表现出的卓越能力,我们选择将其作为系统中的大语言模型支撑。
升级**AnalyticDB一站式RAG服务**
云原生数据仓库 AnalyticDB PostgreSQL 版(下文简称ADB PG)是高并发低延时的PB级实时数据仓库,兼容ANSI SQL 2003、PostgreSQL和Oracle数据库,毫秒级对万亿级数据进行即时的多维分析透视和业务探索。ADB PG具备完整的事务处理、高吞吐写入和流批一体引擎,通过全自研计算引擎及行列混合存储提供高性能数据处理和在线分析能力,可以帮助企业构建离在线一体、流批一体的综合数据分析平台,此外,ADB PG在数仓中内置AI功能,提供向量检索、一站式RAG服务,以及企业知识库、文搜图、图搜图等功能和解决方案,帮助企业快速构建AI应用,一键开启Data+AI新范式。
在社区问答中,我们利用ADB PG来构建专属大模型知识库,并进行数据的高效检索和查询。
构建专属知识库
与传统的RAG框架不同,我们的自动问答系统基于ADB PG构建了专属私域知识库,不仅整合了静态知识库(如PolarDB相关操作手册),还结合了动态知识库(社区内的对话历史),协同提供更加准确高效的问答服务。
静态知识库
为了实现对PolarDB社区中数据的高效管理,我们首先为静态知识库构建了一个名为polardb_x的文档库。在这一过程中,通过定义元数据(meta数据),我们可以存储文件路径、URL以及文档来源,以便于检索和管理
动态知识库
针对PolarDB相关的历史对话数据,我们建立了专门的动态知识库,用于维护高质量的社区问答记录,并进行实时更新。该动态知识库采用启发式的存储结构,根据问题类型进行分类管理,持续用近期的对答替换时间久远的内容,以保持动态知识库的活力与质量。这种方法确保系统在提供准确答案的同时,也能快速适应不断变化的用户需求,让用户享受流畅和自然的对话过程。
数据检索与查询
ADB PG全自研高性能RAG引擎,支持高并发、低延时标签过滤+向量检索+全文检索融合分析。内置一站式RAG开发服务 (文档处理、Embedding、向量检索、召回、精排),避免因为 AI 引入多个引擎造成数据孤岛和复杂的运维,一站式数据检索与查询的流程如下:
1)数据预处理:在向量化之前需要对非结构化的文档、图片进行预处理,包括文档/图片解析、切块,预处理的质量会对问答召回和准确率有非常大的影响。
2)Embedding: 通过大模型的Embedding算法对预处理后的数据块进行向量化,并将结果存储到向量数据库中。
3)向量检索: 大模型将用户的问题进行向量化后在向量数据库中进行向量检索和近似度计算,同时结合结构化的条件过滤进行权限和范围的限定
4)查询召回:大模型对向量检索的结果进行推理求解最终返回最接近问题的答案,因为语义检索的覆盖面可能不全,因此可以结合全文检索对答案进行补充。
具体来说,为了确保查询能获得高质量的相关文本片段,我们采用统一的ADB PG来替代原有的SQLite和pgvector双表结构,同时支撑静态和动态知识库。这不仅减少了维护成本和查询逻辑,还能同时支持检索对话历史与社区问答看板功能。我们还设计了AdbpgRetriever类(检索器)和get_QA_similarity函数(排序机制),可以在ADB PG构建的知识库中高效地检索相关数据,辅助RAG问答框架生成准确的答案。具体释义如下:
AdbpgRetriever类
AdbpgRetriever类负责从知识库中检索相关文档。该类通过query_content方法查询内容,并通过_get_relevant_documents方法返回相关文档。
get_QA_similarity 函数
get_QA_similarity函数则用于从对话历史表中检索最相关的问答记录。该函数首先计算查询的嵌入向量,然后执行SQL查询以找到与查询最相似的记录。AnalyticDB还支持Rerank重排序功能,会对结果进行进一步的筛选和排序,进一步优化最初的检索效果,显著提高最终推荐内容的相关性和用户满意度。
我们可以在ADB PG构建的知识库中高效地检索相关数据,辅助RAG问答框架生成准确的答案。
问答机器人支持的功能
基于 AnalyticDB进行架构升级后的社区问答机器人具有以下的功能:
支持知识库的安全上传和方便管理,并支持投放用户群的知识库配置。
对开源数据库使用、编码、PolarDB社区相关问题的回答能力,以及传统SQL代码转换为PolarDB-X的分布式查询代码。
拥有对语料准确的理解、总结、概括和阐述能力,针对用户发起的问题,能够提供专业准确的回答。
机器人支持多种服务场景:提供API接口,支持多渠道能力接入和投放。
指定场景下支持用户的回复反馈,包括点赞和纠正交互入口。
机器人基于收集到的社区问题,能够对数据进行有效统计用于效果分析。
总结与展望
基于云原生数据仓库 AnalyticDB PostgreSQL 版和通义千问大模型,PolarDB开源社区自动问答机器人进一步升级,不仅减少了维护成本和查询逻辑,还能同时支持检索对话历史与社区问答看板功能,并且通过后续重排进一步提升答案的质量。这次的架构升级旨在确保用户的每一次提问都能获得高质量的回答,也是AnalyticDB结合通义千问大模型的一次实战演练。
目前我们的机器人已经投放在PolarDB开源社区部分钉群,相关服务能力在持续优化,欢迎开源社区的朋友使用并提出意见!
如果您对PolarDB分布式数据库感兴趣,并想体验相关服务,可以通过扫码加入钉群,