ChatGPT 人工智能 GPT4 伦理 生成式 医疗 监管 安全 机器学习 深度学习 神经网络 计算机视觉 强化学习 模型 算法 应用 开发 研究 工具 平台 框架 数据集 训练 部署 安全 合规 培训 投资 LLM,llm AI,ai,Ai 大模型 大语言模型 制图 生图 绘图 文生图 文生视频 生成式AI AGI 世界模型 sora chatGPT,chatgpt,ChatGpt claude openai Llama deepseek midjourney 红熊猫模型 Red panda,panda Stable Diffusion,StableDiffusion,stable DALL- E 3 DALL E DALL Flux,flux 扩散模型 混元大模型 文心一言 通义千问 可灵 Pika PixelDance 豆包 月之暗面 零一万物 阶跃星辰 搜索增强 MiniMax Talkie Agent prompt fastai LangChain TTS 微调 提示词 知识库 智能体
# 热门搜索 #
搜索
【AI+知识库】商业化问答场景,让AI回复更准确,一篇专为所有“小白”讲透RAG的实例教程(上篇)
8700点击    2024-09-10 21:25

前言


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


②、知识库检索阶段:


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


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


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


1、文档向量化:


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


2、知识库检索:


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


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


检索器具体进行了什么操作呢?(了解即可)


  1. 相似性计算:
  2. 使用一种相似性度量方法(如余弦相似性)来计算问题向量和各个文档向量之间的相似度。这一步是为了找出与问题内容最为接近的文档。
  3. 排序与选择:
  4. 根据相似性得分,所有文档会被排序。系统通常会选择得分最高的几个文档,认为这些文档与问题最相关。
  5. 信息抽取:
  6. 从选定的高相关性文档中抽取具体的信息片段或答案。这可能涉及到进一步的文本处理技术,如命名实体识别、关键短语提取等。


③、信息整合阶段:


1、信息融合:


  • 这里将接收到上一步中检索到的全部信息。然后把这些信息连带用户问题和系统预设,被整合成一个全新的上下文环境,为生成回答提供基础。

具体进行了什么操作呢?


  1. 信息筛选与确认:
  2. 首先,系统会对检索器提供的信息进行评估,筛选出最相关和最可信的内容。这通常涉及到对信息的来源、时效性和相关性进行验证。
  3. 消除冗余:
  4. 在多个文档或数据源中,可能会有重复的信息。系统需要识别和去除这些冗余内容,以防在生成回答时出现重复或相互矛盾的信息。
  5. 关系映射:
  6. 系统将分析不同信息片段之间的逻辑和事实关系,如因果、对比、顺序等。这有助于构建一个结构化的知识框架,使得信息在语义上更加连贯。
  7. 上下文构建:
  8. 将筛选和结构化的信息组织成一个连贯的上下文环境。这通常包括对信息进行排序、归类和整合,使其形成一个统一的叙述或解答框架。
  9. 语义融合:
  10. 在必要时,系统可能会进行语义融合,即合并意义相近但表达不同的信息片段,以减少语义上的重复并增强信息的表达力。
  11. 预备生成阶段:
  12. 最后,整合好的上下文信息被编码成适合生成器处理的格式,如将文本转化为适合输入到生成模型的向量形式。


④、大模型生成回答


1、生成器


  • 最终全新的上下文被一起传递给大语言模型。随后,大语言模型(LLM)根据提供的信息来回答问题。


  • 因为这个上下文包括了检索到的信息,因此大语言模型相当于同时拿到了问题和参考答案,通过LLM的全文理解,最后生成一个准确和连贯的答案。

