From 79094d083277ab71cf0dd49c55110149339c035d Mon Sep 17 00:00:00 2001 From: Nelson <1475262689@qq.com> Date: Fri, 31 Jul 2026 15:48:40 +0800 Subject: [PATCH] feat: align agent preview user context --- .../src/components/AgentManagementView.vue | 45 ++++++++++++++- .../apps/admin-web/src/styles.css | 7 +++ .../apps/backend/app/schemas/admin.py | 1 + .../app/services/agent_debug_service.py | 53 +++++++++++++++++ .../tests/test_agent_debug_user_context.py | 57 +++++++++++++++++++ .../docs/qianwen_product_todo.md | 8 ++- 6 files changed, 168 insertions(+), 3 deletions(-) create mode 100644 ai_knowledge_base_v2/apps/backend/tests/test_agent_debug_user_context.py diff --git a/ai_knowledge_base_v2/apps/admin-web/src/components/AgentManagementView.vue b/ai_knowledge_base_v2/apps/admin-web/src/components/AgentManagementView.vue index 9552500..3c61b50 100644 --- a/ai_knowledge_base_v2/apps/admin-web/src/components/AgentManagementView.vue +++ b/ai_knowledge_base_v2/apps/admin-web/src/components/AgentManagementView.vue @@ -3,7 +3,7 @@ import { ElMessage, ElMessageBox } from "element-plus"; import { computed, nextTick, onMounted, reactive, ref, watch } from "vue"; import { api, streamDebugAgent } from "../services/api"; -import type { AgentRuntimeConfig, KnowledgeItem, ModelItem, PromptDetail, PromptHistoryItem } from "../types/api"; +import type { AdminUser, AgentRuntimeConfig, KnowledgeItem, ModelItem, PromptDetail, PromptHistoryItem } from "../types/api"; import AgentGenerationParameters from "./AgentGenerationParameters.vue"; import AgentResponseDepthControl from "./AgentResponseDepthControl.vue"; import AdminPagination from "./AdminPagination.vue"; @@ -25,6 +25,8 @@ const promptContent = ref(""); const savedPromptContent = ref(""); const models = ref([]); const knowledge = ref([]); +const debugUsers = ref([]); +const debugUserLoading = ref(false); const history = ref([]); const historyPager = reactive({ page: 1, pageSize: 10, total: 0 }); const historyDetailOpen = ref(false); @@ -43,6 +45,7 @@ const agentPreviewMessages = ref<{ const agentForm = reactive({ modelId: undefined as number | undefined, + userId: undefined as number | undefined, knowledgeIds: [] as number[], temperature: 0.2 as number | null, topP: null as number | null, @@ -80,6 +83,11 @@ const selectedKnowledgeSummary = computed(() => { } return `${agentForm.knowledgeIds.length} 个知识库`; }); +const selectedDebugUserLabel = computed(() => { + if (!agentForm.userId) return "未模拟学员"; + const user = debugUsers.value.find((item) => item.id === agentForm.userId); + return user ? `${user.name || user.nickname || user.phone} · #${user.id}` : `学员 #${agentForm.userId}`; +}); onMounted(load); @@ -103,6 +111,7 @@ async function load() { .filter((item) => item.status === 1 && item.lifecycleStatus === "active") .map((item) => item.id); if (props.previewKnowledgeId) applyPreviewKnowledge(props.previewKnowledgeId); + void searchDebugUsers(""); await loadHistory(); } catch (error) { ElMessage.error(errorMessage(error, "Agent 配置加载失败")); @@ -111,6 +120,18 @@ async function load() { } } +async function searchDebugUsers(keyword: string) { + debugUserLoading.value = true; + try { + const result = await api.users({ keyword, page: 1, pageSize: 20 }); + debugUsers.value = result.items; + } catch { + debugUsers.value = []; + } finally { + debugUserLoading.value = false; + } +} + function applyRuntimeConfig(value: AgentRuntimeConfig) { runtimeConfig.value = value; Object.assign(runtimeForm, { @@ -299,6 +320,7 @@ async function debugAgent() { { promptContent: promptContent.value, modelId: agentForm.modelId, + userId: agentForm.userId || null, knowledgeIds: agentForm.knowledgeIds, question, history: conversationHistory, @@ -473,6 +495,25 @@ function errorMessage(error: unknown, fallback: string) { + + + + +
用于让后台预览加载该学员的权益、主题额度和长期成长档案;不会消耗额度,也不会影响正式会话。
+
@@ -546,7 +587,7 @@ function errorMessage(error: unknown, fallback: string) {