danghl
作者danghl·2024-04-18 11:12
软件架构设计师·icfcc

基于开源大模型快速构建本地知识库应用

字数 12675阅读 932评论 2赞 2
【摘要】作为新一代人工智能产业的核心动力, AI大模型广泛 应用于各行各业 ,打开 了 迈向通用人工智能的大门 。本文通过大模型相关技术背景、构建需求、实现原理、模型选型及工程实践等方面介绍了如何 基于开源大模型快速构建本地知识库应用 。通过分析大模型应用的存在的问题,提出并详细描述了知识库构建思路及RAG技术路线应用的解决方法,最后,基于 LangChain-Chatchat 工程实现,为快速构建本地知识库应用提供了一种有效的解决方案。
【作者】党宏雷,某银行软件开发中心研发部架构师,十余年系统建设及架构设计从业经验,涉及军事指挥、企业应用、公共安全等业务领域,目前主要负责金融大数据分析及人工智能技术应用相关的产品建设、方案设计和技术研究等工作。

1. 知识库构建需求

1.1. 大模型应用及问题

自 ChatGPT 面世 以来 ,大语言模型技术凭借其记忆、推理、逻辑理解、内容及代码生成等能力在人工智能应用场景中越来越重要。大模型的通用性和泛化能力也逐渐成为了赋能各行各业变革创新的关键,而大模型应用过程中也存在缺乏专业知识、出现幻觉信息、数据时效延迟等问题,如处理需要特定领域专业知识的任务时大语言模型可能表现不佳,在生成结果时出现偏离事实的内容信息或给出已经过时的答案等。
针对以上问题,目前可以通过预训练、模型微调和外挂知识库等方式进行优化和改善,其中使用预训练和模型微调,均会涉及较高的计算资源和时间消耗,产生训练成本的同时,知识信息无法在模型内进行及时更新。而外挂知识库是一种低成本的实现方式,能够通过 利用本地专业知识, 将 高质量的数据信息加工为知识库 , 再由大模型完成检索召回 与 总结生成,辅助各行各业实现专业知识精准 问 答。 大模型技术源于自然语言处理领域,最擅长自然语言处理,最成熟的应用场景是知识问答和写作生成,而通过与专业业务知识库的结合,是大模型应用落地实践的核心方案。

1.2. 数据挖掘和价值利用

知识库( Knowledge base)是 通过相 关领域知识的采集、整理及提取 , 用于知识管理的一种数据库 。早期的知识库以纸质文档为主,对于检索和更新使用非常低效,且随着时间的推移,文件的数量逐渐庞大,纸质文档常年缺乏维护损坏后也无法产生有效的价值。进入信息时代,文档管理逐步电子化,存储到计算机系统中对文档进行管理,很大程度上便捷了使用,但都是孤立存储的,没有建立文档知识的关系,缺乏相关知识的联动。
云计算和大数据推动了一系列人工智能技术的落地和发展,使人们从信息时代迈入了智能时代。但由于大数据本身存在的非结构化、非标准化、缺少 语义关联、缺乏领域知识、质量不高等问题 。为充分 挖掘和利用大数据的价值 , 除了依赖领域相关的标准、规范、指南以外,更重要的是 专业 领域知识的支撑 ,通过 充分理解数据语义 , 实现大数据的语义共享和语义集成 ,进 一步实现对大数据的精准 和 精细分析 ,建立完善的数据知识利用。

1.3. 语义知识检索

知识搜索和推荐是知识库中很重要的一部分, 也是用户使用知识库 中 最常规的入口。传统的搜索和推荐功能主要是基于关键词匹配和统计模型,因为缺乏对用户搜索语义的理解,有时无法准确识别用户的意图。而基于语义的知识搜索和推荐功能,可以更好地捕捉用户的真实意图,从而为用户提供更准确、更智能的知识搜索和推荐服务。 使用词向量技术是这个场景中一个较为常见 的方案。通过预训练的词向量模型,把用户的查询转化为词向量,然后利用向量之间的相似度来查询知识库中相似的内容,从而得到相近语义的搜索结果 。
使用大语言模型则是这一场景下更为智能的 解决方案。大语言模型拥有的语义理解能力,可以将用户的查询转化为更准确的语义表示,经过与知 识库中的内容进行匹配后, 获得最接近使用者意图的知识。当用户在系统中有其他学习和搜索行为时,大语言模型还可以通过这些信息学习用户的偏好,从而为其推荐相关的知识 。

