Skip to content

Bug: VikingDB volcengine 后端两个问题 — URI 前缀丢失 + is_leaf 废弃字段残留 #288

@qin-ctx

Description

@qin-ctx

Bug 描述

使用 volcengine VikingDB 后端时,存在两个问题:

问题 1:path 字段类型剥离 viking:// 前缀导致 Access Denied

find 语义搜索操作抛出 Access denied 错误:

openviking_cli.exceptions.InternalError: Access denied for /user/alice/memories/entities/

根因volcengine_collection.py_sanitize_uri_value() 在写入时将 viking:// 前缀剥离为 /path/ 格式,但读取时没有做反向转换。

写入: viking://... → _sanitize_uri_value() → /.../ → 存入 VikingDB ✅
读取: VikingDB → /.../ → 原样返回 → _is_accessible() 检查 viking:// 前缀 → ❌ Access Denied

影响方法get()fetch_by_uri()search()filter()scroll()_remove_descendants() 经由 filter() 间接受影响)

修复:在 VikingVectorIndexBackend 添加 _restore_uri_fields() 静态方法,在 4 个读取出口处还原 viking:// 前缀。幂等操作,对 local/http 后端无副作用。

问题 2:memory_deduplicator 仍使用已废弃的 is_leaf 字段

PR #271is_leaf 替换为 level 字段,但 memory_deduplicator.py:138 遗漏未改:

# 错误:is_leaf 已从 collection schema 中移除
{"field": "is_leaf", "op": "must", "conds": [True]}

volcengine 报错:

Invalid filter param: field is_leaf does not support op must

修复:改为 {"field": "level", "op": "must", "conds": [2]}is_leaf=True 对应 level=2 即 L2 detail/content)。

复现步骤

  1. 配置 volcengine VikingDB 后端(ov.confvectordb.backend: "volcengine"
  2. 运行 uv run examples/cloud/alice.py
  3. 问题 1:语义搜索时报 Access denied
  4. 问题 2:涉及 memory dedup 的搜索时报 Invalid filter param

环境

  • 分支: main
  • VectorDB 后端: volcengine VikingDB
  • 复现示例: examples/cloud/alice.py

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions