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

简介: LlamaIndex(前身为 GPT Index)是一个数据框架,为了帮助我们去建基于大型语言模型(LLM)的应用程序。主要用于处理、构建和查询自定义知识库。它支持多种数据源格式 excel,txt,pdf,md 等等,并且以创建高效的数据结构以便快速检索著称,允许我们用自然地语言区查询数据,而不需要学习复杂的查询语言或了解底层数据结构。

简介

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


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


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


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

安装django模块

pip install llama-index

一个简单的例子:


我们进入项目根目录,建立 data 文件夹,提前准备好我们需要检索的文件,如下面图所示:

1720265568859.jpg

1720265587978.jpg

这里的文件可以是 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

1720265670200.jpg

对比一下我们的测试集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 目录。

1720267385867.jpg

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

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

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

1720267613375.jpg

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


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

总结

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


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


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


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


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

相关文章
|
2月前
|
机器学习/深度学习 自然语言处理 机器人
【RAG实践】基于LlamaIndex和Qwen1.5搭建基于本地知识库的问答机器人
LLM会产生误导性的 “幻觉”,依赖的信息可能过时,处理特定知识时效率不高,缺乏专业领域的深度洞察,同时在推理能力上也有所欠缺。
|
8月前
|
SQL 人工智能 分布式计算
基于阿里云PAI平台搭建知识库检索增强的大模型对话系统
基于原始的阿里云计算平台产技文档,搭建一套基于大模型检索增强答疑机器人。本方案已在阿里云线上多个场景落地,将覆盖阿里云官方答疑群聊、研发答疑机器人、钉钉技术服务助手等。线上工单拦截率提升10+%,答疑采纳率70+%,显著提升答疑效率。
|
2月前
|
存储 人工智能 搜索推荐
社区供稿 | YuanChat全面升级:知识库、网络检索、适配CPU,手把手个人主机部署使用教程
在当下大语言模型飞速发展的背景下,以大模型为核心的AI助手成为了广大企业和个人用户最急切需求的AI产品。然而在复杂的现实办公场景下,简单的对话功能并不能满足用户的全部办公需求,为此我们发布了最新版的YuanChat应用
|
2月前
|
自然语言处理 API 开发工具
基于LangChain-Chatchat实现的本地知识库的问答应用-快速上手(检索增强生成(RAG)大模型)
基于LangChain-Chatchat实现的本地知识库的问答应用-快速上手(检索增强生成(RAG)大模型)
基于LangChain-Chatchat实现的本地知识库的问答应用-快速上手(检索增强生成(RAG)大模型)
|
2月前
|
存储 缓存 安全
Django的会话框架提供了一种简单且安全的方式来在用户与网站之间存储和检索状态信息
【5月更文挑战第12天】Django的会话管理依赖于内置的SessionMiddleware。要启用,需在settings.py的MIDDLEWARE中包含它,并确保&#39;django.contrib.sessions&#39;在INSTALLED_APPS内。设置SESSION_ENGINE可选择存储引擎,如默认的数据库或缓存。在视图中,通过request.session交互会话数据。模板可以直接访问这些数据。配置包括会话超时、cookie属性和存储后端。注意,敏感数据不宜存入会话,确保会话cookie安全,考虑使用缓存降低数据库压力。
42 3
|
2月前
|
人工智能 自然语言处理 监控
通过阿里云向量检索 Milvus 版和通义千问快速构建基于专属知识库的问答系统
本文展示了如何使用阿里云向量检索 Milvus 版和灵积(Dashscope)提供的通用千问大模型能力,快速构建一个基于专属知识库的问答系统。在示例中,我们通过接入灵积的通义千问 API 及文本嵌入(Embedding)API 来实现 LLM 大模型的相关功能。
通过阿里云向量检索 Milvus 版和通义千问快速构建基于专属知识库的问答系统
|
2月前
|
人工智能 自然语言处理 Cloud Native
向量检索服务在语义检索、知识库搭建、AI多模态搜索等场景中有着广泛的应用
向量检索服务在语义检索、知识库搭建、AI多模态搜索等场景中有着广泛的应用
127 0
|
2月前
|
Linux 异构计算 Docker
QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答
QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答
QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答
|
2月前
|
人工智能 机器人 异构计算
使用PAI-DSW搭建基于LangChain的检索知识库问答机器人
在本教程中,您将学习如何在阿里云交互式建模(PAI-DSW)中,基于LangChain的检索知识库实现知识问答。旨在建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。
|
网络协议 前端开发 JavaScript
Django第3步_url路由映射与TEMPLATES添加检索路径
Django第3步_url路由映射与TEMPLATES添加检索路径
88 0

热门文章

最新文章