2. LLM大模型概述

2.1. 人工智能发展历程

人工智能( Artificial Intelligence,AI)技术自20世纪50年代诞生以来,已经成为一门引领未来的综合性高技术学科。它在多个领域大放异彩,如大数据分析、自动驾驶、智慧金融和智能机器人等。其发展历程经历了初级期、发展期、低谷期、进步期和繁荣期。艾伦·图灵的图灵测试为人工智能的定义奠定了基础。在初级期和发展期,人工智能技术初步发展,移动机器人Shakey和聊天机器人Eliza相继诞生。在低谷期,人工智能遭遇发展瓶颈,受限于计算机的内存和处理速度 ,进展缓慢。进入进步期, IBM的“深蓝”超级计算机击败了国际象棋世界冠军,为人工智能的发展带来了重大突破。如今互联网技术的飞速进步, 使 人工智能以大数据和神经网络为标志进一步走向实用化,并在各个领域取得了显著进步,直到ChatGPT的发布更是将AI的应用推向了新的高度。

2.2. Transformer算法出现

随着人工智能技术的不断进步,自然语言处理( NLP)领域也迎来了巨大变革 。 Transformer模型算法由谷歌研究团队 在 2017年的论文《Attention Is All You Need》中提出 ,该算法完美的解决了 RNN与CNN在处理长序列文本时的缺陷 ,补齐了传统 RNN在NLP领域中的诸多短板,其多种衍生模型在NLP任务上表现出色。 除强大的特征提取能力外, Transformer的自注意力结构在多类型数据模式对齐上也同样表现优秀,为处理文本、语音、图像、视频等多类型数据融合问题提供了新思路。
Transformer模型采用了自注意力(Self-Attention)机制,实现了对序列中每个位置的元素进行关联和依赖建模 , 这种机制使得模型能够更好地捕捉句子中的上下文信息,从而提高了模型的性能。
Transformer模型结构

Transformer模型结构

模型主要由两部分组成:编码器( Encoder)和解码器(Decoder)。编码器负责将输入序列转换为固定长度的向量表示,而解码器则根据这些向量生成输出序列。在每个编码器和解码器中,都包含多个自注意力层和前馈神经网络层。自注意力层通过计算输入序列中每个位置的元素之间的相关性得分,得到一个注意力权重矩阵。然后,将这个矩阵与输入序列相乘,得到加权后的表示。这种机制使得模型能够关注到输入序列中重要的部分,从而提高了模型的性能。前馈神经网络层则是一个简单的全连接神经网络,用于对自注意力层的输出进行进一步的处理。
由于 Transformer的出现,推动了 自然语言处理( NLP ) 领域的发展 ,许多先进的模型都是在它 的基础上进行了改进和优化 。这其中就包括 OpenAI 在 2022年 发布的 ChatGPT ,它基于 GPT-3框架,其能力在于生成和理解自然语言 。通过深度学习和大规模数据训练, ChatGPT能理解复杂的人类语言,并生成具有连贯性和创造性的回应 。

2.3. 大模型技术的应用

同以往的人工智能模型比较,大语言模型在参数量上呈现了质的飞跃,提升了其在复杂任务的建模的整体能力,包括:
(1) 学习能力增强,能够 应对更复杂的任务;
(2) 泛化能力加强, 以实现更广泛的适用性;
(3) 鲁棒性提高,提高实际应用的可靠性和适用性;
(4) 更高层次认知的能力,可模拟人类等。
基础大模型具有理解、生成、逻辑推理、自然语言处理、多模态等通用的底层能力,可以应用于不同的业务领域和场景需求,但缺少专业领域的知识和优化。行业大模型则是针对 特定行业 进行 知识训练和优化的大模型,如金融、医疗行业模型等。应用大模型 是 根据 具体场景进行专项训练和提升 , 如智能客服、推荐等 。一般情况下,规模越大的模型,其能力也更强,但选择商业模型调用或开源模型部署的成本也会更高。行业或场景应用需要对基础大模型做相应的知识增强,既包括微调训练,即将相关知识直接压缩到大模型的参数中,也包括采用向量数据库方式,将专业知识转化为向量存储,并可以随时被大模型调用。然后,根据具体应用场景,对行业大模型进行任务增强,通过知识图谱增强、价值观增强、纠错等多种技术,从内容准确性、逻辑准确性、价值观准确性等维度提升模型可控性,使最终表现符合用户预期。

