如何搭建基于大模型的智能知识库

news2024/10/7 13:51:00

自从2022年底ChatGPT横空出世引爆了大模型技术浪潮,时至今日已经一年有余,如何从技术侧向商业侧落地转化是一直以来业内普遍关注的问题。

从目前企业端观察到的情况来看,基于大模型的知识库是一个比较有潜力和价值的应用场景,能够帮助企业大幅提高知识的整合和应用效率。然而由于通用预训练大模型的训练数据主要来源于公开渠道,缺乏企业专业和私有知识,直接使用将难以支撑企业内部的专业知识问答。

通过重新训练或微调的方式可以实现知识扩充,但存在以下缺点:

  1. 需要的数据量大,训练代价高、周期长;

  2. 对于企业知识的快速更新无法及时响应;

  3. 对已有知识无法有效更新或删除;

  4. 大模型存在的“幻觉”问题。

RAG(Retrieval-Augmented Generation,检索增强生成)技术,能够在一定程度上解决以上问题。RAG,顾名思义,即通过引入存储在外部数据库中的知识以增强大模型的问答能力。具体来说,大模型在回答问题或生成内容前,首先在外部数据库中进行检索,将相似度高的内容返回给大模型再进一步整理生成。这种模式能够提高输出的准确性和相关性,避免大模型产生“幻觉”生成事实不正确的内容。RAG与LLM的集成正被迅速应用于构建知识库、聊天机器人以及其他大模型应用中。

本文将简要介绍基于RAG与LLM的智能知识库的搭建过程,并展示一些开源的知识库项目。

一、搭建过程

主要可以分为以下几个步骤。

1. 数据收集

若企业已有知识管理系统,后续可直接与原系统进行对接并进行下一步处理;对于相当一部分目前没有建设知识管理系统的企业,那么首先要做的是收集企业内部的各种知识数据,包括各种格式的文档数据,以及表格、图片、音频、视频等多模态数据等,用于后续与大模型进行交互。

2. 数据处理

2.1 数据清洗与预处理

了解机器学习建模的读者可能听过“garbage in garbage out”这句经典,数据清洗与预处理将对后续模型性能起到关键作用。

以最常见的文本类数据为例,一般的数据清洗与预处理包括去噪声,去除特殊格式、特殊字符、停用词、标点符号,以及进行词干化或分词以减少词汇量等。

2.2 文本分块

在RAG方法中,将大型文档分割成“块”(chunk)进行存储,一方面将有助于提高检索效率,另一方面通过基于特定“块”的上下文检索方法还能够在一定程度上弥补检索精度的不足。由此可见,分块的结果将直接影响最终的应用效果,因此选择合适的分块方法至关重要。

目前常用的文本分块的方法主要有如下几种:

  • 按字符数分割:根据设定分块的字符长度进行分割,这是最简单的分块方法,比较“傻瓜式”,对语义理解不足;

  • 按段落分割:结合文档的层次分级结构进行分割,对文档解析的能力要求较高,分割效果优于按字符数切割;

  • 按语义分割:需要结合模型能力对文档内容加以理解,并按语义进行分割和拼接,分割效果好,但是技术难度较大。

LangChain提供了很多文本分割工具,以下是一些示例:

  • RecursiveCharacterTextSplitter():按字符串分割文本,递归地尝试按不同的分隔符进行分割文本。LangChain默认使用该方法。

  • CharacterTextSplitter():按字符来分割文本。

  • MarkdownHeaderTextSplitter():基于指定的标题来分割markdown 文件。

  • TokenTextSplitter():按token来分割文本。

从目前观察到已产品化的分割模块来看,主要使用的方法还是按字符数和段落进行分割。选择按字符数分割,用户可定义分割的字符串长度以及分块后字符串的重叠长度;选择按段落分割,需要结合OCR能力方可实现。

2.3 微调数据格式统一

大模型或embedding模型的微调并非必需,如需进行微调,那么用于微调的数据需按照模型和任务要求进行格式统一。

以下示例由ChatGPT生成,可以直观地感受一下其中的差异。如:

文本分类任务

  • 输入格式: 通常是文本数据,可以是句子、段落或文档。

  • 标签格式: 标签通常是类别标识,可以是单一类别或多类别。

  • 样本格式示例:

Text                                  Label
"This is a positive sentence."        Positive
"Negative sentiment in this text."    Negative
"Neutral statement here."             Neutral

问答类任务

数据通常包括问题和相应的答案,当需要结合上下文信息理解问题语境时,通常还需要加上上下文信息,样本格式示例:

Context                                   Question                            Answer
"The Eiffel Tower is located in Paris."   "Where is the Eiffel Tower?"       "Paris"
"There are nine planets in our solar system, including Earth." 
                                         "How many planets are there?"      "Nine"
"William Shakespeare, a famous playwright, wrote 'Romeo and Juliet'." 
                                         "Who is the author of this play?"  "William Shakespeare"
"Guacamole is a popular Mexican dish made with mashed avocados." 
                                         "What is the main ingredient?"     "Avocado"

3. 建立向量索引

将文档分块以后,通常需要对每个分块建立索引用于后续的检索。

常见的建立索引的方法如下:

  • 链式索引:通过链表结构对文本块进行顺序索引。

  • 树索引:将文本块构建成具有层级的树状索引结构,检索时无需像链式索引一样按顺序查询。

  • 关键词表索引:从文档块中提取关键词,构建关键词和文档块之间的多对多映射,检索时金鱼关键词对文档块进行筛选。

  • 向量索引:将文本块映射成向量以后,通过相似度计算的方法进行查询。

其中,建立向量索引是当下最为流行的一种方法。首先,通过embedding模型将高维度的数据映射到低维空间生成向量表示,再对这些向量进行索引和搜索。

embedding模型需要根据任务的性质和输入数据的特点进行选择。以文本嵌入为例,早期的有Word2Vec、GloVe等模型,现在常用的有 Sentence Transformers、OpenAI的text-embedding-ada-002等。为了更好地匹配数据类型和任务性质,还需要对embedding模型进行微调处理。

为分块的文档生成向量表示后,通常采用相似度检索的方式进行查询,可以采用内积、欧式距离、余弦距离等方法,其中余弦距离最为常用。

在实际应用中,建立向量索引和查询存在以下需要考虑的问题,可能并不全面,提出来供大家讨论:

1、向量化以后的数据膨胀问题

2、大规模向量相似性检索的效率问题

4. 大模型选择与微调

目前已经开源的大模型项目有很多,如何选择适合的大模型,可结合任务类型、算力水平等因素综合考虑。

如果基础预训练大模型无法满足在特定任务上的应用要求,还需要对模型进行微调。目前常用的高效微调方法主要有LoRA、P- Tuning、Prompt Tuning等,能够以较低的数据量,以及算力和时间的投入取得较好的微调效果。

完成大模型微调以后,可以结合任务要求选择适合的公开数据集进行测评,以验证微调效果。

二、开源知识库项目

1. FastGPT

FastGPT是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景。项目地址:https://github.com/labring/FastGPT。

功能架构图如下。可以看到,FastGPT可接入多种LLM,将存入知识库的知识处理为QA对或问题的形式,向量化后存入数据库。对话时将提问内容向量化,在数据库中进行向量相似性搜索,将搜索到的内容发送给LLM进行输出。

应用FastGPT时,首先要创建一个知识库,在知识库中上传文档后自动生成QA对或分块,然后再创建一个对话式的应用并与创建的知识库相关联,这样大模型在回答时就能够应用到我们创建的知识库中的知识。

2. Anything LLM

Anything LLM是一个开源的企业智能知识库解决方案,能够通过聊天的形式,快速地获取曾经喂给它的任何信息。

目前可以通过https://useanything.com/免费试用。

