74 lines
23 KiB
XML
74 lines
23 KiB
XML
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>知识库 on FastGPT</title><link>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/</link><description>Recent content in 知识库 on FastGPT</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><atom:link href="https://doc.tryfastgpt.ai/docs/guide/knowledge_base/index.xml" rel="self" type="application/rss+xml"/><item><title>知识库基础原理介绍</title><link>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/rag/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/rag/</guid><description>RAG文档
|
||
1. 引言 link随着自然语言处理(NLP)技术的迅猛发展,生成式语言模型(如GPT、BART等)在多种文本生成任务中表现卓越,尤其在语言生成和上下文理解方面。然而,纯生成模型在处理事实类任务时存在一些固有的局限性。例如,由于这些模型依赖于固定的预训练数据,它们在回答需要最新或实时信息的问题时,可能会出现“编造”信息的现象,导致生成结果不准确或缺乏事实依据。此外,生成模型在面对长尾问题和复杂推理任务时,常因缺乏特定领域的外部知识支持而表现不佳,难以提供足够的深度和准确性。
|
||
与此同时,检索模型(Retriever)能够通过在海量文档中快速找到相关信息,解决事实查询的问题。然而,传统检索模型(如BM25)在面对模糊查询或跨域问题时,往往只能返回孤立的结果,无法生成连贯的自然语言回答。由于缺乏上下文推理能力,检索模型生成的答案通常不够连贯和完整。
|
||
为了解决这两类模型的不足,检索增强生成模型(Retrieval-Augmented Generation,RAG)应运而生。RAG通过结合生成模型和检索模型的优势,实时从外部知识库中获取相关信息,并将其融入生成任务中,确保生成的文本既具备上下文连贯性,又包含准确的知识。这种混合架构在智能问答、信息检索与推理、以及领域特定的内容生成等场景中表现尤为出色。
|
||
1.1 RAG的定义 linkRAG是一种将信息检索与生成模型相结合的混合架构。首先,检索器从外部知识库或文档集中获取与用户查询相关的内容片段;然后,生成器基于这些检索到的内容生成自然语言输出,确保生成的内容既信息丰富,又具备高度的相关性和准确性。
|
||
2. RAG模型的核心机制 linkRAG 模型由两个主要模块构成:检索器(Retriever)与生成器(Generator)。这两个模块相互配合,确保生成的文本既包含外部的相关知识,又具备自然流畅的语言表达。
|
||
2.1 检索器(Retriever) link检索器的主要任务是从一个外部知识库或文档集中获取与输入查询最相关的内容。在RAG中,常用的技术包括:
|
||
向量检索:如BERT向量等,它通过将文档和查询转化为向量空间中的表示,并使用相似度计算来进行匹配。向量检索的优势在于能够更好地捕捉语义相似性,而不仅仅是依赖于词汇匹配。 传统检索算法:如BM25,主要基于词频和逆文档频率(TF-IDF)的加权搜索模型来对文档进行排序和检索。BM25适用于处理较为简单的匹配任务,尤其是当查询和文档中的关键词有直接匹配时。 RAG中检索器的作用是为生成器提供一个上下文背景,使生成器能够基于这些检索到的文档片段生成更为相关的答案。
|
||
2.2 生成器(Generator) link生成器负责生成最终的自然语言输出。在RAG系统中,常用的生成器包括:
|
||
BART:BART是一种序列到序列的生成模型,专注于文本生成任务,可以通过不同层次的噪声处理来提升生成的质量 。 GPT系列:GPT是一个典型的预训练语言模型,擅长生成流畅自然的文本。它通过大规模数据训练,能够生成相对准确的回答,尤其在任务-生成任务中表现尤为突出 。 生成器在接收来自检索器的文档片段后,会利用这些片段作为上下文,并结合输入的查询,生成相关且自然的文本回答。这确保了模型的生成结果不仅仅基于已有的知识,还能够结合外部最新的信息。
|
||
2.3 RAG的工作流程 linkRAG模型的工作流程可以总结为以下几个步骤:
|
||
输入查询:用户输入问题,系统将其转化为向量表示。 文档检索:检索器从知识库中提取与查询最相关的文档片段,通常使用向量检索技术或BM25等传统技术进行。 生成答案:生成器接收检索器提供的片段,并基于这些片段生成自然语言答案。生成器不仅基于原始的用户查询,还会利用检索到的片段提供更加丰富、上下文相关的答案。 输出结果:生成的答案反馈给用户,这个过程确保了用户能够获得基于最新和相关信息的准确回答。 3. RAG模型的工作原理 link3.1 检索阶段 link在RAG模型中,用户的查询首先被转化为向量表示,然后在知识库中执行向量检索。通常,检索器采用诸如BERT等预训练模型生成查询和文档片段的向量表示,并通过相似度计算(如余弦相似度)匹配最相关的文档片段。RAG的检索器不仅仅依赖简单的关键词匹配,而是采用语义级别的向量表示,从而在面对复杂问题或模糊查询时,能够更加准确地找到相关知识。这一步骤对于最终生成的回答至关重要,因为检索的效率和质量直接决定了生成器可利用的上下文信息 。
|
||
3.2 生成阶段 link生成阶段是RAG模型的核心部分,生成器负责基于检索到的内容生成连贯且自然的文本回答。RAG中的生成器,如BART或GPT等模型,结合用户输入的查询和检索到的文档片段,生成更加精准且丰富的答案。与传统生成模型相比,RAG的生成器不仅能够生成语言流畅的回答,还可以根据外部知识库中的实际信息提供更具事实依据的内容,从而提高了生成的准确性 。
|
||
3.3 多轮交互与反馈机制 linkRAG模型在对话系统中能够有效支持多轮交互。每一轮的查询和生成结果会作为下一轮的输入,系统通过分析和学习用户的反馈,逐步优化后续查询的上下文。通过这种循环反馈机制,RAG能够更好地调整其检索和生成策略,使得在多轮对话中生成的答案越来越符合用户的期望。此外,多轮交互还增强了RAG在复杂对话场景中的适应性,使其能够处理跨多轮的知识整合和复杂推理 。
|
||
4. RAG的优势与局限 link4.1 优势 link 信息完整性:RAG 模型结合了检索与生成技术,使得生成的文本不仅语言自然流畅,还能够准确利用外部知识库提供的实时信息。这种方法能够显著提升生成任务的准确性,特别是在知识密集型场景下,如医疗问答或法律意见生成。通过从知识库中检索相关文档,RAG 模型避免了生成模型“编造”信息的风险,确保输出更具真实性 。 知识推理能力:RAG 能够利用大规模的外部知识库进行高效检索,并结合这些真实数据进行推理,生成基于事实的答案。相比传统生成模型,RAG 能处理更为复杂的任务,特别是涉及跨领域或跨文档的推理任务。例如,法律领域的复杂判例推理或金融领域的分析报告生成都可以通过RAG的推理能力得到优化 。 领域适应性强:RAG 具有良好的跨领域适应性,能够根据不同领域的知识库进行特定领域内的高效检索和生成。例如,在医疗、法律、金融等需要实时更新和高度准确性的领域,RAG 模型的表现优于仅依赖预训练的生成模型 。 4.2 局限 linkRAG(检索增强生成)模型通过结合检索器和生成器,实现了在多种任务中知识密集型内容生成的突破性进展。然而,尽管其具有较强的应用潜力和跨领域适应能力,但在实际应用中仍然面临着一些关键局限,限制了其在大规模系统中的部署和优化。以下是RAG模型的几个主要局限性:
|
||
4.2.1 检索器的依赖性与质量问题 linkRAG模型的性能很大程度上取决于检索器返回的文档质量。由于生成器主要依赖检索器提供的上下文信息,如果检索到的文档片段不相关、不准确,生成的文本可能出现偏差,甚至产生误导性的结果。尤其在多模糊查询或跨领域检索的情况下,检索器可能无法找到合适的片段,这将直接影响生成内容的连贯性和准确性。</description></item><item><title>知识库搜索方案和参数</title><link>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/dataset_engine/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/dataset_engine/</guid><description>理解向量 linkFastGPT 采用了 RAG 中的 Embedding 方案构建知识库,要使用好 FastGPT 需要简单的理解Embedding向量是如何工作的及其特点。
|
||
人类的文字、图片、视频等媒介是无法直接被计算机理解的,要想让计算机理解两段文字是否有相似性、相关性,通常需要将它们转成计算机可以理解的语言,向量是其中的一种方式。
|
||
向量可以简单理解为一个数字数组,两个向量之间可以通过数学公式得出一个距离,距离越小代表两个向量的相似度越大。从而映射到文字、图片、视频等媒介上,可以用来判断两个媒介之间的相似度。向量搜索便是利用了这个原理。
|
||
而由于文字是有多种类型,并且拥有成千上万种组合方式,因此在转成向量进行相似度匹配时,很难保障其精确性。在向量方案构建的知识库中,通常使用topk召回的方式,也就是查找前k个最相似的内容,丢给大模型去做更进一步的语义判断、逻辑推理和归纳总结,从而实现知识库问答。因此,在知识库问答中,向量搜索的环节是最为重要的。
|
||
影响向量搜索精度的因素非常多,主要包括:向量模型的质量、数据的质量(长度,完整性,多样性)、检索器的精度(速度与精度之间的取舍)。与数据质量对应的就是检索词的质量。
|
||
检索器的精度比较容易解决,向量模型的训练略复杂,因此数据和检索词质量优化成了一个重要的环节。
|
||
提高向量搜索精度的方法 link 更好分词分段:当一段话的结构和语义是完整的,并且是单一的,精度也会提高。因此,许多系统都会优化分词器,尽可能的保障每组数据的完整性。 精简index的内容,减少向量内容的长度:当index的内容更少,更准确时,检索精度自然会提高。但与此同时,会牺牲一定的检索范围,适合答案较为严格的场景。 丰富index的数量,可以为同一个chunk内容增加多组index。 优化检索词:在实际使用过程中,用户的问题通常是模糊的或是缺失的,并不一定是完整清晰的问题。因此优化用户的问题(检索词)很大程度上也可以提高精度。 微调向量模型:由于市面上直接使用的向量模型都是通用型模型,在特定领域的检索精度并不高,因此微调向量模型可以很大程度上提高专业领域的检索效果。 FastGPT 构建知识库方案 link数据存储结构 link在 FastGPT 中,整个知识库由库、集合和数据 3 部分组成。集合可以简单理解为一个文件。一个库中可以包含多个集合,一个集合中可以包含多组数据。最小的搜索单位是库,也就是说,知识库搜索时,是对整个库进行搜索,而集合仅是为了对数据进行分类管理,与搜索效果无关。(起码目前还是)
|
||
向量存储结构 linkFastGPT 采用了PostgresSQL的PG Vector插件作为向量检索器,索引为HNSW。且PostgresSQL仅用于向量检索(该引擎可以替换成其它数据库),MongoDB用于其他数据的存取。
|
||
在MongoDB的dataset.datas表中,会存储向量原数据的信息,同时有一个indexes字段,会记录其对应的向量ID,这是一个数组,也就是说,一组数据可以对应多个向量。
|
||
在PostgresSQL的表中,设置一个vector字段用于存储向量。在检索时,会先召回向量,再根据向量的ID,去MongoDB中寻找原数据内容,如果对应了同一组原数据,则进行合并,向量得分取最高得分。
|
||
多向量的目的和使用方式 link在一组向量中,内容的长度和语义的丰富度通常是矛盾的,无法兼得。因此,FastGPT 采用了多向量映射的方式,将一组数据映射到多组向量中,从而保障数据的完整性和语义的丰富度。
|
||
你可以为一组较长的文本,添加多组向量,从而在检索时,只要其中一组向量被检索到,该数据也将被召回。
|
||
意味着,你可以通过标注数据块的方式,不断提高数据块的精度。
|
||
检索方案 link 通过问题优化实现指代消除和问题扩展,从而增加连续对话的检索能力以及语义丰富度。 通过Concat query来增加Rerank连续对话的时,排序的准确性。 通过RRF合并方式,综合多个渠道的检索效果。 通过Rerank来二次排序,提高精度。 搜索参数 link 搜索模式 link语义检索 link语义检索是通过向量距离,计算用户问题与知识库内容的距离,从而得出“相似度”,当然这并不是语文上的相似度,而是数学上的。
|
||
优点:
|
||
相近语义理解 跨多语言理解(例如输入中文问题匹配英文知识点) 多模态理解(文本,图片,音视频等) 缺点:
|
||
依赖模型训练效果 精度不稳定 受关键词和句子完整度影响 全文检索 link采用传统的全文检索方式。适合查找关键的主谓语等。
|
||
混合检索 link同时使用向量检索和全文检索,并通过 RRF 公式进行两个搜索结果合并,一般情况下搜索结果会更加丰富准确。
|
||
由于混合检索后的查找范围很大,并且无法直接进行相似度过滤,通常需要进行利用重排模型进行一次结果重新排序,并利用重排的得分进行过滤。
|
||
结果重排 link利用ReRank模型对搜索结果进行重排,绝大多数情况下,可以有效提高搜索结果的准确率。不过,重排模型与问题的完整度(主谓语齐全)有一些关系,通常会先走问题优化后再进行搜索-重排。重排后可以得到一个0-1的得分,代表着搜索内容与问题的相关度,该分数通常比向量的得分更加精确,可以根据得分进行过滤。
|
||
FastGPT 会使用 RRF 对重排结果、向量搜索结果、全文检索结果进行合并,得到最终的搜索结果。</description></item><item><title>API 文件库</title><link>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/api_dataset/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/api_dataset/</guid><description>背景 link目前 FastGPT 支持本地文件导入,但是很多时候,用户自身已经有了一套文档库,如果把文件重复导入一遍,会造成二次存储,并且不方便管理。因为 FastGPT 提供了一个 API 文件库的概念,可以通过简单的 API 接口,去拉取已有的文档库,并且可以灵活配置是否导入。
|
||
API 文件库能够让用户轻松对接已有的文档库,只需要按照 FastGPT 的 API 文件库规范,提供相应文件接口,然后将服务接口的 baseURL 和 token 填入知识库创建参数中,就能直接在页面上拿到文件库的内容,并选择性导入
|
||
如何使用 API 文件库 link创建知识库时,选择 API 文件库类型,然后需要配置两个关键参数:文件服务接口的 baseURL 和用于身份验证的请求头信息。只要提供的接口规范符合 FastGPT 的要求,系统就能自动获取并展示完整的文件列表,可以根据需要选择性地将文件导入到知识库中。
|
||
你需要提供两个参数:
|
||
baseURL: 文件服务接口的 baseURL authorization: 用于身份验证的请求头信息,实际请求格式为 Authorization: Bearer &lt;token&gt; 接口规范 link接口响应格式:
|
||
type ResponseType = { success: boolean; message: string; data: any; } 数据类型:
|
||
// 文件列表中,单项的文件类型 type FileListItem = { id: string; parentId: string //也可能为 null 或者 undefined 类型; name: string; type: &#39;file&#39; | &#39;folder&#39;; updateTime: Date; createTime: Date; } 1.</description></item><item><title>飞书知识库</title><link>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/lark_dataset/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/lark_dataset/</guid><description>FastGPT v4.8.16 版本开始,商业版用户支持飞书知识库导入,用户可以通过配置飞书应用的 appId 和 appSecret,并选中一个文档空间的顶层文件夹来导入飞书知识库。目前处于测试阶段,部分交互有待优化。
|
||
由于飞书限制,无法直接获取所有文档内容,目前仅可以获取共享空间下文件目录的内容,无法获取个人空间和知识库里的内容。
|
||
1. 创建飞书应用 link打开 飞书开放平台,点击创建应用,选择自建应用,然后填写应用名称。
|
||
2. 配置应用权限 link创建应用后,进入应用可以配置相关权限,这里需要增加3个权限:
|
||
获取云空间文件夹下的云文档清单 查看新版文档 查看、评论、编辑和管理云空间中所有文件 3. 获取 appId 和 appSecret link 4. 给 Folder 增加权限 link可参考飞书教程: https://open.feishu.cn/document/server-docs/docs/drive-v1/faq#b02e5bfb
|
||
大致总结为:
|
||
把刚刚创建的应用拉入一个群里 给这个群增加目录权限 如果你的目录已经给全员组增加权限了,则可以跳过上面步骤,直接获取 Folder Token。
|
||
5. 获取 Folder Token link可以页面路径上获取 Folder Token,注意不要把问号复制进来。
|
||
6. 创建知识库 link根据 3 和 5 获取到的 3 个参数,创建知识库,选择飞书文件库类型,然后填入对应的参数,点击创建。</description></item><item><title>语雀文件库</title><link>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/yuque_dataset/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/yuque_dataset/</guid><description>FastGPT v4.8.16 版本开始,商业版用户支持语雀文件库导入,用户可以通过配置语雀的 token 和 uid 来导入语雀文档库。目前处于测试阶段,部分交互有待优化。
|
||
1. 获取语雀的 token 和 uid link在语雀首页 - 个人头像 - 设置,可找到对应参数。
|
||
参考下图获取 Token 和 User ID,注意给 Token 赋值权限:
|
||
获取 Token 增加权限 获取 User ID 2. 创建知识库 link使用上一步获取的 token 和 uid,创建知识库,选择语雀文件库类型,然后填入对应的参数,点击创建。
|
||
3. 导入文档 link创建完知识库后,点击添加文件即可导入语雀的文档库,跟随引导即可。
|
||
语雀知识库支持定时同步功能,每天会不定时的扫描一次,如果文档有更新,则会进行同步,也可以进行手动同步。</description></item><item><title>Web 站点同步</title><link>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/websync/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/websync/</guid><description>该功能目前仅向商业版用户开放。
|
||
什么是 Web 站点同步 linkWeb 站点同步利用爬虫的技术,可以通过一个入口网站,自动捕获同域名下的所有网站,目前最多支持200个子页面。出于合规与安全角度,FastGPT 仅支持静态站点的爬取,主要用于各个文档站点快速构建知识库。
|
||
Tips: 国内的媒体站点基本不可用,公众号、csdn、知乎等。可以通过终端发送curl请求检测是否为静态站点,例如:
|
||
curl https://doc.tryfastgpt.ai/docs/intro/ 如何使用 link1. 新建知识库,选择 Web 站点同步 link 2. 点击配置站点信息 link 3. 填写网址和选择器 link 好了, 现在点击开始同步,静等系统自动抓取网站信息即可。
|
||
创建应用,绑定知识库 link 选择器如何使用 link选择器是 HTML CSS JS 的产物,你可以通过选择器来定位到你需要抓取的具体内容,而不是整个站点。使用方式为:
|
||
首先打开浏览器调试面板(通常是 F12,或者【右键 - 检查】) link 输入对应元素的选择器 link菜鸟教程 css 选择器,具体选择器的使用方式可以参考菜鸟教程。
|
||
上图中,我们选中了一个区域,对应的是div标签,它有 data-prismjs-copy, data-prismjs-copy-success, data-prismjs-copy-error 三个属性,这里我们用到一个就够。所以选择器是: div[data-prismjs-copy]
|
||
除了属性选择器,常见的还有类和ID选择器。例如:
|
||
上图 class 里的是类名(可能包含多个类名,都是空格隔开的,选择一个即可),选择器可以为:.docs-content
|
||
多选择器使用 link在开头的演示中,我们对 FastGPT 文档是使用了多选择器的方式来选择,通过逗号隔开了两个选择器。
|
||
我们希望选中上图两个标签中的内容,此时就需要两组选择器。一组是:.docs-content .mb-0.d-flex,含义是 docs-content 类下同时包含 mb-0和d-flex 两个类的子元素;
|
||
另一组是.docs-content div[data-prismjs-copy],含义是docs-content 类下包含data-prismjs-copy属性的div元素。
|
||
把两组选择器用逗号隔开即可:.docs-content .mb-0.d-flex, .docs-content div[data-prismjs-copy]</description></item><item><title>外部文件知识库</title><link>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/externalfile/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://doc.tryfastgpt.ai/docs/guide/knowledge_base/externalfile/</guid><description>外部文件库是 FastGPT 商业版特有功能。它允许接入你现在的文件系统,无需将文件再导入一份到 FastGPT 中。
|
||
并且,阅读权限可以通过你的文件系统进行控制。
|
||
导入参数说明 link 外部预览地址:用于跳转你的文件阅读地址,会携带“文件阅读ID”进行访问。 文件访问URL:文件可访问的地址。 文件阅读ID:通常情况下,文件访问URL是临时的。如果希望永久可以访问,你需要使用该文件阅读ID,并配合上“外部预览地址”,跳转至新的阅读地址进行原文件访问。 文件名:默认会自动解析文件访问URL上的文件名。如果你手动填写,将会以手动填写的值为准。 点击查看API导入文档
|
||
API 文件库替代方案 link4.8.15 提供了新的知识库类型 - API 文件库,对外部文件知识库做了进一步的拓展
|
||
通过对接口进行简单的调整,就能使用 API 文件库代替外部文件知识库的功能
|
||
你可以直接将外部文件知识库中的外部预览地址,作为 API 文件库接口规范中获取文件阅读链接的接口返回
|
||
然后再以相同的 baseURL 实现获取文件列表和获取单个文件内容这两个接口
|
||
这样就能轻松地使用 API 文件库替代原有的外部文件知识库,更多详细的内容见 API 文件库的文档</description></item></channel></rss> |