ValueError: Invalid query, got errors:

该报错发生在 LlamaIndex 搭配 WeaviateVectorStore 且使用独立 IndexStore(如 PostgreSQL)重建索引后执行查询时。优先排查 Weaviate 查询过滤器中的属性路径是否使用了不存在的 "id" 字段,应改为 schema 中实际存储节点 ID 的属性

快速结论:该报错发生在 LlamaIndex 搭配 WeaviateVectorStore 且使用独立 IndexStore(如 PostgreSQL)重建索引后执行查询时。优先排查 Weaviate 查询过滤器中的属性路径是否使用了不存在的 “id” 字段,应改为 schema 中实际存储节点 ID 的属性名。

适用环境:LlamaIndex 0.11.2,WeaviateVectorStore,独立 IndexStore(如 PostgreSQL),Weaviate 服务端。Issue 中未确认具体操作系统、Python、CUDA 或显卡型号。

最快修复方案:暂无经过用户验证的一步修复方案。可优先尝试将查询过滤器中的属性路径从 ["id"] 改为你 Weaviate schema 中实际存储节点 ID 的属性名(例如 ["node_id"])。

注意事项:该修复方案来自 Issue 讨论中的推测,并未在 Issue 中明确验证。修改属性名时必须与你的 Weaviate class 实际 schema 保持一致,否则仍会触发同类错误。

问题场景

用户在使用 LlamaIndex 的 WeaviateVectorStore 时,同时配置了独立的 IndexStore(如 PostgreSQL)来保存索引元数据。流程为:先用 WeaviateVectorStore 创建索引并写入节点,再从 IndexStore 加载该索引,最后对索引执行查询。查询触发后 Weaviate 服务端抛出属性不存在的错误。

报错原文

ValueError: Invalid query, got errors: <AioRpcError of RPC that terminated with:
	status = StatusCode.UNKNOWN
	details = "no such prop with name 'id' found in class 'W_b4ae0a5153e0eaecd4b67a84b30b5da1151f97f77b6ceabde7c03d7536c46bc0' in the schema. Check your schema files for which properties in this class are available"
>

原因分析

可能原因:WeaviateVectorStore 的 query 方法在按 node_ids 过滤时,使用了 {"path": ["id"]} 作为属性路径。但 Weaviate 默认 schema 的 properties 中并没有名为 id 的字段(id 是 Weaviate 对象的系统保留字段,不是普通属性)。当使用独立 IndexStore 重建索引后,查询过滤器指向了不存在的属性,导致 Weaviate 返回 “no such prop with name ‘id'”。

多数用户未触发此问题,是因为他们只使用 WeaviateVectorStore 而不搭配独立 IndexStore,因此没有走到带 node_ids 过滤的查询分支。

环境排查

  • 确认 LlamaIndex 版本是否为 0.11.2 或相近版本,检查 llama-index-vector-stores-weaviate 包的版本。
  • 确认是否使用了独立 IndexStore(如 PostgreSQL)来持久化索引,而不仅仅是 WeaviateVectorStore。
  • 检查 Weaviate 中对应 class 的 schema properties,确认节点 ID 实际存储在哪个属性名下。
  • 确认 Weaviate 服务端版本及连接方式(gRPC 或 HTTP),该报错来自 gRPC 通道。

解决步骤

  1. 先检查你的 Weaviate class schema。在 Weaviate 中查看该 class 的 properties,确认节点 ID 对应的属性名(例如可能是 node_iddoc_id 或自定义字段)。
  2. 定位 llama-index-integrations/vector_stores/llama-index-vector-stores-weaviate/llama_index/vector_stores/weaviate/base.pyquery 方法内按 node_ids 过滤的代码段,找到类似 {"path": ["id"], ...} 的写法。
  3. 将属性路径中的 "id" 改为你 schema 中实际存储节点 ID 的属性名。例如如果属性名为 node_id,则改为 {"path": ["node_id"], "operator": "Equal", "valueText": node_id}
  4. 确认修改后与查询过滤器的 operator(如 “Or”)逻辑保持一致,不改动其他结构。
  5. 如果不想改动源码,可考虑避免在查询时传入 node_ids,但这种方式会改变查询行为,需谨慎使用。

验证方法

修改后重新执行查询:从 IndexStore 加载索引,对 WeaviateVectorStore 执行与之前相同的查询,确认不再出现 no such prop with name 'id' 错误,且能正确返回匹配节点结果。

参考来源

run-llama/llama_index #15743

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 20640

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注