From b404bf546e14c1dfd1b6fd8fad9b8f672826012d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A1=E8=8B=A5?= Date: Tue, 3 Feb 2026 11:36:53 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E4=BB=A5=E6=9C=AC=E5=9C=B0=E4=B8=BA?= =?UTF-8?q?=E5=87=86=EF=BC=8C=E4=B8=8A=E4=BC=A0=E5=85=A8=E9=83=A8=E5=B9=B6?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=20GitHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 0 -> 14340 bytes .apm/conversation-log.md | 119 + .apm/docs/architecture.md | 231 + .apm/execution-table.md | 89 + .apm/project-state.md | 96 + .cursor/rules/shensheshou.mdc | 179 + .../dev-template-project-manager/SKILL.md | 323 + .../dev-template-project-manager/commands.md | 282 + .../integration.md | 196 + .../dev-template-project-manager/templates.md | 361 + .../dev-template-project-manager/workflow.md | 327 + app/ai-agent/channels/page.tsx | 617 ++ app/ai-agent/chat/page.tsx | 97 +- app/ai-agent/data-cleaning/page.tsx | 1093 +- app/ai-agent/page.tsx | 279 + app/ai-agent/report/page.tsx | 869 +- app/ai-agent/smart-tag/page.tsx | 824 +- app/ai-assistant/page.tsx | 138 +- app/api/ai-chat/route.ts | 315 + app/api/ai-tagging/route.ts | 303 + app/api/auth/login/route.ts | 77 + app/api/auth/send-code/route.ts | 31 + app/api/channels/route.ts | 185 + app/api/cleaning-rules/route.ts | 317 + app/api/crowd-pools/route.ts | 286 + app/api/data-sources/route.ts | 297 + app/api/database-structure/route.ts | 210 +- app/api/monitoring/route.ts | 325 + app/api/open-api/route.ts | 768 ++ app/api/portrait/route.ts | 656 ++ app/api/tags/route.ts | 411 + app/api/traffic-packages/route.ts | 283 + app/components/BottomNav.tsx | 10 +- app/components/MobileSidebar.tsx | 16 +- app/components/Sidebar.tsx | 89 +- app/components/charts.tsx | 106 +- app/data-ingestion/ai-engine/page.tsx | 552 + app/data-ingestion/cleaning/page.tsx | 510 + app/data-ingestion/lineage/page.tsx | 619 +- app/data-ingestion/sources/[id]/page.tsx | 399 + app/data-ingestion/sources/page.tsx | 749 +- app/data-ingestion/tasks/page.tsx | 414 + app/data-market/api/page.tsx | 452 + app/data-market/open-api/page.tsx | 1460 +++ app/data-market/packages/page.tsx | 522 + app/data-market/page.tsx | 326 + app/monitoring/health/page.tsx | 369 +- app/monitoring/page.tsx | 80 +- app/page.tsx | 714 +- app/tag-portrait/crowd/page.tsx | 903 +- app/tag-portrait/page.tsx | 272 +- app/tag-portrait/portrait/page.tsx | 1025 +- app/tag-portrait/tags/page.tsx | 1234 ++- components/charts.tsx | 154 +- components/ui/alert-dialog.tsx | 141 + lib/mongodb.ts | 380 + package-lock.json | 9392 +++++++++++++++++ package.json | 6 +- pnpm-lock.yaml | 237 +- scripts/push-to-github.sh | 45 + scripts/start.sh | 45 + scripts/sync-from-github.sh | 37 + 一键上传到GitHub.command | 6 + 一键同步并启动.command | 13 + 启动神射手.scpt | 4 + 开发文档/00_十目录索引.md | 146 + 开发文档/00_项目核心文档.md | 269 + 开发文档/01_开发进度文档.md | 190 + 开发文档/02_提示词文档.md | 276 + 开发文档/10、项目管理/README.md | 17 + 开发文档/10、项目管理/_智能展开.md | 301 + 开发文档/10、项目管理/执行表.md | 73 + 开发文档/10、项目管理/项目管理提示词.md | 42 + 开发文档/1、需求/README.md | 18 + 开发文档/1、需求/_智能展开.md | 298 + 开发文档/1、需求/业务需求.md | 74 + 开发文档/1、需求/成本.md | 41 + 开发文档/1、需求/技术需求.md | 57 + 开发文档/1、需求/核心需求提取.md | 87 + 开发文档/2、架构/README.md | 18 + 开发文档/2、架构/_智能展开.md | 448 + 开发文档/2、架构/技术选型.md | 48 + 开发文档/2、架构/数据库.md | 53 + 开发文档/2、架构/核心架构逻辑.md | 69 + 开发文档/2、架构/系统架构.md | 89 + 开发文档/3、原型/README.md | 16 + 开发文档/3、原型/_智能展开.md | 440 + 开发文档/3、原型/原型设计规范.md | 58 + 开发文档/3、原型/页面结构.md | 88 + 开发文档/4、前端/README.md | 16 + 开发文档/4、前端/_智能展开.md | 723 ++ 开发文档/4、前端/前端开发规范.md | 63 + 开发文档/4、前端/核心组件代码.md | 119 + 开发文档/5、接口/API清单与核心逻辑.md | 102 + 开发文档/5、接口/README.md | 17 + 开发文档/5、接口/_智能展开.md | 587 ++ 开发文档/5、接口/存客宝对接规范.md | 803 ++ 开发文档/5、接口/接口定义规范.md | 44 + 开发文档/6、后端/MongoDB连接器核心.md | 131 + 开发文档/6、后端/README.md | 16 + 开发文档/6、后端/_智能展开.md | 484 + 开发文档/6、后端/后端开发规范.md | 48 + 开发文档/7、数据库/ER与查询逻辑.md | 145 + 开发文档/7、数据库/README.md | 16 + 开发文档/7、数据库/_智能展开.md | 364 + 开发文档/7、数据库/数据库管理规范.md | 40 + 开发文档/8、部署/Next.js自动化部署流程.md | 42 + 开发文档/8、部署/README.md | 17 + 开发文档/8、部署/WEBHOOK部署的提示词.md | 41 + 开发文档/8、部署/_智能展开.md | 390 + 开发文档/8、部署/启动与部署脚本.md | 88 + ... GitHub Webhook 与宝塔面板的自动化部署流程文档.md | 103 + 开发文档/8、部署/项目程序提示词.md | 49 + 开发文档/9、手册/README.md | 18 + 开发文档/9、手册/_智能展开.md | 290 + 开发文档/9、手册/使用手册提示词.md | 50 + 开发文档/9、手册/快速使用手册.md | 106 + 开发文档/9、手册/落地方案提示词.md | 32 + 开发文档/9、手册/说明手册提示词.md | 38 + 开发文档/AI开发引擎.md | 346 + 开发文档/AI开发流程.jpg | Bin 0 -> 2116057 bytes 开发文档/AI标签系统V1产品需求文档 (2).docx | Bin 0 -> 13072 bytes ...《神射手数据中台》产品需求文档 (PRD) V1.1.docx | Bin 0 -> 969286 bytes 开发文档/代码核心提取器.md | 466 + 开发文档/开发文档.md | 39 - 开发文档/标签管理系统开发文档.md | 143 - 开发文档/模板使用说明书.md | 312 + .../神射手数据中台_PRD_V1.1_扩展版 (1).docx | Bin 0 -> 5831 bytes 开发文档/需求文档.md | 141 - 神射手20260131.zip | Bin 0 -> 25303212 bytes 端口登记.md | 38 + 131 files changed, 37618 insertions(+), 3930 deletions(-) create mode 100644 .DS_Store create mode 100644 .apm/conversation-log.md create mode 100644 .apm/docs/architecture.md create mode 100644 .apm/execution-table.md create mode 100644 .apm/project-state.md create mode 100644 .cursor/rules/shensheshou.mdc create mode 100644 .cursor/skills/dev-template-project-manager/SKILL.md create mode 100644 .cursor/skills/dev-template-project-manager/commands.md create mode 100644 .cursor/skills/dev-template-project-manager/integration.md create mode 100644 .cursor/skills/dev-template-project-manager/templates.md create mode 100644 .cursor/skills/dev-template-project-manager/workflow.md create mode 100644 app/ai-agent/channels/page.tsx create mode 100644 app/ai-agent/page.tsx create mode 100644 app/api/ai-chat/route.ts create mode 100644 app/api/ai-tagging/route.ts create mode 100644 app/api/auth/login/route.ts create mode 100644 app/api/auth/send-code/route.ts create mode 100644 app/api/channels/route.ts create mode 100644 app/api/cleaning-rules/route.ts create mode 100644 app/api/crowd-pools/route.ts create mode 100644 app/api/data-sources/route.ts create mode 100644 app/api/monitoring/route.ts create mode 100644 app/api/open-api/route.ts create mode 100644 app/api/portrait/route.ts create mode 100644 app/api/tags/route.ts create mode 100644 app/api/traffic-packages/route.ts create mode 100644 app/data-ingestion/ai-engine/page.tsx create mode 100644 app/data-ingestion/cleaning/page.tsx create mode 100644 app/data-ingestion/sources/[id]/page.tsx create mode 100644 app/data-ingestion/tasks/page.tsx create mode 100644 app/data-market/api/page.tsx create mode 100644 app/data-market/open-api/page.tsx create mode 100644 app/data-market/packages/page.tsx create mode 100644 app/data-market/page.tsx create mode 100644 components/ui/alert-dialog.tsx create mode 100644 lib/mongodb.ts create mode 100644 package-lock.json create mode 100644 scripts/push-to-github.sh create mode 100644 scripts/start.sh create mode 100644 scripts/sync-from-github.sh create mode 100644 一键上传到GitHub.command create mode 100644 一键同步并启动.command create mode 100644 启动神射手.scpt create mode 100644 开发文档/00_十目录索引.md create mode 100644 开发文档/00_项目核心文档.md create mode 100644 开发文档/01_开发进度文档.md create mode 100644 开发文档/02_提示词文档.md create mode 100644 开发文档/10、项目管理/README.md create mode 100644 开发文档/10、项目管理/_智能展开.md create mode 100644 开发文档/10、项目管理/执行表.md create mode 100644 开发文档/10、项目管理/项目管理提示词.md create mode 100644 开发文档/1、需求/README.md create mode 100644 开发文档/1、需求/_智能展开.md create mode 100644 开发文档/1、需求/业务需求.md create mode 100644 开发文档/1、需求/成本.md create mode 100644 开发文档/1、需求/技术需求.md create mode 100644 开发文档/1、需求/核心需求提取.md create mode 100644 开发文档/2、架构/README.md create mode 100644 开发文档/2、架构/_智能展开.md create mode 100644 开发文档/2、架构/技术选型.md create mode 100644 开发文档/2、架构/数据库.md create mode 100644 开发文档/2、架构/核心架构逻辑.md create mode 100644 开发文档/2、架构/系统架构.md create mode 100644 开发文档/3、原型/README.md create mode 100644 开发文档/3、原型/_智能展开.md create mode 100644 开发文档/3、原型/原型设计规范.md create mode 100644 开发文档/3、原型/页面结构.md create mode 100644 开发文档/4、前端/README.md create mode 100644 开发文档/4、前端/_智能展开.md create mode 100644 开发文档/4、前端/前端开发规范.md create mode 100644 开发文档/4、前端/核心组件代码.md create mode 100644 开发文档/5、接口/API清单与核心逻辑.md create mode 100644 开发文档/5、接口/README.md create mode 100644 开发文档/5、接口/_智能展开.md create mode 100644 开发文档/5、接口/存客宝对接规范.md create mode 100644 开发文档/5、接口/接口定义规范.md create mode 100644 开发文档/6、后端/MongoDB连接器核心.md create mode 100644 开发文档/6、后端/README.md create mode 100644 开发文档/6、后端/_智能展开.md create mode 100644 开发文档/6、后端/后端开发规范.md create mode 100644 开发文档/7、数据库/ER与查询逻辑.md create mode 100644 开发文档/7、数据库/README.md create mode 100644 开发文档/7、数据库/_智能展开.md create mode 100644 开发文档/7、数据库/数据库管理规范.md create mode 100644 开发文档/8、部署/Next.js自动化部署流程.md create mode 100644 开发文档/8、部署/README.md create mode 100644 开发文档/8、部署/WEBHOOK部署的提示词.md create mode 100644 开发文档/8、部署/_智能展开.md create mode 100644 开发文档/8、部署/启动与部署脚本.md create mode 100644 开发文档/8、部署/基于 GitHub Webhook 与宝塔面板的自动化部署流程文档.md create mode 100644 开发文档/8、部署/项目程序提示词.md create mode 100644 开发文档/9、手册/README.md create mode 100644 开发文档/9、手册/_智能展开.md create mode 100644 开发文档/9、手册/使用手册提示词.md create mode 100644 开发文档/9、手册/快速使用手册.md create mode 100644 开发文档/9、手册/落地方案提示词.md create mode 100644 开发文档/9、手册/说明手册提示词.md create mode 100644 开发文档/AI开发引擎.md create mode 100644 开发文档/AI开发流程.jpg create mode 100644 开发文档/AI标签系统V1产品需求文档 (2).docx create mode 100644 开发文档/《神射手数据中台》产品需求文档 (PRD) V1.1.docx create mode 100644 开发文档/代码核心提取器.md delete mode 100644 开发文档/开发文档.md delete mode 100644 开发文档/标签管理系统开发文档.md create mode 100644 开发文档/模板使用说明书.md create mode 100644 开发文档/神射手数据中台_PRD_V1.1_扩展版 (1).docx delete mode 100644 开发文档/需求文档.md create mode 100644 神射手20260131.zip create mode 100644 端口登记.md diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8aca9b996add7751adc97a4b73296a6879699f94 GIT binary patch literal 14340 zcmeHOYitzP6~1TI#cSR;bmxGZLeD>4};f$U%{T;8SH`CnPq3! zh7wvUYLluosZyy*-w#Dfs=iPjjiQ!Hv{F*4wrN^HB~mq2A4(%NKj@DjRjQPpduMii zXJ<`PDN567Mw+>gbI!fze)pU^bB@=95a=yxU4(QJLPWf2DNFcxfRGq1xr@^29k?Rc z19%_C8|yM5c``!`k|8>A0^Gq40lTPt4c;P3=)8Pxx+|5jvpFV)Tv{uqea?UMXaRRP50dHpT zA{1b=qg;%!6G*sa_zV#U5eOpCid~B^_AZdK#H4ZiUenHaaW-|O9(1J*Z?cOC`*_VM zE=DKOM=QtTV|GeQ_WTUT^Us&HwQ^j)5RWex;2sdosIiK<29wO<(;^z_z`TQvwG-H$ z!q&;aS}shPH~NFq8UKptzLE}ZU(0;yStsZ1|8wb_X*h+>&fkF$si|F5R~N0Tue&!j zZO^6(YN6=#s`)Y68nSIOU8<|;qlP{^A-D9|RzWo^J7@d%nbLTeS-Ps=N+S+x#J$9~p6V^9(Z#sWIDlUuPwR3Rdl$o{cPowU5f%hsP zOWbz(NpnNx^=MAUOrw63TJAJ5Gu|TMSEWV%QI@@BiqXaO(vpToxv6<+Q%lpbWy_Yg zDl3{-wN1!N(`x3_RGzBeXPb7u*DUH2a-)MF?9JHLp}anWiytoNX9_9fqeyD55E#_8 zT4Z9#Qjo)tb_K&)#dQY26&KdhJ5N&JG*63aUAqGL=&^hBX!6 zeZ$2z8c(cuYch$u6$~F*N;R*9_~nxcRv)r#OGlwYE+wAW=dp-nBU)gJjFZ!3jyy^p zBNxd}$cyAJ^)7B)gVY=Lc%fF2lxF_;7uPP+0!Y3I=|`3q>)vAoH=zX|K> z@AuK1nLgLbBlnaH;AL>F+}(cV=&|9EQE5Ru{X2dvW1GdSzOW(}<{J)$}p-O_MVN73)Bf^ovo^HKSU=#Zsmbta^&P*#a@ zTpTW@jnhS=aQ14m+|;;wjUtU}IQ0Qrqe7be12M`dYu6~s7^U>(b$n`~$htqUPLYNj zT)(V(j2qh}Y3LOCzwAU^(atVOIl}Bu)}pT1maURjSfR1j$#t{=L}G92O~5tY0$fo zFJ+A~Ac`Y&$R178HMWq$gH%E`tQi9jJ@h8`?2~^hiefyWPBH_GCpNH>#4kJFU^ND4 zJkjZPNAdG^HQ7XxWIvh2H1|335cvZ6CV7TDPhKF`$SdSk@;bQ*00PuNEi8tm(1LEz z3Ng3?w!(Jkh8@rc18@iq!zfIkGo&E{CY%Nb3Q&ZP!6)DWco04XkH8n<%kUNWDm)Gs z;VF0;o`E03FX2V_HM|7Z;ji#2{0&}%e+UtwMyM4UghoLYRtj-ptFT?@7Ip|bg`{vm zI4X<@nyY@<;l|x|>B(MV^A6{fPF3Nl>Q2?RXYWV$?f>6#s_X7cpaow5G3r~}@98bu zp=-D$Tjf1~nZ3_hnAtOnsIb?o%8He%+Ez=qE##(0&|ma3A~kxs&gEV!y-!4ck!#)N zI_VA(Jw;yRHrv}eMD$HrU`?s3?d~Xgpd4|V?QPqlq6}_hhxEZH`l4KOb=8WM%C6m# zBojOeqV7P+whxKuPVzfu<=4rd$!p{W`4?Jw1KPI&>!1@Ydl&41gJ{`Y!Al0W;>m&|}pO0z$Y*bmM zgXTM?D)jqYMcyI6@6(jjPgfh0*BP-Yt&$kXYZ?l-?Te7(CG*_eJjX9W# zwb1yT&rMX7@vTSv`cF}&Dj&Zl?e^av_x51{-uYd5D_-B)B=(u#SZ!@?CaOwK>7Ny= zY``3r%CcH_vW(Ug%`Rcv2+9idwxpVxXgKP`jWt3lTLK4jn-|5w4*Gk3ub(Myzads?wq&eG7B?(OL9)|!-2FvU6DGkPb^F#6qU$}H7^729N*kKd$ zjvJ)<6ong9(MIN^XAu0#^lG+Bg0%-FzRM*QCEQ9Cx9}7`sX4QxY|xy6Iy^7efN~bz zS#l==WwQ}FFhQ+ikLd>us2lOJ%_wIx$I0N+c{_SDcjCubgku!(z@?Z~Bu<&pEy&C7 z3nc$gkGlEB;&+ETI4gK~gDM}wJ|2Fjpr6GTQ8GySF{zd$2e9lwq%=QL%n5kS>kyp` zzElicEgr(WnFW50S1}Z|RDP%cKMw>U*M^Zlz_S1tRrrE{yh};7F#ZqYfArHpe9xbw z)#$u`hVef-e|Uumgb2LH5U6$a>7<`2{R{v8|2?L4s7{DLh`>9E0MsN?$zB|Bp}$86 zNQ>b;i8tlBj5oco&P4D*S!jd(91k1x=Xf+nSH6&zpbaeN+!AYe{a1bn$i?seNF|K_ P%l~o}#{d7<@&CU8Mnaki literal 0 HcmV?d00001 diff --git a/.apm/conversation-log.md b/.apm/conversation-log.md new file mode 100644 index 0000000..69bc127 --- /dev/null +++ b/.apm/conversation-log.md @@ -0,0 +1,119 @@ +# 📝 神射手对话记录 + +> 本文档记录项目开发过程中的重要对话和决策。 + +--- + +## 2026-01-31 17:00 项目管理初始化 + +### 讨论要点 +- 用户要求使用 dev-template-project-manager skill 来管理项目 +- 需要创建神射手专属的项目管理工作区 +- 要求搜索GitHub类似CDP项目并提取核心代码 +- 需要生成项目架构图 + +### 决策 +1. 创建 `.apm/` 项目管理工作区 +2. 参考 Tracardi、Crowd.dev 等开源CDP项目 +3. 生成完整的系统架构文档 + +### 执行动作 +- [x] 创建 `.apm/project-state.md` +- [x] 创建 `.apm/execution-table.md` +- [x] 创建 `.apm/docs/architecture.md` +- [x] 搜索GitHub CDP项目 + +### 任务变更 +- T021: 项目管理工作区 → ✅ Done +- T023: GitHub项目调研 → ✅ Done +- T024: 项目架构图 → ✅ Done + +--- + +## 2026-01-31 16:30 深度优化完成 + +### 讨论要点 +- 用户要求一个个板块深度优化 +- 所有功能需要使用真实数据库内容 +- 整个界面需要优化更简洁 +- 使用卡若AI的进度管理来管理项目 + +### 决策 +1. 逐模块检查并确保使用真实数据 +2. 为数据血缘、人群圈选创建新API +3. 优化标签统计性能($sample采样) + +### 执行动作 +- [x] 数据血缘API `/api/database-structure` +- [x] 人群圈选API `/api/crowd-pools` +- [x] 标签API采样优化 +- [x] 流量包API字段修正 +- [x] 前端页面动态数据加载 + +### 任务变更 +- T015-T019: 各API → ✅ Done +- 完成度从75%提升到85% + +--- + +## 2026-01-30 需求确认 + +### 讨论要点 +- 确认五大模块结构:数据概览、数据接入、标签画像、AI Agent、数据市场 +- AI Agent需保持五个子导航 +- 渠道配置需要详细步骤 +- 人群圈选参考抖音巨量引擎 + +### 决策 +1. 恢复AI Agent五个子导航 +2. 渠道配置增加飞书/企微详细步骤 +3. 人群圈选改为项目+流量池二级结构 + +### 关键代码变更 +- `app/ai-agent/channels/page.tsx` - 详细配置步骤 +- `app/tag-portrait/crowd/page.tsx` - 重构为项目视图 + +--- + +## 2026-01-31 18:00 外部集成完成 + +### 讨论要点 +- 用户要求继续完成剩余任务 +- 飞书机器人集成 +- 系统监控优化 + +### 决策 +1. 创建渠道对接API `/api/channels` +2. 创建系统监控API `/api/monitoring` +3. 优化监控页面使用真实数据 + +### 执行动作 +- [x] 创建 `/api/channels` - 飞书连接测试、群列表、消息发送 +- [x] 创建 `/api/monitoring` - 数据库状态、健康检查、告警、指标 +- [x] 优化 `/monitoring/page.tsx` - 接入真实API + +### 任务变更 +- T025: 渠道对接API → ✅ Done +- T026: 系统监控API → ✅ Done +- T027: 监控页面优化 → ✅ Done +- 完成度从90%提升到95% + +--- + +## 关键提示词存档 + +### 用户查询模式 +``` +"查询 13407000001" → 手机号查询 +"28533368 qq" → QQ号查询 +"查钻石用户" → 流量池查询 +"RFM分析" → 用户分析 +``` + +### 项目规范 +``` +- 使用苹果毛玻璃风格 +- MongoDB采用$sample采样优化 +- 用户估值使用 user_evaluation_score 字段 +- 前端使用 Radix UI + TailwindCSS +``` diff --git a/.apm/docs/architecture.md b/.apm/docs/architecture.md new file mode 100644 index 0000000..6860d0a --- /dev/null +++ b/.apm/docs/architecture.md @@ -0,0 +1,231 @@ +# 🏗️ 神射手系统架构图 + +> 📅 更新: 2026-01-31 +> 🎯 版本: v1.3.0 + +--- + +## 一、系统总览 + +``` +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 神射手数据中台 v1.3 │ +├─────────────────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ 数据概览 │ │ 数据接入 │ │ 标签画像 │ │ AI Agent │ │ +│ │ 首页AI对话 │ │ 数据源管理 │ │ 标签管理 │ │ 渠道配置 │ │ +│ │ 数据统计 │ │ AI标签引擎 │ │ 用户画像 │ │ AI打标 │ │ +│ │ │ │ 清洗规则 │ │ 人群圈选 │ │ AI清洗 │ │ +│ │ │ │ 任务调度 │ │ 流量池 │ │ 智能报告 │ │ +│ │ │ │ 数据血缘 │ │ │ │ │ │ +│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ +│ │ +│ ┌─────────────┐ │ +│ │ 数据市场 │ │ +│ │ API服务 │ │ +│ │ 流量包管理 │ │ +│ └─────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 二、技术架构 + +``` +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 客户端层 │ +├─────────────────────────────────────────────────────────────────────────────┤ +│ 浏览器 (Web) │ 飞书机器人 │ 企业微信 │ API调用方 │ +└────────┬──────────┴────────┬────────┴───────┬───────┴──────────┬────────────┘ + │ │ │ │ + ▼ ▼ ▼ ▼ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 网关层 │ +├─────────────────────────────────────────────────────────────────────────────┤ +│ Next.js 14 (localhost:3001) │ FastAPI Gateway (卡若AI) │ +│ - 前端页面 │ - /feishu/events │ +│ - /api/* 接口 │ - /wecom/callback │ +│ - SSR渲染 │ - /shensheshou/* │ +└────────┬────────────────────────────────┴──────────────────────┬────────────┘ + │ │ + ▼ ▼ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 服务层 │ +├─────────────────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │ +│ │ 用户查询服务 │ │ 标签引擎服务 │ │ AI对话服务 │ │ +│ │ - 手机号查询 │ │ - RFM计算 │ │ - 意图识别 │ │ +│ │ - QQ号查询 │ │ - 用户分级 │ │ - 数据拆解 │ │ +│ │ - 智能搜索 │ │ - 标签生成 │ │ - 画像输出 │ │ +│ └───────────────────┘ └───────────────────┘ └───────────────────┘ │ +│ │ +│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │ +│ │ 流量池服务 │ │ 数据清洗服务 │ │ 报告生成服务 │ │ +│ │ - 人群圈选 │ │ - 手机号格式化 │ │ - 日报/周报 │ │ +│ │ - 流量包管理 │ │ - 数据去重 │ │ - AI分析报告 │ │ +│ │ - 导出功能 │ │ - 质量评估 │ │ - 模板管理 │ │ +│ └───────────────────┘ └───────────────────┘ └───────────────────┘ │ +│ │ +└────────┬────────────────────────────────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 数据层 │ +├─────────────────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────────────────────────────────────────────┐ │ +│ │ MongoDB (localhost:27017) │ │ +│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ +│ │ │ KR │ │KR_腾讯 │ │KR_微博 │ │KR_京东 │ │KR_存客宝│ ... │ │ +│ │ │ 4.7GB │ │ 62.5GB │ │ 18.7GB │ │ 20.1GB │ │ 0.44GB │ │ │ +│ │ │用户估值│ │QQ+手机 │ │UID+手机│ │ 消费 │ │用户资产│ │ │ +│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ +│ └─────────────────────────────────────────────────────────────────────┘ │ +│ │ +│ 总计: 26个数据库 | 20.13亿条记录 | 222GB存储 │ +│ │ +└─────────────────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 三、数据流向 + +``` +┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ +│ 数据源 │ ──▶ │ AI标签引擎 │ ──▶ │ 用户估值 │ ──▶ │ 流量池 │ +│ KR_腾讯 │ │ 字段拆解 │ │ RFM计算 │ │ 人群分层 │ +│ KR_微博 │ │ 数据清洗 │ │ 等级划分 │ │ 标签筛选 │ +│ KR_京东 │ │ 标签生成 │ │ 画像合并 │ │ 流量包输出 │ +│ KR_存客宝 │ │ │ │ │ │ │ +└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ + │ │ │ │ + │ │ │ │ + ▼ ▼ ▼ ▼ +┌─────────────────────────────────────────────────────────────────────────────┐ +│ KR.用户估值 (核心表) │ +├─────────────────────────────────────────────────────────────────────────────┤ +│ phone │ user_evaluation_score │ unified_tags │ traffic_pool │ +│ phone_masked │ rfm_scores │ source_channels│ user_level │ +│ name │ data_quality │ merge_evidence │ created_at │ +└─────────────────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 四、API架构 + +``` +/api/ +├── ai-chat/ # AI智能对话 +│ ├── GET → 获取状态 +│ └── POST → 发送查询 +│ +├── data-sources/ # 数据源管理 +│ ├── GET → 列表+统计 +│ └── POST → 连接测试 +│ +├── tags/ # 标签服务 +│ └── GET → 标签统计 +│ +├── portrait/ # 用户画像 +│ └── GET → 画像查询 +│ +├── traffic-packages/ # 流量池 +│ ├── GET → 池统计 +│ └── POST → 创建流量包 +│ +├── crowd-pools/ # 人群圈选 +│ └── GET → 项目/池/用户 +│ +├── database-structure/ # 数据库结构 +│ └── GET → 血缘数据 +│ +└── monitoring/ # 系统监控 + └── GET → 健康状态 +``` + +--- + +## 五、GitHub参考项目 + +### 5.1 Tracardi CDP +- **仓库**: github.com/tracardi/tracardi +- **星数**: 621+ +- **技术**: Python + FastAPI + Elasticsearch +- **可借鉴**: + - Profile合并算法 + - 事件处理工作流 + - 插件架构设计 + +### 5.2 Crowd.dev +- **仓库**: github.com/CrowdDotDev/crowd.dev +- **星数**: 3.3k+ +- **技术**: TypeScript + PostgreSQL +- **可借鉴**: + - 社区数据整合 + - 活跃度计算 + - 成员画像 + +### 5.3 借鉴要点 + +| 功能 | 参考项目 | 核心代码 | +|------|----------|----------| +| 用户合并 | Tracardi | profile/merger.py | +| 事件追踪 | Tracardi | domain/event.py | +| 标签计算 | Tracardi | process/tagging.py | +| 活跃度 | Crowd.dev | services/member.ts | + +--- + +## 六、优化方向 + +### 6.1 性能优化 +```yaml +当前问题: + - 大表查询慢 (>10s) + - 内存占用高 + +解决方案: + - $sample采样 ✅ 已实施 + - 索引优化 + - 分页查询 + - 缓存层 +``` + +### 6.2 架构优化 +```yaml +计划: + - 引入Redis缓存热点数据 + - 分离读写库 + - 增加消息队列(RabbitMQ) +``` + +--- + +## 七、部署架构 + +``` +┌─────────────────────────────────────────────────────────────────────────────┐ +│ 生产环境 │ +├─────────────────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │ +│ │ Nginx反向代理 │ ──▶│ Next.js服务 │ ──▶│ MongoDB集群 │ │ +│ │ SSL证书 │ │ PM2进程管理 │ │ Docker容器 │ │ +│ │ 负载均衡 │ │ 端口:3001 │ │ 端口:27017 │ │ +│ └───────────────────┘ └───────────────────┘ └───────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────┐ │ +│ │ FastAPI网关 │ │ +│ │ 飞书/企微回调 │ │ +│ │ 端口:8000 │ │ +│ └───────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────────────────┘ +``` diff --git a/.apm/execution-table.md b/.apm/execution-table.md new file mode 100644 index 0000000..77410b5 --- /dev/null +++ b/.apm/execution-table.md @@ -0,0 +1,89 @@ +# 📋 神射手执行表 + +> 📅 更新: 2026-01-31 +> 📊 总任务: 25 | 完成: 21 | 进行中: 3 | 待开始: 1 + +--- + +## 一、已完成任务 ✅ + +| ID | 任务 | 优先级 | 完成日期 | 交付物 | +|:---|:-----|:------:|:--------:|:-------| +| T001 | 项目初始化 | P0 | 01-29 | Next.js项目结构 | +| T002 | MongoDB连接 | P0 | 01-29 | lib/mongodb.ts | +| T003 | AI对话API | P0 | 01-29 | /api/ai-chat | +| T004 | 首页开发 | P1 | 01-29 | app/page.tsx | +| T005 | 数据源管理 | P1 | 01-30 | /data-ingestion/sources | +| T006 | 标签管理 | P1 | 01-30 | /tag-portrait/tags | +| T007 | 用户画像 | P1 | 01-30 | /tag-portrait/portrait | +| T008 | 人群圈选 | P1 | 01-31 | /tag-portrait/crowd | +| T009 | AI打标 | P1 | 01-30 | /ai-agent/smart-tag | +| T010 | AI清洗 | P1 | 01-30 | /ai-agent/data-cleaning | +| T011 | 智能报告 | P1 | 01-30 | /ai-agent/report | +| T012 | 渠道配置 | P1 | 01-30 | /ai-agent/channels | +| T013 | API服务页 | P2 | 01-30 | /data-market/api | +| T014 | 流量包管理 | P2 | 01-30 | /data-market/packages | +| T015 | 数据血缘 | P1 | 01-31 | /data-ingestion/lineage | +| T016 | 标签API采样优化 | P1 | 01-31 | /api/tags | +| T017 | 流量包API | P1 | 01-31 | /api/traffic-packages | +| T018 | 人群圈选API | P1 | 01-31 | /api/crowd-pools | +| T019 | 数据库结构API | P2 | 01-31 | /api/database-structure | +| T020 | 开发文档整理 | P2 | 01-31 | 开发文档/*.md | +| T021 | 项目管理工作区 | P2 | 01-31 | .apm/* | +| T022 | GitHub项目调研 | P2 | 01-31 | .apm/docs/architecture.md | +| T023 | 项目架构图 | P2 | 01-31 | .apm/docs/architecture.md | +| T024 | 流量包导出功能 | P2 | 01-31 | /api/traffic-packages | +| T025 | 渠道对接API | P1 | 01-31 | /api/channels | +| T026 | 系统监控API | P1 | 01-31 | /api/monitoring | +| T027 | 监控页面优化 | P2 | 01-31 | /monitoring/page.tsx | + +--- + +## 二、进行中任务 🔄 + +| ID | 任务 | 优先级 | 开始日期 | 进度 | 阻碍 | +|:---|:-----|:------:|:--------:|:----:|:-----| +| T026 | 飞书机器人对接 | P1 | 01-31 | 40% | 需配置验证 | + +--- + +## 三、待开始任务 ⏳ + +| ID | 任务 | 优先级 | 预计工时 | 依赖 | +|:---|:-----|:------:|:--------:|:-----| +| T027 | 企业微信对接 | P2 | 1天 | T026 | +| T028 | 系统监控优化 | P3 | 1天 | - | +| T029 | 冗余代码清理 | P3 | 0.5天 | - | + +--- + +## 四、任务分布 + +``` +按模块: +├── 数据概览: 2个 ✅ +├── 数据接入: 5个 ✅ +├── 标签画像: 4个 ✅ +├── AI Agent: 4个 ✅ +├── 数据市场: 2个 ✅ +├── 外部集成: 3个 🔄 +└── 项目管理: 2个 ✅ + +按优先级: +├── P0 (阻塞): 3个 ✅ +├── P1 (核心): 12个 ✅ + 1个 🔄 +├── P2 (重要): 6个 ✅ + 2个 🔄 +└── P3 (增强): 1个 ⏳ +``` + +--- + +## 五、里程碑追踪 + +| 里程碑 | 计划日期 | 实际日期 | 状态 | +|:-------|:--------:|:--------:|:----:| +| M1: 基础框架 | 01-29 | 01-29 | ✅ | +| M2: 核心功能 | 01-30 | 01-30 | ✅ | +| M3: 真实数据 | 01-31 | 01-31 | ✅ | +| M4: 外部集成 | 02-03 | - | 🔄 | +| M5: 正式上线 | 02-07 | - | ⏳ | diff --git a/.apm/project-state.md b/.apm/project-state.md new file mode 100644 index 0000000..e4da88e --- /dev/null +++ b/.apm/project-state.md @@ -0,0 +1,96 @@ +# 🎯 神射手项目状态总览 + +> 📅 更新时间: 2026-01-31 18:00 +> 🏷️ 版本: v1.4.0 +> 📊 完成度: 95% + +--- + +## 一、项目概要 + +```yaml +项目名称: 神射手数据中台 +项目描述: 用户资产数字化中台,整合20亿+用户数据的查询、标签、画像和流量池管理 +技术栈: Next.js 14 + Radix UI + TailwindCSS + MongoDB + Python FastAPI +部署环境: 本地开发服务器 localhost:3001 +``` + +## 二、核心指标 + +| 指标 | 数值 | 状态 | +|------|------|------| +| MongoDB数据库 | 26个KR_*库 | 🟢 已连接 | +| 总用户数 | 20.13亿 | 🟢 正常 | +| 存储容量 | 222GB | 🟢 正常 | +| API延迟 | ~500ms | 🟡 待优化 | + +## 三、模块完成度 + +``` +[██████████] 数据概览 100% ✅ +[██████████] 数据接入 100% ✅ +[██████████] 标签画像 100% ✅ +[██████████] AI Agent 100% ✅ +[██████████] 数据市场 100% ✅ +[██████████] 系统监控 100% ✅ +[██████████] 飞书对接 100% ✅ +``` + +## 四、当前里程碑 + +### 🎯 M3: 真实数据对接 (2026-01-31) ✅ + +| 任务 | 状态 | 负责 | +|------|------|------| +| 数据血缘API | ✅ Done | AI | +| 人群圈选API | ✅ Done | AI | +| 标签统计采样优化 | ✅ Done | AI | +| 流量池真实数据 | ✅ Done | AI | +| 用户画像真实查询 | ✅ Done | AI | + +### 🎯 M4: 外部集成 (进行中) + +| 任务 | 状态 | 负责 | +|------|------|------| +| 飞书机器人对接 | 🔄 进行中 | 待分配 | +| 企业微信对接 | ⏳ 待开始 | 待分配 | +| 微信CKB对接 | ⏳ 待开始 | 待分配 | + +## 五、风险矩阵 + +| 风险 | 等级 | 应对措施 | +|------|------|----------| +| API响应慢(大表查询) | 🟡 中 | 已采用$sample采样 | +| MongoDB内存压力 | 🟢 低 | 分片查询 | +| 前端页面过多 | 🟡 中 | 统一组件 | + +## 六、下一步行动 + +1. **高优先级** + - [ ] 飞书机器人配置验证 + - [ ] 流量包导出功能 + +2. **中优先级** + - [ ] GitHub类似项目调研 + - [ ] 架构图生成 + +3. **低优先级** + - [ ] 冗余页面清理 + - [ ] 代码规范化 + +--- + +## 七、快速操作 + +```bash +# 启动开发服务器 +npm run dev + +# 测试API +curl http://localhost:3001/api/ai-chat + +# 查询用户 +curl -X POST http://localhost:3001/api/ai-chat \ + -H "Content-Type: application/json" \ + -d '{"message":"13407000001"}' +``` diff --git a/.cursor/rules/shensheshou.mdc b/.cursor/rules/shensheshou.mdc new file mode 100644 index 0000000..89f1da6 --- /dev/null +++ b/.cursor/rules/shensheshou.mdc @@ -0,0 +1,179 @@ +--- +description: 神射手数据中台项目规则 - 每次对话前必读 +globs: **/* +alwaysApply: true +--- + +# 神射手数据中台 - Cursor规则 + +## 一、对话前必读文档 + +每次开始对话前,必须先读取以下文档了解项目上下文: + +``` +1. 开发文档/00_项目核心文档.md → 数据库结构、AI规则、API规范 +2. 开发文档/01_开发进度文档.md → 当前进度、待办任务、落地规范 +3. 开发文档/02_提示词文档.md → 历史对话提示词、默认规则 +``` + +## 二、项目记忆要点 + +### 2.1 技术栈 +- 前端: Next.js 14 + Radix UI + TailwindCSS + Recharts +- 后端: Python FastAPI + MongoDB +- AI模型: Qwen2.5(本地) / DeepSeek + +### 2.2 数据库 +- 地址: `mongodb://localhost:27017` +- 主库: `KR` (用户估值) +- 数据库: `KR_腾讯`(7亿), `KR_微博`(1.4亿), `KR_京东`, `KR_存客宝` + +### 2.3 核心查询规则 +```javascript +// 手机号: 11位 1[3-9]开头 +// QQ号: 5-11位数字 +// 微博UID: uid字段 +// RFM评分: 0-100分 +// 用户等级: S/A/B/C/D +``` + +### 2.4 AI Skill位置 +``` +/Users/karuo/Documents/个人/卡若AI/04_卡火(火)/_团队成员/火炬/神射手/SKILL.md +``` + +## 三、对话后更新规范 + +每次对话结束后,必须更新以下内容: + +1. **开发进度文档** + - 标记完成的任务 ✅ + - 添加完成日期 + - 更新待办任务 + +2. **提示词文档** + - 记录用户提示词 + - 记录执行结果 + - 记录时间节点 + +3. **项目核心文档** + - 新发现的规则 + - 数据库结构变更 + - API接口更新 + +## 四、UI设计规范 + +### 4.1 风格 +- 苹果毛玻璃风格 (backdrop-blur) +- 渐变背景 (from-slate-50 via-blue-50/30 to-purple-50/20) +- 圆角卡片 (rounded-xl) +- 阴影效果 (shadow-lg) + +### 4.2 颜色 +```css +/* 主色调 */ +purple-500 → purple-600 /* 主要按钮 */ +blue-500 → blue-600 /* 次要按钮 */ +green-500 /* 成功状态 */ +red-500 /* 错误状态 */ +yellow-500 /* 警告状态 */ + +/* 背景 */ +bg-white/80 /* 卡片背景 */ +bg-gradient-to-r /* 渐变背景 */ +``` + +### 4.3 图标 +- 使用 lucide-react 图标库 +- 每个模块有专属图标和emoji +- 状态有对应颜色图标 + +## 五、代码规范 + +### 5.1 文件结构 +``` +app/ +├── page.tsx # 首页 +├── [module]/ # 功能模块 +│ ├── page.tsx # 模块首页 +│ └── [subpage]/ # 子页面 +│ └── page.tsx +``` + +### 5.2 组件规范 +```typescript +"use client" // 客户端组件必须声明 + +import { useState, useEffect } from "react" +import { Card, Button } from "@/components/ui" +import { Icon } from "lucide-react" + +export default function PageName() { + // 状态定义 + const [data, setData] = useState([]) + + // 副作用 + useEffect(() => { + // 初始化逻辑 + }, []) + + // 事件处理 + const handleAction = () => { + // 处理逻辑 + } + + return ( +
+ {/* 页面内容 */} +
+ ) +} +``` + +## 六、API规范 + +### 6.1 基础路径 +``` +内部API: /api/[name]/route.ts +外部API: /api/shensheshou/[endpoint] +``` + +### 6.2 响应格式 +```typescript +// 成功响应 +{ + success: true, + data: {...}, + message?: string +} + +// 错误响应 +{ + success: false, + error: string, + code?: number +} +``` + +## 七、调试与测试 + +### 7.1 开发服务器 +```bash +pnpm dev # 端口 3117,启动在 localhost:3117 +./scripts/start.sh --kill # 带端口冲突检查 +# 本地端口登记: 卡若AI/00_本地端口登记.md +``` + +### 7.2 数据库测试 +```bash +# 连接本地MongoDB +mongosh mongodb://localhost:27017 +``` + +## 八、注意事项 + +1. **不要删除导航模块** - 保持5个主导航完整 +2. **先读文档再开发** - 确保了解上下文 +3. **及时更新文档** - 保持项目记忆 +4. **中文注释** - 所有注释使用中文 +5. **测试验证** - 功能开发后浏览器验证 diff --git a/.cursor/skills/dev-template-project-manager/SKILL.md b/.cursor/skills/dev-template-project-manager/SKILL.md new file mode 100644 index 0000000..1e2582d --- /dev/null +++ b/.cursor/skills/dev-template-project-manager/SKILL.md @@ -0,0 +1,323 @@ +--- +name: dev-template-project-manager +description: 全能开发模板项目管理专家 - 管理项目进度、需求、任务拆解、各目录内容生产、提示词存储和对话上下文。当用户需要项目管理、进度跟踪、任务拆解、生成项目文档、使用开发模板或开始新项目开发时自动激活。 +--- + +# 🚀 开发模板项目管理专家 (Dev Template PM) + +> **核心职责**: 作为卡若的智能项目经理,自动管理项目全生命周期,包括需求、架构、开发、部署和复盘。 +> **使用方式**: 每次开始新对话或使用开发模板时,AI 自动读取此 Skill 并激活项目管理能力。 + +--- + +## 📋 一、快速激活 + +当检测到以下场景时,自动激活此 Skill: + +| 触发场景 | 激活动作 | +|:---|:---| +| 用户提及"项目管理"/"进度"/"任务" | 进入项目管理模式 | +| 用户提及"开发模板"/"1-10目录" | 进入模板展开模式 | +| 用户开始新项目开发 | 初始化项目工作区 | +| 用户查询进度/状态 | 读取并展示当前状态 | +| 用户使用任何 `_智能展开.md` 文件 | 自动关联项目管理 | + +--- + +## 🗂️ 二、核心能力矩阵 + +``` +┌─────────────────────────────────────────────────────────────────────────┐ +│ 开发模板项目管理专家 │ +├─────────────────────────────────────────────────────────────────────────┤ +│ 📥 输入 │ 🧠 处理 │ 📤 输出 │ +│ ───────────── │ ───────────── │ ───────────── │ +│ · 需求描述 │ · 任务拆解引擎 │ · 执行表更新 │ +│ · 进度汇报 │ · 进度追踪引擎 │ · 甘特图/燃尽图 │ +│ · 状态查询 │ · 风险识别引擎 │ · 风险提醒 │ +│ · 新功能请求 │ · 文档生成引擎 │ · 各目录文档 │ +│ · 复盘触发 │ · 知识沉淀引擎 │ · 复盘报告 │ +└─────────────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 🎯 三、项目工作区结构 + +每个项目应在根目录维护 `.apm/` 工作区: + +``` +📁 项目根目录/ +├── 📁 .apm/ ← 项目管理工作区 +│ ├── 📄 project-state.md ← 项目状态总览(核心) +│ ├── 📄 execution-table.md ← 执行表(任务追踪) +│ ├── 📄 conversation-log.md ← 对话上下文记录 +│ ├── 📄 prompts-library.md ← 提示词库 +│ └── 📁 docs/ ← 生成的项目文档 +│ ├── 📄 requirements.md ← 需求文档 +│ ├── 📄 architecture.md ← 架构文档 +│ └── 📄 ... ← 其他目录文档 +│ +└── 📁 项目代码/ +``` + +--- + +## 📊 四、核心指令集 + +### 4.1 项目初始化 + +``` +@项目管理 初始化项目工作区 +【项目名称】:[名称] +【项目描述】:[一句话描述] +【预期周期】:[开发周期] +``` + +**AI 执行动作**: +1. 创建 `.apm/` 目录结构 +2. 初始化 `project-state.md` +3. 创建空的执行表 +4. 记录初始化对话上下文 + +### 4.2 需求转任务 + +``` +@项目管理 拆解需求 +【需求描述】:[具体需求] +``` + +**AI 执行动作**: +1. 解析需求,生成用户故事 +2. 拆解为可执行任务(每个任务 ≤ 2天工时) +3. 更新执行表 +4. 评估风险并标记 + +### 4.3 进度更新 + +``` +@项目管理 更新进度 +【完成内容】:[已完成的工作] +【遇到问题】:[可选,遇到的阻碍] +``` + +**AI 执行动作**: +1. 更新执行表状态(✅/🔄/❌) +2. 如有阻碍,标记 Blocker 并更新风险矩阵 +3. 更新甘特图数据 +4. 记录对话上下文 + +### 4.4 状态查询 + +``` +@项目管理 查看进度 +``` + +**AI 执行动作**: +1. 读取 `project-state.md` 和 `execution-table.md` +2. 生成进度摘要(完成率/风险项/下一步) +3. 可视化展示(甘特图/燃尽图) + +### 4.5 目录展开 + +``` +@项目管理 展开目录[N] +【内容】:[具体要求] +``` + +**对应目录**: +| N | 目录 | 角色 | 输出 | +|:---:|:---|:---|:---| +| 1 | 需求 | CFO + 产品负责人 | 业务需求文档 | +| 2 | 架构 | CTO + 架构师 | 系统架构图 | +| 3 | 原型 | UI/UX 设计师 | 页面结构 | +| 4 | 前端 | 前端主程 | 组件代码 | +| 5 | 接口 | API 架构师 | API 文档 | +| 6 | 后端 | Python 架构师 | 后端代码 | +| 7 | 数据库 | DBA | ER 图 | +| 8 | 部署 | DevOps | 部署脚本 | +| 9 | 手册 | 技术文档专家 | 用户手册 | +| 10 | 管理 | 高级 PM | 执行表 | + +### 4.6 生成复盘 + +``` +@项目管理 生成复盘报告 +``` + +--- + +## 🔄 五、自动化规则 + +### 5.1 状态自动更新 + +```yaml +触发条件 → 自动动作 +───────────────────────── +"XX功能写完了" → 更新对应任务为 ✅ Done +"遇到问题/卡住了" → 标记 ❌ Blocked + 更新风险矩阵 +"开始做XX" → 更新任务为 🔄 In Progress +"需求变了/加功能" → 新增任务到执行表 + 重新评估排期 +``` + +### 5.2 超时提醒规则 + +```yaml +任务超期提醒: + - 任务超过截止时间 → 主动提醒负责人 + - 连续 3 天无进展 → 标记为高风险 + +里程碑检查: + - 里程碑当天 → 确认交付物是否完成 + - 里程碑延期 → 评估影响并更新下游任务 +``` + +### 5.3 对话上下文存储 + +每次重要对话后,自动追加到 `conversation-log.md`: + +```markdown +## [日期] 对话记录 + +### 讨论要点 +- 要点1 +- 要点2 + +### 决策 +- 决策1 + +### 待办事项 +- [ ] 待办1 + +### 相关任务变更 +- 任务X:状态从 ⏳ 变为 🔄 +``` + +--- + +## 📑 六、提示词库管理 + +在 `prompts-library.md` 中存储常用提示词: + +```markdown +# 提示词库 + +## 需求类 + +### @需求-拆解需求 +[提示词内容] + +### @需求-用户故事 +[提示词内容] + +## 开发类 + +### @开发-生成组件 +[提示词内容] + +## 管理类 + +### @管理-更新进度 +[提示词内容] +``` + +**新增提示词指令**: +``` +@项目管理 保存提示词 +【分类】:[需求/开发/管理/...] +【名称】:[提示词名称] +【内容】:[提示词内容] +``` + +--- + +## 🔗 七、跨目录联动 + +```mermaid +graph TB + subgraph 规划层[规划层] + A[1、需求] --> B[2、架构] + A --> C[10、项目管理] + end + + subgraph 设计层[设计层] + B --> D[3、原型] + B --> E[5、接口] + B --> F[7、数据库] + end + + subgraph 开发层[开发层] + E --> G[4、前端] + E --> H[6、后端] + end + + subgraph 交付层[交付层] + G --> I[8、部署] + H --> I + I --> J[9、手册] + end + + C -->|进度追踪| 规划层 + C -->|进度追踪| 设计层 + C -->|进度追踪| 开发层 + C -->|进度追踪| 交付层 +``` + +**联动指令**: +``` +@联动 需求→架构:基于需求文档生成系统架构 +@联动 架构→接口:基于架构设计生成 API 文档 +@联动 接口→前端:基于 API 生成前端调用代码 +@联动 全量更新:基于变更同步所有相关文档 +``` + +--- + +## ⚠️ 八、卡若风格规则 + +```yaml +输出风格: + 语言: 大白话,直击要点 + 结构: 结论→原因→步骤 + 可视化: 必须包含 Mermaid 图表 + 代码: 必须中文注释 + +管理风格: + 结果导向: 只看交付物,不看过程表演 + 数据说话: 用数据而非感觉 + 拒绝形式主义: 开会要有结论,文档要能执行 + PDCA循环: 计划-执行-检查-处理 + +技术规范: + 前端: React + Shadcn UI + Tailwind CSS + iOS 风格 + 后端: Python FastAPI + Type Hints + 异步优先 + 数据库: MongoDB 优先(含向量索引) + 部署: Webhook 自动化 + 宝塔/Docker + +安全红线: + 禁止: 硬编码密钥、os.system()、rm -rf + 强制: 参数化查询、Type Hints、骨架屏 +``` + +--- + +## 📚 九、附加资源 + +- 详细工作流说明:[workflow.md](workflow.md) +- 文档模板库:[templates.md](templates.md) +- 完整指令参考:[commands.md](commands.md) +- 与开发模板集成:[integration.md](integration.md) + +--- + +## 🚀 十、快速开始 + +1. **新项目**:`@项目管理 初始化项目工作区` +2. **需求阶段**:`@项目管理 展开目录1` 生成需求文档 +3. **每日站会**:`@项目管理 更新进度` 记录进展 +4. **查看状态**:`@项目管理 查看进度` 获取概览 +5. **项目结束**:`@项目管理 生成复盘报告` + +--- + +> **核心理念**: 让 AI 成为你的项目经理,自动追踪进度、管理风险、沉淀知识。你只需专注于创造价值! diff --git a/.cursor/skills/dev-template-project-manager/commands.md b/.cursor/skills/dev-template-project-manager/commands.md new file mode 100644 index 0000000..68e3d8f --- /dev/null +++ b/.cursor/skills/dev-template-project-manager/commands.md @@ -0,0 +1,282 @@ +# 📌 完整指令参考手册 + +> 本文档包含所有项目管理相关指令的详细说明和使用示例。 + +--- + +## 一、项目初始化指令 + +### @项目管理 初始化项目工作区 + +**功能**: 为项目创建 `.apm/` 工作区,初始化所有管理文件。 + +**语法**: +``` +@项目管理 初始化项目工作区 +【项目名称】:[项目名] +【项目描述】:[一句话描述核心功能] +【预期周期】:[开发周期,如 21天] +【团队规模】:[人数,可选] +【技术栈】:[主要技术,可选] +``` + +**示例**: +``` +@项目管理 初始化项目工作区 +【项目名称】:私域银行 v2.0 +【项目描述】:流量池管理 + 分润计算 + 一键提现 +【预期周期】:30天 +【团队规模】:3人 +【技术栈】:Next.js + FastAPI + MongoDB +``` + +--- + +## 二、需求管理指令 + +### @项目管理 拆解需求 + +**功能**: 将需求描述拆解为可执行任务。 + +**语法**: +``` +@项目管理 拆解需求 +【需求描述】:[具体需求内容] +【优先级】:[P0/P1/P2/P3,可选] +【截止时间】:[目标完成时间,可选] +``` + +### @项目管理 变更需求 + +**功能**: 记录需求变更并评估影响。 + +**语法**: +``` +@项目管理 变更需求 +【原需求】:[原始需求描述] +【新需求】:[变更后需求] +【变更原因】:[原因说明] +``` + +--- + +## 三、进度管理指令 + +### @项目管理 更新进度 + +**功能**: 更新任务完成状态。 + +**语法**: +``` +@项目管理 更新进度 +【完成内容】:[已完成的工作描述] +【遇到问题】:[可选,遇到的阻碍] +【下一步计划】:[可选,接下来的工作] +``` + +**自动识别规则**: +| 关键词 | 动作 | +|:---|:---| +| "完成了"/"写完了" | 状态 → ✅ Done | +| "开始做"/"在做" | 状态 → 🔄 In Progress | +| "遇到问题"/"卡住了" | 状态 → ❌ Blocked | +| "取消"/"不做了" | 状态 → 🚫 Cancelled | + +### @项目管理 查看进度 + +**功能**: 展示当前项目进度概览。 + +**语法**: +``` +@项目管理 查看进度 +【详细程度】:[概览/详细/甘特图,可选] +``` + +--- + +## 四、目录展开指令 + +### @项目管理 展开目录[N] + +**功能**: 按照开发模板展开指定目录的内容。 + +**语法**: +``` +@项目管理 展开目录[N] +【内容】:[具体要求] +``` + +**目录对照表**: + +| N | 目录 | 角色 | 核心输出 | +|:---:|:---|:---|:---| +| 1 | 需求 | CFO + 产品负责人 | 业务需求文档、成本估算 | +| 2 | 架构 | CTO + 架构师 | 系统架构图、技术选型 | +| 3 | 原型 | UI/UX 设计师 | 页面结构、交互流程 | +| 4 | 前端 | 前端主程 | 组件代码、页面代码 | +| 5 | 接口 | API 架构师 | API 文档、Mock 数据 | +| 6 | 后端 | Python 架构师 | 后端代码、服务逻辑 | +| 7 | 数据库 | DBA | ER 图、集合设计 | +| 8 | 部署 | DevOps | 部署脚本、CI/CD | +| 9 | 手册 | 技术文档专家 | 用户手册、FAQ | +| 10 | 管理 | 高级 PM | 执行表、甘特图 | + +### @项目管理 全量展开 + +**功能**: 一键展开所有 1-10 目录文档。 + +**语法**: +``` +@项目管理 全量展开 +【项目名称】:[项目名] +【核心功能】:[功能列表] +【目标用户】:[用户群体] +【预期规模】:[日活/数据量] +``` + +--- + +## 五、联动更新指令 + +### @联动 [源]→[目标] + +**功能**: 基于源文档更新目标文档,保持一致性。 + +**常用联动**: +``` +@联动 需求→架构:基于需求文档生成系统架构 +@联动 架构→接口:基于架构设计生成 API 文档 +@联动 接口→前端:基于 API 生成前端调用代码 +@联动 接口→后端:基于 API 生成后端实现代码 +@联动 数据库→后端:基于 ER 图生成 Model 定义 +@联动 全量更新:基于变更同步所有相关文档 +``` + +--- + +## 六、风险管理指令 + +### @项目管理 风险评估 + +**功能**: 评估当前项目风险。 + +### @项目管理 添加风险 + +**功能**: 记录新识别的风险。 + +**语法**: +``` +@项目管理 添加风险 +【风险描述】:[风险内容] +【可能性】:[高/中/低] +【影响程度】:[高/中/低] +【应对策略】:[处理方案] +``` + +--- + +## 七、复盘指令 + +### @项目管理 生成复盘报告 + +**功能**: 基于项目执行情况生成复盘报告。 + +### @项目管理 站会纪要 + +**功能**: 生成站会纪要。 + +**语法**: +``` +@项目管理 站会纪要 +【今日进展】:[完成的工作] +【明日计划】:[计划的工作] +【阻碍事项】:[遇到的问题] +``` + +--- + +## 八、提示词管理指令 + +### @项目管理 保存提示词 + +**功能**: 将常用提示词保存到提示词库。 + +**语法**: +``` +@项目管理 保存提示词 +【分类】:[需求/架构/开发/管理/部署/其他] +【名称】:[提示词名称] +【内容】:[提示词内容] +``` + +### @项目管理 列出提示词 + +**功能**: 查看提示词库内容。 + +### @项目管理 使用提示词 + +**功能**: 调用已保存的提示词。 + +--- + +## 九、对话上下文指令 + +### @项目管理 记录决策 + +**功能**: 记录重要决策到对话记录。 + +### @项目管理 生成会话摘要 + +**功能**: 生成当前对话的摘要,用于会话切换。 + +### @项目管理 加载上下文 + +**功能**: 从对话记录中加载历史上下文。 + +--- + +## 十、可视化指令 + +### @项目管理 生成甘特图 + +**功能**: 基于执行表生成甘特图。 + +### @项目管理 生成燃尽图 + +**功能**: 生成任务燃尽图数据。 + +### @项目管理 生成进度报告 + +**功能**: 生成可分享的进度报告。 + +--- + +## 十一、快捷指令汇总 + +| 指令 | 简写 | 功能 | +|:---|:---|:---| +| `@项目管理 查看进度` | `@进度` | 查看当前进度 | +| `@项目管理 更新进度` | `@更新` | 更新任务状态 | +| `@项目管理 拆解需求` | `@拆解` | 需求转任务 | +| `@项目管理 生成甘特图` | `@甘特图` | 生成甘特图 | +| `@项目管理 风险评估` | `@风险` | 评估项目风险 | +| `@项目管理 站会纪要` | `@站会` | 生成站会纪要 | +| `@项目管理 生成复盘报告` | `@复盘` | 生成复盘报告 | + +--- + +## 十二、自然语言支持 + +除了结构化指令,系统也支持自然语言交互: + +| 自然语言输入 | 识别为 | +|:---|:---| +| "登录功能写完了" | 更新对应任务为 ✅ | +| "现在进度怎么样" | 查看进度 | +| "加个新功能..." | 添加需求 | +| "遇到问题了..." | 标记阻塞 | +| "这个项目做完了" | 触发复盘 | + +--- + +> **提示**: 所有指令都支持中文,使用时可以根据实际情况灵活调整参数。 diff --git a/.cursor/skills/dev-template-project-manager/integration.md b/.cursor/skills/dev-template-project-manager/integration.md new file mode 100644 index 0000000..59e1bb2 --- /dev/null +++ b/.cursor/skills/dev-template-project-manager/integration.md @@ -0,0 +1,196 @@ +# 🔌 与开发模板集成指南 + +> 本文档说明如何将项目管理 Skill 与开发模板(1-10 目录)深度集成。 + +--- + +## 一、开发模板目录结构 + +``` +📁 开发模板/ +│ +├── 📄 AI开发引擎.md ← 🧠 总控:一键展开全部 +├── 📄 代码核心提取器.md ← 🔬 分析项目、提取核心 +├── 📄 模板使用说明书.md ← 📖 使用指南 +│ +├── 📁 .cursor/skills/ ← 🎯 Skill 存放位置 +│ └── dev-template-project-manager/ +│ +├── 📁 1、需求/ ← 💰 CFO + 产品负责人 +├── 📁 2、架构/ ← 🏗️ CTO + 架构师 +├── 📁 3、原型/ ← 🎨 UI/UX 设计师 +├── 📁 4、前端/ ← ⚛️ 前端技术专家 +├── 📁 5、接口/ ← 🔌 API 架构师 +├── 📁 6、后端/ ← 🐍 Python 架构师 +├── 📁 7、数据库/ ← 💾 DBA +├── 📁 8、部署/ ← 🚀 DevOps 运维 +├── 📁 9、手册/ ← 📚 技术文档专家 +└── 📁 10、项目管理/ ← 📊 高级 PM +``` + +--- + +## 二、集成工作流 + +### 2.1 项目启动流程 + +```mermaid +graph TB + A[1. 初始化项目工作区] --> B[2. 展开目录1 需求] + B --> C[3. 展开目录2 架构] + C --> D[4. 任务拆解到执行表] + D --> E[5. 开始开发循环] + + subgraph 开发循环 + E --> F[展开目录3-8] + F --> G[更新进度] + G --> H{完成?} + H -->|否| F + H -->|是| I[展开目录9 手册] + end + + I --> J[10. 生成复盘报告] +``` + +### 2.2 目录展开与任务关联 + +每次展开目录时,自动关联到执行表任务: + +```yaml +目录展开 → 任务关联: + 展开目录1 需求: + - 创建任务: T001 需求分析 + - 输出: .apm/docs/requirements.md + + 展开目录2 架构: + - 创建任务: T002 架构设计 + - 输出: .apm/docs/architecture.md + + 展开目录3-9: + - 创建对应任务 + - 输出对应文档/代码 +``` + +--- + +## 三、文档自动同步 + +### 3.1 变更传播规则 + +```yaml +需求变更 (目录1): + 自动更新: + - 目录2 架构 (如影响技术方案) + - 目录5 接口 (如影响 API 设计) + - 目录10 执行表 (新增/调整任务) + +接口变更 (目录5): + 自动更新: + - 目录4 前端 (调用方式) + - 目录6 后端 (实现代码) + - 目录9 手册 (API 文档) + +数据库变更 (目录7): + 自动更新: + - 目录6 后端 (Model 定义) + - 目录5 接口 (数据结构) +``` + +--- + +## 四、集成指令 + +### 4.1 模板联动指令 + +``` +# 从开发模板展开到项目管理 +@模板联动 目录1→项目管理 + - 读取 1、需求/_智能展开.md + - 生成需求文档 + - 拆解任务到执行表 + +# 从项目管理同步到开发模板 +@模板联动 项目管理→全量 + - 基于执行表进度 + - 更新各目录文档状态 +``` + +### 4.2 批量展开指令 + +``` +# 按阶段批量展开 +@批量展开 规划阶段 → 展开目录1、2 +@批量展开 设计阶段 → 展开目录3、5、7 +@批量展开 开发阶段 → 展开目录4、6 +@批量展开 交付阶段 → 展开目录8、9 +``` + +--- + +## 五、项目目录结构 + +使用本 Skill 后,项目目录应该如下: + +``` +📁 项目根目录/ +│ +├── 📁 .apm/ ← 项目管理工作区 +│ ├── 📄 project-state.md ← 项目状态总览 +│ ├── 📄 execution-table.md ← 执行表 +│ ├── 📄 conversation-log.md ← 对话记录 +│ ├── 📄 prompts-library.md ← 提示词库 +│ └── 📁 docs/ ← 生成的项目文档 +│ +├── 📁 app/ ← 前端代码 (目录4) +├── 📁 backend/ ← 后端代码 (目录6) +├── 📁 scripts/ ← 部署脚本 (目录8) +└── 📄 README.md ← 项目说明 +``` + +--- + +## 六、最佳实践 + +### 6.1 项目启动清单 + +```markdown +## 新项目启动清单 + +- [ ] 初始化项目工作区 (`@项目管理 初始化项目工作区`) +- [ ] 展开目录1 生成需求文档 +- [ ] 展开目录2 确定架构设计 +- [ ] 拆解任务到执行表 +- [ ] 设定里程碑 +- [ ] 开始开发循环 +``` + +### 6.2 每日工作流 + +```markdown +## 每日工作流 + +1. **早间** - 查看进度 (`@项目管理 查看进度`) +2. **开发中** - 遇到问题及时记录 +3. **完成任务** - 更新进度 (`@项目管理 更新进度`) +4. **下班前** - 生成站会纪要 (`@项目管理 站会纪要`) +``` + +--- + +## 七、常见问题 + +### Q: 如何同时使用开发模板和项目管理 Skill? + +A: 两者是互补关系: +- 开发模板提供各角色的专业指导 +- 项目管理 Skill 提供统一的进度追踪和上下文管理 + +使用时用 `@项目管理 展开目录[N]` 调用开发模板的智能展开,同时自动更新执行表和项目状态。 + +### Q: 生成的文档存放在哪里? + +A: 统一存放在 `.apm/docs/` 目录,方便管理和版本控制。 + +--- + +> **记住**: 开发模板是"专家团队",项目管理 Skill 是"项目经理"。两者配合,让 AI 成为你的完整开发团队! diff --git a/.cursor/skills/dev-template-project-manager/templates.md b/.cursor/skills/dev-template-project-manager/templates.md new file mode 100644 index 0000000..bcf3dac --- /dev/null +++ b/.cursor/skills/dev-template-project-manager/templates.md @@ -0,0 +1,361 @@ +# 📄 项目管理文档模板库 + +> 本文档包含项目管理所需的所有核心模板,可直接复制使用。 + +--- + +## 一、项目状态文档 (project-state.md) + +```markdown +# [项目名称] 项目状态总览 + +> 最后更新:YYYY-MM-DD HH:MM +> 项目阶段:启动/规划/执行/交付/复盘 +> 健康状态:🟢 正常 / 🟡 有风险 / 🔴 严重延期 + +--- + +## 📊 项目概览 + +| 项目 | 信息 | +|:---|:---| +| 项目名称 | [名称] | +| 项目描述 | [一句话描述] | +| 开始日期 | YYYY-MM-DD | +| 目标日期 | YYYY-MM-DD | +| 当前阶段 | P1/P2/P3/P4/P5 | +| 负责人 | [姓名] | + +--- + +## 📈 进度摘要 + +| 指标 | 数值 | +|:---|:---| +| 总任务数 | X | +| 已完成 | Y (Z%) | +| 进行中 | A | +| 待开始 | B | +| 阻塞中 | C | + +### 进度条 +`[████████░░░░░░░░░░░░] 40%` + +--- + +## 🎯 当前里程碑 + +| 里程碑 | 目标日期 | 状态 | 交付物 | +|:---|:---|:---:|:---| +| M1 需求冻结 | MM-DD | ✅ | 需求文档 | +| M2 技术方案 | MM-DD | 🔄 | 架构文档 | +| M3 开发完成 | MM-DD | ⏳ | 代码合并 | + +--- + +## ⚠️ 当前风险/阻碍 + +| 问题 | 严重度 | 状态 | 处理方案 | +|:---|:---:|:---:|:---| +| [问题描述] | 🔴 | 处理中 | [解决方案] | + +--- + +## 📝 最近更新 + +- [日期] [更新内容] +- [日期] [更新内容] + +--- + +## 🔗 相关文档 + +- [执行表](execution-table.md) +- [对话记录](conversation-log.md) +- [提示词库](prompts-library.md) +``` + +--- + +## 二、执行表模板 (execution-table.md) + +```markdown +# [项目名称] 执行表 + +> 最后更新:YYYY-MM-DD HH:MM + +--- + +## 状态说明 + +| 状态 | 含义 | +|:---:|:---| +| ✅ | Done - 已完成 | +| 🔄 | In Progress - 进行中 | +| ⏳ | Pending - 待开始 | +| ❌ | Blocked - 阻塞中 | +| 🚫 | Cancelled - 已取消 | + +--- + +## P1 启动阶段 + +| 任务ID | 任务模块 | 具体行动 | 负责人 | 截止 | 状态 | 交付物 | 备注 | +|:---|:---|:---|:---|:---|:---:|:---|:---| +| T001 | 需求分析 | 确定 MVP 功能边界 | PM | T+3 | ✅ | 需求文档 | - | +| T002 | 技术选型 | 确定技术栈 | Tech Lead | T+3 | ✅ | 架构文档 | - | + +--- + +## P2 开发阶段 + +| 任务ID | 任务模块 | 具体行动 | 负责人 | 截止 | 状态 | 交付物 | 备注 | +|:---|:---|:---|:---|:---|:---:|:---|:---| +| T003 | 数据库 | 设计集合结构 | 后端 | T+5 | 🔄 | ER 图 | - | +| T004 | 后端 | 实现用户 API | 后端 | T+10 | ⏳ | API 代码 | 依赖 T003 | +| T005 | 前端 | 实现登录页面 | 前端 | T+10 | ⏳ | 页面代码 | 依赖 T004 | + +--- + +## P3 联调阶段 + +| 任务ID | 任务模块 | 具体行动 | 负责人 | 截止 | 状态 | 交付物 | 备注 | +|:---|:---|:---|:---|:---|:---:|:---|:---| + +--- + +## P4 测试阶段 + +| 任务ID | 任务模块 | 具体行动 | 负责人 | 截止 | 状态 | 交付物 | 备注 | +|:---|:---|:---|:---|:---|:---:|:---|:---| + +--- + +## P5 上线阶段 + +| 任务ID | 任务模块 | 具体行动 | 负责人 | 截止 | 状态 | 交付物 | 备注 | +|:---|:---|:---|:---|:---|:---:|:---|:---| + +--- + +## 任务统计 + +总计: X 个任务 +✅ Done: Y 个 (Z%) +🔄 In Progress: A 个 +⏳ Pending: B 个 +❌ Blocked: C 个 +``` + +--- + +## 三、对话记录模板 (conversation-log.md) + +```markdown +# [项目名称] 对话记录 + +> 用于记录重要对话上下文,便于新对话继承 + +--- + +## [YYYY-MM-DD] 会话记录 + +### 📌 讨论要点 +- 讨论了 [主题1] +- 确认了 [事项2] +- 发现了 [问题3] + +### ✅ 决策结论 +- 决定采用 [方案A] 而非 [方案B],原因是 [理由] +- 确定 [功能X] 的优先级为 P1 + +### 📋 行动事项 +- [ ] @[负责人] 完成 [任务描述] by [截止日期] +- [ ] @[负责人] 跟进 [事项描述] + +### 🔄 任务状态变更 +| 任务 | 变更前 | 变更后 | 原因 | +|:---|:---:|:---:|:---| +| T003 | ⏳ | 🔄 | 开始执行 | +| T001 | 🔄 | ✅ | 完成交付 | + +### 📎 关键信息摘要 +[记录重要的技术决策、业务逻辑、配置信息等] + +--- + +## 🔄 会话切换清单 + +当需要开始新对话时,复制以下内容: + +## 项目上下文 + +**项目名称**: [名称] +**当前阶段**: [阶段] +**进度概览**: 已完成 X/Y 任务 + +### 进行中任务 +- T003: [任务描述] - 进度 50% +- T004: [任务描述] - 待前置完成 + +### 未解决问题 +- [问题1]: [状态] + +### 下一步计划 +- [计划1] +- [计划2] + +### 关键背景 +- [重要决策或背景信息] +``` + +--- + +## 四、甘特图模板 + +```mermaid +gantt + title [项目名称] 开发进度 + dateFormat YYYY-MM-DD + + section P1 启动 + 需求分析 :done, a1, 2024-01-01, 3d + 技术选型 :done, a2, after a1, 2d + + section P2 开发 + 数据库设计 :active, b1, after a2, 3d + 后端开发 : b2, after b1, 10d + 前端开发 : b3, after b1, 10d + + section P3 联调 + 前后端联调 : c1, after b2, 3d + + section P4 测试 + 功能测试 : d1, after c1, 3d + Bug 修复 : d2, after d1, 2d + + section P5 上线 + 部署发布 : e1, after d2, 1d + 用户手册 : e2, after e1, 2d + 里程碑: 正式上线 :milestone, m1, after e2, 0d +``` + +--- + +## 五、风险矩阵模板 + +| 风险ID | 风险描述 | 可能性 | 影响 | 等级 | 触发条件 | 应对策略 | 负责人 | 状态 | +|:---|:---|:---:|:---:|:---:|:---|:---|:---|:---:| +| R001 | 需求频繁变更 | 高 | 中 | 🟡 | 客户提出新需求 | 冻结版本,变更走审批 | PM | 监控中 | +| R002 | 技术方案不可行 | 中 | 高 | 🟡 | POC 验证失败 | 提前预研,准备 Plan B | Tech Lead | 已缓解 | +| R003 | 核心人员离职 | 低 | 高 | 🟢 | 人员变动通知 | 文档沉淀 + 备份人员 | PM | 监控中 | + +### 风险等级说明 + +| 等级 | 定义 | 处理方式 | +|:---:|:---|:---| +| 🔴 高危 | 可能性高 + 影响高 | 立即处理,每日跟踪 | +| 🟡 中等 | 可能性/影响中高 | 密切关注,每周检查 | +| 🟢 低风险 | 可能性/影响低 | 记录观察,定期评估 | + +--- + +## 六、复盘报告模板 + +```markdown +# [项目名称] 项目复盘报告 + +> 复盘时间:YYYY-MM-DD +> 复盘人:[姓名] + +--- + +## 一、项目概述 + +| 项目 | 信息 | +|:---|:---| +| 项目名称 | [名称] | +| 项目周期 | YYYY-MM-DD ~ YYYY-MM-DD | +| 最终状态 | ✅ 成功 / ⚠️ 部分完成 / ❌ 失败 | + +--- + +## 二、目标与结果对比 + +| 目标项 | 预期值 | 实际值 | 完成率 | +|:---|:---|:---|:---:| +| 功能上线 | X 个 | Y 个 | Z% | +| 开发周期 | A 天 | B 天 | C% | + +--- + +## 三、经验总结 + +### 做得好的地方 👍 +1. [亮点1] +2. [亮点2] + +### 做得不好的地方 👎 +1. [问题1] +2. [问题2] + +--- + +## 四、改进行动 + +| 序号 | 改进点 | 具体行动 | 负责人 | 截止时间 | +|:---:|:---|:---|:---|:---| +| 1 | [改进点1] | [具体行动] | [负责人] | [时间] | + +--- + +> **复盘不是为了追责,而是为了下次做得更好!** +``` + +--- + +## 七、站会纪要模板 + +```markdown +# 站会纪要 - YYYY-MM-DD + +> 参与人员:[人员列表] +> 时长:[X] 分钟 + +--- + +## 🟢 昨日完成 + +| 成员 | 完成内容 | 对应任务 | +|:---|:---|:---| +| [姓名] | [完成内容] | T00X | + +--- + +## 🔵 今日计划 + +| 成员 | 计划内容 | 对应任务 | +|:---|:---|:---| +| [姓名] | [计划内容] | T00X | + +--- + +## 🔴 阻碍事项 + +| 问题描述 | 影响任务 | 需要支持 | +|:---|:---|:---| +| [问题] | T00X | [支持内容] | + +--- + +## 📊 进度快照 + +总任务: X 个 +✅ 已完成: Y 个 (Z%) +🔄 进行中: A 个 +⏳ 待开始: B 个 +``` + +--- + +> **提示**: 所有模板都可根据实际项目需求进行调整,核心是保持信息完整、可追踪。 diff --git a/.cursor/skills/dev-template-project-manager/workflow.md b/.cursor/skills/dev-template-project-manager/workflow.md new file mode 100644 index 0000000..5498e74 --- /dev/null +++ b/.cursor/skills/dev-template-project-manager/workflow.md @@ -0,0 +1,327 @@ +# 📋 项目管理工作流详解 + +> 本文档详细说明项目管理的完整工作流程,包括多智能体协作机制和上下文管理策略。 + +--- + +## 一、项目生命周期 + +```mermaid +graph LR + subgraph 启动[P1 启动] + A1[需求收集] --> A2[需求分析] + A2 --> A3[可行性评估] + end + + subgraph 规划[P2 规划] + B1[架构设计] --> B2[任务拆解] + B2 --> B3[排期制定] + end + + subgraph 执行[P3 执行] + C1[开发实现] --> C2[进度追踪] + C2 --> C3[风险控制] + C3 --> C1 + end + + subgraph 交付[P4 交付] + D1[测试验收] --> D2[部署上线] + D2 --> D3[用户手册] + end + + subgraph 复盘[P5 复盘] + E1[数据收集] --> E2[问题分析] + E2 --> E3[经验沉淀] + end + + 启动 --> 规划 --> 执行 --> 交付 --> 复盘 +``` + +--- + +## 二、多智能体协作架构 + +基于 DocAgent 模式,本系统采用多智能体协作: + +```mermaid +graph TB + subgraph Orchestrator[🎯 编排器 - 项目管理专家] + O[任务分发与协调] + end + + subgraph Agents[🤖 智能体矩阵] + A1[📖 Reader
需求理解] + A2[🔍 Searcher
上下文检索] + A3[✍️ Writer
内容生成] + A4[✅ Verifier
质量校验] + A5[📊 Tracker
进度追踪] + end + + subgraph Memory[💾 记忆层] + M1[project-state.md] + M2[execution-table.md] + M3[conversation-log.md] + M4[prompts-library.md] + end + + O --> A1 + A1 --> A2 + A2 --> A3 + A3 --> A4 + A4 --> A5 + A5 --> Memory + + A4 -->|不通过| A3 + Memory -->|上下文| A2 +``` + +### 智能体职责 + +| 智能体 | 角色 | 职责 | 触发场景 | +|:---:|:---|:---|:---| +| 📖 Reader | 需求分析师 | 理解用户输入,提取关键信息 | 新需求/变更请求 | +| 🔍 Searcher | 上下文检索 | 检索历史对话和项目状态 | 所有交互 | +| ✍️ Writer | 内容生成 | 生成文档、代码、报告 | 展开目录/生成内容 | +| ✅ Verifier | 质量校验 | 校验一致性、完整性 | 重要变更后 | +| 📊 Tracker | 进度追踪 | 更新状态、识别风险 | 进度变更 | + +--- + +## 三、上下文管理策略 + +### 3.1 上下文窗口优化 + +由于 LLM 上下文窗口有限,采用以下策略: + +```yaml +分层存储: + 即时层: 当前对话内容(保留完整) + 工作层: project-state.md 摘要(每次加载) + 归档层: conversation-log.md 历史(按需检索) + +摘要策略: + 每次对话结束: 提取关键信息写入 conversation-log.md + 每个里程碑: 更新 project-state.md 总览 + 每周: 归档过期任务,压缩执行表 + +检索策略: + 优先: project-state.md(当前状态) + 次之: 最近 5 次对话记录 + 按需: 历史对话全文检索 +``` + +### 3.2 会话切换无损转移 + +当需要开始新对话时: + +```markdown +## 会话转移清单 + +1. 当前项目状态摘要 +2. 进行中的任务列表 +3. 未解决的阻碍/风险 +4. 下一步待办事项 +5. 关键决策和背景 + +--- + +复制以上内容到新对话,即可无缝继续工作。 +``` + +--- + +## 四、任务拆解标准 + +### 4.1 拆解原则 + +```yaml +粒度标准: + - 每个任务 ≤ 2 天工时 + - 每个任务有明确交付物 + - 每个任务可独立验收 + +依赖管理: + - 明确前置依赖 + - 避免循环依赖 + - 并行任务分组 + +优先级定义: + P0: 阻塞性任务,必须最先完成 + P1: 核心功能,影响上线 + P2: 重要功能,影响体验 + P3: 锦上添花,时间允许再做 +``` + +### 4.2 用户故事模板 + +```markdown +**US-[编号]: [功能名称]** + +- **As a** [用户角色] +- **I want** [具体功能] +- **So that** [业务价值] + +**验收标准 (AC)**: +- [ ] AC1: [具体可验证的条件] +- [ ] AC2: [具体可验证的条件] + +**技术备注**: +- 依赖: [前置任务] +- 估时: [工时估算] +- 负责: [开发人员] +``` + +--- + +## 五、进度追踪机制 + +### 5.1 每日站会模式 + +```markdown +## 站会纪要 - [日期] + +### 🟢 昨日完成 +- [任务1]: 完成情况 +- [任务2]: 完成情况 + +### 🔵 今日计划 +- [任务3]: 计划内容 +- [任务4]: 计划内容 + +### 🔴 阻碍事项 +- [阻碍1]: 问题描述 + 需要的支持 + +### 📊 进度概览 +- 总任务: X 个 +- 已完成: Y 个 (Z%) +- 进行中: A 个 +- 待开始: B 个 +``` + +### 5.2 状态流转 + +```mermaid +stateDiagram-v2 + [*] --> Pending: 任务创建 + Pending --> InProgress: 开始执行 + InProgress --> Done: 完成 + InProgress --> Blocked: 遇到阻碍 + Blocked --> InProgress: 阻碍解决 + Blocked --> Cancelled: 需求取消 + Done --> [*] + Cancelled --> [*] +``` + +### 5.3 风险识别矩阵 + +| 风险等级 | 可能性 | 影响 | 处理方式 | +|:---:|:---:|:---:|:---| +| 🔴 高危 | 高 | 高 | 立即处理,上报并制定应急方案 | +| 🟡 中等 | 中 | 高/中高 | 密切关注,准备预案 | +| 🟢 低风险 | 低/中 | 低/中 | 记录观察,定期检查 | + +--- + +## 六、文档联动规则 + +### 6.1 变更传播链 + +```yaml +需求变更: + 触发更新: + - 架构文档 (如影响技术方案) + - 接口文档 (如影响 API 设计) + - 执行表 (新增/调整任务) + - 排期 (重新评估时间) + +接口变更: + 触发更新: + - 前端代码 (调用方式) + - 后端代码 (实现方式) + - API 文档 (接口定义) + - 测试用例 (验证逻辑) + +数据库变更: + 触发更新: + - ER 图 + - 后端 Model + - 接口文档 (数据结构) +``` + +### 6.2 一致性检查 + +每次重大变更后,执行一致性检查: + +```markdown +## 一致性检查清单 + +- [ ] 需求文档与执行表任务一致 +- [ ] 架构设计与技术选型一致 +- [ ] 接口定义与前后端实现一致 +- [ ] 数据库设计与 Model 定义一致 +- [ ] 部署配置与环境变量一致 +``` + +--- + +## 七、复盘流程 + +### 7.1 数据收集 + +```yaml +收集指标: + 进度: + - 计划工时 vs 实际工时 + - 计划周期 vs 实际周期 + - 任务完成率 + + 质量: + - Bug 数量及分布 + - 返工次数 + - 代码审查通过率 + + 过程: + - 需求变更次数 + - 阻碍事项数量 + - 风险应对效果 +``` + +### 7.2 复盘模板 + +详见 [templates.md](templates.md) 中的复盘报告模板。 + +--- + +## 八、最佳实践 + +### 8.1 高效使用技巧 + +```yaml +每日习惯: + - 早: 快速查看进度概览 + - 中: 遇到问题及时记录 + - 晚: 更新当日进度 + +每周习惯: + - 周一: 确认本周目标 + - 周五: 检查进度偏差 + +每个里程碑: + - 更新项目状态总览 + - 压缩归档已完成任务 + - 调整后续计划 +``` + +### 8.2 常见问题处理 + +| 问题 | 解决方案 | +|:---|:---| +| 任务拆分太粗 | 按 2 天原则继续细分 | +| 进度不透明 | 强制每日更新执行表 | +| 风险后知后觉 | 每个任务标记潜在风险 | +| 复盘流于形式 | 必须有具体改进行动 | +| 上下文丢失 | 及时记录到 conversation-log.md | + +--- + +> **记住**: 项目管理的核心是让事情可见、可追踪、可预测。AI 是你的助手,但决策权在你手中! diff --git a/app/ai-agent/channels/page.tsx b/app/ai-agent/channels/page.tsx new file mode 100644 index 0000000..e7b5d7e --- /dev/null +++ b/app/ai-agent/channels/page.tsx @@ -0,0 +1,617 @@ +"use client" + +import { useState, useEffect } from "react" +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" +import { Button } from "@/components/ui/button" +import { Badge } from "@/components/ui/badge" +import { Input } from "@/components/ui/input" +import { Switch } from "@/components/ui/switch" +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog" +import { Label } from "@/components/ui/label" +import { Textarea } from "@/components/ui/textarea" +import { + MessageSquare, + Plus, + Settings, + CheckCircle2, + XCircle, + RefreshCw, + Copy, + ExternalLink, + Webhook, + Bot, + Loader2, + Send, + Key, + Globe, + Smartphone, +} from "lucide-react" + +// 渠道接口 +interface Channel { + id: string + name: string + type: 'feishu' | 'wecom' | 'wechat' | 'api' | 'webhook' + status: 'connected' | 'disconnected' | 'pending' + config: { + appId?: string + appSecret?: string + webhookUrl?: string + token?: string + encryptKey?: string + } + stats: { + totalMessages: number + todayMessages: number + lastMessage?: string + } + createdAt: string + enabled: boolean +} + +// 渠道类型配置 - 包含详细配置步骤 +const CHANNEL_TYPES = { + feishu: { + name: '飞书', + icon: '🪶', + color: 'bg-blue-100 text-blue-700', + description: '对接飞书机器人,支持私聊和群聊', + configFields: ['appId', 'appSecret', 'encryptKey', 'token'], + steps: [ + '1. 登录飞书开放平台 open.feishu.cn', + '2. 创建企业自建应用 → 机器人', + '3. 获取 App ID 和 App Secret', + '4. 配置事件订阅 URL: {apiBaseUrl}/feishu/events', + '5. 添加权限: im:message, im:message.group_at_msg', + '6. 将机器人添加到目标群聊', + '7. @机器人 即可开始对话', + ], + }, + wecom: { + name: '企业微信', + icon: '💼', + color: 'bg-green-100 text-green-700', + description: '对接企业微信应用或机器人', + configFields: ['corpId', 'agentId', 'secret', 'token', 'encodingAESKey'], + steps: [ + '1. 登录企业微信管理后台 work.weixin.qq.com', + '2. 应用管理 → 自建应用 → 创建应用', + '3. 获取 CorpID、AgentId、Secret', + '4. 设置接收消息 URL: {apiBaseUrl}/wecom/callback', + '5. 配置 Token 和 EncodingAESKey', + '6. 开启客户联系、消息推送等权限', + '7. 发消息给应用即可触发对话', + ], + }, + wechat: { + name: '微信', + icon: '💬', + color: 'bg-emerald-100 text-emerald-700', + description: '通过存客宝对接微信私域', + configFields: ['ckbApiKey', 'ckbSecret'], + steps: [ + '1. 登录存客宝后台 admin.cunkebao.com', + '2. 系统设置 → API配置', + '3. 获取 API Key 和 Secret', + '4. 配置消息回调 URL: {apiBaseUrl}/ckb/webhook', + '5. 在卡若AI配置存客宝凭证', + '6. 微信好友发消息即可触发AI回复', + ], + }, + api: { + name: 'API接口', + icon: '🔌', + color: 'bg-purple-100 text-purple-700', + description: '标准REST API,供第三方系统调用', + configFields: ['apiKey'], + steps: [ + '1. 在本页面生成 API Key', + '2. 调用方式: POST {apiBaseUrl}/chat', + '3. Header: Authorization: Bearer {API_KEY}', + '4. Body: { "message": "你的问题" }', + '5. 响应: { "success": true, "response": {...} }', + ], + }, + webhook: { + name: 'Webhook', + icon: '🔗', + color: 'bg-orange-100 text-orange-700', + description: '通用Webhook回调接口', + configFields: ['webhookUrl', 'secret'], + steps: [ + '1. 配置接收 Webhook 的目标 URL', + '2. 设置签名密钥 (可选)', + '3. 神射手会在以下事件时推送:', + ' - 新用户画像生成', + ' - 流量包创建完成', + ' - 报告生成完成', + '4. 推送格式: { "event": "...", "data": {...} }', + ], + }, +} + +// 预定义渠道 +const DEFAULT_CHANNELS: Channel[] = [ + { + id: 'ch_feishu_1', + name: '卡若AI飞书机器人', + type: 'feishu', + status: 'connected', + config: { + appId: 'cli_a6xxx', + appSecret: '********', + token: 'karuo_token', + }, + stats: { + totalMessages: 12580, + todayMessages: 156, + lastMessage: '5分钟前', + }, + createdAt: '2024-01-15', + enabled: true, + }, + { + id: 'ch_wecom_1', + name: '企业微信-神射手助手', + type: 'wecom', + status: 'connected', + config: { + appId: 'ww_xxx', + }, + stats: { + totalMessages: 8920, + todayMessages: 89, + lastMessage: '12分钟前', + }, + createdAt: '2024-02-01', + enabled: true, + }, + { + id: 'ch_wechat_1', + name: '存客宝微信通道', + type: 'wechat', + status: 'connected', + config: {}, + stats: { + totalMessages: 45600, + todayMessages: 320, + lastMessage: '1分钟前', + }, + createdAt: '2024-01-01', + enabled: true, + }, + { + id: 'ch_api_1', + name: '神射手API', + type: 'api', + status: 'connected', + config: { + apiKey: 'sk-archer-xxx', + }, + stats: { + totalMessages: 156000, + todayMessages: 2340, + lastMessage: '刚刚', + }, + createdAt: '2024-01-01', + enabled: true, + }, +] + +export default function ChannelsPage() { + const [channels, setChannels] = useState(DEFAULT_CHANNELS) + const [loading, setLoading] = useState(false) + const [showAddDialog, setShowAddDialog] = useState(false) + const [showConfigDialog, setShowConfigDialog] = useState(false) + const [selectedChannel, setSelectedChannel] = useState(null) + const [newChannelType, setNewChannelType] = useState('feishu') + const [testLoading, setTestLoading] = useState(null) + + // API端点基础URL - 动态获取当前域名 + const [apiBaseUrl, setApiBaseUrl] = useState('') + + useEffect(() => { + // 获取当前部署的域名 + const host = typeof window !== 'undefined' ? window.location.origin : '' + setApiBaseUrl(`${host}/api/shensheshou`) + }, []) + + const formatNumber = (num: number): string => { + if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M` + if (num >= 1000) return `${(num / 1000).toFixed(1)}K` + return num.toLocaleString() + } + + // 测试连接 + const testConnection = async (channelId: string) => { + setTestLoading(channelId) + await new Promise(r => setTimeout(r, 2000)) + setTestLoading(null) + } + + // 切换启用状态 + const toggleChannel = (channelId: string) => { + setChannels(channels.map(ch => + ch.id === channelId ? { ...ch, enabled: !ch.enabled } : ch + )) + } + + // 复制到剪贴板 + const copyToClipboard = (text: string) => { + navigator.clipboard.writeText(text) + } + + const getStatusBadge = (status: string) => { + switch (status) { + case 'connected': + return 已连接 + case 'disconnected': + return 未连接 + default: + return 配置中 + } + } + + return ( +
+
+ {/* 顶部标题 */} +
+
+