3. 知识库问答实现思路

3.1. 实现思路

本地知识库问答应用不仅需要对本地知识库智能搜索的能力, 还需要语义理解和文字总结的能力 。而大模型正是 这一场景的技术工具 , 将大模型语义理解和文字总结能力与本地知识库的内容相结合 , 可以构建出一个强大的问答系统。
基于大模型 搭建知识库 问答 的解决 思路 有以下几种:
(1) 模型 微调 Fine-Tuning
基于 专有知识 建立 训练数据集 ,用大模型在数据集上进行微调,改变神经网络中参数的权重,相当于让模型去学习这些知识。微调方式适合特定的任务,但也存在一些问题,如没有解决事实性问答可靠的问题、计算资源和时间成本较高、需要构建特定领域的微调训练语料、微调的结果存在不确定性等。
(2)使用提示工程 Prompt Engineering
使用领域的专业知识作为输入信息提供给模型,类似于短期记忆,容量有限但是清晰,其优势是模型解析回答的正确性和精度高,不足在于所有的大模型均对输入信息的最大长度有限制,一次能够处理的文本数量有限,对于知识库来说,从可行性和效率角度都是不合适的。
(3)结合知识检索增强大模型
在进行模型问答时,使用信息检索构建知识库查询,将检索结果提供给大模型进行理解和生成。该方法使大模型 作为用户和搜索系统 中 介,发挥其自然语言处理能力 : 对用户请求进行纠错、提取关键点等预处理实现 “ 理解 ”; 对输出结果在保证正确性的基础上进行概括、分析、推理 。这样无论是数据规模、查询效率、更新方式都可以满足常见知识库应用场景的需要。
检索增强生成相关技术栈较为成熟,降低了探索风险,主要涉及到对文档的加载、切分、向量化、相似度比对等,通过将挑选出的内容与问题,一起输入给大模型,再通过 prompt 模板进行问答效果优化 。

3.2. 技术路线

利用大语言模型构建本地知识库的应用场景,结合了自然语言处理技术和知识管理功能,能够帮助用户更有效地组织、搜索和利用本地的知识资源,其主要功能应用包括:
(1)文本检索:可以通过关键词、短语或问题搜索知识库中的文本内容,支持全文搜索、模糊搜索和语义搜索,以便用户找到所需信息。
(2) 智能问答: 通过自然语言问答形式,利用大语言模型理解用户提出的问题, 帮助用户获取所需信息,提高问答效率 。
(3)知识管理: 用户可以将自己的知识资源整理、存储和管理到知识库中 , 包括创建、编辑和删除 文本 、笔记或标签 等。
(4)智能推荐: 基于用户的历史操作偏好 和专业领域知识信息 ,应用可以提供个性化的内容推荐 , 帮助用户发现新的知识 。
(5)自然语言处理:通过自然语言处理,完成用户输入的语义理解,并基于知识库匹配 相关的信息 ,形成自然语言解答。
(6)文本 写作 :利用 大模型知识库 , 根据用户的需求帮助用户快速生成高质量的 专业领域 文章。
当前,使用检索增强生成( RAG) 已经成为业内 公认的大模型最佳落地范式之一即大模型知识库的关键技术路线。这个范式简单来说就是大模型 +知识库。 是一种结合检索和生成模型的方法,旨在提高生成式模型的性能,尤其是在开放领域的问答任务中。 RAG 结合了检索模型和生成模型,利用检索模型从大型语料库中检索相关文本片段,然后将这些文本片段作为上下文输入到生成模型中,生成更加相关和准确的回答。
RAG为生成式 大 模型与外部 信息交互 提供了 良好的 解决方案 ,其 主要作用类似搜索引擎,找到用户提问最相关的知识或者是相关的对话历史,并结合原始提问,创造信息丰富的prompt,指导模型生成准确输出。本质上应用了情境学习(In-Context Learning)的原理。
RAG可分为5个基本流程:知识 文本 准备 、 嵌入模型(embedding model) 、 向量数据库 、问题理
检索增强生成(RAG)基本流程

