最近在工作中构建了一套自动的基于文档中心为数据集构建知识库 AI 问答的系统,来提升用户体验和技术支持效率,分享一下在实现过程中的技术选型和架构设计。

背景

先说下背景,我们公司的产品 FinClip 是做小程序全套解决方案的。我们有一个文档中心 https://finclip.com/mop/document/ ,里面几乎存储了我们大部分的面向客户的文档。

所以在构建知识库的时候,我们有以下的数据源

  1. 文档中心的文档 https://finclip.com/mop/document/
  2. 在社区交付过程中,交付整理的问题 QA
  3. 售前和销售在和客户阐述方案的时候,腾讯会议纪要

实现效果

实现效果侧还是还对比较简单,对于用户而言在我们的管理后台实现了一个聊天框,能够回答整个系统内的基本所有的问题,只要数据集有涉及到的

整体架构设计

整个基于 RAG 实现的AI 问答的链路,主要包含以下几个核心部分:

  • 文档中心Gitlab仓库:基于 Gitlab 管理所有技术文档

    • CI Pipeline:在文档中心的文档负责文档更新的自动化处理流程
  • LLM Service:大语言模型服务层,负责文档理解和问答生成,此处会针对源文档进行一次 QA 的拆分
  • FastGPT:向量数据库和知识检索服务
  • 用户交互层:提供统一的问答接口

这种设计带来几个明显优势:

  1. 文档更新自动化,确保知识库实时性
  2. 服务解耦,便于独立扩展和维护
  3. 分层处理提升系统可靠性

文档处理流程

文档处理是整个系统的基础,我们的处理流程如下:

  1. 文档变更触发:通过 Gitlab CI 监听文档更新
  2. 自动化处理:CI Pipeline 自动执行以下步骤:
    • 检测文档增量更新
    • 提取文档内容
    • 进行 QA 拆分,生成问答对
    • 推送到知识库

这个流程确保了知识库能够及时反映最新的文档内容,无需人工干预。

知识库技术选型

在知识库方案选型时,我们主要对比了 FastGPT 和 RAGFlow:

FastGPT 的优势:

  • 开箱即用的向量检索能力
  • 良好的社区支持
  • 简单的部署维护
  • 内置的文本分块策略

Embedding 和 Rerank

我们的向量检索策略采用:

  1. 使用 embedding 模型将文本转换为向量
  2. 通过 ReRank 优化搜索结果相关性
  3. 动态调整检索阈值,平衡召回率和精确度

最终的流程图如下

AI 问答实现

问答系统的核心流程:

  1. 知识检索

    • 用户提问向量化
    • 在知识库中检索相关内容
    • 通过 Rerank 筛选最相关片段
  2. 答案生成

    • 将检索内容作为上下文
    • 通过 LLM 生成自然、准确的回答
    • 添加引用来源,提升可信度
  3. 质量保证

    • 答案相关性评分
    • 兜底策略处理
    • 用户反馈收集

