探索LlamaIndex:如何用Django打造高效知识库检索

ops/2024/9/22 19:45:09/

简介

LlamaIndex(前身为 GPT Index)是一个数据框架,为了帮助我们去建基于大型语言模型(LLM)的应用程序。

主要用于处理、构建和查询自定义知识库。

它支持多种数据源格式 exceltxtpdfmd 等等,并且以创建高效的数据结构以便快速检索著称,允许我们用自然地语言区查询数据,而不需要学习复杂的查询语言或了解底层数据结构。

下面我们来看看怎么在 django 中使用 LlamaIndex

django_10">安装django模块

pip install llama-index

一个简单的例子:

我们进入项目根目录,建立 data 文件夹,提前准备好我们需要检索的文件

如下面图所示:


这里的文件可以是 pdfdocexcel等,我这里准备了一个 txt 文件。

打开 tetsite/members/views.py 视图文件:

python">from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
def llamaIndexOpenAiSearch(request):documents = SimpleDirectoryReader("data").load_data()index = VectorStoreIndex.from_documents(documents)query_engine = index.as_query_engine()response = query_engine.query("钥匙说了什么")return JsonResponse({'response': response})

进入路由文件 testsite/members/urls.py :

python">path('llama-index-open-ai-search/', views.llamaIndexOpenAiSearch, name='search'),

打开我们的api工具,或者浏览器

访问 http://127.0.0.1:8080/polls/llama-index-open-ai-search

对比一下我们的测试集txt,是不是检索答案就出来了,这个demo是一个很简单LlamaIndex 入门例子。

我们上面引用的是 llama-index-coreLlamaIndex 核心自定义包

让我们可以使用喜欢的 LLM 、嵌入和向量存储提供程序进行构建。

然而正在上面例子中,LlamaIndexVector-embeddings 默认指定的是 openaiLLM 进行 Vector-embeddings 嵌入,然后创建索引

python">from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(documents)

持久化

文本被索引后,现在已经准备好进行查询了!

但是,嵌入所有文本可能非常耗时,如果您使用的是 openaiLLM,那么成本也会很高。

我们也可以使用下列方式存储索引数据持久保存到磁盘,如果不指定,便会存储在内存中:

python">index.storage_context.persist(persist_dir="<persist_dir>")

然后,我们可以通过像这样加载持久索引来避免重新加载和重新索引数据:

python">from llama_index.core import StorageContext, load_index_from_storage
# rebuild storage context
storage_context = StorageContext.from_defaults(persist_dir="<persist_dir>")
# load index
index = load_index_from_storage(storage_context)

假如我们想存储到向量数据库中,怎么做呢。

打开 tetsite/members/views.py 视图文件,新增一个方法视图:

python">import chromadb
from llama_index.core import VectorStoreIndex
from llama_index.core import StorageContext
def searchIndexVectory():db = chromadb.PersistentClient(path="./chroma_db")chroma_collection = db.get_or_create_collection("quickstart")storage_context = StorageContext.from_defaults(vector_store=chroma_collection)documents = SimpleDirectoryReader("data").load_data()index = VectorStoreIndex.from_vector_store(documents, storage_context=storage_context)query_engine = index.as_query_engine()response = query_engine.query("人形机器人的发展点在哪里?")return JsonResponse({'response': response})

记得运行之前更新一下 LlamaIndexChroma ,由于 llamaIndex 随时在更新,所以我们需要随时关注官网的动态,还有库的更新。

pip install -U llama-index chromadb

LlamaIndex本地模型

打开 tetsite/members/views.py 视图文件,新增一个方法视图:

python">def llamaIndexSearch(request):

加载文档

python">documents = SimpleDirectoryReader("data").load_data()

设置嵌入模型

python"> embed_model = HuggingFaceEmbedding(model_name="sentence-transformers/all-MiniLM-L6-v2")

设置llm模型

python">   llm = HuggingFaceLLM(model_name="gpt2",tokenizer_name="gpt2",device_map="cpu",generate_kwargs={"temperature": 0.7, "do_sample": False})

创建服务上下文

python">service_context = ServiceContext.from_defaults(llm=llm,embed_model=embed_model)

创建索引

python">index = VectorStoreIndex.from_documents(documents,service_context=service_context)

创建查询引擎

python">query_engine = index.as_query_engine()

执行查询

python">response = query_engine.query("钥匙说了什么")

运行过程中我们会看到python会自动帮我们下载 sentence-transformers/all-MiniLM-L6-v2gpt2 模型

