知识元数据搜索的问题

【Bug?】v1.13.0后,知识搜索节点的元数据过滤器不起作用

一周前(v1.13.0发布前后)还正常运行的工作流,元数据过滤器突然失效了。

环境

  • Dify Cloud

情况

  • 在知识库中设置了 product_name = "ProductA" 的元数据
  • 在知识搜索节点的元数据过滤器中设置了 product_name = [Variable: user_input]
  • 即使以 user_input = "ProductA" 执行,也返回 { "result": [] }
  • cencern 的值可能没有正确传递给知识库,导致没有通过元数据进行搜索。

尝试过的操作

  • 已确认字段名匹配
  • 即使将 Variable 更改为 Constant(固定值 \"ProductA\"),也返回 []
  • 将工作流回滚到上个月的版本也没有改善

v1.11.3 中修复了 fix DatasetRetrieval._process_metadata_filter_func miss in operator#30199),但后续更新可能导致了回归。

有人遇到过类似问题吗?

2 个赞

我也遇到了同样的问题。通过变量过滤元数据对我不起作用。常量值按预期工作。

1 个赞

如果附图中所示的部分是变量,则无法搜索;如果是常量,则可以正常搜索。不久前还可以用变量进行搜索,所以如果有什么方法可以用变量来查找元数据,请告诉我。

1 个赞

我也正为完全相同的症状所困扰。
以前是能搜到的吗?

这似乎是一个bug,并且已经在 GitHub 上报告了。
我打算修复它,但这可能要等到明天以后,或许内部人员的行动会更快。

以前是可以命中的。
进入3月以来,突然感觉变量无法命中了…

谢谢。
我将继续等待它改善。

非常感谢。希望它能尽快修复 :flexed_biceps:

在我开始之前,似乎已经迅速处理了。
将在下个版本中修复,请等待版本发布 :relieved_face:

非常感谢!
帮大忙了!

有没有其他解决方案?问题如下:

Dify 系统遇到了一个问题。我最初上传的文件 kb2-test (文本) 在 KB2 阶段被使用,输入为 b9101,这是由上一个节点识别的文件名。KB2 节点能够读取该文件并相应地回答(表明该文件已被调用)。然而,后来上传的文件在绑定后无法在此节点被调用。

系统显然基于 KB2 处输入的文件名调用了原始的 kb2-test 文件(即使我从文件中删除了 b9101,它仍然可以检索内容)。我不知道为什么,但后来上传的 KB2 文件无法被调用。

我确信对于 kb2-test,无论是否添加元数据过滤器(metadata filter)(上传后添加,因为上传时没有添加元数据过滤器参数的选项),系统仍然可以调用它(也就是说,KB2 节点可以根据输入 b9101 正确调用文件)。然而,对于后来上传的文件,无论是否设置了元数据(上传后),它们都无法被调用。

我甚至更改了文件名(改为 b1234),系统仍然可以调用它。因此很明显,系统对文件 kb2-test 使用的是基于内容的检索(content-based retrieval),而不是基于名称的检索,也不是基于文档内文件名字段的检索。

我的问题是:

  1. Dify 系统能否使用元数据过滤器(metadata filter)(我认为这是一个基本功能),包括在上传时设置它(我上传知识文件时没有看到任何添加元数据过滤器的功能;在嵌入(embedding)页面只有“从 Notion 同步”以及“访问 API”,或者“从流水线创建知识”——这些功能是什么?),以及在文件设置了元数据之后,在系统中使用该元数据过滤器?

  2. 如果元数据不能被使用,为什么系统不能直接通过文件名来调用文件?如果 Dify 只能基于文档内的语义内容进行检索,这难道不荒谬吗?

  3. 有没有更好的方法来实现以下任何一种情况:

    • (1) 通过元数据过滤器(metadata filter)调用文件,或

    • (2) 通过文件名调用文件?

如果系统只能基于所有文档内容的语义意义进行检索,这就像读者去图书馆找书,图书管理员不得不把所有的书都拿出来一本一本地查找。这难道不荒谬吗?

1 个赞