Bug描述
在DensexRetriver包中,我添加了一段代码来使用milvus向量数据库(我也尝试过使用Elastic Search,它与现有的dense-x代码一起工作得很好)。然而,在查询时,我得到了以下错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[229], line 2
1 query_engine_chunk = dense_pack2.query_engine
----> 2 print(str(query_engine_chunk.query("This is a question")))
File ~/.local/lib/python3.10/site-packages/llama_index/core/base/base_query_engine.py:40, in BaseQueryEngine.query(self, str_or_query_bundle)
38 if isinstance(str_or_query_bundle, str):
39 str_or_query_bundle = QueryBundle(str_or_query_bundle)
---> 40 return self._query(str_or_query_bundle)
File ~/.local/lib/python3.10/site-packages/llama_index/core/query_engine/retriever_query_engine.py:186, in RetrieverQueryEngine._query(self, query_bundle)
182 """Answer a query."""
183 with self.callback_manager.event(
184 CBEventType.QUERY, payload={EventPayload.QUERY_STR: query_bundle.query_str}
185 ) as query_event:
--> 186 nodes = self.retrieve(query_bundle)
187 response = self._response_synthesizer.synthesize(
188 query=query_bundle,
189 nodes=nodes,
190 )
192 query_event.on_end(payload={EventPayload.RESPONSE: response})
File ~/.local/lib/python3.10/site-packages/llama_index/core/query_engine/retriever_query_engine.py:142, in RetrieverQueryEngine.retrieve(self, query_bundle)
141 def retrieve(self, query_bundle: QueryBundle) -> List[NodeWithScore]:
--> 142 nodes = self._retriever.retrieve(query_bundle)
143 return self._apply_node_postprocessors(nodes, query_bundle=query_bundle)
File ~/.local/lib/python3.10/site-packages/llama_index/core/base/base_retriever.py:229, in BaseRetriever.retrieve(self, str_or_query_bundle)
224 with self.callback_manager.as_trace("query"):
225 with self.callback_manager.event(
226 CBEventType.RETRIEVE,
227 payload={EventPayload.QUERY_STR: query_bundle.query_str},
228 ) as retrieve_event:
--> 229 nodes = self._retrieve(query_bundle)
230 nodes = self._handle_recursive_retrieval(query_bundle, nodes)
231 retrieve_event.on_end(
232 payload={EventPayload.NODES: nodes},
233 )
File ~/.local/lib/python3.10/site-packages/llama_index/core/retrievers/recursive_retriever.py:206, in RecursiveRetriever._retrieve(self, query_bundle)
205 def _retrieve(self, query_bundle: QueryBundle) -> List[NodeWithScore]:
--> 206 retrieved_nodes, _ = self._retrieve_rec(query_bundle, query_id=None)
207 return retrieved_nodes
File ~/.local/lib/python3.10/site-packages/llama_index/core/retrievers/recursive_retriever.py:179, in RecursiveRetriever._retrieve_rec(self, query_bundle, query_id, cur_similarity)
174 elif isinstance(obj, BaseRetriever):
175 with self.callback_manager.event(
176 CBEventType.RETRIEVE,
177 payload={EventPayload.QUERY_STR: query_bundle.query_str},
178 ) as event:
--> 179 nodes = obj.retrieve(query_bundle)
180 event.on_end(payload={EventPayload.NODES: nodes})
182 nodes_to_add, additional_nodes = self._query_retrieved_nodes(
183 query_bundle, nodes
184 )
File ~/.local/lib/python3.10/site-packages/llama_index/core/base/base_retriever.py:229, in BaseRetriever.retrieve(self, str_or_query_bundle)
224 with self.callback_manager.as_trace("query"):
225 with self.callback_manager.event(
226 CBEventType.RETRIEVE,
227 payload={EventPayload.QUERY_STR: query_bundle.query_str},
228 ) as retrieve_event:
--> 229 nodes = self._retrieve(query_bundle)
230 nodes = self._handle_recursive_retrieval(query_bundle, nodes)
231 retrieve_event.on_end(
232 payload={EventPayload.NODES: nodes},
233 )
File ~/.local/lib/python3.10/site-packages/llama_index/core/indices/vector_store/retrievers/retriever.py:94, in VectorIndexRetriever._retrieve(self, query_bundle)
88 if query_bundle.embedding is None and len(query_bundle.embedding_strs) > 0:
89 query_bundle.embedding = (
90 self._embed_model.get_agg_embedding_from_queries(
91 query_bundle.embedding_strs
92 )
93 )
---> 94 return self._get_nodes_with_embeddings(query_bundle)
File ~/.local/lib/python3.10/site-packages/llama_index/core/indices/vector_store/retrievers/retriever.py:170, in VectorIndexRetriever._get_nodes_with_embeddings(self, query_bundle_with_embeddings)
166 def _get_nodes_with_embeddings(
167 self, query_bundle_with_embeddings: QueryBundle
168 ) -> List[NodeWithScore]:
169 query = self._build_vector_store_query(query_bundle_with_embeddings)
--> 170 query_result = self._vector_store.query(query, **self._kwargs)
171 return self._build_node_list_from_query_result(query_result)
File ~/.local/lib/python3.10/site-packages/llama_index/vector_stores/milvus/base.py:277, in MilvusVectorStore.query(self, query, **kwargs)
275 string_expr = ""
276 if len(expr) != 0:
--> 277 string_expr = f" {query.filters.condition.value} ".join(expr)
279 # Perform the search
280 res = self._milvusclient.search(
281 collection_name=self.collection_name,
282 data=[query.query_embedding],
(...)
286 search_params=self.search_config,
287 )
AttributeError: 'NoneType' object has no attribute 'condition'
请注意,在将recursiveRetriever更改为simple vector_index.as_retriever后,Milvus向量数据库可以正常工作。这是milvus向量数据库在使用递归检索器时遇到的问题吗?是否有解决此错误的 workaround?如果有,请指导我查阅相关文档。
版本
0.10.12
重现步骤
- 使用milvus数据库存储上下文创建一个向量存储索引
- 使用递归检索器
- 运行查询 (请参考描述)
相关日志/回溯
- 无响应*
2条答案
按热度按时间s4n0splo1#
嘿 @Kushagra0409,很高兴看到你回来!🚀
感谢你提供详细的错误回溯。你在 LlamaIndex v0.10.12 中遇到的
MilvusVectorStore
在RecursiveRetriever
中无法正常工作,导致了一个AttributeError
,这很可能是由于MilvusVectorStore
类与RecursiveRetriever
所需的预期接口或方法之间的兼容性或实现问题。AttributeError
通常表示RecursiveRetriever
试图访问MilvusVectorStore
上不存在的方法或属性。以下是一些解决此问题的步骤:MilvusVectorStore
实现了RecursiveRetriever
所期望的所有方法和属性。RecursiveRetriever
的实现,以了解它对向量存储的期望。这可以给您关于MilvusVectorStore
中可能缺失或错误实现的线索。AttributeError
发生的地方添加日志记录,以获取更多关于缺失或出错的内容的信息。这可以帮助您准确地找到导致问题的具体属性或方法。不幸的是,由于缺乏关于
AttributeError
(例如,缺失的属性或方法名称)的具体细节,这些一般步骤是诊断和解决问题的最佳方法。如果您能提供有关错误的更多详细信息,将更容易提供更具体的解决方案。关于您关于 LlamaIndex 代码库在版本 0.10.12 和最新版本 0.10.19 之间所做的更改的问题,我无法提供详细的答案,因为我没有访问这两个版本之间进行的特定更改的权限。然而,始终更新到最新版本是一个好主意,因为它可能包含可能解决您的问题的修复程序和改进。
希望这有所帮助!如果您有任何其他问题或需要进一步澄清,请随时提问。
来源
关于 Dosu
此响应旨在节省您的时间并使其有用。它不是精确的解决方案,而是您自己研究的起点。
帮助我更有用!如果这有帮助请留下一个👍,如果无关请留下一个👎。
如果您想继续对话,请以 @dosu-bot 为开头开始回复。
mkshixfv2#
看起来像是元数据过滤器的错误。