【AI+知识库】商业化问答场景,让AI回复更准确,一篇专为所有“小白”讲透RAG的实例教程(上篇)

前言
  • 在把AI大模型能力接入微信后,发现很多朋友想要落地在类似客服的应用场景。但目前大模型存在幻觉,一不留神就胡乱回答,这在严肃的商用场景下是不可接受的。
  • 当我想要解决此问题时,发现虽然资料很多,但是多数太偏“技术向”,对于很多和我一样的非技术从业者来说,犹如天书一般。有落地需求的朋友们,即使完成了通路搭建,也无法真正的应用。
  • 落地场景,幻觉是不得不直面的问题。而非技术从业者的小白们,很难找到一个“说人话”的文章,让他们完全了解并应用。
  • 而我对此比较感兴趣,同时作为产品经理,有一些用户思维和技术基础。因此我斗胆在整理、学习了多位前辈的成果后,写一篇讲给“小白”们的教程。
⚡ 以下内容,如有错漏,欢迎留言补充、批评、指正。

一、对话示例
如果我直接讲理论部分,我相信小白强迫自己看了前200字就会关掉窗口。因此,我们先将这个过程具象化。

以下是一个问答机器人的界面。这是一个示例,你可以把右侧的对话当做是微信的对话框,这些对话交互是可以在任何一个受支持的窗口下实现的。

上方页面左侧画红框的地方,是这个“问答机器人”的配置,右侧是与“机器人”的一轮对话。

左侧有三处配置:
  • AI模型
  • 提示词
  • 知识库。
模型、提示词、知识库 三者可以想象成:

  • 大语言模型:是一个学习过无数本书、拥有无穷智慧的人。他读过无数的书、看过无数的段子,因此对公共知识、学识技能、日常聊天十分擅长。然而,在工作场景下,只会聊天侃大山可不行,你想让他帮你干活。这个时候,就需要“提示词”出场了,

  • 提示词:是你告诉这个全知全能的人,他是一个什么样的角色、他要专注于哪些技能,让他能够按照你的想法,变成一个你需要的“员工”。

  • 知识库:相当于你给这个“聪明”员工的发放了一本工作手册。即使是看过再多的书、浏览过再多的文字,也不会准确的知道见到老板娘过来吃饭要打三折,张梦飞过去吃饭要打骨折。而知识库,就是把这些内容写在了工作手册上。让这个聪明的员工,见到有人来的时候,就翻一翻手册,然后再做出反应。

我的设定:

  • AI模型:这里使用的是阿里千问模型。
  • 提示词:这里设定的角色是“美嘉”,是按照美嘉的人设、背景和对话风格做的设定。
  • 知识库:这里放的是《爱情公寓》全季的剧情,让“美嘉”拥有了自己过往的“记忆”,知道自己做过什么、好朋友是谁等等。

图中右侧是一个十分简单的问答,

我问:“你是谁?你和子乔在台球厅吵架那次是为了什么吵架?”

她的回复是:“我是陈美嘉,那次在台球厅和吕子乔吵架是因为他约会被人撞见,我讽刺他脸大影响信号,他还反击我。后来谈到过去的事情,我指责他忘恩负义,他就说我平。最后,我伤心地说要分手,因为他之前甩过我。”

其中,她是陈美嘉,这里是人设中的设定。吵架的经过是知识库中的内容。

在我提问了之后,大模型去知识库里找到了相关内容,然后回复了我。这就是一个简单的正确回复的demo示例。

然而,我们会发现,有时候她的回答会十分不准确。

图二明显回答的牛头不对马嘴。

图三是知识库截图,其中是有“一菲为美嘉找了一份助教工作”的内容的。

但是回答这个问题时,AI并没有根据正确的知识库内容回答。

这,就是基于知识库问答中的一个非常常见的错误场景。在其他情况下,甚至有可能出现报价错误、胡编乱造等等。这在严肃场景中,是不能接受的出错。

现在应该能够直观的理解,为什么需要让大模型根据知识库回答的更加准确、更符合我们的要求。

在AI领域中,优化AI更准确回答问题的过程,有一个更加专业的术语,叫做RAG。接下来,咱们进入正题,一步一步探索,如何优化回答。

二、基础概念
如果我们要优化幻觉问题和提高准确性,就务必要了解清楚从“问题输入”–“得到回复”,这个过程中,究竟发生了什么。然后针对每一个环节,逐个调优,以达到效果最佳化。

因此,我们先深入其中了解问答全貌。

