dify 在使用知识库召回测试时出现错误,

weylhg0b  于 4个月前  发布在  其他
关注(0)|答案(4)|浏览(58)

自检

  • 这仅用于提交错误报告,如果您想提问,请访问 Discussions
  • 我已搜索现有问题 search for existing issues ,包括已关闭的问题。
  • 我确认我使用英语提交此报告(我已阅读并同意 Language Policy )。
  • 请不要修改此模板 :) 并填写所有必需的字段。

Dify版本

0.6.11

云或自托管

自托管(源代码)

重现步骤

  1. 上传了一个pdf文件

✔️ 预期行为

正常

❌ 实际行为

错误

ztigrdn8

ztigrdn81#

你好@xddcode,我在这里帮助你解决任何bug、问题或贡献。让我们一起解决这个问题。
为了解决在Dify版本0.6.11中运行知识库召回测试时出现的"3个验证错误,用于ParsingModel[InlineResponse20015]",请确保设置的输入不包含任何不允许的额外字段。
在提供的代码中,来自immer库的produce函数用于创建新的输入对象,同时确保只包含必要的字段。具体来说,setInputs函数是根据retrieval_mode设计的,用于删除single_retrieval_configmultiple_retrieval_config
以下是处理此问题的相关代码部分:

const setInputs = useCallback((s: KnowledgeRetrievalNodeType) => {
  const newInputs = produce(s, (draft) => {
    if (s.retrieval_mode === RETRIEVE_TYPE.multiWay)
      delete draft.single_retrieval_config
    else
      delete draft.multiple_retrieval_config
  })
  doSetInputs(newInputs)
}, [doSetInputs])

这确保根据检索模式包含适当的配置,防止设置额外的输入。
此外,当更改检索模式时,代码确保设置正确的配置:

const handleRetrievalModeChange = useCallback((newMode: RETRIEVE_TYPE) => {
  const newInputs = produce(inputs, (draft) => {
    draft.retrieval_mode = newMode
    if (newMode === RETRIEVE_TYPE.multiWay) {
      draft.multiple_retrieval_config = {
        top_k: draft.multiple_retrieval_config?.top_k || DATASET_DEFAULT.top_k,
        score_threshold: draft.multiple_retrieval_config?.score_threshold,
        reranking_model: !draft.multiple_retrieval_config?.reranking_model?.provider
          ? {
            provider: rerankDefaultModel?.provider?.provider || '',
            model: rerankDefaultModel?.model || '',
          }
          : draft.multiple_retrieval_config?.reranking_model,
      }
    } else {
      const hasSetModel = draft.single_retrieval_config?.model?.provider
      if (!hasSetModel) {
        draft.single_retrieval_config = {
          model: {
            provider: currentProvider?.provider || '',
            name: currentModel?.model || '',
            mode: currentModel?.model_properties?.mode as string,
            completion_params: {},
          },
        }
      }
    }
  })
  setInputs(newInputs)
}, [currentModel?.model, currentModel?.model_properties?.mode, currentProvider?.provider, inputs, rerankDefaultModel?.model, rerankDefaultModel?.provider?.provider, setInputs])

通过确保输入中只包含必要的字段,可以避免与额外输入相关的验证错误1(https://github.com/langgenius/dify/blob/main/web/app/components/workflow/nodes/knowledge-retrieval/use-config.ts)2(https://github.com/langgenius/dify/blob/main/api/core/workflow/nodes/knowledge_retrieval/entities.py)。

  • 要继续与Dosu交谈,请提及@dosu。*
kqqjbcuj

kqqjbcuj2#

@dosu,现在处于全文搜索模式,没有错误。上述错误发生在矢量检索模式下。

mrfwxfqh

mrfwxfqh3#

为了解决Dify版本0.6.11中与向量检索模式中的额外输入相关的验证错误,请确保 handleChange 函数正确更新 multiple_retrieval_config,而不包含任何额外的输入。验证传递给 handleChangeDatasetConfigs 对象不包含任何意外的属性。
以下处理配置更新的相关代码部分:

const handleChange = useCallback((configs: DatasetConfigs, isRetrievalModeChange?: boolean) => {
    if (isRetrievalModeChange) {
      onRetrievalModeChange(configs.retrieval_model)
      return
    }
    onMultipleRetrievalConfigChange({
      top_k: configs.top_k,
      score_threshold: configs.score_threshold_enabled ? (configs.score_threshold || DATASET_DEFAULT.score_threshold) : null,
      reranking_model: payload.retrieval_mode === RETRIEVE_TYPE.oneWay
        ? undefined
        : (!configs.reranking_model?.reranking_provider_name
          ? {
            provider: rerankDefaultModel?.provider?.provider || '',
            model: rerankDefaultModel?.model || '',
          }
          : {
            provider: configs.reranking_model?.reranking_provider_name,
            model: configs.reranking_model?.reranking_model_name,
          }),
    })
  }, [onMultipleRetrievalConfigChange, payload.retrieval_mode, rerankDefaultModel?.provider?.provider, rerankDefaultModel?.model, onRetrievalModeChange])

确保 DatasetConfigs 对象仅包含必要的属性( top_kscore_thresholdscore_threshold_enabledreranking_modelretrieval_model )。如果有任何额外的属性,它们应在调用 handleChange 之前被删除。
此外,请参考 web/app/components/workflow/nodes/knowledge-retrieval/panel.tsx 中的 Panel 组件,以了解如何管理配置,并确保 handleRetrievalModeChangehandleMultipleRetrievalConfigChange 函数正确实现。

  • 要继续与 Dosu 交谈,请提及 @dosu。*
v440hwme

v440hwme4#

请查看 #5640 。我遇到了相同的问题,并使用较低版本的qdrant解决了这个问题。

相关问题