From 4a7427a7f160ae3d0e5fe431fbabfcedfe1e73be Mon Sep 17 00:00:00 2001 From: liangxu Date: Sat, 25 Apr 2026 16:48:28 +0800 Subject: [PATCH] feat(monitoring): exclude qwen from content citation resolution Skip article alias resolution and content-citation aggregates when the platform is qwen, and hide the content-citation badge/meta in the tracking detail view, since qwen's source URLs are not reliable enough to map to brand articles. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../src/views/TrackingQuestionDetailView.vue | 23 +++++- .../tenant/app/monitoring_callback_service.go | 82 +++++++++++-------- .../app/monitoring_callback_service_test.go | 38 +++++++++ .../tenant/app/monitoring_projection.go | 1 + .../internal/tenant/app/monitoring_service.go | 8 +- 5 files changed, 114 insertions(+), 38 deletions(-) diff --git a/apps/admin-web/src/views/TrackingQuestionDetailView.vue b/apps/admin-web/src/views/TrackingQuestionDetailView.vue index 69f9d58..c9e5a85 100644 --- a/apps/admin-web/src/views/TrackingQuestionDetailView.vue +++ b/apps/admin-web/src/views/TrackingQuestionDetailView.vue @@ -258,7 +258,7 @@ function resolveCitationTitle(citation: MonitoringQuestionDetailCitation): strin } function isLinkedInlineCitationPlatform(platformId: string | null | undefined): boolean { - return platformId === "qwen" || platformId === "yuanbao"; + return platformId === "yuanbao"; } function isKimiInlineCitationPlatform(platformId: string | null | undefined): boolean { @@ -269,6 +269,10 @@ function isDeepSeekInlineCitationPlatform(platformId: string | null | undefined) return platformId === "deepseek"; } +function supportsContentCitationDisplay(platformId: string | null | undefined): boolean { + return platformId !== "qwen"; +} + function createQwenSourceGroupPattern(): RegExp { return /\[\[source_group_web_(\d+)\]\]/g; } @@ -880,6 +884,10 @@ function analyzeInlineContentCitations( }); } + if (!isLinkedInlineCitationPlatform(platform?.ai_platform_id)) { + return []; + } + const sourceGroupIndexes = collectInlineCitationIndexes(answerText); if (!sourceGroupIndexes.length) { return []; @@ -1160,7 +1168,13 @@ const contentCitationColumns = computed(() => [ {{ citation.site_name }} · {{ resolveCitationTitle(citation) }} - {{ t("tracking.contentCitationBadge") }} + + {{ t("tracking.contentCitationBadge") }} +