微信扫码
与创始人交个朋友
我要投稿
大模型应用领域已经呈现出多样化的发展态势,技术和参数的更新速度也相当迅猛。开源社区在推动大模型应用方面发挥着重要作用,不仅如此,还涌现了诸多在线LLM对话问答和知识库检索应用。许多这类应用甚至只需注册即可免费使用,在日常工作中,笔者也经常依赖LLM,并已将其视为不可或缺的工具之一。
举例来说,在搜索领域,传统的基于搜索引擎的检索有时无法与LLM的准确度相提并论。目前,许多检索任务,如代码bug的提问、知识的搜索、文献阅读等,都倾向于选择LLM作为首选工具。笔者经常使用的在线LLM问答平台包括ChatGPT、Kimichat(https://kimi.moonshot.cn/)、Sider等。
除了这些问答平台外,还有一些其他有用的工具,比如Explorer。Explorer是一个通过关键词检索图文信息,并根据逻辑关系整理结果的网站(https://explorer.globe.engineer/)。以搜索词"Tunnel Design"为例,它会根据关键词检索相关信息,并将结果整理反馈给你。你可以点击图片访问信息出处。
读者们常用的AI工具有哪些呢?欢迎在留言分享。
除了在线的LLM应用,笔者也使用一些本地化的应用,agent、知识库RAG等,本文要分享的重点是本地化知识库RAG(检索增强生成,Retrieval-Augmented Generation),笔者在进行LLM微调过程中遇到了一些问题,其中关键的问题之一就是数据,而RAG提供了一些新的思路。
Retrieval-Augmented Generation (RAG) 是一种结合了信息检索和生成式预训练语言模型(LLM)的技术,旨在提高生成响应的质量和相关性。这种技术通过引入一个信息检索组件,使用户输入不仅仅基于模型在训练过程中学到的信息,而是结合了最新的外部数据源。
以下是 RAG 工作流程的简要概述:
创建外部数据:这指的是模型原始训练数据集之外的新数据。这些数据可以来自多个来源,如API、数据库或文档库,并且可能以文件、数据库记录或长文本等多种形式存在。通过另一种AI技术,即嵌入语言模型,将数据转换为数值表示,并存储在向量数据库中。这个过程创建了一个知识库,供生成式AI模型理解。
检索相关信息:接下来进行相关性搜索。用户查询被转换为向量表示,并与向量数据库进行匹配。例如,考虑一个可以为组织回答人力资源问题的智能聊天机器人。如果员工搜索“我有多少年假?”系统将检索与年假政策文件以及个人员工过去的休假记录相关的文档。这些特定文档将被返回,因为它们与员工输入的内容高度相关。相关性是通过数学向量计算和表示来确定的。
增强LLM提示:RAG模型通过添加检索到的相关数据来增强用户输入(或提示)。这一步使用提示工程技术与LLM有效沟通。增强的提示使得大型语言模型能够针对用户查询生成准确的答案。
更新外部数据:如果外部数据变得过时怎么办?为了保持检索信息的时效性,需要异步更新文档并更新文档的嵌入表示。这可以通过自动化的实时过程或周期性的批处理来完成。这是数据分析中的一个常见挑战,可以使用不同的数据科学方法来处理变更管理。
通过这种方式,RAG 能够利用最新的外部数据来增强预训练语言模型的生成能力,从而提供更加准确和相关的响应。这对于需要实时更新信息的应用场景尤其有用,例如智能聊天机器人、问答系统等。
--本段信息来源:https://aws.amazon.com/what-is/retrieval-augmented-generation/
对于普通用户来说,许多免费平台已经提供了足够的功能,但笔者也对这种免费模式的可行性产生了疑问。即使是基于开源模型部署、搭建平台,或者是借助第三方收费的API接口来实现,都需要承担相当大的成本。那么这些平台如何盈利呢?当然,一些平台提供增值服务,比如Sider、FlowGPT等,提供限量的免费服务和增值服务,但它们的盈利能力是否可持续并不是我关注的焦点。免费总是另有所图,比如你上传的私有数据,甚至是你的提问方式等。
对于企业来说,许多数据是不应该上传的,因为它们具有保密性要求。数据安全是首要考虑的问题。随着人工智能的发展,垂直领域内的应用更加重视数据,因为数据是其中最核心的资源,模型算法基本上大差不差的,算力资源也相对容易获取,唯有数据资源是最难得到的。对于一些人来说,数据隐私也是一个重要问题,他们不希望他们的检索或数据被第三方获取。因此,本地化的LLM应用可能是一种有效的解决方案。在开源社区里,出现了一些本地化部署LLM的解决方案,基于开源的LLM模型权重和有限的硬件资源普通人也能够搭建自己专属的LLM服务。
这里面最火的或许就是Ollama,Ollama提供了对Mac、Linux、Windows的安装包,集成了基于命令行的对话模式,以及API服务模式,只需要通过简单的命令即可完成模型的运行和开始使用。笔者测试和使用了Ollama运行大模型的效果,响应速度挺快的(显卡:RTX 4090 24GB)。感兴趣的读者可以在这里下载:https://ollama.com/download,Ollama支持的模型很多,包括中文用户可选阿里云开发的Qwen。
基于命令行的对话,对于一般用户来说,显得不那么友好,在开源社区里,也有很多开源的对话UI框架,提供了友好的界面,笔者觉得AnythingLLM跟Ollama简直是绝配,对于一般用户而言很友好,但感觉中文支持不是很好。
anythingLLM下载地址:https://useanything.com/download。同样anythingLLM提供了跨平台的安装包。anythingLLM提供了本地知识库RAG(Retrival Augment Generate)构建的解决方案。本地知识库RAG的构建需要三个核心内容:1)大模型(包含embedding模型);2)向量数据库;3)知识文档;
支持的大模型包括Ollama支持运行的,OpenAI的模型等等,具体可见说明文档(https://docs.mintplex.xyz/),anything提供LLM Provider形式的支持,支持各类的LLM模型。但是没找到对中文支持很好的embedding模型。
目前有很多可选的,anythingLLM支持milvus,qdrant,pg-vector等等,硬件资源充足的可选milvus(https://milvus.io/docs)、qdrant(https://qdrant.tech/documentation/quick-start/)容器化部署,它是开源的,而qdrant提供了一些云端资源可以免费使用。笔者在较早之前构建的围岩地质图像+文本检索服务就是基于milvus开发。
AnythingLLM提供了基于WorkSpace的知识库管理,可以满足对不同知识库RAG的构建需求。对于文档知识库的构建,其实有很多细节问题,尽管软件提供了对PDF文档的解析,但是实际效果质量一般,这会直接影响RAG的效果。比如很多pdf文档是图片内,通过OCR方法解析成文本,文本质量存在一定问题。建议上传文档是markdown文本。
除了基于Ollama+anythingLLM构建本地知识库RAG应用,笔者其实更推荐使用Langchain-Chatchat,开源框架,对中文支持更友好,提供在线web UI的使用,但是部署的环境搭建等相对复杂一些。
仓库地址:https://github.com/chatchat-space/Langchain-Chatchat.git
本质上是一样的原理,将文档知识向量化后,通过检索方式获取相近信息的上下文,然后喂给LLM,让LLM在限定的知识域里回答,具体原理可以查看开源仓库的介绍,此处不做赘述。
笔者在本地部署了langchain-Chatchat框架,并构建了一个关于隧道相关规范的知识库(使用beg-large-zh中文的embeddingg模型),这种围绕知识库的回答,效果很不错。langchain-chatchat可以设置引用的数量,并根据围绕引用的内容进行回答。
除了上述RAG框架,还有一些其他框架,例如英伟达推出的基于llamaindex+trt-llm的trt-llm-rag-windows(https://github.com/NVIDIA/trt-llm-rag-windows.git),这些框架都能够实现个人或企业私有化知识库RAG的搭建。
基于知识库的RAG能帮助LLM提供围绕具体知识域的回答,或者说使模型更为聚焦,提高回答的准确性。RAG有很大的优势,不需要重新训练模型或者finetune,这都是成本较高的事情。RAG系统的搭建涉及:模型的选择(包括embedding模型)、知识库文档的数据质量(尽管开源框架提供了很多对文档解析的功能,例如对pdf的ocr处理等,但依然不能保证文档具有很高的质量,在笔者的测试中,推荐使用markdown格式,对pdf文档进行整理,这可能是比较费人工的事情。)、embedding参数等。另一个笔者认为应该关注的是多模态的RAG,毕竟很多文档并非纯文字,上述的框架主要是针对纯文本知识库,根据目前了解的多模态RAG有解决方案了可参见llamaIndex文档,待进一步研究学习。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-14
2024-04-26
2024-03-30
2024-04-12
2024-05-10
2024-07-18
2024-05-22
2024-05-28
2024-04-25
2024-04-26
2024-11-14
2024-11-13
2024-11-13
2024-11-13
2024-11-12
2024-11-11
2024-11-08
2024-11-07