在生成过程中,系统基于整合好的上下文信息来构建最终的回答时。这个过程具体包括以下关键步骤:


  1. 上下文向量化:
  2. 将整合后的上下文信息转化为向量。这通常通过一个预训练的语言模型进行,例如BERT或GPT。这些向量能够捕捉上下文中的语义信息,为生成回答提供必要的输入。
  3. 生成模型激活:
  4. 使用一个基于Transformer的生成模型(如GPT)接收向量化的上下文。这个模型利用自注意力机制来理解上下文中的各种关系和信息。
  5. 逐词生成回答:
  6. 生成模型开始逐词构建回答。模型在每一步生成一个词,同时考虑到之前已生成的词和整个上下文的语义。这个过程是迭代的,直到整个回答构建完成。
  7. 语言流畅性和准确性优化:
  8. 在回答生成的过程中,模型会优化语言的流畅性和逻辑性。确保生成的文本不仅在语法上正确,而且在逻辑上连贯,与用户问题紧密相关。
  9. 回答评估与调整:
  10. 完成初步生成后,系统可能会对回答进行评估,检查其准确性、相关性和用户满意度。如果需要,可以对回答进行微调或完全重新生成。


⑤、输出回答:


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


简要总结RAG的全流程:


  1. 问题解析阶段:
  2. 接收并预处理问题,通过嵌入模型(如Word2Vec、GloVe、BERT)将问题文本转化为向量。这一步确保问题向量能有效用于后续检索。
  3. 知识库检索阶段:
  4. 知识库中的文档同样向量化后,比较问题向量与文档向量,选择最相关的信息片段。抽取相关信息传递给下一步骤
  5. 信息整合阶段:
  6. 接收检索到的信息,与上下文构建形成融合、全面的信息文本。整合信息准备进入生成阶段。
  7. 大模型生成回答:


  • 整合后的信息被转化为向量并输入到LLM(大语言模型)。模型逐词构建回答,最终输出给用户。


四、RAG实例


看理论有点懵是吗?为了更理解,我们来一起看看实例。



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


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


一、知识库检索部分



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



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


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



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


二、大模型对话部分


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




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


①System:我设置的Prompt(提示词)


②Human:知识库检索的到的信息(下图两个<data>中间的内容就是知识库检索到的信息)。


③AI:最终收到的回复信息。


五、实操优化(挖坑)


现在再来看这四步操作,是否对“知识库+LLM”的问答流程有更加清晰地认知呢?


①、问题解析阶段


②、知识库检索阶段


③、信息整合阶段


④、大模型生成回答


文章来源于“Equity Al”,作者“UU大王 ”


关键词: AI , 知识库 , RAG , 人工智能
AITNT资源拓展
根据文章内容,系统为您匹配了更有价值的资源信息。内容由AI生成,仅供参考
1
AI工作流

【开源免费】n8n是一个可以自定义工作流的AI项目,它提供了200个工作节点来帮助用户实现工作流的编排。

项目地址:https://github.com/n8n-io/n8n

在线使用:https://n8n.io/(付费)


【开源免费】DB-GPT是一个AI原生数据应用开发框架,它提供开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Multi-Agents框架协作、AWEL(智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单、更方便。

项目地址:https://github.com/eosphoros-ai/DB-GPT?tab=readme-ov-file



【开源免费】VectorVein是一个不需要任何编程基础,任何人都能用的AI工作流编辑工具。你可以将复杂的工作分解成多个步骤,并通过VectorVein固定并让AI依次完成。VectorVein是字节coze的平替产品。

项目地址:https://github.com/AndersonBY/vector-vein?tab=readme-ov-file

在线使用:https://vectorvein.ai/(付费)

2
知识库

【开源免费】FASTGPT是基于LLM的知识库开源项目,提供开箱即用的数据处理、模型调用等能力。整体功能和“Dify”“RAGFlow”项目类似。很多接入微信,飞书的AI项目都基于该项目二次开发。

项目地址:https://github.com/labring/FastGPT

3
RAG

【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。

项目地址:https://github.com/microsoft/graphrag

【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。

项目地址:https://github.com/langgenius/dify


【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。

项目地址:https://github.com/infiniflow/ragflow/tree/main


【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目

项目地址:https://github.com/phidatahq/phidata


【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。

项目地址:https://github.com/TaskingAI/TaskingAI

4
微调

【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。

项目地址:https://github.com/InternLM/xtuner

5
prompt

【开源免费】LangGPT 是一个通过结构化和模板化的方法,编写高质量的AI提示词的开源项目。它可以让任何非专业的用户轻松创建高水平的提示词,进而高质量的帮助用户通过AI解决问题。

项目地址:https://github.com/langgptai/LangGPT/blob/main/README_zh.md

在线使用:https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0