From fdd98049e5c182a079048e50294c36ad8ab7d760 Mon Sep 17 00:00:00 2001 From: let5sne Date: Fri, 24 Jul 2026 23:37:46 +0800 Subject: [PATCH] fix(agent): decouple media analysis from knowledge scope --- .../aihr/knowledge/service/AihrKnowledgeQueryService.java | 5 +++-- .../aihr/knowledge/AihrKnowledgeQueryServiceTest.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/knowledge/service/AihrKnowledgeQueryService.java b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/knowledge/service/AihrKnowledgeQueryService.java index 6e942f39..11bc5c9c 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/knowledge/service/AihrKnowledgeQueryService.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/knowledge/service/AihrKnowledgeQueryService.java @@ -195,8 +195,9 @@ public class AihrKnowledgeQueryService { } AihrKnowledgePrincipal principal = projectPrincipal(principalResolver.current(), request.projectCode()); AuthenticatedApp app = appService.requireSessionApp(principal.tenantId(), principal.clientKey()); - Set spaceIds = accessService.resolveInternalSpaceIds( - principal, app, request.spaceCodes(), "READ"); + Set spaceIds = mode == MediaMode.MEDIA_ONLY + ? Set.of() + : accessService.resolveInternalSpaceIds(principal, app, request.spaceCodes(), "READ"); ConversationContext context = conversationContext(principal, app, request); String extracted = sopService.extractQuestionMedia(file, request.queryText()); String extractedContext = extracted == null ? "" : extracted.trim(); diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/knowledge/AihrKnowledgeQueryServiceTest.java b/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/knowledge/AihrKnowledgeQueryServiceTest.java index 3bb97682..7d5ddff7 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/knowledge/AihrKnowledgeQueryServiceTest.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/knowledge/AihrKnowledgeQueryServiceTest.java @@ -218,7 +218,6 @@ class AihrKnowledgeQueryServiceTest { var media = new MockMultipartFile("file", "pet.jpg", "image/jpeg", new byte[]{1}); when(resolver.current()).thenReturn(principal); when(appService.requireSessionApp("000000", "app")).thenReturn(app); - when(access.resolveInternalSpaceIds(principal, app, List.of(), "READ")).thenReturn(Set.of(9L)); when(conversations.prepare(principal, app, request)).thenReturn(context); when(conversations.append(any(), any(), any(), anyString(), anyString(), any())).thenReturn(1L); when(sop.extractQuestionMedia(media, "图中是什么宠物")).thenReturn("图中是一只金毛犬"); @@ -231,6 +230,7 @@ class AihrKnowledgeQueryServiceTest { assertFalse(result.noEvidence()); assertTrue(result.answer().contains("图中是一只金毛犬")); verify(sop, never()).searchAuthorized(any(), any(), any()); + verify(access, never()).resolveInternalSpaceIds(any(), any(), any(), anyString()); var appendedAnswer = ArgumentCaptor.forClass(String.class); verify(conversations).append(any(), any(), any(), anyString(), appendedAnswer.capture(), any()); assertTrue(appendedAnswer.getValue().contains("图中是一只金毛犬"));