企业内自主搭建 RAG 可以参考以下步骤:
同时,企业在构建有效的 RAG 系统时,需要考虑以下因素:
此外,还需了解 RAG 的相关概念和优势:
|导入依赖库加载所需的库和模块。其中,feedparse用于解析RSS订阅源ollama用于在python程序中跑大模型,使用前请确保ollama服务已经开启并下载好模型|从订阅源获取内容下面函数用于从指定的RSS订阅url提取内容,这里只是给了一个url,如果需要接收多个url,只要稍微改动即可。然后,通过一个专门的文本拆分器将长文本拆分成较小的块,并附带相关的元数据如标题、发布日期和链接。最终,这些文档被合并成一个列表并返回,可用于进一步的数据处理或信息提取任务。|为文档内容生成向量这里,我们使用文本向量模型bge-m3。https://huggingface.co/BAAI/bge-m3bge-m3是智源研究院发布的新一代通用向量模型,它具有以下特点:支持超过100种语言的语义表示及检索任务,多语言、跨语言能力全面领先(M ulti-Lingual)最高支持8192长度的输入文本,高效实现句子、段落、篇章、文档等不同粒度的检索任务(M ulti-Granularity)同时集成了稠密检索、稀疏检索、多向量检索三大能力,一站式支撑不同语义检索场景(M ulti-Functionality)从hf下载好模型之后,假设放置在某个路径/path/to/bge-m3,通过下面函数,利用FAISS创建一个高效的向量存储。|实现RAG
我之前接受过一个咨询,这位朋友是做广告的,他发现大模型生成的内容有着浓浓的AI味。他咨询说,如果我将一份优秀的广告词库写入知识库,利用RAG技术,AI是不是就可以学习这些内容,然后从而写出更有"人味"的广告词?这问题是将微调和RAG的能力混淆了。通过前文中的流程,我们可以看到RAG主要是在运行时进行信息检索和整合,而不是对模型进行再训练或学习。它不会改变模型的基本参数或能力RAG可以帮助AI获取相关的事实信息,但不能让AI真正"学习"或内化某种写作风格。它更像是一个高级的查询系统,而不是一个学习系统。通过这个章节,我想说明的是,虽然RAG是一个非常强大的技术,而且现在已经有了很多生产级的应用案例,但是构建一个有效的RAG系统并不简单,它是多个流程的配合,在任何一个环节遇到问题,都有可能将检索的结果大打折扣。如果企业想要构建一个有效的RAG系统,要考虑如下几个因素数据是否需要考虑安全性:如果有,则需要私有化部署,需要考虑硬件成本数据集的复杂度和数量级:复杂的数据集会带来高昂的文档清洗、解析和分割成本,而大的数据量级则会带啦存储成本的上升回答质量的要求:对回答质量要求越高,则需要越复杂的检索算法以及更加强大的LLM,这些都会带来算力的成本数据的更新频率:频繁的数据更新可能会需要高昂的维护成本
大语言模型技术的本质导致了大模型的输出结果具有不可预测性,此外,静态的训练数据导致了大模型所掌握的知识存在截止日期,无法即时掌握最新信息。因此,当我们将大模型应用于实际业务场景时会发现,通用的基础大模型无法满足我们的实际业务需求。主要存在以下原因:知识的局限性:模型自身的知识完全源于它的训练数据,而现有的主流大模型(ChatGPT、文心一言、通义千问…)的训练集基本都是抓取网络公开的数据用于训练,对于一些实时性的、非公开的或离线的数据是无法获取到的,这部分知识也就无从具备。幻觉问题:大模型的底层原理是基于数学概率的文字预测,即文字接龙。因此大模型存在幻觉问题,会在没有答案的情况下提供虚假信息,提供过时或通用的信息,从可信度低非权威来源的资料中提供结果等。数据安全性:对于企业来说,数据安全至关重要,没有企业愿意承担数据泄露的风险,将自身的私域数据上传第三方平台进行训练。因此如何大模型落地应用时如何保障企业内部数据安全是一个重要问题。而RAG是解决上述问题的一套有效方案。它可以让大模型从权威的、预先确定的知识来源中检索、组织相关信息,更好地控制大模型生成的文本输出,并且用户可以深入了解LLM如何生成最终的结果。并且,RAG可以和微调结合使用,两者并不冲突。RAG类似于为模型提供教科书,允许它基于特定查询检索信息。这该方法适用于模型需要回答特定的询问或解决特定的信息检索任务。然而,RAG不适合教模型来理解广泛的领域或学习新的语言,格式或样式。微调类似于让学生通过广泛的学习内化知识。这种方法当模型需要复制特定的结构、样式或格式时非常有用。以下是RAG与微调从维度方面的比较:参考资料:《Retrieval-Augmented Generation for Large Language Models:A Survey》(https://arxiv.org/pdf/2312.10997.pdf)