RAG实践 - AI 知识库问答功能的建设的更多相关文章

  1. 简易版AI英文问答程序解决

    第四章的作业和实践题要论印象深刻无疑就是AI的那道题了.不得不说一开始看到题目的时候,我真的蒙了很久. 本题要求你实现一个简易版的 AI 英文问答程序,规则是: 1.无论用户说什么,首先把对方说的话在 ...

  2. AI智能问答助手 AI智能批量文章生成器 网站优化SEO批量内容生成工具 原创文章生成软件

    <AI智能问答助手>   软件基于当下热门的OpenAI的ChatGPT技术,导入问题列表就可以批量生成对应的内容,内容质量高.原创度高.适合对内容生成需求量大的场景,如网站优化.广告文案 ...

  3. 全网最详细中英文ChatGPT-GPT-4示例文档-官网推荐的48种最佳应用场景——从0到1快速入门AI智能问答应用场景(附python/node.js/curl命令源代码,小白也能学)

    目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...

  4. UWP开发之Template10实践二:拍照功能你合理使用了吗?(TempState临时目录问题)

    最近在忙Asp.Net MVC开发一直没空更新UWP这块,不过有时间的话还是需要将自己的经验和大家分享下,以求共同进步. 在上章[UWP开发之Template10实践:本地文件与照相机文件操作的MVV ...

  5. AI的新增功能(定义图案)(描边渐变)(图像描摹)5.1

    1.定义图案:打开一个AI素材文件如图: 选择工具拖拽选择这个图案,选择“对象”“图案”“建立”完成图案的建立 此时会弹出图案选项对话框,改变拼贴类型,图案宽高,份数,不透明度,单击"完成“ ...

  6. redis实践:用户注册登录功能

    本节将使用PHP和Redis实现用户注册登录功能,下面分模块来介绍具体实现方法. 1.注册 需求描述:用户注册时需要提交邮箱.登录密码和昵称.其中邮箱是用户的唯一标识,每个用户的邮箱不能重复,但允许用 ...

  7. Ceph 12.2.0 实践osd 智能分组功能

    以前我们需要对ssd和hdd进行分组的时候,需要大量的修改crush map,然后绑定不同的存储池到不同的 crush 树上面,现在这个逻辑简化了很多.以上是官方宣传听起来很不错等到12.2.0稳定版 ...

  8. 新书:《Liferay Portal 6.1最佳实践门户网站建设》

    新书:<Liferay Portal 6.1最佳实践门户网站建设>   <Liferay Portal 6.1门户站点建设最佳实践>是国内第一本全面介绍Liferay Port ...

  9. 苏宁基于Spark Streaming的实时日志分析系统实践 Spark Streaming 在数据平台日志解析功能的应用

    https://mp.weixin.qq.com/s/KPTM02-ICt72_7ZdRZIHBA 苏宁基于Spark Streaming的实时日志分析系统实践 原创: AI+落地实践 AI前线 20 ...

  10. Vue项目实践中的功能实现与要点

    本贴记录项目实践中,各种功能的实现与技术要点,均有待改进. 路由切换的时候,显示loading动画 目前方案是: 在每个页面都手动装载一个loading组件组件的显示依赖vuex里面的一个值 , 在r ...

随机推荐

  1. Johnson全源最短路:负权化正权,最后减去势能差

    Johnson全源最短路:负权化正权,最后减去势能差 (1)建虚点0,add(0,i,0),跑st=0的单源最短路hi (2)e[i].w+=h[u]-h[v] ​ Q:为何这样不会得到错误答案? ​ ...

  2. Clickhouse入门及实践

    ClickHouse安装 采用doker安装测试: 拉取服务端 docker pull yandex/clickhouse-server 拉取客户端 docker pull yandex/clickh ...

  3. 13-2 c++拷贝控制和资源管理

    目录 13.2.1 行为像值的类 类拷贝赋值运算符的编写 13.2.2 定义行为像指针的类 引用计数 定义一个使用引用计数的类 为了定义这些成员,我们首先必须确定此类型对象的拷贝语义.一般来说,有两种 ...

  4. Codeforces 2023/2024 A-H

    题面 A B C D E F G H 难度:红 橙 黄 绿 蓝 紫 黑 黑 题解 A 题目大意: 输入 \(a\),\(b\),解不等式 \(b - 2x \le a - x (0 \le x \le ...

  5. 4G模组软件指南 | 必读篇之模块信息(hmeta)

    今天我讲解的这篇关于4G模组软件的模块信息属于必读篇,望珍惜! 1.模块信息概述 模块信息是每一个模块携带的信息,就像人的身份证一样,这些信息确定了模块的唯一性; 包含设备唯一id,硬件型号,模组的硬 ...

  6. Air780E如何发送SMS?一文详解!

    ​ 今天一起来学习使用合宙低功耗4G模组Air780E发送SMS短消息: 一.SMS简介 SMS(短消息服务,ShortMessageService)功能主要用于在蜂窝网络中传输短消息. 在4G网络中 ...

  7. 微信小游戏sdk接入支付和登录,解决了wx原生不支持ios支付的痛点

    前情提要 微信小游戏是小程序的一种. 项目接入微信小游戏sdk的支付和登录.主要难点在于接入ios的支付.因为官方只支持android, 不支持ios. 即ios用户不能直接在小游戏中发起支付,参考市 ...

  8. 秒懂Java为什么只有值传递

    在Java语言中,数据类型分为基本数据类型和引用数据类型. 基本数据类型(如int.double.char等)的值直接保存在栈上.这些类型的变量在栈内存中有固定的大小,并且值是直接存储在这些变量中的, ...

  9. Git之message提交

    作用 编写格式化的 commit message 能够大大提高代码的维护效率. 比如: 可以提供更多的历史信息,方便快速浏览: 可以过滤某些 commit(比如文档改动),便于快速查找信息: 可以直接 ...

  10. Linux之查看开放端口

    在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型.物理端口指的是物理存在的端口,如ADSL Modem.集线器.交换机.路由器上用 于连接其他网络设备的接口,如RJ-45端口.SC端口等等 ...