1、RAG介绍

  • RAG(Retrieval-Augmented Generation),即检索增强生成,是一种结合信息检索和文本生成能力的技术,它由两部分组成:一个“检索器”和一个“生成器”。检索器从外部知识中快速找到与问题相关的信息,生成器则利用这些信息来制作精确和连贯的答案。这种结合使得RAG非常适合处理需要广泛知识的任务,如问答系统,能够提供详细而准确的回答。
简单来说,就是通过检索的模式,为大语言模型的生成提供更多信息,从而使大模型生成的答案更符合要求。

2、检索原理

首先我们需补个课,简单了解一下大模型中的“向量”:(同时建议了解下LLM的实现原理)
  • 可以把向量想象成空间中的点位,我们对话交流中的,每个词或短语都在这个空间中对应一个向量点位。
  • 当系统需要找到与一个特定词或短语相关的内容时,它会查看这个词在虚拟空间中点的位置,寻找直线距离最近的点。在这个空间中,距离越近的点,代表词义或内容上的关联度越高。
简单来说,通过比较这些点的距离,检索器可以快速找到语义上接近的词语或信息,从而高效地检索相关内容。这就像在一个城市地图上找最近的餐馆,距离越近,越可能是你想去的地方。

理解了向量,我们来看看收到一个对话时,RAG的完整的工作流程。

三、RAG工作原理
RAB的处理过程简单可分为四个阶段:

①、问题解析阶段

②、知识库检索阶段

③、信息整合阶段

④、大模型生成回答

①、问题解析阶段:

1、输入向量化

  • 问题会被模型预处理,然后输入进嵌入模型(Embedding Modle)转化为向量。以便后续检索时,能够把问题语句与向量数据库中的其他上下文信息进行比对。
  具体进行了什么操作呢?(了解即可)
    1. 文本预处理:
这包括去除无关字符、标准化文本(例如将所有字符转换为小写)、分词等,以清洁和准备文本数据。
    1. 嵌入表示:
将预处理后的文本(词或短语)转换为向量。这通常通过使用预训练的嵌入模型来完成,如Word2Vec、GloVe、BERT等。这些模型将每个词或短语映射到一个高维空间中的一个点(即向量)。
    1. 特征提取:
对于整个问题句子,可能会应用进一步的特征提取技术,比如句子级别的嵌入,或使用深度学习模型(如BERT)直接提取整个句子的表示。这个表示能够捕捉句子的上下文信息,不仅仅是单个词。
    1. 向量优化:
在某些情况下,问题的向量表示可能会根据具体任务进行优化,例如通过调整模型参数来更好地与检索系统的其他部分协同工作。

②、知识库检索阶段:

此阶段,首先需要有一个知识库,那么知识库是如何完成制作,并被检索的呢?

我们需要先了解一个概念,在大模型的检索中,并不是依靠传统的关键字去搜索。而是依靠问题在空间中的向量位置,去寻找距离这个向量最近的其他词句,然后完成检索。

所以,要在向量中进行检索,我们的知识库其实也是被转化成了了一个巨大的向量库。

1、文档向量化:

  • 知识库中的文档也需要被转换成向量形式。这使得文档内容能够在数值级别上与问题向量进行比较。在我们使用知识库工具时,上传文档就会帮助我们完成文档的向量化。这一步就是依靠Embedding Modle完成的。

2、知识库检索:

  • 根据前一步输出的问题向量,检索器开始在一个庞大的向量空间中搜索与问题相关的内容(既向量距离最接近)。检索器根据问题的关键词和上下文,选出最相关的信息片段。

在这一步,检索器从知识库里,检索到了一些和用户问题最相关的内容。

检索器具体进行了什么操作呢?(了解即可)
    1. 相似性计算:
使用一种相似性度量方法(如余弦相似性)来计算问题向量和各个文档向量之间的相似度。这一步是为了找出与问题内容最为接近的文档。

    1. 排序与选择:
根据相似性得分,所有文档会被排序。系统通常会选择得分最高的几个文档,认为这些文档与问题最相关。

    1. 信息抽取:
从选定的高相关性文档中抽取具体的信息片段或答案。这可能涉及到进一步的文本处理技术,如命名实体识别、关键短语提取等。

③、信息整合阶段:

1、信息融合:

  • 这里将接收到上一步中检索到的全部信息。然后把这些信息连带用户问题和系统预设,被整合成一个全新的上下文环境,为生成回答提供基础。
具体进行了什么操作呢?
    1. 信息筛选与确认:
首先,系统会对检索器提供的信息进行评估,筛选出最相关和最可信的内容。这通常涉及到对信息的来源、时效性和相关性进行验证。

    1. 消除冗余:
在多个文档或数据源中,可能会有重复的信息。系统需要识别和去除这些冗余内容,以防在生成回答时出现重复或相互矛盾的信息。

    1. 关系映射:
系统将分析不同信息片段之间的逻辑和事实关系,如因果、对比、顺序等。这有助于构建一个结构化的知识框架,使得信息在语义上更加连贯。

    1. 上下文构建:
将筛选和结构化的信息组织成一个连贯的上下文环境。这通常包括对信息进行排序、归类和整合,使其形成一个统一的叙述或解答框架。

    1. 语义融合:
在必要时,系统可能会进行语义融合,即合并意义相近但表达不同的信息片段,以减少语义上的重复并增强信息的表达力。

    1. 预备生成阶段:
最后,整合好的上下文信息被编码成适合生成器处理的格式,如将文本转化为适合输入到生成模型的向量形式。

④、大模型生成回答

1、生成器

  • 最终全新的上下文被一起传递给大语言模型。随后,大语言模型(LLM)根据提供的信息来回答问题。
  • 因为这个上下文包括了检索到的信息,因此大语言模型相当于同时拿到了问题和参考答案,通过LLM的全文理解,最后生成一个准确和连贯的答案。
在生成过程中,系统基于整合好的上下文信息来构建最终的回答时。这个过程具体包括以下关键步骤:
    1. 上下文向量化:
将整合后的上下文信息转化为向量。这通常通过一个预训练的语言模型进行,例如BERT或GPT。这些向量能够捕捉上下文中的语义信息,为生成回答提供必要的输入。

    1. 生成模型激活:
使用一个基于Transformer的生成模型(如GPT)接收向量化的上下文。这个模型利用自注意力机制来理解上下文中的各种关系和信息。

    1. 逐词生成回答:
生成模型开始逐词构建回答。模型在每一步生成一个词,同时考虑到之前已生成的词和整个上下文的语义。这个过程是迭代的,直到整个回答构建完成。

    1. 语言流畅性和准确性优化:
在回答生成的过程中,模型会优化语言的流畅性和逻辑性。确保生成的文本不仅在语法上正确,而且在逻辑上连贯,与用户问题紧密相关。

    1. 回答评估与调整:
完成初步生成后,系统可能会对回答进行评估,检查其准确性、相关性和用户满意度。如果需要,可以对回答进行微调或完全重新生成。

⑤、输出回答:

  • 最终,生成的答案呈现给用户。

简要总结RAG的全流程:

    1. 问题解析阶段:
接收并预处理问题,通过嵌入模型(如Word2Vec、GloVe、BERT)将问题文本转化为向量。这一步确保问题向量能有效用于后续检索。
  1. 知识库检索阶段:

    知识库中的文档同样向量化后,比较问题向量与文档向量,选择最相关的信息片段。抽取相关信息传递给下一步骤

  2. 信息整合阶段:

    接收检索到的信息,与上下文构建形成融合、全面的信息文本。整合信息准备进入生成阶段。

  3. 大模型生成回答:

整合后的信息被转化为向量并输入到LLM(大语言模型)。模型逐词构建回答,最终输出给用户。
四、RAG实例
看理论有点懵是吗?为了更理解,我们来一起看看实例。

这是调试预览中的对话示例。

在回复中,可以看到这里有写11条引用,3条上下文,我们具体来看下,有什么处理。

一、知识库检索部分

1、把输入的问题,通过Embedding做了向量化

2、使用qwen语言模型把问题做了优化、添加了接近的检索词

3、知识库向量检索,抽取条件包含相似度0.85

4、通过检索一共抽取出了11个内容块(chunk)

二、大模型对话部分

(因为我刷新后丢失了记录,改成说了一句:你好,所以下边的问题,变成了你好)

5、此处将①②一起传递给了LLM(大语言模型),最终得到了③AI的回答。

①System:我设置的Prompt(提示词)
②Human:知识库检索的到的信息(下图两个<data>中间的内容就是知识库检索到的信息)。
③AI:最终收到的回复信息。
五、实操优化(挖坑)
现在再来看这四步操作,是否对“知识库+LLM”的问答流程有更加清晰地认知呢?

①、问题解析阶段

②、知识库检索阶段
③、信息整合阶段

④、大模型生成回答

下一篇我们就开始要从这些环节入手,手把手教程一起实操,对每一个环节进行逐项优化!

来源:Equity AI

滚动至顶部