agentscope-ai / agentscope-ai/agentscope-java

[Bug]: 智能体调用RAGFlow,similarityThreshold参数设置失效,始终是0.5

Aberta
#1,516 1 comentário 0 reações 0 responsáveis Ver no GitHub
area/ext/rag bug
Linguagem predominante
Java
Estrelas
5.6k
Forks
1.3k
Merge médio
4d 12h
PRs com merge (30d)
77

Descrição

目前还是个小白,如果是我自己的问题的话,也请指点一下。
下面是我智能体知识库的配置,similarityThreshold参数设置了0.3。
ReActAgent agent = ReActAgent.builder()
.knowledge(
RAGFlowKnowledge.builder()
.config(
RAGFlowConfig.builder()
.apiKey(API_KEY)
.baseUrl(BASE_URL)
.addDatasetId("xxx")
.topK(10)
.similarityThreshold(0.3)
.build())
.build())
.build();
然后通过在RAGFlowClient.retrieve方法中打断点,发现requestBody中的similarityThreshold值是0.5。
之后把仓库扒下来仍给ai分析了一下,下面是ai给出的结论:

分析结果
根因在 RAGFlowKnowledge.retrieve() 方法中,topK 和 similarityThreshold 的取值来源搞错了。

调用链路
RequestMessageHandler
→ ReActAgent.builder()
.knowledge(RAGFlowKnowledge with topK=10, similarityThreshold=0.3) ← 用户设置的值
.ragMode(RAGMode.AGENTIC)
// 注意:没有调用 .retrieveConfig()
.build()
在 ReActAgent.Builder 中(ReActAgent.java:1261-1262),有一个硬编码的默认 RetrieveConfig:
private RetrieveConfig retrieveConfig =
RetrieveConfig.builder().limit(5).scoreThreshold(0.5).build(); // ← 默认值 5 和 0.5
然后 configureRAG() 把这个默认 RetrieveConfig 传给了 KnowledgeRetrievalTools(或 GenericRAGHook)。

关键的 Bug 位置
RAGFlowKnowledge.retrieve() at line 134-139:
Integer topK = config != null ? config.getLimit() : null; // ← 拿到 5
Double similarityThreshold = config != null ? config.getScoreThreshold() : null; // ← 拿到 0.5
return client.retrieve(query, topK, similarityThreshold, null)
这里的 config 参数是 RetrieveConfig(框架层抽象),它永远不会为 null,默认值是 limit=5,
scoreThreshold=0.5。所以用户设置在 RAGFlowConfig 里的 topK(10) 和 similarityThreshold(0.3) 被完全忽略了。

而 RAGFlowClient.retrieve() 中的 fallback 逻辑(line 125-128):
if (topK != null) {
requestBody.put("top_k", topK);
} else if (config.getTopK() != null) { // ← 这个 fallback 永远不会触发!
requestBody.put("top_k", config.getTopK());
}
因为传入的 topK 永远不为 null(永远是 RetrieveConfig 的默认值 5),所以永远不会走到 fallback。

Guia de contribuição

Abrir o guia de contribuição

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.