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

news2024/10/5 13:05:49

简介

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

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

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

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

安装django模块

pip install llama-index

一个简单的例子:

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

如下面图所示:


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

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

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 :

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 嵌入,然后创建索引

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

持久化

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

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

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

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

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

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 视图文件,新增一个方法视图:

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 视图文件,新增一个方法视图:

def llamaIndexSearch(request):

加载文档

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

设置嵌入模型

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

设置llm模型

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

创建服务上下文

service_context = ServiceContext.from_defaults(
           llm=llm,
           embed_model=embed_model
       )

创建索引

index = VectorStoreIndex.from_documents(
          documents,
          service_context=service_context
      )

创建查询引擎

query_engine = index.as_query_engine()

执行查询

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

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

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

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

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.coloradmin.cn/o/1900983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ELK优化之Filebeat部署

目录 1.安装配置Nginx 2.安装 Filebeat 3.设置 filebeat 的主配置文件 4.修改Logstash配置 5.启动配置 6.kibana验证 主机名ip地址主要软件es01192.168.9.114ElasticSearches02192.168.9.115ElasticSearches03192.168.9.116ElasticSearch、Kibananginx01192.168.9.113ng…

测试人员如何管理项目与风险预警

在平时工作过程中&#xff0c;你有没有因项目延时&#xff0c;需求频繁变更&#xff0c;开发提测质量不高&#xff0c;以及漏测的情况下&#xff0c;背了不少锅的情况呢&#xff1f; 作为测试人员&#xff0c;我们应该如何发挥积极主动性&#xff0c;进行项目管理&#xff0c;有…

VuePress 的更多配置

现在&#xff0c;读者应该对 VuePress、主题和插件等有了基本的认识&#xff0c;除了插件&#xff0c;VuePress 自身也有很多有用的配置&#xff0c;这里简单说明下。 ‍ ‍ VuePress 的介绍 在介绍了 VuePress 的基本使用、主题和插件的概念之后&#xff0c;我们再来看看官…

CTS单测某个模块和测试项

1 &#xff0c;测试单个模块命令 run cts -m <模块名> 比如&#xff1a;run cts -m CtsUsbTests模块名可以从测试报告中看&#xff0c;如下&#xff1a; 2&#xff0c; 测试单个测试项 run cts -m <模块名> -t <test_name> 比如&#xff1a;run cts -m ru…

基于大象机器人UltraArm P340机械臂和传送带,实现教育场景中的自动化分拣系统!

引言 今天我们将展示一个高度自动化的模拟场景&#xff0c;展示多个机械臂与传送带协同工作的高效分拣系统。在这个场景中&#xff0c;机械臂通过视觉识别技术对物体进行分类&#xff0c;并通过精确的机械操作将它们放置在指定的位置。这一系统不仅提高了分拣的速度和准确性&am…

dotnet ef工具使用

设置工具安装目录 dotnet tool install dotnetsay --tool-path G:\dotnet-tools安装 dotnet tool install --global dotnet-ef更新 dotnet tool update --global dotnet-ef查看版本 dotnet ef --version创建迁移文件 # 只有一个dbcontext dotnet ef migrations add init #…

http读书笔记

持久化 HTTP/1.1 和一部分的 HTTP/1.0 想出了 持久连接&#xff08;HTTP Persistent Connections&#xff0c; 也称为 HTTP keep-alive 或 HTTP connection reuse&#xff09; 的方法。 持久连接的特点是&#xff0c; 只要任意一端 没有明确提出断开连接&#xff0c; 则保持 T…

mysql 9 新特新

mysql9新特性 新特性Audit Log NotesC API NotesCharacter Set SupportCompilation NotesComponent NotesConfiguration NotesData Dictionary NotesData Type NotesDeprecation and Removal NotesEvent Scheduler NotesJavaScript ProgramsOptimizer NotesPerformance Schema …

微机原理与单片机 知识体系梳理

单片机笔记分享 我个人感觉单片机要记的东西很多&#xff0c;也很琐碎&#xff0c;特别是一些位、寄存器以及相关作用等&#xff0c;非常难以记忆。因此复习时将知识点整理在了一起做成思维导图&#xff0c;希望对大家有所帮助。内容不是很多&#xff0c;可能有些没覆盖全&…

轻预压:滚珠丝杆精度与刚性的平衡点!