检索增强生成(RAG)基本流程

3.3. 处理过程

(1)知识文本准备

  • 文档的预处理->
  • 文档切割 ->

(2)嵌入模型( embedding model)

  • 词嵌入 ->

(3) 向量数据库

  • Embedding存储到向量数据库 ->

(4) 问题理解和查询检索

  • 用户提问->
  • 将问题用 嵌入模型 做Embedding ->
  • 问题向量化 ->
  • 到知识库所在向量数据库中进行相似的匹配 ->
  • 召回得分最高的k个Chunks ->

(5) 根据问题 生成 解答

  • 原始提问文本+用户prompt+k个Chunks三者输入大模型 LLM ->
  • 返回用户 问题的解答 ->

4. 开源大模型选择

预训练大模型已成为推动“人工智能+”进步的核心动力。 Qwen、Baichuan和ChatGLM 等 作为行业内领先的大模型,在自然语言处理、知识理解和人机交互等 方面都 展现出了卓越的性能。 随着技术的不断进步,业务领域和应用场景的细分,使得 大模型 的选择 变得尤为重要 ,以下通过语言、知识、 推理 、数学、 代码 和 智能体 能力方面对35种大模型的横向比较可以作为实现本地知识库应用的选择参考。

35种大模型的横向比较

序号模型发布组织发布日期更新时间开源模型类型参数量均分语言知识推理数学代码智能体
1GPT-4-TurboOpenAI2023/11/62024/1/29对话N/A61.8054.9066.3048.2053.6067.2080.50
2GLM-4ZhipuAI2024/1/162024/1/29对话N/A58.9057.2070.0044.2048.9061.3072.10
3Qwen-MaxAlibaba2023/12/12024/1/29对话N/A56.8059.4071.0041.7047.0055.9066.00
4Erniebot-4.0Baidu Inc.2023/10/182024/1/29对话N/A54.7056.2067.8040.1050.4056.3057.60
5Qwen1.5-72B-ChatAlibaba2024/2/42024/2/20对话72B52.5059.6070.4040.3050.2052.0042.80
6Qwen-72B-ChatAlibaba2023/11/302024/1/29对话72B51.9053.2071.7031.4046.5049.3059.30
7MiniMax-abab5.5MiniMax2023/10/192024/1/29对话N/A50.7054.6061.4047.4030.7046.6063.80
8Qwen1.5-14B-ChatAlibaba2024/2/42024/2/20对话14B50.3057.0058.4038.6042.9041.5063.20
9InternLM2-Chat-20BShanghai AI Lab2024/1/112024/1/29对话20B48.8051.4059.6026.9042.5054.2058.00
10Yi-34B-Chat01.AI2023/11/222024/1/29对话34B47.1051.8069.2037.6035.8033.9054.20
11GPT-3.5-TurboOpenAI2023/6/132024/1/29对话N/A46.8038.4052.6021.2034.2060.7073.50
12Baichuan2-TurboBaichuan Intelligent Technology2023/12/192024/1/29对话N/A46.4041.4062.8031.2040.7040.5061.60
13OrionStar-Yi-34B-ChatOrionStarAI2023/11/162023/11/22对话34B46.0058.1069.4044.3031.2031.7041.10
14InternLM2-Chat-7BShanghai AI Lab2024/1/112024/1/29对话7B45.0051.2048.6034.0033.8047.8054.70
15Qwen-14B-ChatAlibaba2023/9/252024/1/29对话14B45.0051.3062.6029.1038.4031.6057.00
16DeepSeek-67B-ChatDeepSeek2023/11/292024/1/29对话67B42.7031.2063.0024.8036.8044.9055.40
17Qwen1.5-7B-ChatAlibaba2024/2/42024/2/20对话7B38.9045.7051.2022.9030.6034.5048.40
18Mixtral-8x7B-Instruct-v0.1Mistral AI2023/12/112024/1/29对话47B37.7037.9050.9025.5035.2022.7053.80
19Qwen-7B-ChatAlibaba2023/8/32024/1/29对话7B37.1041.8053.0023.6024.8029.0050.20
20Nanbeige-16B-ChatNanbeige2023/11/82024/1/29对话16B37.1042.9048.7028.9021.6031.6048.80
21Qwen1.5-4B-ChatAlibaba2024/2/42024/2/20对话4B35.4041.8046.0025.4022.1024.3052.60
22ChatGLM3-6B-32KZhipuAI2023/10/272024/1/29对话6B35.2039.4046.1018.0025.3039.8042.70
23Baichuan2-13B-ChatBaichuan Intelligent Technology2023/9/62024/1/29对话13B32.1038.7050.7023.9020.7022.8035.80
24Yi-6B-Chat01.AI2023/11/222024/1/29对话6B31.9039.2058.1017.9018.4017.7040.20
25WizardLM-70B-V1.0Microsoft2023/8/92024/1/29对话70B30.5027.5047.4018.5027.0024.2038.20
26LLaMA-2-70B-ChatMeta2023/7/192024/1/29对话70B29.7031.0047.5017.3022.2022.2037.80
27Baichuan2-7B-ChatBaichuan Intelligent Technology2023/9/62024/1/29对话7B29.4033.7045.4021.4015.7021.1039.10
28DeepSeek-7B-ChatDeepSeek2023/11/292024/1/29对话7B28.8024.8039.4016.2018.5037.4036.60
29Mistral-7B-Instruct-v0.2Mistral AI2023/12/112024/1/29对话7B28.0030.6043.0017.8017.8019.4039.70
30WizardLM-13B-V1.2Microsoft2023/7/252024/1/29对话13B26.9028.4039.9016.0016.4022.4038.40
31Vicuna-13B-v1.5-16kLMSYS2023/7/312024/1/29对话13B26.5030.9044.7021.7011.407.3043.00
32Zephyr-7B-βHuggingFace2023/10/262024/1/29对话7B26.0024.7041.2015.0015.0021.9038.40
33LLaMA-2-13B-ChatMeta2023/7/192024/1/29对话13B24.7027.3041.3019.7013.2015.3031.50
34Vicuna-7B-v1.5-16kLMSYS2023/8/72024/1/29对话7B20.4015.6039.4013.907.108.1038.30
35LLaMA-2-7B-ChatMeta2023/7/192024/1/29对话7B19.4016.9034.7015.007.9016.6025.20