由于这是用的 HuggingFace的方式,所以模型会下载我们设置的 HF_HOME 目录。

所以我们可以提前配置这个目录,更好的管理模型。

python">import os
os.environ['HF_HOME'] = '/path/to/new/cache/directory'

浏览器或接口访问 http://127.0.0.1:8080/polls/llama-index-search ,可以得到下面结果。

这里需要提一下,因为是本地模型,准确率取决于你选择的模型,还有硬件,所以一定要根据自己的事迹情况来选择

后面我会详细讲一下,每一种模型大概需要的硬件配置,和生成对应的效果,效率。

总结

LlamaIndex 确实是一个非常强大的工具,特别是在处理和检索大规模文本数据方面。

它还支持自定义数据加载器,以适应特殊的数据格式。支持数据分块和压缩,优化存储和检索效率。

里面的代码也可以看出它和可以与 Langchain 无缝集成,也解决了 Langchian 检索的问题,可以说 LlamaIndex 就是为检索而准备的工具。

LlamaIndex 的出现就成为构建智能文档检索、问答系统、知识管理平台等应用的强大工具。

它不仅简化了复杂的数据处理和 AI 集成过程,还提供了高度的灵活性和可扩展性,使其能够适应各种不同的用例和需求。


http://www.ppmy.cn/ops/56504.html

相关文章

设计模式探索:建造者模式

1. 什么是建造者模式 建造者模式 (Builder Pattern)&#xff0c;也被称为生成器模式&#xff0c;是一种创建型设计模式。 定义&#xff1a;将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 建造者模式要解决的问题&#xff1a; 建造者模…

pnpm workspace使用教程【Monorepo项目】

目录 前言一、pnpm简介特点&#xff1a;对比 二、 创建项目添加文件 pnpm-workspace.yaml目录结构pnpm workspace: 协议修改配置文件执行 安装 三、命令解析执行包命令所有包操作命令 四、实例代码 前言 前面两篇&#xff0c;我们讲了 yarn workspace 和 lerna &#xff0c; …

怎样在 PostgreSQL 中优化对大数值类型数据的计算?

文章目录 一、选择合适的数据类型二、索引优化三、查询语句优化四、数据库配置调整五、使用扩展功能六、示例七、总结 在 PostgreSQL 中处理大数值类型数据&#xff08;例如 BIGINT、NUMERIC 等&#xff09;的计算时&#xff0c;可能会遇到性能瓶颈。为了优化这些计算&#xff…

景点门票销售管理系统(数据库课设)

1.课设要求描述 ●实现票价管理&#xff0c;应分老年、小孩、成人、团体等&#xff1b; ●实现营业员管理&#xff1b; 实现门票销售、退票管理&#xff1b; ● 创建存储过程&#xff0c;统计指定日期的门票销售情况&#xff1b; ●创建存储过程&#xff0c;统计指定月份…

Idea 2023 使用GitLab提交代码提示输入Token

项目场景&#xff1a; 今天电脑换硬盘了&#xff0c;安装了 IDEA2023 款的社区版开发工具&#xff0c;下载代码后&#xff0c;提交并推送代码到远程服务器的时候&#xff0c;提示输入Token&#xff0c;并不是用户名和密码。 问题描述 推送代码到远程GitLab本地仓库的时候&…

AtCoder Beginner Contest 359

目录 A - A Healthy Breakfast B - Vertical Reading C - Move It D - Ghost Ants E - Random Swaps of Balls F.暂无 G - Suitable Edit for LIS A - A Healthy Breakfast 就三个字母直接模拟&#xff0c;只有xRM,RMx,RxM三种 void solve(){string a; cin>>a;i…

开源浏览器引擎对比与适用场景:WebKit、Chrome、Gecko

WebKit与Chrome的Blink引擎对比 起源与关系&#xff1a; WebKit最初由苹果公司开发&#xff0c;用于Safari浏览器。后来&#xff0c;WebKit逐渐成为一个独立的开源项目&#xff0c;被多个浏览器厂商采用。Blink是Google基于WebKit项目分支出来的一个浏览器引擎&#xff0c;用于…

回收家电哪个平台靠谱

在当今社会&#xff0c;随着科技的飞速发展和人们生活水平的不断提高&#xff0c;家电产品的更新换代速度越来越快。如何妥善处理日用家电&#xff0c;既能实现资源的有效利用&#xff0c;又能为环保出一份力&#xff0c;成为了许多人关注的焦点。在众多的家电回收平台中&#…