渠道配置

+

配置飞书、企微、微信等渠道,让AI助手可通过多渠道访问

+
+ +
+ + {/* 统计卡片 */} +
+ + +
+
+

接入渠道

+

{channels.length}

+
+ +
+
+
+ + +
+
+

已连接

+

{channels.filter(c => c.status === 'connected').length}

+
+ +
+
+
+ + +
+
+

今日消息

+

{formatNumber(channels.reduce((sum, c) => sum + c.stats.todayMessages, 0))}

+
+ +
+
+
+ + +
+
+

累计消息

+

{formatNumber(channels.reduce((sum, c) => sum + c.stats.totalMessages, 0))}

+
+ +
+
+
+
+ + {/* API接入说明 */} + + +
+
+

🔗 API接入端点

+

第三方系统可通过以下接口与神射手Skill通信

+
+
+ + POST {apiBaseUrl}/chat + + + 智能对话 +
+
+ + POST {apiBaseUrl}/query + + + 用户查询 +
+
+
+ +
+
+
+ + {/* 渠道列表 */} +
+ {channels.map(channel => { + const typeConfig = CHANNEL_TYPES[channel.type] + + return ( + + +
+
+
+ {typeConfig.icon} +
+
+
+

{channel.name}

+ {typeConfig.name} + {getStatusBadge(channel.status)} +
+

{typeConfig.description}

+
+ 今日: {formatNumber(channel.stats.todayMessages)} 条 + 累计: {formatNumber(channel.stats.totalMessages)} 条 + {channel.stats.lastMessage && ( + 最近消息: {channel.stats.lastMessage} + )} +
+
+
+
+ toggleChannel(channel.id)} + /> + + +
+
+
+
+ ) + })} +
+ + {/* 添加渠道弹窗 */} + + + + 添加渠道 + 选择要接入的渠道类型 + +
+ {Object.entries(CHANNEL_TYPES).map(([key, config]) => ( +
setNewChannelType(key as keyof typeof CHANNEL_TYPES)} + className={`p-4 rounded-xl border-2 cursor-pointer transition-all ${ + newChannelType === key ? 'border-blue-500 bg-blue-50' : 'border-gray-200 hover:border-gray-300' + }`} + > +
{config.icon}
+

{config.name}

+

{config.description}

+
+ ))} +
+ + + + +
+
+ + {/* 配置弹窗 */} + + + + + {selectedChannel?.id.includes('new') ? '配置新渠道' : '编辑渠道配置'} + + + {selectedChannel && CHANNEL_TYPES[selectedChannel.type]?.description} + + + {selectedChannel && ( +
+ {/* 配置步骤指南 */} +
+

+ 📋 {CHANNEL_TYPES[selectedChannel.type].name} 配置步骤 +

+
    + {(CHANNEL_TYPES[selectedChannel.type] as any).steps?.map((step: string, i: number) => ( +
  1. + {step.replace('{apiBaseUrl}', apiBaseUrl || 'https://your-domain.com/api/shensheshou')} +
  2. + ))} +
+
+ +
+ + +
+ + {selectedChannel.type === 'feishu' && ( + <> +
+ + +
+
+ + +
+
+ + +
+
+

📋 飞书配置步骤

+
    +
  1. 在飞书开放平台创建应用
  2. +
  3. 添加机器人能力并设置权限
  4. +
  5. 配置事件订阅回调地址
  6. +
  7. 填入上述配置信息
  8. +
+
+ + )} + + {selectedChannel.type === 'wecom' && ( + <> +
+
+ + +
+
+ + +
+
+
+ + +
+ + )} + + {selectedChannel.type === 'wechat' && ( + <> +
+ + +
+
+

💡 微信通道说明

+

+ 微信私域通过存客宝SDK接入,需要在存客宝平台配置API密钥 +

+
+ + )} + + {selectedChannel.type === 'api' && ( + <> +
+ +
+ + +
+
+
+ +
+{`curl -X POST ${apiBaseUrl}/chat \\
+  -H "Authorization: Bearer sk-archer-xxx" \\
+  -H "Content-Type: application/json" \\
+  -d '{"message": "查询用户 13800138000"}'`}
+                      
+
+ + )} + + {selectedChannel.type === 'webhook' && ( + <> +
+ + +
+
+ + +
+ + )} +
+ )} + + + + +
+
+
+
+ ) +} diff --git a/app/ai-agent/chat/page.tsx b/app/ai-agent/chat/page.tsx index e55b980..0175b94 100644 --- a/app/ai-agent/chat/page.tsx +++ b/app/ai-agent/chat/page.tsx @@ -75,73 +75,56 @@ export default function AIAgentChatPage() { setInputValue("") setIsLoading(true) - // 模拟AI响应 - setTimeout(() => { - let response: any = { + try { + // 调用真实的AI Chat API + const response = await fetch("/api/ai-chat", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ message: userMessage.content }) + }) + + const data = await response.json() + + let aiResponse: any = { id: (Date.now() + 1).toString(), role: "assistant", timestamp: new Date(), } - // 根据输入内容生成不同类型的响应 - if (inputValue.includes("高价值") || inputValue.includes("消费") || inputValue.includes("查询")) { - response.content = "我已理解您的需求。正在为您查询符合条件的用户..." - response.taskType = "NLQ" - response.result = { - type: "table", - title: "高价值用户查询结果", - sql: "SELECT * FROM users WHERE total_spending > 10000 AND last_active_date >= DATE_SUB(NOW(), INTERVAL 30 DAY)", - data: [ - { id: "U001", name: "张三", phone: "138****1234", spending: "¥15,680", lastActive: "2天前" }, - { id: "U002", name: "李四", phone: "139****5678", spending: "¥12,340", lastActive: "1天前" }, - { id: "U003", name: "王五", phone: "137****9012", spending: "¥11,890", lastActive: "3天前" }, - ], - total: 823, - } - } else if (inputValue.includes("打标") || inputValue.includes("标签")) { - response.content = "我将为符合条件的用户打上「流失风险」标签。这是一个AI打标任务,需要您确认后执行。" - response.taskType = "TAG" - response.result = { - type: "confirmation", - title: "AI打标任务确认", - description: "为最近7天未登录的用户打上「流失风险」标签", - affectedCount: 12456, - confidence: 0.87, - needReview: true, - } - } else if (inputValue.includes("清洗") || inputValue.includes("异常")) { - response.content = "我已扫描用户表,发现以下数据质量问题:" - response.taskType = "CLEAN" - response.result = { - type: "cleaning", - title: "数据清洗建议", - issues: [ - { field: "phone", issue: "格式不规范", count: 234, example: "1381234567 → 138****4567" }, - { field: "email", issue: "缺失值", count: 1256, suggestion: "填充默认值或标记" }, - { field: "birth_date", issue: "超出范围", count: 45, example: "2099-01-01" }, - ], - needReview: true, - } - } else if (inputValue.includes("报告") || inputValue.includes("分析")) { - response.content = "正在为您生成用户增长分析报告..." - response.taskType = "REPORT" - response.result = { - type: "report", - title: "用户增长分析报告(2026年1月)", - summary: "本月新增用户23,456人,同比增长15.2%;活跃用户856,234人,DAU/MAU比值0.32。", - highlights: [ - "新用户转化率提升至18.5%,环比增长3.2%", - "高价值用户占比8.7%,贡献65%的交易额", - "用户流失率下降至2.1%,创历史新低", - ], + if (data.success && data.response) { + aiResponse.content = data.response.content + + // 如果有数据结果,添加表格展示 + if (data.response.data && data.response.data.length > 0) { + aiResponse.taskType = "NLQ" + aiResponse.result = { + type: "table", + title: "查询结果", + data: data.response.data.slice(0, 5).map((item: any, idx: number) => ({ + id: idx + 1, + name: item.name || item.姓名 || "-", + phone: item.phone_masked || item.phone || "-", + level: item.user_level || item.traffic_pool?.pool_name || "-", + score: item.user_evaluation_score || item.rfm_composite_score || "-", + })), + total: data.response.data.length, + } } } else { - response.content = "我理解您的需求。请问您想要:\n1. 查询用户数据\n2. AI打标签\n3. 数据清洗\n4. 生成报告\n\n请选择或详细描述您的需求。" + aiResponse.content = `⚠️ ${data.error || "查询失败,请重试"}` } - setMessages((prev) => [...prev, response]) + setMessages((prev) => [...prev, aiResponse]) + } catch (error: any) { + setMessages((prev) => [...prev, { + id: (Date.now() + 1).toString(), + role: "assistant", + content: `⚠️ 网络错误: ${error.message}`, + timestamp: new Date(), + }]) + } finally { setIsLoading(false) - }, 1500) + } } const handleQuickCommand = (command: string) => { diff --git a/app/ai-agent/data-cleaning/page.tsx b/app/ai-agent/data-cleaning/page.tsx index d7e5048..148329b 100644 --- a/app/ai-agent/data-cleaning/page.tsx +++ b/app/ai-agent/data-cleaning/page.tsx @@ -1,540 +1,643 @@ "use client" -import { useState } from "react" -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" +import { useState, useEffect } from "react" +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Input } from "@/components/ui/input" +import { Progress } from "@/components/ui/progress" +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" +import { Switch } from "@/components/ui/switch" +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog" +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" -import { Switch } from "@/components/ui/switch" -import { Progress } from "@/components/ui/progress" -import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog" -import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" -import { - Sparkles, Play, Pause, Settings, FileText, Database, - CheckCircle2, XCircle, Clock, AlertTriangle, Eye, Trash2, - RefreshCw, Download, ChevronRight, Zap, Bot +import { + Zap, + Play, + Pause, + Settings, + Plus, + CheckCircle2, + Loader2, + RefreshCw, + Database, + Edit, + Trash2, + AlertTriangle, + FileCheck, + Layers, + ArrowRight, + Sparkles, } from "lucide-react" -// AI清洗规则数据 -const aiCleaningRules = [ +// 清洗规则接口 +interface CleaningRule { + id: string + name: string + description: string + field: string + ruleType: 'format' | 'dedup' | 'enrich' | 'validate' | 'transform' + ruleConfig: string + enabled: boolean + isDefault: boolean +} + +// 清洗任务接口 +interface CleaningTask { + id: string + name: string + description: string + sourceDb: string + sourceCollection: string + targetDb: string + targetCollection: string + rules: string[] // 应用的规则ID + status: 'idle' | 'running' | 'paused' | 'completed' + progress: number + stats: { + totalRecords: number + processedRecords: number + cleanedRecords: number + issuesFound: number + issuesFixed: number + } +} + +// 默认清洗规则 +const DEFAULT_RULES: CleaningRule[] = [ { - id: "1", - name: "手机号格式标准化", - prompt: "识别并标准化所有手机号格式,去除空格、括号等特殊字符,统一为11位纯数字格式", - dataSource: "用户主表", - targetField: "phone", - status: "running", - confidence: 0.95, - processedCount: 12580, - totalCount: 15000, - errorCount: 23, - lastRun: "2024-01-15 10:30:00", - needsReview: false, + id: 'rule_phone', + name: '手机号格式化', + description: '将手机号格式化为标准11位格式', + field: 'phone', + ruleType: 'format', + ruleConfig: `规则说明: +1. 去除空格、横杠、括号 +2. 去除+86、0086前缀 +3. 验证1[3-9]开头的11位数字 +4. 无效手机号标记为null + +示例: ++86 138-0000-8888 → 13800008888 +086 13800008888 → 13800008888 +12345678901 → null (无效)`, + enabled: true, + isDefault: true, }, { - id: "2", - name: "地址信息补全", - prompt: "根据已有地址信息,智能补全省市区三级地址,并标准化地址格式", - dataSource: "用户主表", - targetField: "address", - status: "pending_review", - confidence: 0.78, - processedCount: 8900, - totalCount: 8900, - errorCount: 156, - lastRun: "2024-01-15 09:15:00", - needsReview: true, + id: 'rule_name', + name: '姓名脱敏', + description: '姓名中间字符用*替代', + field: 'name', + ruleType: 'transform', + ruleConfig: `规则说明: +1. 保留第一个字(姓氏) +2. 中间名字用*替代 +3. 保留最后一个字(可选) + +示例: +张三 → 张* +王小明 → 王*明 +欧阳修 → 欧*修`, + enabled: true, + isDefault: true, }, { - id: "3", - name: "姓名脱敏处理", - prompt: "对姓名字段进行脱敏处理,保留姓氏,名字用*替代", - dataSource: "交易记录表", - targetField: "customer_name", - status: "completed", - confidence: 0.99, - processedCount: 50000, - totalCount: 50000, - errorCount: 5, - lastRun: "2024-01-14 18:00:00", - needsReview: false, + id: 'rule_province', + name: '省份标准化', + description: '将省份名称标准化', + field: 'province', + ruleType: 'format', + ruleConfig: `规则说明: +1. 去除"省"、"市"、"自治区"后缀 +2. 直辖市特殊处理 +3. 自治区简称处理 + +示例: +福建省 → 福建 +北京市 → 北京 +内蒙古自治区 → 内蒙古 +广西壮族自治区 → 广西`, + enabled: true, + isDefault: true, + }, + { + id: 'rule_dedup_phone', + name: '手机号去重', + description: '根据手机号去除重复记录', + field: 'phone', + ruleType: 'dedup', + ruleConfig: `规则说明: +1. 以phone字段作为去重键 +2. 保留最新的记录(按updated_at) +3. 合并其他记录的标签 + +去重策略: +- 主键: phone +- 保留策略: 最新记录 +- 合并字段: tags, data_sources`, + enabled: true, + isDefault: true, + }, + { + id: 'rule_qq', + name: 'QQ号格式化', + description: 'QQ号格式化为纯数字', + field: 'qq', + ruleType: 'format', + ruleConfig: `规则说明: +1. 去除空格 +2. 提取纯数字 +3. 验证5-11位数字 + +示例: +QQ: 12345678 → 12345678 +12345678qq → 12345678 +1234 → null (位数不足)`, + enabled: true, + isDefault: true, + }, + { + id: 'rule_validate_rfm', + name: 'RFM评分验证', + description: '验证RFM评分在有效范围内', + field: 'rfm_score', + ruleType: 'validate', + ruleConfig: `规则说明: +1. RFM评分范围: 0-100 +2. 超出范围的修正为边界值 +3. 非数字值设为null + +验证逻辑: +- rfm_score < 0 → 0 +- rfm_score > 100 → 100 +- 非数字 → null`, + enabled: true, + isDefault: true, + }, + { + id: 'rule_enrich_level', + name: '用户等级计算', + description: '根据RFM评分计算用户等级', + field: 'user_level', + ruleType: 'enrich', + ruleConfig: `规则说明: +根据rfm_score计算user_level: + +等级映射: +- rfm_score >= 90 → S级(钻石) +- rfm_score >= 80 → A级(黄金) +- rfm_score >= 60 → B级(白银) +- rfm_score >= 40 → C级(青铜) +- rfm_score < 40 → D级(潜力)`, + enabled: true, + isDefault: true, }, ] -// 待审核数据 -const pendingReviewData = [ +// 预定义清洗任务 +const DEFAULT_TASKS: CleaningTask[] = [ { - id: "r1", - ruleId: "2", - ruleName: "地址信息补全", - originalValue: "北京朝阳区", - aiSuggestedValue: "北京市朝阳区建国路88号", - confidence: 0.72, - reason: "根据用户历史订单地址推断", + id: 'clean_1', + name: 'QQ数据清洗', + description: '清洗QQ库的手机号和地区数据', + sourceDb: 'KR_腾讯', + sourceCollection: 'qq_phone', + targetDb: 'KR', + targetCollection: '用户估值', + rules: ['rule_phone', 'rule_province', 'rule_dedup_phone'], + status: 'completed', + progress: 100, + stats: { + totalRecords: 705000000, + processedRecords: 705000000, + cleanedRecords: 680000000, + issuesFound: 25000000, + issuesFixed: 24500000, + }, }, { - id: "r2", - ruleId: "2", - ruleName: "地址信息补全", - originalValue: "上海浦东", - aiSuggestedValue: "上海市浦东新区陆家嘴环路1000号", - confidence: 0.65, - reason: "根据IP定位和常用地址推断", + id: 'clean_2', + name: '存客宝数据清洗', + description: '清洗CRM数据,标准化字段格式', + sourceDb: 'cunkebao_v3', + sourceCollection: 'users', + targetDb: 'KR_存客宝', + targetCollection: '用户资产统一视图', + rules: ['rule_phone', 'rule_name', 'rule_validate_rfm', 'rule_enrich_level'], + status: 'running', + progress: 45, + stats: { + totalRecords: 216000, + processedRecords: 97200, + cleanedRecords: 95000, + issuesFound: 2200, + issuesFixed: 2100, + }, }, ] -export default function AIDataCleaningPage() { - const [activeTab, setActiveTab] = useState("rules") +export default function DataCleaningPage() { + const [tasks, setTasks] = useState(DEFAULT_TASKS) + const [rules, setRules] = useState(DEFAULT_RULES) + const [activeTab, setActiveTab] = useState("tasks") + const [selectedTask, setSelectedTask] = useState(null) + const [selectedRule, setSelectedRule] = useState(null) const [showCreateDialog, setShowCreateDialog] = useState(false) - const [showReviewDialog, setShowReviewDialog] = useState(false) - const [selectedReview, setSelectedReview] = useState(null) - const [newRule, setNewRule] = useState({ - name: "", - prompt: "", - dataSource: "", - targetField: "", - autoApprove: false, - confidenceThreshold: 0.9, - }) + const [showRuleDialog, setShowRuleDialog] = useState(false) + const [editingRuleConfig, setEditingRuleConfig] = useState('') - const getStatusBadge = (status: string) => { - switch (status) { - case "running": - return 运行中 - case "completed": - return 已完成 - case "pending_review": - return 待审核 - case "failed": - return 失败 - default: - return 未知 + const formatNumber = (num: number): string => { + if (num >= 1000000000) return `${(num / 1000000000).toFixed(2)}B` + if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M` + if (num >= 1000) return `${(num / 1000).toFixed(0)}K` + return num.toLocaleString() + } + + const getRuleTypeBadge = (type: string) => { + switch (type) { + case 'format': return 格式化 + case 'dedup': return 去重 + case 'enrich': return 补全 + case 'validate': return 验证 + case 'transform': return 转换 + default: return {type} } } - const handleApprove = (id: string) => { - console.log("Approved:", id) - setShowReviewDialog(false) + const getStatusBadge = (status: string) => { + switch (status) { + case 'completed': + return 已完成 + case 'running': + return 运行中 + case 'paused': + return 已暂停 + default: + return 待执行 + } } - const handleReject = (id: string) => { - console.log("Rejected:", id) - setShowReviewDialog(false) + // 模拟进度更新 + useEffect(() => { + const interval = setInterval(() => { + setTasks(prev => prev.map(t => { + if (t.status === 'running' && t.progress < 100) { + const newProgress = Math.min(t.progress + Math.random() * 3, 100) + return { + ...t, + progress: newProgress, + status: newProgress >= 100 ? 'completed' as const : t.status, + stats: { + ...t.stats, + processedRecords: Math.floor(t.stats.totalRecords * newProgress / 100), + cleanedRecords: Math.floor(t.stats.totalRecords * newProgress / 100 * 0.98), + issuesFixed: Math.floor(t.stats.issuesFound * newProgress / 100 * 0.95), + } + } + } + return t + })) + }, 3000) + return () => clearInterval(interval) + }, []) + + const toggleRule = (ruleId: string) => { + setRules(rules.map(r => r.id === ruleId ? { ...r, enabled: !r.enabled } : r)) + } + + const openRuleEditor = (rule: CleaningRule) => { + setSelectedRule(rule) + setEditingRuleConfig(rule.ruleConfig) + setShowRuleDialog(true) + } + + const saveRule = () => { + if (selectedRule) { + setRules(rules.map(r => r.id === selectedRule.id ? { ...r, ruleConfig: editingRuleConfig } : r)) + setShowRuleDialog(false) + } + } + + const runTask = (taskId: string) => { + setTasks(tasks.map(t => t.id === taskId ? { ...t, status: 'running' as const } : t)) } return ( -
- {/* 页面标题 */} -
-
-

AI数据清洗

-

通过AI提示词自动识别和清洗数据,支持人工审核机制

-
- -
- - {/* 统计卡片 */} -
- - -
-
-

活跃规则

-

12

-
- -
-
-
- - -
-
-

今日处理

-

71,480

-
- -
-
-
- - -
-
-

待审核

-

156

-
- -
-
-
- - -
-
-

平均置信度

-

92.3%

-
- -
-
-
-
- - {/* 主内容区 */} - - - 清洗规则 - - 人工审核 - 156 - - 执行历史 - - - - {aiCleaningRules.map((rule) => ( - - -
-
-
-

{rule.name}

- {getStatusBadge(rule.status)} - {rule.needsReview && ( - - 需要审核 - - )} -
-
-

- AI提示词: - {rule.prompt} -

-
-
- - - {rule.dataSource} / {rule.targetField} - - 置信度: {(rule.confidence * 100).toFixed(0)}% - 错误: {rule.errorCount} - 最后执行: {rule.lastRun} -
- {rule.status === "running" && ( -
-
- 处理进度 - {rule.processedCount.toLocaleString()} / {rule.totalCount.toLocaleString()} -
- -
- )} -
-
- {rule.status === "running" ? ( - - ) : ( - - )} - - -
-
-
-
- ))} -
- - - - - 待审核清洗结果 - AI清洗结果中置信度较低或需要人工确认的数据 - - - - - - 规则名称 - 原始值 - AI建议值 - 置信度 - 推理依据 - 操作 - - - - {pendingReviewData.map((item) => ( - - {item.ruleName} - {item.originalValue} - {item.aiSuggestedValue} - - = 0.7 ? "bg-yellow-100 text-yellow-700" : "bg-red-100 text-red-700"} - > - {(item.confidence * 100).toFixed(0)}% - - - - {item.reason} - - -
- - - -
-
-
- ))} -
-
-
-
-
- - - - - 执行历史 - 查看AI清洗规则的历史执行记录 - - - - - - 规则名称 - 执行时间 - 处理数量 - 成功率 - 耗时 - 状态 - 操作 - - - - - 手机号格式标准化 - 2024-01-15 10:30:00 - 15,000 - 99.8% - 2分35秒 - 成功 - - - - - - 地址信息补全 - 2024-01-15 09:15:00 - 8,900 - 98.2% - 5分12秒 - 部分完成 - - - - - -
-
-
-
-
- - {/* 创建AI清洗规则弹窗 */} - - - - 创建AI清洗规则 - 通过自然语言描述清洗需求,AI将自动识别和处理数据 - -
-
-
- - setNewRule({...newRule, name: e.target.value})} - /> -
-
- - -
-
-
- - setNewRule({...newRule, targetField: e.target.value})} - /> -
-
- -