济南住建网站微信公众号做网站

当前位置: 首页 > news >正文

济南住建网站,微信公众号做网站,dede 网站栏目管理,wordpress已发布不显示我们要开发一个生产级的系统#xff0c;还需要对LlamaIndex的各个组件和技术进行深度的理解、运用和调优。本系列将会聚焦在如何让系统实用上#xff0c;包括#xff1a;知识库的管理#xff0c;检索和查询效果的提升#xff0c;使用本地化部署的模型等主题。我将会讲解相…我们要开发一个生产级的系统还需要对LlamaIndex的各个组件和技术进行深度的理解、运用和调优。本系列将会聚焦在如何让系统实用上包括知识库的管理检索和查询效果的提升使用本地化部署的模型等主题。我将会讲解相关的组件和技术辅以代码示例。最终这些文章中的代码将形成一套实用系统。 过去一年大模型的发展突飞猛进。月之暗面的Kimi爆火Llama3开源发布大模型各项能力提升之大有目共睹。 对于大模型检索增强生成RAG系统来说我们越来越认识到其核心不在于模型的能力而是在于如何更好地构建和使用知识库提升检索的效能。 1 知识库的三类数据 无论是企业还是个人我们构建知识库自然希望高质量的数据越多越好。这些数据主要分为三类。 文件电脑上为数众多的文件资料包括方案、文稿、产品资料等通常为PDF、DOCX、PPT等格式网页收集的网页信息比如我们在微信上打开和阅读的公众号文章。如果觉得这些文章有用会收藏起来数据库保存在各种数据库中的文本信息比如企业内部的信息系统会记录用户提出的问题与相应的解决方案 对于个人用户建立个人知识库主要是电脑上的文件资料和收藏的网页信息。而对于企业来说接入和利用已有信息系统的数据库中的文本数据也非常关键。 LlamaIndex是一个专门针对构建RAG系统开发的开源数据框架对于以上三类数据的处理都提供了很好的支持。 2 数据处理的四个步骤 无论是哪一类数据LlamaIndex处理数据的过程都分为四步 1加载数据Load LlamaIndex提供了众多数据接入组件Data Connector可以加载文件、网页、数据库并提取其中的文本形成文档Document。未来还将能提取图片、音频等非结构化数据。 最常用的是SimpleDirectoryReader用来读取文件系统指定目录中的PDF、DOCX、JPG等文件。 我们在LlamaHub上可以找到数百个数据接入组件用来加载各种来源与格式的数据比如电子书epub格式文件的接入组件。 2 转换数据Transform 类似传统的ETL转换数据是对文本数据的清洗和加工。通常输入是文档Document输出是节点Node。 数据处理的过程主要是将文本分割为文本块Chunk并通过嵌入模型对文本块进行嵌入Embedding。同时可提取元数据Metadata例如原文件的文件名和路径。 这里有两个重要的参数chunk_size和chunk_overlap分别是文本块分割的大小和相互之间重叠的大小。我们需要调整这些参数从而达到最好的检索效果。 3建立索引Index 索引是一种数据结构以便于通过大语言模型LLM来查询生成的节点。 最常使用的是向量存储索引Vector Store Index这种方式把每个节点Node的文本逐一创建向量嵌入vector embeddings可以理解是文本语义的一种数字编码。 不同于传统的关键词匹配通过向量检索比如余弦相似度我们可以找到语义相近的文本尽管在文字上有可能截然不同。 4存储数据Store 默认情况下以上操作生成的数据都保存在内存中。要避免每次重来我们需要将这些数据进行持久化处理。 LlamaIndex 提供了内置的persisit()方法将索引数据持久化保存在磁盘文件中。更常见的做法是通过索引存储器Index Store将索引保存在向量数据库中如Chroma、LanceDB等。 知识库的管理不仅要保存索引数据也要保存所有文档Document及其提取的节点Node。 LLamaIndex提供了文档存储器Document Store把这些文本数据保存在MongoDB、Redis等NoSQL数据库中这样我们可以对每一个节点进行增删改查。 3 代码实现示例 下面结合代码介绍构建知识库的过程。 我们将使用LlamaIndex来加载和转换文档和网页数据建立向量索引并把索引保存在Chroma把文档和节点保存在MongoDB。 示例1加载本地文件 对于在本地文件系统中的文件LlamaIndex提供了非常简便的方法来读取SimpleDirectoryReader。 我们只需要将已有的文件放在指定的目录下比如./data通过这个方法就可以全部加载该目录下的所有文件包括子目录中的文件。 from llama_index.core import SimpleDirectoryReader documents SimpleDirectoryReader(input_dir./data, recursiveTrue).load_data() print(fLoaded {len(documents)} Files)如果我们在知识库中上传了新的文件还可以指定加载这个文件而非读取整个目录。 SimpleDirectoryReader(input_files[path/to/file1, path/to/file2])文件加载后LlamaIndex会逐一提取其中的文本信息形成文档Document。通常一个文件对应一个文档。 示例2加载网页信息 LlamaIndex读取和加载网页信息也很简单。这里我们用到另一个工具SimpleWebPageReader。 给出一组网页的URL我们使用这个工具可以提取网页中的文字信息并分别加载到文档Document中。
代码中我给出的网页是我写的《大卫说流程》系列文章。你可以改为任何你想读取的网页。未来你可以针对这些网页内容来向大模型提问。 使用这个工具我们需要安装llama-index-readers-web和html2text组件。为了行文简洁未来不再说明。你可以在运行代码时根据提示安装所需的Python库和组件。 示例3分割数据成块 接下来我们通过文本分割器Text Splitter将加载的文档Document分割为多个节点Node。 LlamaIndex使用的默认文本分割器是SentenceSplitter。我们可以设定文本块的大小是256重叠的大小是50。文本块越小那么节点的数量就越多。 from llama_index.core.node_parser import SentenceSplitter nodes SentenceSplitter(chunk_size256, chunk_overlap50).get_nodes_from_documents(documents) print(fLoad {len(nodes)} Nodes)之前我介绍过文本分割器Spacy对中文支持更好。我们可以通过Langchain引入和使用。 示例4数据转换管道与知识库去重 上一步给出的数据转换方法其实并不实用。问题在于没有对文档进行管理。我们重复运行时将会重复加载导致知识库内重复的内容越来越多。 为了解决这个问题我们可以使用LlamaIndex提供的数据采集管道Ingestion Pipeline的功能默认的策略为更新插入upserts实现对文档进行去重处理。 示例5索引与存储的配置 在上面的数据采集管道的代码示例中我们配置了用来生成向量索引的嵌入模型embed_model以及采用Chroma作为向量库MongoDB作为文档库对数据进行持久化存储。 嵌入模型的配置如下。这里我们通过之前介绍过的HugginFace的命令行工具将BAAI的bge-small-zh-v1.5嵌入模型下载到本地放在“localmodels”目录下。 from llama_index.embeddings.huggingface import HuggingFaceEmbedding embed_model HuggingFaceEmbedding(model_name./localmodels/bge-small-zh-v1.5)然后配置向量库Chroma将把数据存储在我们指定的“storage”目录下。 import chromadb from llama_index.vector_stores.chroma import ChromaVectorStore db chromadb.PersistentClient(path./storage) chroma_collection db.get_or_create_collection(think) chroma_vector_store ChromaVectorStore(chroma_collectionchroma_collection)我们可以使用Redis或MongoDB来存储处理后的文档、节点及相关信息包括文档库docstore和索引信息库index_store。 作为示例我们选用在本机上安装的MongoDB。 示例6构建知识库 现在我们可以将此前的数据采集管道生成的文档和节点载入到文档知识库中docstore。 storage_context.docstore.add_documents(nodes) print(fLoad {len(storage_context.docstore.docs)} documents into docstore) 这步完成后我们在MongoDB中可以找到一个名为“db_docstore”的数据库里面有三张表分别是 docstore/datadocstore/metadatadocstore/ref_doc_info 我们可以通过MongoDB来查询相关的文档和节点元数据以及节点之间的关系信息。 未来当你有更多的文件和网页需要放入知识库中只需要遵循以上的步骤加载和处理。 示例7实现RAG问答 完成知识库的构建之后我们可以设定使用本地的LLM比如通过Ollama下载使用Gemma 2B模型。 然后加载索引生成查询引擎Query Engine你就可以针对知识库中的内容进行提问了。 以上主要介绍了使用LlamaIndex构建知识库的过程。 未来我们可以结合Streamlit、Flask等前端框架进一步开发成一个完善的知识库管理系统以便对知识内容进行持续的增加与更新并支持灵活的配置文本分割的各项参数和选择嵌入模型。 ​ 如何学习AI大模型 作为一名热心肠的互联网老兵我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。 这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 一、全套AGI大模型学习路线 AI大模型时代的学习之旅从基础到前沿掌握人工智能的核心技能 二、640套AI大模型报告合集 这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。 三、AI大模型经典PDF籍 随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。 四、AI大模型商业化落地方案 作为普通人入局大模型时代需要持续学习和实践不断提高自己的技能和认知水平同时也需要有责任感和伦理意识为人工智能的健康发展贡献力量。