LlamaIndex三 配置

前言

在上篇LlamIndex二 RAG应用开发 - 掘金 (juejin.cn)中,我们学习到LlamaIndexRAG的全面支持。这篇文章,我们就来细化这个过程,尝试各种配置选项,满足不同场景需求。学习过后,大家再开发RAG应用,会更轻松。

自定义文档分块

chunk_size 参数通常用于指定在处理大量数据时一次处理的数据项数量,用于计算索引的长度。如下代码:

python 复制代码
from llama_index import ServiceContext
service_context = ServiceContext.from_defaults(chunk_size=500)

自定义向量存储

我们可以选择自定义的vector_store数据库,设置存储方式。

python 复制代码
import chromadb
from llama_index.vector_stores import ChromaVectorStore
from llama_index import StorageContext

chroma_client = chromadb.PersistentClient()
chroma_collection = chroma_client.create_collection("quickstart")
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
storage_context = StorageContext.from_defaults(vector_store=vector_store)

在这里我们使用的向量数据库是chromadb,LlamaIndex 专门提供了ChromaVectorStore API。StorageContext可以让我们配置存储上下文。   在上面的代码中,首先chroma_client = chromadb.PersistentClient()实例化了chromadb的持久化存储,chroma_collection = chroma_client.create_collection("quickstart")并将当前项目的向量数据库命名为qucikstart,vector_store = ChromaVectorStore(chroma_collection=chroma_collection)生成存储实例,最后storage_context = StorageContext.from_defaults(vector_store=vector_store)生成存储上下文对象。

自定义检索

当我们在使用查询引擎检索时,我们可以通过设置similarity_top_k来定义检索时的相似文档数。这样可以在满足检索需求的同时,节省token 开销。

ini 复制代码
index = VectorStoreIndex.from_documents(documents)
# 指定返回5条相似数据
query_engine = index.as_query_engine(similarity_top_k=5)

指定大模型

在自定义文档分块中,我们使用了ServiceContext.from_defaults来配置chunk_size, 其实还可以给它传递llm参数,来指定使用的大模型。

ini 复制代码
service_context = ServiceContext.from_defaults(llm=OpenAI())

指定响应模式

在第一篇文章中,我们使用query_engine = index.as_query_engine(response_mode='tree_summarize')创建了一个查询引擎,它基于文档索引进行查询。参数response_mode值设置为tree_summarize,查询结果以树形结构显示。

ini 复制代码
query_engine = index.as_query_engine(response_mode='tree_summarize')

指定流式响应

ini 复制代码
query_engine = index.as_query_engine(streaming=True)

响应格式为流。

案例

我们将综合以上配置,并用到了下面的示例中,上colab。

  • 安装llama-index 和chromadb向量数据库
css 复制代码
!pip install -q -U llama-index chromadb

-q -U 的意思是省略一些下载细节。

  • 拉取文档
bash 复制代码
!mkdir data 
!wget https://raw.githubusercontent.com/jerryjliu/llama_index/main/examples/paul_graham_essay/data/paul_graham_essay.txt -O data/paul_graham_essay.txt

使用mkdir 创建data文件夹,colab有类似虚拟机的文件系统。 wget拉取文件存放到data目录下,文件名为 paul_graham_essay.txt。

  • 安装openai,设置OPENAI_API_KEY环境变量
lua 复制代码
!pip install 
import os 
os.environ['OPENAI_API_KEY'] = 'your valid openai api key'
  • 引入向量数据库相关模块
python 复制代码
import chromadb
from llama_index import VectorStoreIndex, SimpleDirectoryReader from llama_index import ServiceContext 
from llama_index.vector_stores import ChromaVectorStore 
from llama_index import StorageContext 
from llama_index.llms import OpenAI
  • 实例化ServiceContext, 配置chunk_size和llm
python 复制代码
service_context = ServiceContext.from_defaults(chunk_size=500, llm=OpenAI())
  • 配置向量存储
python 复制代码
chroma_client = chromadb.PersistentClient() 
chroma_collection = chroma_client.create_collection("quickstart") vector_store = ChromaVectorStore(chroma_collection=chroma_collection) storage_context = StorageContext.from_defaults(vector_store=vector_store)
  • 索引文档
python 复制代码
documents = SimpleDirectoryReader('data').load_data() 
index = VectorStoreIndex.from_documents(documents, service_context=service_context,storage_context=storage_context)

原来配置了chunk_size和llm的service_context和配置了chromadb向量数据库的storage_context与documents一起在VectorStoreIndex.from_documents中相汇,生成等下查询引擎需要的索引对象,了解,此刻,可以带上LlamaIndex的紧箍儿...

  • 指定响应模式,以及启用流式响应
python 复制代码
query_engine = index.as_query_engine(response_mode='tree_summarize', streaming=True) 
response = query_engine.query("What did the author do?") response.print_response_stream()

好,现在让我们一起来看下执行结果吧。

这张截图可以看到chroma文件

总结

今天搞清楚了LlamaIndex的配置细节,以Rag应用为例,能干活了, 哈哈。

相关推荐
杜子不疼.1 小时前
进程控制(四):自主Shell命令行解释器
linux·c语言·人工智能
编码小哥8 小时前
OpenCV Haar级联分类器:人脸检测入门
人工智能·计算机视觉·目标跟踪
程序员:钧念8 小时前
深度学习与强化学习的区别
人工智能·python·深度学习·算法·transformer·rag
数据与后端架构提升之路9 小时前
TeleTron 源码揭秘:如何用适配器模式“无缝魔改” Megatron-Core?
人工智能·python·适配器模式
Chef_Chen9 小时前
数据科学每日总结--Day44--机器学习
人工智能·机器学习
这张生成的图像能检测吗9 小时前
(论文速读)FR-IQA:面向广义图像质量评价:放松完美参考质量假设
人工智能·计算机视觉·图像增强·图像质量评估指标
KG_LLM图谱增强大模型10 小时前
本体论与知识图谱:揭示语义技术的核心差异
人工智能·知识图谱·本体论
JicasdC123asd10 小时前
黄瓜植株目标检测:YOLOv8结合Fasternet与BiFPN的高效改进方案
人工智能·yolo·目标检测
爱吃泡芙的小白白11 小时前
深入解析:2024年AI大模型核心算法与应用全景
人工智能·算法·大模型算法
小程故事多_8011 小时前
攻克RAG系统最后一公里 图文混排PDF解析的挑战与实战方案
人工智能·架构·pdf·aigc