使用步骤

  1. 选择使用的大模型:目前提供OpenAI,Azure OpenAI和Anthropic Claude 2三种大模型可供选择,后续的版本中将允许用户使用自己的大模型;

  2. 选择向量数据库:目前提供Chroma、Pinecone、Qdrant、Weaviate和LanceDB,默认使用LanceDB;

  3. 可定制界面和使用方式:用户可自定义logo;支持个人使用or团队使用,进行相关配置即可;

  4. 创建workspace:用于上传与LLM对话时需要用到的文档;上传的文档可以在多个workspace中进行复用。在workspace中可定义“temperature”这个参数,它主要影响LLM回答的随机性和创造性;此外,可以配置展示历史对话的个数,以及自定义对话的prompt。

  5. 进行对话:对话时大模型能够根据上传的文档进行回答,并展示引用的文档以及具体段落,确保回答可信可溯源。

3. LangChain-Chatchat

LangChain-Chatchat(原LangChain-ChatGLM),基于ChatGLM等大模型与LangChain等应用框架实现,是一款开源、可离线部署的RAG大模型知识库项目,能够解决数据安全保护、私域化部署的企业痛点。

实现原理如下图所示。过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的 top k个 -> 匹配出的文本作为上下文和问题一起添加到 prompt中 -> 提交给 LLM生成回答。

在最佳实践中推荐的模型组合如下,用户也可以根据需要自由选择,目前项目支持的大模型、向量数据库、开源embedding模型等非常丰富,可通过官方wiki进行查看。

LLM: Chatglm2-6b

Embedding Models: m3e-base

TextSplitter: ChineseRecursiveTextSplitter

Kb_dataset: faiss

结语

基于RAG与LLM的知识库作为目前最有潜力的企业端大模型应用之一,从技术角度可以看到,建设方案已经完备;从业务角度,最终的应用效果和业务价值还需要观察,并通过业务侧的反馈不断地促进建设方案的进一步优化,比如增加对多模态知识的处理能力等。让我们共同期待这类应用普及那一天的到来。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2194266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

落伍警告:不了解AI Agent,你可能会被编程界淘汰

AI Agent火爆到什么程度? OpenAI创始人奥特曼预测,未来各行各业,每一个人都可以拥有一个AI Agent;比尔盖茨在2023年层预言:AI Agent将彻底改变人机交互方式,并颠覆整个软件行业;吴恩达教授在AI…

UE5 武器IK瞄准系统

创建空项目 创建基础蓝图类My_GameMode,My_HUD,My_PlayChar,My_PlayController 项目设置地图模式 近裁平面 0.1 My_PlayChar蓝图中添加摄像机,角色骨骼网格体,武器骨骼网格体 编辑角色骨骼,预览控制器使用特定动画,动画选择ANM_ark-47-Idle hand_r 添加插槽WeaponMes…

Stable Diffusion绘画 | 如何做到不同动作表情,人物角色保持一致性(下篇)

在 人物角色保持一致性(上篇)中,我们已经得到了自己创造的角色的各个角度头像图片: 从中选择一个符合自己需求的角度,截图保存,例如下图: 更换人物表情 进入到「图生图」页面,把上一…

短视频时代,网站建设存在的意义还有多大?

在短视频时代,网站建设的存在意义依然具有多方面的价值和作用。尽管短视频作为一种新兴的传播方式迅速发展并受到广泛欢迎,但网站作为互联网的基础设施之一,仍然在许多领域发挥着不可替代的作用。以下是具体分析: 信息深度与完整性…

医院管理新思维:Spring Boot技术应用

5系统详细实现 5.1 医生模块的实现 5.1.1 病床信息管理 医院管理系统的医生可以管理病床信息,可以对病床信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 病床信息管理界面 5.1.2 药房信息管理 医生可以对药房信息进行添加,修改,…

开源项目带来的思考

分享一位在Hacker News上的一个帖子,该开源作者在Github上年收入达到10万美元,你不得不承认,个人开源项目的影响力还是很大的。 这条帖子讲述了一位Laravel的开发者,是如何在Github上做到年收入10万美元。该帖子一发布&#xff0c…

rust使用tokio

