基于语义检索的知识问答(RAG范式)
知识驱动型AI应用场景
知识驱动型AI应用场景式企业级AI智能体的常见抓手。该类型的场景能充分利用大语言模型的自然语言处理能力,相对独立的提供全新的用户体验。落地该场景,可以在有限的预算内大幅提升企业用户对AI技术的信心。
核心原理
知识驱动型场景对应的是知识驱动型AI智能体,其核心是知识库(注意与传统的基于全文检索的知识库做区分)。知识库类似于数据库管理软件,只不过这里的数据换成了相对静态的知识,查询也从等于、不等于、大于、小于、包含等明确的查询条件,变成了基于语义近似性的模糊查询。如在数据库管理软件中,我们无法通过“喵喵”查询到包含有“猫猫”的记录;但在知识库中,这两词因为存在一定的语义相似性,就可以被查询到了。这种查询之所以能够实现,是因为它将文本(也可以是图片、视频、语音等多模态文件,但目前效果最好、最常用的是文字)转换为了多维向量(也称矢量),通过计算向量的距离,就能找到在语义上最接近的匹配值了,整个过程如图1所示。
凭借着语义相似性分析能力,知识库大幅扩充了“检索”的范围,从精确匹配变成了更智能的匹配方式,从而为用户带来了更多新体验,催生出了更多知识驱动型AI场景。
典型场景
典型的知识驱动型场景有:
- 知识问答:通过输入文字(或语音转文字)的方式,查询相关的知识内容
- 文本合规:通过输入大段文本,检查其与相关知识内容的匹配程度
通常不被纳入知识驱动型的场景有:
- 图片识别:如基于计算机视觉的生产缺陷检查,此类场景推荐采用判别式AI(特定领域的小模型)实现
- 智能问数:如通过输入文字从数据库中查询高实时性的数据,此类场景推荐采用Text2SQL等范式实现,必要时可引入一个或多个知识驱动型AI智能体承担同近义词分析功能(类似知识问答)
- 实用技巧:规则越模糊,知识驱动型AI越容易获益;规则清晰到满足IFTTT(如果这样就那样),直接将其固化为软件通常是更高效的方案。
RAG模式
知识库通常采用检索增强生成(RAG)范式来实现,如图2所示,技术相对成熟。
(图2 RAG的基本流程)
在RAG中,我们可以将知识库分为两大板块,分别为知识库的构建和知识库的使用(图2中粉色现况中的区域),先构建再使用。
核心功能与技术原理:构建
- 原始知识切片:按照知识源文件(包含有特定领域知识的一个或多个文件、网页或数据库中的记录)中内容本身的结构,将其拆解为多条包含有id、文本(仅包含文本内容)、原始内容(包含有文本、图片、音视频等格式的原始记录)和排序权重(质量更高的知识,初始权重通常更高一些)的数据记录并存入关系型数据库,每一个记录通常是存储在数据库中的一行。
- 向量生成:利用向量生成领域的专用大模型(如阿里云百炼的“通用文本向量-v4”),将知识切片中的文本转换为向量(形式为float数组),即文本向量化
- 存入向量库:将向量和对应的数据记录id一起存入专门的向量数据库中
核心功能与技术原理:使用
- 用户查询向量化:类似于构建版块,我们需要将用户输入的文本(或语音转的文字)采用同样的方法转换为向量
- 向量查询:使用上一步转换的向量在向量数据库中查询,获取符合要求(向量距离不超过阈值、总数量不超过阈值)的若干个id
- 文本召回:使用这些id,在文本切片的数据库中查询对应的文本、原始内容和权重
- 重新排序:利用重排序领域的专用大模型(如阿里云百炼的“深度文本重排序”),基于用户输入的原始文字,对文本召回的文本或原始内容进行重新排序。在排序过程中,也可以加入更多预设规则,如针对数据库中存储的权重对专用大模型返回的结果进行二次调整
- 生成最终答案:将排序后的原始内容拼接到提示词模板中,与用户输入的文字一起交给大模型,接收AI的返回结果
- 展示结果:在结果展示阶段,知识驱动场景通常需要在展示AI返回结果的同时,展示相关的知识片段,即原始内容,提升可解释性,满足用户需求。
向量数据库选择
向量数据库不同于传统数据库,需要提供包括向量距离计算、排序、检索等功能。目前主流的向量数据库有独立运行的Qdrant,类似于MySQL,在独立的进程中运行,可以部署到应用服务器以外,更方便扩展;嵌入式运行的Faiss,类似于Guava Cache,运行在当前进程的内存中。前者通常适用于对扩展性和性能上限要求高的互联网场景;后者因为部署更简单,更适用于企业场景。
此外,如果预算充裕、合规性要求相对较弱,采购云平台提供的SaaS版向量数据服务(如阿里云的“向量检索服务 DashVector”)也是一种常见的做法。
多模态向量融合 vs 仅采用文本向量
2025年夏,多个厂家已经推出了支持多模态的向量生成专用大模型(如阿里云百炼的“通用多模态向量”),可以将文本与图片一同生成向量。但从实际测试效果上看,针对文本生成的向量与针对图片生成的向量间存在较大差异,如果一个矢量库中同时有两种来源的向量,两者的向量距离并不能做横向对比,这对于整个知识库的表现将带来更大的不确定性。
基于当前的技术水平,我们不推荐在同一个知识库中同时包含图片向量和文本向量。而是建议采用图片理解领域专用大模型(如阿里云百炼的“通义千问VL-Plus”)先将图片转为文字后,再将其融入某个知识切片或作为单独的知识切片处理。
技术限制
该类型场景的实际落地效果主要受知识质量的影响,排序等策略也会存在一定的优化空间,但通常不会成为主要因素。
高质量的知识通常具备以下特征:
- 结构化强:知识有明确的“章节”特征,相关性强的内容聚集在一起,而不是分散在多处。
- 文字化程度高:知识以文字为主,如果涉及到图片或视频,均配套了详细的说明文字,对其进行介绍。
- 无歧义、无冲突:文字表达精确,上下文完整。在同一个领域(知识库)内,经过人工检查,没有明显的歧义或冲突内容。
为了快速提升知识的质量,常见的做法如下:
- 领域细分:根据业务实际情况,将一个知识库拆分为若干个知识库,从而降低发生冲突的风险。尽量避免多领域的知识混在在同一个知识库中,是提升知识质量最简单有效的方案。不过这通常意味着用户需要在使用问答前选择一个或多个领域,体验上大一些折扣,互联网服务通常不会做出这种妥协,但企业软件中这是常态,因为企业中的知识和场景天生具备较强的领域性。
- 知识治理:投入人力对知识进行梳理和校对,在原始知识切片的基础上,对切片中的文本和原始内容进行修改,避免歧义和冲突。该项工作通常作为数据治理项目的一个环节,由专门的公司或团队完成,属于技术含量较低的人力密集型工作。
- 人工扩充:在知识治理过程中,对于缺失的知识内容,可人工进行扩充。需要注意的是,扩充的知识仍然需要满足对知识的质量要求,通常会安排在知识治理工作之前完成。
- 实时反馈:主要应用在知识问答场景。与人工扩充类似,在使用的过程中,允许用户对AI返回的结果进行打分,对于哪些用户认可的回答,可将其以“问答对”的形式纳入知识库中,实现常用常新的效果。这种模式下,通常需要配套定期的人工检查机制,确保这些新纳入的问答对是正确、有效的。互联网服务中不推荐这么做,因为我们无法约束和管理用户的行为,可能会出现恶意注入低质量知识的风险;企业软件中,因为记录存在可追溯性,在管理制度的保障下,通常会达到预期的效果。
活字格的技术实现
为了充分展现RAG范式下的知识驱动型AI场景落地,我们使用活字格低代码开发平台构建了一个相对完成的知识库Demo和两个配套的智能应用,架构如图3所示。全部模块,包含知识库均采用活字格实现,无需编码开发。
(图3 活字格知识库Demo架构简图)
方案设计
本方案针对企业中最常见的规章制度类场景设计,具有以下设计特征:
- 向量数据库采用嵌入式方案,Faiss
- 文本切片调用兼容主流大模型,如百炼qwen-turbo-latest
- 向量模型采用百炼通用文本向量-v4(支持单纯文本向量,暂不支持多模态向量)
- 文本重排采用百炼深度文本重排序
- 大语言模型兼容主流方案,如百炼qwen-max-latest
- 权限控制(用户)基于活字格内置的RBAC权限方案
- 不提供AI自动扩增,不会基于文本切片生成问答对(通常适用于知识质量较高的场景)
- 支持基于反馈的自动扩增,用户点击“有用”后自动将当前会话,以优选问答的名义添加到知识库(通常适用于企业级场景)
- 对知识库维护,含自动扩增,实时生效
本方案中不包含,但通常需要提供的设计有:
- 将PDF/Word等格式的问题抽取为富文本(包含但不限于md格式或html格式)和文本(由图片理解服务,如百炼“通义千问VL-Max”生成图片的描述信息)
- 支持将富文本(md、html等格式的图片文字混排)作为“原始内容”进行展示
- 根据预设的权重优化“重排序”
技术实现
接下来,我们将按照模块,逐个介绍关键技术实现在活字格工程中所在的位置。
(图4 活字格中实现的知识库示例)
知识库
从知识库中查询:服务端命令【query_with_rerank】,完整的知识库查询接口,接收需要查询的知识库ID(每个领域的知识存放在单独的知识库中,如需跨领域查询,可用逗号分隔)和用户查询文本,返回排序后的知识内容,含类型(文本切片/优选问答)、id、原始内容、访问该原始内容的URL(配套知识展示页面使用)。
从知识库中查询(单一知识库、未重排):私有服务端命令【query】,查询功能集中在本服务端命令,包含RAG范式下 “用户查询向量化”、“向量查询”、“文本召回” 三个环节,以及作为基础的向量索引的加载、权限控制等功能。RAG范式的 “重新排序” 环节放在【query_with_rerank】中,以实现跨领域查询时的重排效果。
知识库维护侧
- 前端管理界面:页面下【知识库维护】文件夹中各页面,包含了知识库的创建、重命名与标记删除、知识库权限设置、文本切片的增删改查与重建、优选问答的删除与重置等功能。
- 后端业务逻辑:逻辑下【知识库】文件夹中除【query】外的各服务端命令,承载了前端管理界面的全部业务逻辑。
智能应用侧(知识问答)
- 后端:逻辑下【知识问答】服务端命令。在该服务端命令中,先通过调用【query_with_rerank】从知识库中查询到排序后的相关知识,再通过“AI助手命令”完成RAG范式中的 “生成最终答案” 环节,对数组对象的形式返回。
- 前端:页面下【知识问答】页面、【show-evidence】页面和组件下全部组件,完成RAG范式中的 “展示结果” 环节,包括对话中展示摘要信息,并提供对应的“查看相关内容”按钮,展现知识库的原始内容。
- 优选问答:页面下【AI用-详情页按钮】组件中提供“有用”按钮,页面下【知识问答】页面中AI用-对话框组件的“点击有用”事件处理器中,通过调用【添加问答记录到知识库】服务端命令完成自动扩增。
智能应用侧(销售合同审核)
- 后端:逻辑下【销售合同合规检查】服务端命令。在该服务端命令中,先通过调用【query_with_rerank】从知识库中查询到排序后的相关知识,再通过“AI助手命令”完成RAG范式中的 “生成最终答案” 环节,以JSON文本的形式返回。
- 前端:页面下【销售合同合规检查】页面、【show-text】页面和组件下全部组件,完成RAG范式中的 “展示结果” 环节,包括在右侧检查结果图文列表中展示摘要信息,并提供对应的“查看详情”按钮,展现知识库的原始内容。
效果展示
基于语义检索的知识问答(RAG范式)的更多相关文章
- CVPR2020论文解析:视频语义检索
CVPR2020论文解析:视频语义检索 Fine-grained Video-Text Retrieval with Hierarchical Graph Reasoning 论文链接:https:/ ...
- Java 多线程 | 并发知识问答总结
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
- JVM虚拟机知识问答总结(简单复习,快速回忆!)
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
- Android View相关知识问答
Android View相关核心知识问答 Activity Window View之间的三角关系 你真的了解View的坐标吗? 在渲染前获取 View 的宽高 5种手势工具类 浅析Android的窗口
- 从基于 SQL 的 CURD 操作转移到基于语义 Web 的 CURD 操作
中文名称 CURD 含义 数据库技术中的缩写词 操作对象 一般的项目开发的各种参数 作用 用于处理数据的基本原子操作 它代表创建(Create).更新(Update).读取(Retrieve) ...
- 基于语义感知SBST的API场景测试智能生成
摘要:面对庞大服务接口群,完备的接口测试覆盖和业务上下文场景测试看护才有可能保障产品服务的质量和可信.如果你想低成本实现产品和服务的测试高覆盖和高质量看护,这篇文章将为你提供你想要的. 本文分享自华为 ...
- 基于pyecharts的中医药知识图谱可视化
基于pyecharts的中医药知识图谱可视化 关键词: pyecharts:可视化:中医药知识图谱 摘要: 数据可视化是一种直观展示数据结果和变化情况的方法,可视化有助于知识发现与应用.Neo4j数据 ...
- NeurIPS 2022:基于语义聚合的对比式自监督学习方法
摘要:该论文将同一图像不同视角图像块内的语义一致的图像区域视为正样本对,语义不同的图像区域视为负样本对. 本文分享自华为云社区<[NeurIPS 2022]基于语义聚合的对比式自监督学习方法&g ...
- 大数据基础知识问答----spark篇,大数据生态圈
Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...
- BW知识问答汇总
什么是sap的星型结构,能不能详细讲解一下? Cube的星型结构中SID技术的优点有哪些? 什么是BW的星型结构,与传统的星型结构的区别是什么? SAP的星型结构相对于传统的星型结构优势? Cube与 ...
随机推荐
- mongodb删除某个字段
如下 db.yourcollection.update({ "需要删除的字段": { "$exists": true } }, { "$unset&q ...
- DELPHI 检测服务器地址是否有效
利用DELPH 的ICMP控件检测服务器地址 function CheckNetServer():Boolean; begin IdIcmpClient1.Host := '192.168.1.230 ...
- Golang 语言学习路线
学习Go语言是一个很好的选择,它具有高效的编译速度.强大的并发支持和简洁的语法.适用于初学者的Golang学习路线: 1. 学习基础: 安装Go:从官方网站下载并安装Go语言的最新版本. Hello, ...
- Ubuntu24使用Wine运行Windows程序安装微信
Ubuntu24使用Wine运行Windows程序安装微信 2024.11.8:好消息!微信发布Linux版本了,微信主站Linux版本客户端下载页面:https://linux.weixin.qq. ...
- 学习FASTAPI
弯弯曲曲的学习之路 学了那么多语言,都是半途而废.包括java,Javascript,go,php,ruby等等乱七八糟. 除了c的自由和pascal的优美,FoxPro简单,其他都似懂非懂入不了法眼 ...
- [.net core] 创建和发布NuGet包 (dotnet CLI)
[原文] :https://docs.microsoft.com/zh-cn/nuget/quickstart/create-and-publish-a-package-using-the-dotne ...
- shell子字符串截取
http://c.biancheng.net/view/1120.html Shell 截取字符串通常有两种方式:从指定位置开始截取和从指定字符(子字符串)开始截取. 从指定位置开始截取 这种方式需要 ...
- FastAPI数据库集成与事务管理
title: FastAPI数据库集成与事务管理 date: 2025/04/18 00:15:34 updated: 2025/04/18 00:15:34 author: cmdragon exc ...
- 前端速成之路——html、css
项目一知识点 单表视图列表 标题标签 <h1>用户注册</h1> 分割线与换行 <hr> <br> 表单提交 get:通过浏览器地址栏传递值 post: ...
- 45分钟从零搭建私有MaaS平台和生产级的Qwen3模型服务
今天凌晨,阿里通义团队正式发布了 Qwen3,涵盖六款 Dense 模型(0.6B.1.7B.4B.8B.14B.32B)和两款 MoE 模型(30B-A3B 和 235B-A22B).其中的旗舰模型 ...