根据具体的大模型应用,通用的选择维度可以从业务需求、模型效果和模型性能方面进行考虑:
(1) 业务需求:首先,明确自己的业务需求和场景,了解大模型能够在哪些方面提供帮助 。 不同的业务场景可能需要不同类型的大模型 , 例如自然语言处理、计算机视觉、推荐系统等。
(2) 模型效果:选择大模型的基础,需要评估大模型在使用场景中能够发挥的价值。需要考虑大模型在实际应用中的效果 , 以确定是否选择该模型。评估大模型在特定场景中的性能和准确性 , 以确保其能够满足需求。
(3) 模型性能:在选择大模型时,需要关注模型的性能指标,如准确率、召回率等。

5. 工程实现搭建

5.1. LangChain+FastChat+PGvector

LangChain-Chatchat是利用langchain思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。该项目已开源采用Apache License,可以免费商用。项目 技术栈 包括:Python + LangChain基础框架 + FastAPI接口服务&文档 + Streamlit前端可视化,集成了LangChain + FastChat + PGvecto r ,通过使用FastChat接入大模型,做到了开箱即用。LangChain-Chatchat 工程目录结构如下:

5.2. 配置conda环境

(1)安装anaconda
(2)创建工程运行虚拟环境
$ conda create --name LangChain-Chatchat python=3.10
$ conda activate LangChain-Chatchat
(3)安装工程依赖环境
$ pip install -r requirements.txt - i
https://pypi.tuna.tsinghua.edu.cn/simple
(4)安装 libreoffice
$ yum install -y libreoffice

5.3. 下载嵌入模型和大模型

