CrabNote螃蟹笔记

如何让RAG的内存效率提高32倍(代码详解)!

如何让RAG的内存效率提高32倍(代码详解)!

如何让RAG的内存效率提高32倍(代码详解)! 如何让RAG的内存效率提高32倍(代码详解)! Modified April 5 No access memory1775325146679 00:00 Code block Python Create collection with schema and index client.create collection( collection name="fastest rag", schema=schema, index params=index params ) Insert data to index client.insert( collection name="fastest rag", data=[ {"context": context, "binary vector": binary embedding} for context, binary embedding in zip(batch context, binary embeddings) ] ) 索引是一类专用的数据结构,能够助力优化数据检索操作的执行效率。 4)检索 在检索阶段,我们执行以下操作: • 对用户查询进行嵌入处理,并对其应用二进制量化。 • 采用汉明距离作为检索度量指标来对比二进制向量。 • 检索出相似度最高的前5个文本块。 • 将检索到的文本块添加至上下文信息中。 具体实现方式如下: Code block Python Generate float32 query embedding query embedding = embed model.get query embedding(query) Apply binary quantization to query binary query = binary quantize(query embedding) Perform similarity search using Milvus search results = client.search( collection name="fastest rag", data=[binary query], anns field="binary vector", search params={"metric type": "HAMMING"}, output fields=["context"], limit=5 Retrieve top 5 similar chunks ) Store retrieved context full context = [] for res in search results: context = res["payload"]["context"] full context.append(context) 5)生成 接下来,我们利用Kimi K2指令模型构建生成流程,该模型由Groq提供极速AI推理服务。 我们将查询语句与检索到的上下文内容一同写入提示模板,再将其传入大语言模型。 Code block Python from llama index.llms.groq import Groq from llama index.core.base.llms.types import ( ChatMessage, MessageRole ) llm = Groq( model="moonshotai/kimi k2 instruct", api key=groq api key, temperature=0.5, max tokens=1000 ) prompt template = ( "Context information is below.\n" " \n" "CONTEXT: {context}\n" " \n" "Given the context information above think step by step " "to answer the user's query in a crisp and concise manner. " "In case you don't know the answer say 'I don't know!'.\n" "QUERY: {query}\n" "ANSWER: " ) query = "Provide concise breakdown of the document" prompt = prompt template.format(context=full context, query=query) user msg = ChatMessage(role=MessageRole.USER, content=prompt) Stream response from LLM streaming response = llm.stream complete(user msg.content) 最后,我们将所有内容整合到一个Streamlit界面中! 为评估其规模与推理速度,我们基于PubMed数据集(超3600万条向量)对该系统进行了测试。 以下是演示效果: 我们的应用: • 在30毫秒内完成3600万+向量检索。 • 1秒内生成回复。 完成! 我们刚刚构建了速度最快的检索增强生成(RAG)技术栈,借助二进制量化(BQ)实现高效检索,并采用极速无服务器部署方式运行我们的人工智能工作流。 代码地址如下:https://github.com/patchy631/ai engineering hub/tree/main/fastest rag milvus groq 再次附上工作流程参考👇 这里需要注意的一点是,二进制量化能够让向量检索层实现极高的效率。但在实际生产环境中,检索操作很少仅仅是单纯的向量查询。 现实场景中的智能体需要同时从Slack、GitHub、Jira、各类数据库以及文档中获取上下文信息。这意味着,身份认证、数据同步、查询路由、权限管控以及结果重排序等环节,与嵌入向量检索本身一样,都成为了核心关注点。 因此,应将二进制量化(BQ)视为检索基础设施中的一个关键组件,而非全部解决方案。你的向量层构建得越快速、越轻量化,就越有空间投入到其他环节,从而让检索系统真正实现规模化落地。 我在近期的一篇文章中详细介绍了这套完整检索基础设施的架构,并拆解了谷歌、微软等企业是如何为其生产环境中的智能体提供上下文支持的。 如果你喜欢这个教程: 找我 → @ avichawla 每天,我都会分享关于DS、ML、大语言模型(LLMs)和检索增强生成(RAGs)的教程和见解。 @ avichawla No access memory1775325146679 00:00 No access memory1775325146679 00:00 索引是一类专用的数据结构,能够助力优化数据检索操作的执行效率。 4)检索 在检索阶段,我们执行以下操作: • 对用户查询进行嵌入处理,并对其应用二进制量化。 • 采用汉明距离作为检索度量指标来对比二进制向量。 • 检索出相似度最高的前5个文本块。 • 将检索到的文本块添加至上下文信息中。 具体实现方式如下: 5)生成 接下来,我们利用Kimi K2指令模型构建生成流程,该模型由Groq提供极速AI推理服务。 我们将查询语句与检索到的上下文内容一同写入提示模板,再将其传入大语言模型。 最后,我们将所有内容整合到一个Streamlit界面中! 为评估其规模与推理速度,我们基于PubMed数据集(超3600万条向量)对该系统进行了测试。 以下是演示效果: 我们的应用: • 在30毫秒内完成3600万+向量检索。 • 1秒内生成回复。 完成! 我们刚刚构建了速度最快的检索增强生成(RAG)技术栈,借助二进制量化(BQ)实现高效检索,并采用极速无服务器部署方式运行我们的人工智能工作流。 代码地址如下:https://github.com/patchy631/ai engineering hub/tree/main/fastest rag milvus groq 再次附上工作流程参考👇 这里需要注意的一点是,二进制量化能够让向量检索层实现极高的效率。但在实际生产环境中,检索操作很少仅仅是单纯的向量查询。 现实场景中的智能体需要同时从Slack、GitHub、Jira、各类数据库以及文档中获取上下文信息。这意味着,身份认证、数据同步、查询路由、权限管控以及结果重排序等环节,与嵌入向量检索本身一样,都成为了核心关注点。 因此,应将二进制量化(BQ)视为检索基础设施中的一个关键组件,而非全部解决方案。你的向量层构建得越快速、越轻量化,就越有空间投入到其他环节,从而让检索系统真正实现规模化落地。 我在近期的一篇文章中详细介绍了这套完整检索基础设施的架构,并拆解了谷歌、微软等企业是如何为其生产环境中的智能体提供上下文支持的。 如果你喜欢这个教程: 找我 → @ avichawla @ avichawla 每天,我都会分享关于DS、ML、大语言模型(LLMs)和检索增强生成(RAGs)的教程和见解。 🔗 原文链接: https://x.com/ avichawla/status/204... https://x.com/ avichawla/status/204... Perplexity、Azure、HubSpot等众多公司如何使用二进制量化技术,使检索增强生成(RAG)的内存效率提高32倍(附代码解释)! 行业内有一种常用的简单技术,能让检索增强生成(RAG)的内存效率提升约32倍! • Perplexity在其搜索索引中采用了该技术 • Azure在其搜索流程中使用了该技术 • HubSpot则将其应用于自身的AI助手 为了学习这项技术,我们将搭建一套检索增强生成系统,可在30毫秒内完成对3600万以上向量的查询。 而支撑该系统的这项技术,名为二进制量化。 技术栈: • Llama Index 用于流程编排(开源) • Milvus 作为向量数据库(开源) • Kimi K2 作为部署在Groq平台上的大语言模型(托管服务) 以下是工作流程: • 摄取文档并生成二进制嵌入向量。 • 创建二进制向量索引,并将嵌入向量存储至向量数据库。 • 检索与用户查询相似度最高的前k个文档。 • 大语言模型基于补充上下文生成回复。 让我们来实现这一流程! 1)加载数据 我们使用LlamaIndex的目录读取工具来导入文档。该工具能够读取多种数据格式,包括Markdown、PDF、Word文档、PowerPoint演示文稿、图片、音频以及视频。 我们在此处使用一个简易的PDF目录读取器以便于讲解说明,但在实际应用中,你的数据摄取流程通常会从多种不同格式的数据源中提取数据,并执行各类预处理操作。 2) 生成二进制嵌入 接下来,我们生成浮点32位格式的文本嵌入向量,并将其转换为二进制向量,从而使内存占用与存储空间缩减至原来的1/32。 这被称为二进制量化。 3)向量索引 完成二进制量化后,我们将向量存储并索引到Milvus向量数据库中,以便高效检索。