问题验证
- 我已在文档和Discord中寻找答案。
问题
在使用ElasticSearch嵌入和ChromaDB嵌入时,我在VectorStoreIndex中使用节点时遇到了一个问题。
背景:
在使用ElasticSearch嵌入进行dense_x检索时,我们在VectorStoreIndex中使用all_nodes(节点+子节点):
self.vector_index = VectorStoreIndex(
all_nodes, service_context=service_context, show_progress=True
)
这种方法效果很好;我们可以重用嵌入并获得预期的响应。
然而,当使用ChromaDB嵌入时,如果我们只在VectorStoreIndex中使用节点,它就可以正常工作:
self._index = VectorStoreIndex(
nodes, storage_context=self._storage_context, **kwargs
)
但是,如果我们像ElasticSearch那样尝试使用all_nodes(节点+子节点),它只在创建嵌入时起作用(即)。当我们尝试重用这些嵌入以获取响应时,我们会遇到以下错误:ValueError: Query id d28e3de4-1c4f-420a-9184-97bf8556b11b not found in either retriever_dict or query_engine_dict.
问题:
- 为什么使用all_nodes(节点+子节点)的方法对ElasticSearch嵌入有效,但对ChromaDB嵌入无效?
- 为什么在尝试使用ChromaDB中的all_nodes重用嵌入时会出现查询ID错误?
- 我们不能在ChromaDB中使用all_nodes是否有特定的原因,如果是的话,您能否提供关于如何正确管理此问题的建议?
1条答案
按热度按时间gudnpqoy1#
使用
all_nodes
(nodes + sub_nodes) 的方法适用于 ElasticSearch 嵌入,但不适用于 ChromaDB 嵌入,原因在于这些系统处理嵌入的添加和查询方式的不同。all_nodes
与 ChromaDB 时可能导致不一致。MAX_CHUNK_SIZE
为 41665,超过此限制可能导致错误。此外,如果_collection
属性没有正确初始化,或者元数据过滤器存在问题,也可能导致查询 ID 错误 1(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/vector_stores/llama-index-vector-stores-chroma/llama_index/vector_stores/chroma/base.py)2(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/llama_index/legacy/vector_stores/chroma.py)。此外,请确保
ChromaVectorStore
已正确初始化并带有必要的参数,同时MAX_CHUNK_SIZE
不要超过 3(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/tests/vector_stores/test_chromadb.py)4(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/vector_stores/llama-index-vector-stores-chroma/tests/test_chromadb.py)。遵循这些指南,您可以正确管理嵌入并避免与 ChromaDB 相关的查询 ID 错误。