Llamaindex 使用过程中的常见问题 (FAQ)
导读
在使用LlamaIndex
进行文档索引和查询时,您可能会发现需要根据特定的需求对基础设置进行调整。下面是一些常见的定制化需求及其对应的实现方式:
-
文档分割:为了更好地管理和查询大型文档,您可以选择将文档分割成更小的块。这可以通过全局设置或局部应用
SentenceSplitter
转换来实现,指定chunk_size
来控制每个块的大小。 -
更换向量存储:如果您希望使用不同的向量存储方案,比如
Chroma
,则需先安装相应的插件,并初始化存储上下文StorageContext
,以指向新的存储后端。 -
增加检索上下文:当您希望在查询时获得更多的上下文信息以提高查询质量,可以通过设置
similarity_top_k
参数来增加检索的文档数量。 -
替换语言模型(LLM):如果需要使用不同的LLM,如
Ollama
模型中的mistral
,可以更改全局设置中的LLM选项,或者在创建查询引擎时局部指定。 -
调整响应模式:为了得到不同形式的回答,例如总结式的回答,可以通过设置
response_mode
参数为"tree_summarize"
等选项来改变输出格式。 -
启用流式传输响应:若想在处理大型数据集时逐步接收响应,而非等待全部计算完成,可以启用流式传输功能,并使用
print_response_stream()
方法来逐步打印出响应。 -
转换为聊天模式:如果您打算构建一个聊天机器人,而非简单的问答系统,可以通过调用
as_chat_engine()
方法来启用聊天模式,这样系统能够基于上下文进行连续对话。
这些定制化的方法可以帮助您优化LlamaIndex
的应用,使其更适合特定的应用场景。
正文
提示
如果尚未安装 LlamaIndex
,请安装 LlamaIndex
并完成入门教程。如果您遇到不认识的术语,请查看高级概念。
在本节中,我们从您为入门示例编写的代码开始,向您展示您可能希望针对您的使用案例对其进行自定义的最常见方法:
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)
“我想将我的文档解析成更小的块”
# Global settings
from llama_index.core import Settings
Settings.chunk_size = 512
# Local settings
from llama_index.core.node_parser import SentenceSplitter
index = VectorStoreIndex.from_documents(
documents, transformations=[SentenceSplitter(chunk_size=512)]
)
“我想使用不同的向量存储”
首先,您可以安装要使用的 vector store
。例如,要使用Chroma
作为向量存储,您可以使用 pip
安装它:
pip install llama-index-vector-stores-chroma
然后,您可以在代码中使用它:
import chromadb
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.core 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)
StorageContext
定义存储文档、嵌入和索引的存储后端。
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(
documents, storage_context=storage_context
)
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
print(response)
“我想在查询时检索更多上下文”
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(similarity_top_k=5)
response = query_engine.query("What did the author do growing up?")
print(response)
as_query_engine
帮助构建一个默认的索引之上的查询引擎。你可以通过传递关键字参数来配置检索器(retriever
)和查询引擎(query engine
)。在这里,我们配置检索器返回最相似的前5个文档(而不是默认的2个)。你可以了解更多关于检索器和查询引擎的信息。
在信息检索领域中,retriever
指的是负责从存储中查找相关文档的部分,而 query engine
或 查询引擎 则是处理查询并使用检索器来获取结果的整体系统。通常情况下,检索器会基于某种相似度度量来决定哪些文档与给定的查询最相关。
“我想使用不同的 LLM”
# Global settings
from llama_index.core import Settings
from llama_index.llms.ollama import Ollama
Settings.llm = Ollama(model="mistral", request_timeout=60.0)
# Local settings
index.as_query_engine(llm=Ollama(model="mistral", request_timeout=60.0))
“我想使用不同的响应模式”
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(response_mode="tree_summarize")
response = query_engine.query("What did the author do growing up?")
print(response)
“我想将响应流式传输回去”
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(streaming=True)
response = query_engine.query("What did the author do growing up?")
response.print_response_stream()
“我想要一个聊天机器人而不是 Q&A”
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_chat_engine()
response = query_engine.chat("What did the author do growing up?")
print(response)
response = query_engine.chat("Oh interesting, tell me more.")
print(response)