前言

  在上篇LlamIndex二 RAG应用开发 – (juejin.cn)中,咱们学习到LlamaIndexRAG的全面支持。这篇文章,咱们就来细化这个进程,尝试各种装备选项,满意不同场景需求。学习往后,咱们再开发RAG应用,会更轻松。

自定义文档分块

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

from llama_index import ServiceContext
service_context = ServiceContext.from_defaults(chunk_size=500)

自定义向量存储

  咱们能够选择自定义的vector_store数据库,设置存储方式。

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 开支。

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

指定大模型

  在自定义文档分块中,咱们运用了ServiceContext.from_defaults来装备chunk_size, 其实还能够给它传递llm参数,来指定运用的大模型。

service_context = ServiceContext.from_defaults(llm=OpenAI())

指定呼应形式

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

query_engine = index.as_query_engine(response_mode='tree_summarize')

指定流式呼应

query_engine = index.as_query_engine(streaming=True)

呼应格局为流。

案例

  咱们将综合以上装备,并用到了下面的示例中,上colab。

  • 装置llama-index 和chromadb向量数据库
!pip install -q -U llama-index chromadb

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

  • 拉取文档
!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环境变量
!pip install
import os 
os.environ['OPENAI_API_KEY'] = 'your valid openai api key'
  • 引入向量数据库相关模块
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
service_context = ServiceContext.from_defaults(chunk_size=500, llm=OpenAI())
  • 装备向量存储
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)
  • 索引文档
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的紧箍儿…

  • 指定呼应形式,以及启用流式呼应
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三 装备

总结

今日搞清楚了LlamaIndex的装备细节,以Rag应用为例,能干活了, 哈哈。