要先安装 Git Large File Storage ( LFS ), LFS是一个开源的Git扩展工具 , 将大文件存储在专门的服务器上 , 而不是直接存储在Git仓库中, 能够 有效地减小Git仓库的大小,同时也 可以 更好地管理和处理大型文件 。
使用 git clone 下载LLM大 模型
$ git clone https://huggingface.co/THUDM/chatglm3-6b-32k
下载知识库的E mbedding模型
$ git clone https://huggingface.co/BAAI/bge-large-zh-v1.5

5.4. 配置运行参数

(1) config配置基本 和 readme的步骤 一致 ,选取 需要 加载的模型 , 在对应位置 配置工程本地的 模型路径。
(2)复制模型相关参数配置模板文件 configs/model_config.py.exampl e 存储至项目路径下./configs路径下 , 并重命名为model_config.py。
LLM_MODELS = ["chatglm3-6b"] # "zhipu-api", "openai-api" "Qwen-1_8B-Chat",
"bge-large-zh": "BAAI/bge-large-zh",
"bge-large-zh": "/ai /model /chatglm3/bge-large-zh",
(3)复制服务相关参数配置模板文件 configs/server_config.py.example 存储至项目路径下./configs路径下 , 并重命名为server_config.py。
"chatglm3-6b": "THUDM/chatglm3-6b -32k ",
"chatglm3-6b": "/ai /model /chatglm3/chatglm3-6b -32k ",

5.5. 初始化向量数据库

第一次运行项目的时候,
$ python init_database.py --recreate-vs
不是第一次运行项目,
$ python init_database.py
samples为默认知识库

5.6. 调试运行

(1)启动项目
$ python startup.py -a
运行出现以下信息,皆可通过访问WEBUI地址进行验证。

5.7. 加载知识文本

(1)通过界面菜单选择知识库管理,进入知识库维护界面。

(2)选择上传知识文件,将预处理好的文本信息上传。
(3)点击添加文件到知识库,等待列表中的文件状态更新完毕。

5.8. 使用Prompt及问答交互

Prompt是给AI的指令,引导模型生成符合业务场景的响应输出。 使用 Prompt 与大模型进行对话需要清晰的指令, 提供参考文本 ,尽量 复杂的任务拆分为更简单的子任务 ,要 给模型时间去思考 ,借助 外部工具 等,例如可以参考以下模板进行对话:
(1) context(可选):上下文

  • 角色:告诉大模型,大模型现在是什么角色,什么身份。
  • 任务:告诉大模型任务的目标是什么,希望完成什么目标。
  • 知识:知识库,比如企业内部的知识数据等。

(2) Instruction(必选):必须清晰的给大模型

  • 步骤
  • 思维链
  • 示例

(3) input data(必选):输入的数据,让大模型处理句子、文章或者回答问题

  • 句子
  • 文章
  • 问题

(4) output indicator(可选):给大模型的输出的指引 。

5.9. 效果验证及优化

通过以上工程实现,我们搜集了200余份公开发布的法律法规文件进行文本语料的知识库效果验证,其中包含doc、docx、pdf、txt等文件格式。基于业务目标和法规知识问答,对生成内容进行验证。建立统一的测试数据集,并确定回答测试标准,并通过效果验证,主要存在以下几方面问题:
(1)存在匹配错误原文文档或原文片段的情况;
(2)即使匹配了正确的原文片段,回答也可能存在不准确、不全面,甚至生成原文里不存在内容的情况;
(3)存在中文及其他语言同时出现的情况;

基于LangChain 的实现步骤 , 从文档预处理,文本数据入库、 E mbedding、召回Top k、 模型生成答案等阶段进行调优。

(1)文档预处理优化
知识库本身的文本质量对最终效果的影响至关重要,这是大模型最终生成回答的原始语料。优化内容包括:文档命名统一,控制在名称长度 ,涵义简洁,避免无意义的数字、符号或缩写。文档语言,统一中文描述,因为量化 模型对于中英文、繁简体的支持不一样,向量化导致乱码或没有用的数据。文档内容,设置清晰的层级标题,对图片、表格、公式、超链接、附件等进行特殊处理。建立问答对,基于用户可能的提问方式,构建问答对,作为知识库原始数据。