预压是指在所需的工作负荷下&#xff0c;使滚珠丝杆预先承受一定的负荷&#xff0c;从而使滚珠丝杆的轴向向心度和侧向偏差达到较小的偏差范围&#xff0c;保证了滚珠丝杆的准确性和稳定性&#xff0c;也确保机器的高精度和长期运作的可靠性。 预压是滚珠丝杆设计中的一个重要参…

基于Java技术的人事管理系统

你好&#xff0c;我是专注于计算机科学领域的小野。如果你对人事管理系统感兴趣或有相关需求&#xff0c;欢迎私信交流。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; B/S模式、Java技术、SpringBoot 工具&#xff1a; Eclipse、MySQL、浏览…

Selenium 切换 frame/iframe

环境&#xff1a; Python 3.8 selenium3.141.0 urllib31.26.19说明&#xff1a; driver.switch_to.frame() # 将当前定位的主体切换为frame/iframe表单的内嵌页面中 driver.switch_to.default_content() # 跳回最外层的页面# 判断元素是否在 frame/ifame 中 # 126 邮箱为例 # …

基于若依的文件上传、下载

基于若依实现文件上传、下载 文章目录 基于若依实现文件上传、下载1、前端实现-文件上传1.1 通用上传分析1.2 修改实现上传接口 2、后端实现-文件上传3、后端实现-文件下载4、前端实现-文件下载 官网其实也写了&#xff0c;但是我是自己改造封装了一下&#xff0c;再次迈向全栈…

vofa+:一款超级好用的可视化串口调试软件

目录 一、软件配置 1、先配置好usart1串口 2、重定向printf: 3&#xff0c;勾选魔术棒中的LIB 二、vofa的使用 1、RawData模式 2、FireWater 一、软件配置 1、先配置好usart1串口 2、重定向printf: 在 stm32f4xx_hal.c中添加&#xff1a; #include <stdio.h> e…

加密货币大利好!9月降息概率突破70%!美国可能大幅降息或多次降息?

根据最新消息&#xff0c;美国9月降息的概率已经突破70%&#xff0c;这对加密货币市场来说是个利好消息。与此同时&#xff0c;美国经济表现疲软&#xff0c;可能会陷入衰退&#xff0c;联邦储备系统(Fed)接下来会不会果断采取大幅降息措施备受关注。 美国劳工统计局7月5日公布…

VBA初学:零件成本统计之一(任务汇总)

经过前期一年多对金蝶K3生产任务流程和操作的改造和优化&#xff0c;现在总算可以将零件加工各个环节的成本进行归集了。 原本想写存储过程&#xff0c;通过直接SQL报表做到K3中去的&#xff0c;但财务原本就是用EXCEL&#xff0c;可以方便调整和保存&#xff0c;加上还有一部分…

Java对象比对工具

背景 前段时间的任务中&#xff0c;遇到了需要识别两个对象不同属性的场景&#xff0c;如果使用传统的一个个属性比对equals方法&#xff0c;会存在大量的重复工作&#xff0c;而且为对象新增了属性后&#xff0c;比对方法也需要同步修改&#xff0c;不方便维护&#xff0c;于是…

76 4G模组 境外拨号入网注意

1 引言 最近朋友把国内的设备拿到新加坡了&#xff0c;然后发现原本国内可以使用的设备无法在异国他乡联网&#xff0c;所以就叫我来看看&#xff0c;发现是附网返回状态、入网APN发生了改变导致的。另外&#xff0c;如果在境外使用国产4G模组拨号入网&#xff0c;也需要关注4G…

Nginx实战:nginx性能压测(ab)

在nginx的生产实践中,不管是服务上线,还是性能优化,都会遇到需要对nginx的性能压测,本文介绍一个简单的压测工具:ab命令 ab(Apache Bench)是一个常用的HTTP压力测试工具,可以用来测试Nginx的性能和压力。ab命令可以指定并发请求数、请求数、请求类型等参数,并输出测试…

MySQL第三次作业--DML语句(INSERT)

目录 一、在数据库中创建一个表student&#xff0c;用于存储学生信息 二、向student表中添加一条新记录&#xff0c;记录中id字段的值为1&#xff0c;name字段的值为"monkey"&#xff0c;grade字段的值为98.5 三、向student表中添加多条新记录&#xff1a; 2,&qu…