From efe835be81ad8dbfeb66d3b9cee6b4192a90c50a Mon Sep 17 00:00:00 2001 From: Nelson <1475262689@qq.com> Date: Wed, 19 Aug 2026 11:53:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E5=91=A8=E6=9C=9F?= =?UTF-8?q?=E6=8A=A5=E5=91=8A=E4=B8=8E=E7=94=A8=E6=88=B7=E8=A1=8C=E4=B8=BA?= =?UTF-8?q?=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 支持可配置周报月报模板与登录后异步补生成\n- 增加用户行为埋点和后台分析页面\n- 移除主题额度并保留实修回顾结算\n- 修复历史会话续聊上下文丢失 --- ai_knowledge_base_v2/.env.example | 8 + .../apps/admin-web/src/App.vue | 8 + .../src/components/ChatDetailDrawer.vue | 2 - .../ContentGenerationConfigView.vue | 44 +- .../ContentGenerationVariableEditor.vue | 4 +- .../components/EntitlementManagementView.vue | 23 +- .../src/components/SystemConfigView.vue | 6 +- .../components/UserBehaviorAnalysisView.vue | 245 +++++++++++ .../src/components/UserDetailDrawer.vue | 51 +-- .../src/components/UserManagementView.vue | 7 +- .../admin-web/src/config/systemSettings.ts | 6 +- .../apps/admin-web/src/services/api.ts | 9 + .../apps/admin-web/src/types/api.ts | 57 ++- .../versions/0036_remove_topic_quota.py | 65 +++ .../versions/0037_periodic_report_sources.py | 38 ++ .../versions/0038_user_behavior_analytics.py | 42 ++ .../app/api/admin_content_generation.py | 12 +- .../backend/app/api/admin_entitlements.py | 15 +- .../backend/app/api/admin_user_behavior.py | 70 +++ .../apps/backend/app/api/admin_users.py | 57 +-- .../apps/backend/app/api/auth.py | 3 + .../apps/backend/app/api/behavior.py | 24 ++ .../apps/backend/app/api/router.py | 4 + .../apps/backend/app/api/user.py | 23 +- .../apps/backend/app/core/config.py | 8 + .../apps/backend/app/core/dependencies.py | 6 + .../apps/backend/app/models/__init__.py | 2 + .../apps/backend/app/models/behavior.py | 32 ++ .../apps/backend/app/models/chat.py | 1 - .../apps/backend/app/models/entitlement.py | 2 - .../apps/backend/app/models/growth.py | 4 +- .../apps/backend/app/schemas/admin.py | 4 +- .../apps/backend/app/schemas/behavior.py | 17 + .../app/services/admin_permission_service.py | 1 + .../app/services/agent_debug_service.py | 6 +- .../app/services/chat_context_service.py | 21 + .../apps/backend/app/services/chat_service.py | 40 +- .../app/services/chat_stream_service.py | 52 +-- .../content_generation_config_service.py | 118 ++++- .../services/content_generation_variables.py | 75 ++++ .../app/services/entitlement_service.py | 29 +- .../app/services/growth_profile_service.py | 11 +- .../app/services/maintenance_service.py | 6 + .../services/periodic_report_lazy_service.py | 361 ++++++++++++++++ .../periodic_report_material_service.py | 352 +++++++++++++++ .../app/services/periodic_report_service.py | 255 +++++++++-- .../app/services/periodic_report_worker.py | 38 +- ...ractice_review_auto_settlement_service.py} | 14 +- .../app/services/topic_session_service.py | 41 +- .../app/services/user_behavior_service.py | 275 ++++++++++++ .../backend/tests/test_admin_pagination.py | 2 +- .../backend/tests/test_admin_permissions.py | 32 ++ .../tests/test_agent_debug_user_context.py | 2 - .../apps/backend/tests/test_chat_context.py | 24 ++ .../tests/test_content_generation_configs.py | 19 + .../backend/tests/test_entitlements_topics.py | 128 ++---- .../backend/tests/test_growth_profiles.py | 65 ++- .../apps/backend/tests/test_help_cards.py | 1 - .../backend/tests/test_periodic_reports.py | 404 +++++++++++++++++- ...> test_practice_review_auto_settlement.py} | 20 +- .../apps/backend/tests/test_share_drafts.py | 1 - .../tests/test_user_behavior_analytics.py | 124 ++++++ .../apps/user-client/src/App.vue | 135 +++++- .../src/components/ChatComposer.vue | 24 +- .../src/components/PersonalCenterDialog.vue | 96 +++-- .../src/components/PolicyDialog.vue | 4 +- .../src/components/SessionQuota.vue | 17 +- .../apps/user-client/src/services/api.ts | 13 +- .../src/services/behaviorTracker.ts | 120 ++++++ .../apps/user-client/src/types/api.ts | 8 +- .../deployment/DEPLOYMENT_GUIDE.md | 29 +- ai_knowledge_base_v2/docker-compose.dev.yml | 7 + ai_knowledge_base_v2/docker-compose.prod.yml | 8 + .../docs/qianwen_product_todo.md | 24 +- .../docs/一期全链路验收记录.md | 2 +- 75 files changed, 3325 insertions(+), 578 deletions(-) create mode 100644 ai_knowledge_base_v2/apps/admin-web/src/components/UserBehaviorAnalysisView.vue create mode 100644 ai_knowledge_base_v2/apps/backend/alembic/versions/0036_remove_topic_quota.py create mode 100644 ai_knowledge_base_v2/apps/backend/alembic/versions/0037_periodic_report_sources.py create mode 100644 ai_knowledge_base_v2/apps/backend/alembic/versions/0038_user_behavior_analytics.py create mode 100644 ai_knowledge_base_v2/apps/backend/app/api/admin_user_behavior.py create mode 100644 ai_knowledge_base_v2/apps/backend/app/api/behavior.py create mode 100644 ai_knowledge_base_v2/apps/backend/app/models/behavior.py create mode 100644 ai_knowledge_base_v2/apps/backend/app/schemas/behavior.py create mode 100644 ai_knowledge_base_v2/apps/backend/app/services/periodic_report_lazy_service.py create mode 100644 ai_knowledge_base_v2/apps/backend/app/services/periodic_report_material_service.py rename ai_knowledge_base_v2/apps/backend/app/services/{topic_auto_settlement_service.py => practice_review_auto_settlement_service.py} (80%) create mode 100644 ai_knowledge_base_v2/apps/backend/app/services/user_behavior_service.py rename ai_knowledge_base_v2/apps/backend/tests/{test_topic_auto_settlement.py => test_practice_review_auto_settlement.py} (83%) create mode 100644 ai_knowledge_base_v2/apps/backend/tests/test_user_behavior_analytics.py create mode 100644 ai_knowledge_base_v2/apps/user-client/src/services/behaviorTracker.ts diff --git a/ai_knowledge_base_v2/.env.example b/ai_knowledge_base_v2/.env.example index 42c384a..6c4d803 100644 --- a/ai_knowledge_base_v2/.env.example +++ b/ai_knowledge_base_v2/.env.example @@ -28,6 +28,14 @@ PERIODIC_REPORT_MAX_ATTEMPTS=3 PERIODIC_REPORT_WEEKLY_ENABLED=true PERIODIC_REPORT_MONTHLY_ENABLED=true PERIODIC_REPORT_TIMEZONE=Asia/Shanghai +PERIODIC_REPORT_GLOBAL_SCHEDULE_ENABLED=false +PERIODIC_REPORT_LAZY_CHECK_ENABLED=true +PERIODIC_REPORT_LAZY_CHECK_LOCK_SECONDS=60 +PERIODIC_REPORT_WEEKLY_BACKFILL_LIMIT=26 +PERIODIC_REPORT_MONTHLY_BACKFILL_LIMIT=6 +PERIODIC_REPORT_FEATURE_START=2026-07-31T00:00:00+08:00 +PERIODIC_REPORT_SOURCE_CHUNK_CHARS=18000 +USER_BEHAVIOR_RETENTION_DAYS=30 TOPIC_SETTLEMENT_WORKER_ENABLED=true TOPIC_SETTLEMENT_POLL_SECONDS=2 TOPIC_SETTLEMENT_STALE_MINUTES=30 diff --git a/ai_knowledge_base_v2/apps/admin-web/src/App.vue b/ai_knowledge_base_v2/apps/admin-web/src/App.vue index a676323..1cf6de3 100644 --- a/ai_knowledge_base_v2/apps/admin-web/src/App.vue +++ b/ai_knowledge_base_v2/apps/admin-web/src/App.vue @@ -53,6 +53,7 @@ const AdminManagementView = defineAsyncComponent( () => import("./components/AdminManagementView.vue"), ); const FeedbackManagementView = defineAsyncComponent(() => import("./components/FeedbackManagementView.vue")); +const UserBehaviorAnalysisView = defineAsyncComponent(() => import("./components/UserBehaviorAnalysisView.vue")); const admin = ref(null); const activeMenu = ref("dashboard"); @@ -68,6 +69,7 @@ const menuPermissions: Record = { "content-generation": "content-generation.view", configs: "configs.view", sso: "sso.view", records: "records.view", retrievals: "retrievals.view", attention: "attention.view", admins: "admins.view", feedback: "feedback.view", + behavior: "behavior.view", }; const entitlementPlans = ref([]); @@ -717,6 +719,11 @@ async function clearFeishuCache() { :class="{ active: activeMenu === 'feedback' }" @click="switchMenu('feedback')" >反馈管理 + + +