Rust 是一种系统编程语言,它强调安全、并发和高性能。tokio 是一个基于 Rust 的异步运行时库,专门用于构建异步应用程序。使用 tokio 可以轻松地管理异步任务,并实现高效的并发。 添加依赖: cargo add tokio -F full 示例: 示例1: fn main() {let rt = tokio::runti…

RabbitMQ事务模块

目录 消息分发​​​​​​​ 负载均衡 幂等性保障 顺序性保障 顺序性保障方案 二号策略:分区消费 三号策略:消息确认机制 四号策略: 消息积压 RabbitMQ集群 选举过程 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,要么全部成功,要么全…

软件设计师:03操作系统原理

文章目录 一、操作系统地位图二、前趋图(PV操作)三、移臂调度算法(1)最短移臂调度算法(2)先来先服务(3)最短寻道时间优先(4)扫描算法或电梯调度算法&#xff…

大模型~合集8

我自己的原文哦~ https://blog.51cto.com/whaosoft/11566472 # From r to Q∗ 这就是OpenAI神秘的Q*?斯坦福:语言模型就是Q函数 近日,斯坦福大学一个团队的一项新研究似乎为这一研究方向的潜力提供了佐证,其声称现在已经取得非…

【Linux-基础IO】磁盘的存储管理详解

磁盘的存储管理 由于一个磁盘中包含了大量的扇区,为了方便管理,我们对磁盘进行了分区,其中每个分区又进一步划分为多个块组(Block Group),每个块组中包含该块组的数据存储情况以及具体的数据 假设有一个8…

分层解耦-01.三层架构

一.对案例的思考 所有的代码都在这一个controller文件中,虽然该代码不复杂。但是如果针对大型项目,代码会很复杂。而且不利于项目的维护,复用性差。因此要修改该代码,使其满足维护方便,复用性好的特点。因此要用到一个…

VMware ESXi更改https的TLS协议版本

简要概述 TLS 1.0 和 1.1 是已弃用的协议,具有广为人知的缺点和漏洞。应在所有接口上启用 TLS 1.2,并在支持的情况下禁用 SSLv3、TL 1.1 和 1.0。强制要求 TLS 1.2 可能会破坏 vSphere 的第三方集成和加载项。在实施 TLS 1.2 后仔细测试这些集成&#x…

游戏报错x3daudio1_7.dll缺失怎么回事?总结几个有效解决方法分享

1. x3daudio1_7.dll 简介 1.1 定义 x3daudio1_7.dll 是一个动态链接库(DLL)文件,它与 Microsoft DirectX 音频组件紧密相关。该文件主要负责处理三维(3D)音频效果,提供给游戏和多媒体应用程序以增强用户体…

HDLBits中文版,标准参考答案 | 3.1.2 Multiplexers | 多路复用器

关注 望森FPGA 查看更多FPGA资讯 这是望森的第 9 期分享 作者 | 望森 来源 | 望森FPGA 目录 1 2-to-1 multiplexer | 2 对 1 多路复用器 2 2-to-1 bus multiplexer | 2 对 1 总线多路复用器 3 9-to-1 multiplexer | 9 对 1 多路复用器 4 256-to-1 multiplexer | 256 对 …

CPU、GPU、显卡

CPU VS GPUCPU(Central Processing Unit),中央处理器GPU(Graphics Processing Unit),图形处理单元GPU 的技术演变CUDA(Compute Unified Device Architecture) 显卡(Video…

【数据结构与算法】Greedy Algorithm

1) 贪心例子 称之为贪心算法或贪婪算法,核心思想是 将寻找最优解的问题分为若干个步骤每一步骤都采用贪心原则,选取当前最优解因为没有考虑所有可能,局部最优的堆叠不一定让最终解最优 贪心算法是一种在每一步选择中都采取在当前状态下最好…

华为OD机试 - 冠亚军排名(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

Electron桌面应用打包现有的vue项目

1 环境准备 Node:v16.20.2(本地vue项目nodejs版本)Electron:22.3.7vue:2 版本管理 2 Vue项目准备 更新相关依赖npm install --registry https://registry.npmmirror.com/npm run dev 3、引入Electorn 安装指定版…

基于C语言的排序

排序的概念 : 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录&#xff0c…