(2)文本数据入库
上传文本语料,开始构建本地的知识库时,为了便于分析和处理,需要将长文本进行切割分块。通过设置合理的文档切割 chunk_size ,验证 所选取的 E mbedding模型在多大的chunk_size上表现最佳 。文档段落处理,基于文档切割时所设置的 chunk_size,对知识库文档的段落进行拆分或者合并,尽量保证连贯语义数据不会被切割。 知识库文档标注,为了提升召回准确性,一方面在导入前,先对知识库文档内容进行标注处理 。

(3)Embedding
将知识库文档切割成 chunk之后,需要通过embedding技术,转换为算法可以处理的向量,存入向量数据库。 选择不同的E mbedding模型 进行验证, 实践中也发现bge-large-zh优于m3e-base。 一般采用 Top5的召回准确率和Top10的召回准确率来评估 E mbedding模型的好坏 , TopN召回准确率=TopN条chunk包含答案问题数 / 总问题数 。

(4)召回Top k
用户提问后,同样将用户的问句向量化。将用户的问句与向量数据库中的 chunk匹配,匹配出与问句向量最相似的 Top k个。k的取值 , 根据实际的场景不断测试,选择最佳的k值。一般来说,调大k值,会增加召回片段中含有正确答案的概率, 但 召回的无关信息更多,模型生成的答案质量反而会更差。Temperature参数设置,1 代表十分精确,而0代表发散,生成的内容会更有创造性,需要根据自己的场景,设置合适的Temperature值。Top k的排序方式 , 检索返回的Top K,会按照数据库中的顺序进行排序,目的是保留原始数据库的上下文结构,可以增加 T op k的大小,比如从10个增加到30个,然后再使用更加精确的算法进行Rerank 。

(5)模型替换验证
Prompt提交给LLM后,LLM将生成回答,返回给用户。此时最大的影响因素就是大语言模型本身的性能。 通过使用不同的大模型,匹配问答效果进行验证。
基于以上的分析,我们先选取了成本最小的方式进行调优,包括:从ChatGLM3-6B-32k替换成Qwen1.5-72b-Chat,问答精准匹配能够显著提升的同时,响应速度有所下降。更换Embedding模型,将默认的m3e-base替换为bge-large-zh-v1.5,发现后者优于前者。通过测试不同Top k的值:比较Top 5、Top 10、Top 15的结果,发现Top 10时效果最优。目前来看,整体效果有所提升,但仍有优化空间,后续我们也将尝试其他的调优策略。

6. 总结及展望

在本文中,结合人工智能大模型技术的发展,深入探索了 RAG 技术栈在知识库问答 系统的 实际应用 ,从初步的文档准备到复杂的检索策略 ,展现了 RAG系统在处理大规模信息检索和理解任务时的巨大潜力。 通过开源工程及大模型的使用快速构建了工程实现, 随着技术的不断进步,相信 大模型及RAG技术 将在各行各业中发挥越来越重要的作用。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论2 条评论

menglunyangmenglunyang课题专家组系统工程师中国银行
2024-04-23 22:28
这是一篇很有价值的文章,内容丰富且实用。文章首先介绍了大模型技术的背景和现状,阐述了构建本地知识库问答应用的需求。然后详细分析了基于检索增强生成(RAG)技术路线的实现思路,对处理过程进行了清晰的阐释。接着对目前主流的开源大模型进行了横向对比,为模型选型提供了参考。最后通过LangChain-Chatchat工程实践,分享了工程搭建、配置运行、文本处理、效果优化等具体细节,并对遇到的问题和解决方案进行了总结,为读者提供了可操作的指导。
shlei6067shlei6067联盟成员数据库管理员NJ
2024-04-23 15:01
从整篇文章看出作者确实华了不少心血写这篇文章,也能看出作者真的是下了功夫学习大模型,也感谢作者给大家做了科普。 看了文章后,此处做下补充:RAG流程清晰,搭建的步骤详尽,且LangChain也是主流RAG实践工具,适合广泛实践,对于大模型的介绍部分,建议将transformer组件和GPT类大模型分开介绍,通常GPT类大模型采用是transformer的decoder部分,以便减少用户阅读歧义。
Ctrl+Enter 发表

相关文章

相关问题

相关资料

X社区推广