前言
⚡ 以下内容,如有错漏,欢迎留言补充、批评、指正。
一、对话示例
如果我直接讲理论部分,我相信小白强迫自己看了前200字就会关掉窗口。因此,我们先将这个过程具象化。
以下是一个问答机器人的界面。这是一个示例,你可以把右侧的对话当做是微信的对话框,这些对话交互是可以在任何一个受支持的窗口下实现的。
上方页面左侧画红框的地方,是这个“问答机器人”的配置,右侧是与“机器人”的一轮对话。
左侧有三处配置:
模型、提示词、知识库 三者可以想象成:
我的设定:
图中右侧是一个十分简单的问答,
我问:“你是谁?你和子乔在台球厅吵架那次是为了什么吵架?”
她的回复是:“我是陈美嘉,那次在台球厅和吕子乔吵架是因为他约会被人撞见,我讽刺他脸大影响信号,他还反击我。后来谈到过去的事情,我指责他忘恩负义,他就说我平。最后,我伤心地说要分手,因为他之前甩过我。”
其中,她是陈美嘉,这里是人设中的设定。吵架的经过是知识库中的内容。
在我提问了之后,大模型去知识库里找到了相关内容,然后回复了我。这就是一个简单的正确回复的demo示例。
然而,我们会发现,有时候她的回答会十分不准确。
图二明显回答的牛头不对马嘴。
图三是知识库截图,其中是有“一菲为美嘉找了一份助教工作”的内容的。
但是回答这个问题时,AI并没有根据正确的知识库内容回答。
这,就是基于知识库问答中的一个非常常见的错误场景。在其他情况下,甚至有可能出现报价错误、胡编乱造等等。这在严肃场景中,是不能接受的出错。
现在应该能够直观的理解,为什么需要让大模型根据知识库回答的更加准确、更符合我们的要求。
在AI领域中,优化AI更准确回答问题的过程,有一个更加专业的术语,叫做RAG。接下来,咱们进入正题,一步一步探索,如何优化回答。
二、基础概念
如果我们要优化幻觉问题和提高准确性,就务必要了解清楚从“问题输入”--“得到回复”,这个过程中,究竟发生了什么。然后针对每一个环节,逐个调优,以达到效果最佳化。
因此,我们先深入其中了解问答全貌。
简单来说,就是通过检索的模式,为大语言模型的生成提供更多信息,从而使大模型生成的答案更符合要求。
首先我们需补个课,简单了解一下大模型中的“向量”:(同时建议了解下LLM的实现原理)
简单来说,通过比较这些点的距离,检索器可以快速找到语义上接近的词语或信息,从而高效地检索相关内容。这就像在一个城市地图上找最近的餐馆,距离越近,越可能是你想去的地方。
理解了向量,我们来看看收到一个对话时,RAG的完整的工作流程。
三、RAG工作原理
RAB的处理过程简单可分为四个阶段:
①、问题解析阶段
②、知识库检索阶段
③、信息整合阶段
④、大模型生成回答
①、问题解析阶段:
1、输入向量化
具体进行了什么操作呢?(了解即可)
②、知识库检索阶段:
此阶段,首先需要有一个知识库,那么知识库是如何完成制作,并被检索的呢?
我们需要先了解一个概念,在大模型的检索中,并不是依靠传统的关键字去搜索。而是依靠问题在空间中的向量位置,去寻找距离这个向量最近的其他词句,然后完成检索。
所以,要在向量中进行检索,我们的知识库其实也是被转化成了了一个巨大的向量库。
1、文档向量化:
2、知识库检索:
在这一步,检索器从知识库里,检索到了一些和用户问题最相关的内容。
检索器具体进行了什么操作呢?(了解即可)
③、信息整合阶段:
1、信息融合:
具体进行了什么操作呢?
④、大模型生成回答
1、生成器:
在生成过程中,系统基于整合好的上下文信息来构建最终的回答时。这个过程具体包括以下关键步骤:
⑤、输出回答:
简要总结RAG的全流程:
四、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大王 ”
【开源免费】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/(付费)
【开源免费】FASTGPT是基于LLM的知识库开源项目,提供开箱即用的数据处理、模型调用等能力。整体功能和“Dify”“RAGFlow”项目类似。很多接入微信,飞书的AI项目都基于该项目二次开发。
项目地址:https://github.com/labring/FastGPT
【开源免费】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
【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。
项目地址:https://github.com/InternLM/xtuner
【开源免费】LangGPT 是一个通过结构化和模板化的方法,编写高质量的AI提示词的开源项目。它可以让任何非专业的用户轻松创建高水平的提示词,进而高质量的帮助用户通过AI解决问题。
项目地址:https://github.com/langgptai/LangGPT/blob/main/README_zh.md
在线使用:https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0