From fcbf3e650e55a0fbc9116e1df9468f407e7ed7a9 Mon Sep 17 00:00:00 2001 From: zhangmo8 Date: Mon, 8 Jun 2026 10:59:22 +0800 Subject: [PATCH] fix(mcp): adapt dify new retrieval_model schema --- .../inMemoryServers/difyKnowledgeServer.ts | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts index de9f3362c..14cbb9187 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts @@ -216,24 +216,31 @@ export class DifyKnowledgeServer { try { const url = `${config.endpoint.replace(/\/$/, '')}/datasets/${config.datasetId}/retrieve` + + // Dify 新版 API 把检索配置统一收进了 retrieval_model 对象,且要求: + // 1. search_method 为必填项(缺失会导致参数校验失败); + // 2. reranking_enable / score_threshold_enabled 必须是布尔值,旧版传 null 已不再被接受。 + // 这里默认走 semantic_search 且关闭 rerank —— 不依赖数据集是否配置了 Rerank 模型, + // 对任意数据集都可用;阈值过滤维持原有「不过滤」行为,保证检索结果集与改动前一致。 + const retrievalModel = { + search_method: 'semantic_search', + reranking_enable: false, + top_k: topK, + score_threshold_enabled: false, + score_threshold: null + } + console.log('performDifyKnowledgeSearch request', url, { query, - retrieval_model: { - top_k: topK, - score_threshold: scoreThreshold - } + score_threshold: scoreThreshold, + retrieval_model: retrievalModel }) const response = await axios.post( url, { query, - retrieval_model: { - top_k: topK, - score_threshold: scoreThreshold, - reranking_enable: null, // 下面这两个字段即使为空也必须要有,否则接口无法请求 - score_threshold_enabled: null - } + retrieval_model: retrievalModel }, { headers: {