AI大模型实战解析-RAG知识库+LangChain项目实战
RAG知识库+LangChain企业项目实战
RAG介绍
RAG概念
检索增强生成(RAG)是一种优化大型语言模型(LLM)输出的方法,使其能够在生成响应之前引用训练数据之外的权威知识库。LLM 使用海量数据进行训练,拥有数十亿个参数,能够执行诸如回答问题、翻译语言和完成句子等任务。RAG 在 LLM 强大功能的基础上,通过访问特定领域或组织的内部知识库,而无需重新训练模型,进一步提升了其输出的相关性、准确性和实用性。这是一种经济高效的改进方法,适用于各种情境。
RAG 包含三个主要过程:检索、增强和生成。
- 检索:根据用户的查询内容,从外部知识库获取相关信息。具体而言,将用户的查询通过嵌入模型转换为向量,以便与向量数据库中存储的相关知识进行比对。通过相似性搜索,找出与查询最匹配的前 K 个数据。
- 增强:将用户的查询内容和检索到的相关知识一起嵌入到一个预设的提示词模板中。
- 生成:将经过检索增强的提示词内容输入到大型语言模型中,以生成所需的输出。
RAG解决的LLM应用痛点:
大型语言模型(LLM)在应用中面临一些已知挑战,包括:
- 在没有答案的情况下提供虚假信息。
- 当用户需要特定的当前响应时,提供过时或通用的信息。
- 从非权威来源创建响应。
- 由于术语混淆,不同的培训来源使用相同的术语来谈论不同的事情,从而产生不准确的响应。
RAG(检索增强生成)旨在缓解甚至解决以下大模型落地应用的痛点:
- 垂直领域知识的幻觉:通过检索外部权威知识库,RAG 可以提供更准确和可靠的领域特定知识,减少生成幻觉的可能性。
- 大模型知识持续更新的困难:无需重新训练模型,RAG 可以通过访问最新的外部知识库,保持输出的时效性和准确性。
- 无法整合长尾语义知识:RAG 能够从广泛的知识库中检索长尾语义知识,从而生成更丰富和全面的响应。
- 可能泄露的训练数据隐私问题:通过使用外部知识库而不是依赖内部训练数据,RAG 减少了隐私泄露的风险。
- 支持更长的上下文:RAG 可以通过检索相关信息,提供更长和更详细的上下文支持,从而提高响应的质量和连贯性。
RAG 与 微调的区别
RAG 和微调之间的差异,以及它们各自适用的场景,一直是热门话题。研究显示,RAG 特别适合于融合新知识,而微调则能够通过优化模型内部知识、输出格式以及提升复杂指令的执行能力,来增强模型的性能和效率。这两种方法可以相辅相成,共同推动大语言模型在处理复杂的知识密集型任务和需要快速适应新知识、定制化反馈(遵循特定格式、语调和风格)的可扩展应用中的使用。另外,提示工程(Prompting Engineering)通过发挥模型本身的优势,也能在优化结果方面发挥作用。下面这张图表展示了RAG在与其他模型优化方法相比时的独特特性:
RAG应用的介绍
QAnything
QAnything(Question 和 Answer based on Anything)是一个开源的本地知识库RAG问答系统,支持用户上传多种格式的文档,以构建知识库,并采用两阶段检索机制及混合检索技术,提升检索效率和准确性。
特点:
- 数据安全,支持全程拔网线安装使用。
- 支持跨语种问答,中英文问答随意切换,无所谓文件是什么语种。
- 支持海量数据问答,两阶段向量排序,解决了大规模数据检索退化的问题,数据越多,效果越好。
- 高性能生产级系统,可直接部署企业应用。
- 易用性,无需繁琐的配置,一键安装部署,拿来就用。
- 支持选择多知识库问答。
与常规的 RAG 流程图相比,明显更加突出了 Rerank
环节,将 Rerank
作为 2nd Retrieval
进行强调,看起来这是有道对 RAG 的独到理解。
官网:https://qanything.ai/
RagFlow
RAGFlow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型 LLM针对用户各类不同的复杂格式数据提供可靠的问答以及有理有据的引用。
🍭 “Quality in, quality out”
- 基于深度文档理解,能够从各类复杂格式的非结构化数据中提取真知灼见。
- 真正在无限上下文(token)的场景下快速完成大海捞针测试。
🍱 基于模板的文本切片
- 不仅仅是智能,更重要的是可控可解释。
- 多种文本模板可供选择
🌱 有理有据、最大程度降低幻觉(hallucination)
- 文本切片过程可视化,支持手动调整。
- 有理有据:答案提供关键引用的快照并支持追根溯源。
🍔 兼容各类异构数据源
- 支持丰富的文件类型,包括 Word 文档、PPT、excel 表格、txt 文件、图片、PDF、影印件、复印件、结构化数据、网页等。
🛀 全程无忧、自动化的 RAG 工作流
- 全面优化的 RAG 工作流可以支持从个人应用乃至超大型企业的各类生态系统。
- 大语言模型 LLM 以及向量模型均支持配置。
- 基于多路召回、融合重排序。
- 提供易用的 API,可以轻松集成到各类企业系统。
官方网址:https://ragflow.io/
Dify
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps的理念,使开发者可以快速搭建生产级的生成式 AI 应用。
LLMOps是一个涵盖了大型语言模型(如GPT系列)开发、部署、维护和优化的一整套实践和流程。LLMOps 的目标是确保高效、可扩展和安全地使用这些强大的 AI 模型来构建和运行实际应用程序。它涉及到模型训练、部署、监控、更新、安全性和合规性等方面。
特点:
- 低代码/无代码开发:Dify通过可视化的方式允许 开发者轻松定义Prompt、上下文和插件 等,无需深入底层技术细节。
- 模块化设计:Dify采用模块化的设计, 每个模块都有清晰的功能和接口 ,开发者可以根据需求选择性地使用这些模块来构建自己的AI应用。
- 丰富的功能组件:平台提供了包括AI工作流、RAG管道、Agent、模型管理等丰富功能组件,帮助开发者从原型到生产的全过程。
- 支持多种大语言模型:Dify已支持主流的模型,开发者能够根据自己的需求选择最适合的模型来构建AI应用。
中文文档:https://docs.dify.ai/v/zh-hans
FastGPT
FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!
它提供了数据处理、模型调用、RAG(Retriever-Augmented Generation)检索、可视化AI工作流编排等能力,使用户能够轻松构建复杂的AI应用
对于常规的 RAG 架构图,这张图可以明显看到大模型模块被放大,而且文件入库的流程都会先调用大模型。
Dify项目实操
1.安装Docker
官网下载:https://www.docker.com/,直接安装即可,需登录
2.安装git
官网下载:https://git-scm.com/downloads, 直接安装即可
3.克隆 Dify 源代码至本地环境(需在新创建的文件夹中右键选择Open Git Bash here)。
git clone https://github.com/langgenius/dify.git
4.启动Dify
使用vscode打开Dify项目,打开docker文件夹,将.env.example
这个文件复制一份命名为.env
打开一个cmd窗口,进入项目的docker文件中
执行以下命令:需等待
docker compose up -d
等待容器启动完成之后,打开http://localhost/install
进行设置管理员账户
设置完成后登录就完成了dify的本地部署
模型配置
首先需要进行模型设置,应用要可以使用都是依赖于模型提供推理服务。dify支持的模型还算比较全,Openai、讯飞星火、智谱chatglm、零一万物、通义千问、文心一言、月之暗面,还支持Ollama、localai,还有一个选项是兼容Openai的模型,这样我就可以把本地部署的one-api也可以配置上。模型配置这块可以打个高分。
1、首页右上角,点击个人账户,下拉点击设置,即可打开设置页面
2、左侧点击模型供应商,配置需要的模型即可,目前智谱、通义千问、讯飞、零一都可以薅羊毛
3、这里一定要配置好系统模型,新建应用自动生成提示词、显示回答问题提示都用到了,配置就在当前页面的右上角“系统模型设置”
4、模型验证,首页随便新建一个应用,如果可以正常聊天有回复,说明模型配置成功
创建应用后会自动跳转到应用概览页。点击左侧菜单 编排 来编排应用。
在右上角去选择千问的模型
填写提示词
提示词用于约束 AI 给出专业的回复,让回应更加精确。你可以借助内置的提示生成器,编写合适的提示词。提示词内支持插入表单变量,例如 {{input}}
。提示词中的变量的值会替换成用户填写的值。
示例:
- 输入提示指令,要求给出一段面试场景的提示词。
- 右侧内容框将自动生成提示词。
- 你可以在提示词内插入自定义变量。
添加知识库
可以按照默认的去进行文本分段和清洗
在回到自己创建的聊天助手应用中,在知识库中选择自己上传的知识库
这样就完成了一个最简单的Dify实现去RAG知识库。
其他用法可以去参考官网的文档:https://docs.dify.ai/zh-hans
重点
- 由于篇幅实在太长,同时MD格式导入图片一直有问题,这边请通过文末名片获取完整案例