[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81464":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":8,"language":10,"languages":8,"totalLinesOfCode":8,"stars":11,"forks":12,"watchers":13,"openIssues":12,"contributorsCount":12,"subscribersCount":12,"size":12,"stars1d":12,"stars7d":12,"stars30d":12,"stars90d":12,"forks30d":12,"starsTrendScore":12,"compositeScore":14,"rankGlobal":8,"rankLanguage":8,"license":8,"archived":15,"fork":15,"defaultBranch":16,"hasWiki":17,"hasPages":15,"topics":18,"createdAt":8,"pushedAt":8,"updatedAt":19,"readmeContent":20,"aiSummary":8,"trendingCount":12,"starSnapshotCount":12,"syncStatus":21,"lastSyncTime":22,"discoverSource":23},81464,"personal-work-collection-v1","Mmiisanth\u002Fpersonal-work-collection-v1","Mmiisanth",null,"https:\u002F\u002Friotbus.onrender.com","TypeScript",29,0,31,34,false,"main",true,[],"2026-06-12 04:01:33","# RiotBus \u002F 乱斗巴士\n\n`RiotBus` 是一个欧美女歌手 PK 网站 MVP：用户选择两位艺人、选择对比维度和输出模式后，页面会展示结构化数据表，并由 AI 生成可追问、可导出的 PK 报告。\n\n项目当前重点不是做一个传统音乐资料站，而是把“查数据、看对比、生成有传播感的报告”这条链路跑通。\n\n正式访问地址：[https:\u002F\u002Friotbus.soeuriours.com](https:\u002F\u002Friotbus.soeuriours.com)\n\n## 当前能力\n\n- 首页动态斜线背景，支持 `刻薄女孩` \u002F `清清白白` 双主题切换。\n- 首页 3 条运营 Banner，支持自动轮播、手动切换和详情弹窗。\n- Banner 图片统一读取 `public\u002Fassets\u002Fbanners\u002F*.png`。\n- 首批 20 位女歌手，支持模式化头像与模式化显示名。\n- 筛选弹窗支持 2 人 PK、维度勾选、default AI \u002F custom API 切换。\n- 对比页支持销量、Spotify followers、Grammy、AOTY 乐评四类数据。\n- AI 面板支持首轮报告、追问回复和分享图\u002FPDF 文案生成。\n- RAG 内容库支持艺人画像、黑称黑话、粉丝称呼、争议、荣誉、标题素材。\n- AOTY 专辑级 Agent 支持手动更新专辑乐评缓存，并在用户追问具体专辑时注入 AI 上下文。\n- 可选 DashScope\u002FQwen `text-embedding-v4` embedding 流程，可导入 Chroma。\n\n## 技术栈\n\n- `Next.js App Router`\n- `React`\n- `TypeScript`\n- `Tailwind CSS`\n- `Framer Motion`\n- `lucide-react`\n- 本地 JSON\u002FTS seed 数据\n- OpenAI-compatible chat API\n- 可选 DashScope\u002FQwen embedding\n\n## 本地运行\n\n安装依赖：\n\n```bash\nnpm install\n```\n\n准备环境变量：\n\n```bash\ncp .env.example .env.local\n```\n\n至少填写：\n\n```bash\nDEFAULT_AI_BASE_URL=https:\u002F\u002Fapi.deepseek.com\nDEFAULT_AI_MODEL=deepseek-chat\nDEEPSEEK_API_KEY=your-key\n```\n\n启动开发环境：\n\n```bash\nnpm run dev\n```\n\n打开：\n\n```text\nhttp:\u002F\u002Flocalhost:3000\n```\n\n## Cloudflare 部署\n\n这个项目不是纯静态站，推荐用 OpenNext + Cloudflare Workers 部署。\n\n安装依赖后先本地验证：\n\n```bash\nnpm run typecheck\nnpm run build\n```\n\n本地预览 Cloudflare 产物：\n\n```bash\nnpm run preview:cloudflare\n```\n\n发布到 Cloudflare：\n\n```bash\nnpm run deploy:cloudflare\n```\n\n如果需要补 Cloudflare 环境类型：\n\n```bash\nnpm run cf-typegen\n```\n\nCloudflare 上运行时只依赖线上 API 和已经构建好的静态资产；`public\u002Fassets\u002Fartists\u002Fsource\u002F`、`data\u002Frag\u002Findex\u002Frag-embeddings.json`、`data\u002Frag\u002Findex\u002Fchroma-export.json` 这类本地素材不应作为部署前提。\n\n## 常用命令\n\n```bash\nnpm run dev\nnpm run typecheck\nnpm run build\nnpm run agent:aoty:update\nnpm run agent:aoty:query -- --artist taylor-swift\nnpm run rag:chunks\nnpm run rag:embed\nnpm run rag:search -- \"Taylor Swift vs Lady Gaga\"\nnpm run rag:chroma\n```\n\n## 数据与素材位置\n\n- 艺人基础数据：[data\u002Fartists.ts](data\u002Fartists.ts)\n- 首页 Banner 数据：[data\u002Fbanners.ts](data\u002Fbanners.ts)\n- AI prompt：[lib\u002Fprompts.ts](lib\u002Fprompts.ts)\n- RAG 知识库：[data\u002Frag\u002Fknowledge\u002Fartist-knowledge.json](data\u002Frag\u002Fknowledge\u002Fartist-knowledge.json)\n- 结构化指标：[data\u002Frag\u002Fstructured\u002Fartist-metrics.json](data\u002Frag\u002Fstructured\u002Fartist-metrics.json)\n- AOTY 专辑级缓存：[data\u002Frag\u002Fstructured\u002Faoty-albums.json](data\u002Frag\u002Fstructured\u002Faoty-albums.json)\n- Banner 图片：[public\u002Fassets\u002Fbanners](public\u002Fassets\u002Fbanners)\n- 生成头像：[public\u002Fassets\u002Fartists\u002Fmean](public\u002Fassets\u002Fartists\u002Fmean) 和 [public\u002Fassets\u002Fartists\u002Fneutral](public\u002Fassets\u002Fartists\u002Fneutral)\n\nBanner 图片命名：\n\n```text\ngaga-cancel.png\nolivia-dropdead.png\nariana-petal.png\n```\n\n艺人头像命名：\n\n```text\npublic\u002Fassets\u002Fartists\u002Fmean\u002F{artist-id}-mean.jpg\npublic\u002Fassets\u002Fartists\u002Fneutral\u002F{artist-id}-neutral.jpg\n```\n\n## RAG 流程\n\nRAG 不用于硬数据匹配。销量、followers、Grammy、AOTY 这类硬数据继续走结构化读取；黑称、粉丝语料、争议、荣誉、标题素材才进入语义检索。\n\n生成 chunks：\n\n```bash\nnpm run rag:chunks\n```\n\n生成 embedding：\n\n```bash\nnpm run rag:embed\n```\n\n本地检索：\n\n```bash\nnpm run rag:search -- \"尖姐和交姐谁赢\" -- --mode mean --artist lady-gaga\n```\n\n推送 Chroma：\n\n```bash\nnpm run rag:chroma\n```\n\n## AOTY Agent\n\n手动更新 AOTY 专辑级缓存：\n\n```bash\nnpm run agent:aoty:update\n```\n\n这个 Agent 会按 `data\u002Frag\u002Fsources\u002Fartist-sources.json` 的 AOTY 艺人主页执行 `plan -> tool -> execute -> validate -> write` 流程，并写入 `data\u002Frag\u002Fstructured\u002Faoty-albums.json`。如果 AOTY 返回 Cloudflare challenge，脚本会记录失败原因并保留旧缓存，不会清空已有数据。\n\n只更新单个艺人：\n\n```bash\nnpm run agent:aoty:update -- --artist taylor-swift\n```\n\n查询缓存里的艺人专辑结果：\n\n```bash\nnpm run agent:aoty:query -- --artist taylor-swift\n```\n\n使用本地 HTML 作为 fallback：\n\n```bash\nnpm run agent:aoty:update -- --source-dir data\u002Fagent-cache\u002Faoty-html\n```\n\n如果浏览器能打开 AOTY，但脚本直连被 Cloudflare 拦截，也可以把浏览器里复制出的可见文本保存为：\n\n```text\ndata\u002Fagent-cache\u002Faoty-browser-text\u002Ftaylor-swift.txt\n```\n\n然后运行：\n\n```bash\nnpm run agent:aoty:update -- --artist taylor-swift --browser-text-dir data\u002Fagent-cache\u002Faoty-browser-text\n```\n\n## 资产注意\n\n`public\u002Fassets\u002Fartists\u002Fsource` 是本地参考图目录，不建议上传公开仓库。公开仓库只需要提交生成后的 `mean` \u002F `neutral` 头像和 Banner 图。\n\nCloudflare 部署只需要：\n\n- `public\u002Fassets\u002Fbanners`\n- `public\u002Fassets\u002Fartists\u002Fmean`\n- `public\u002Fassets\u002Fartists\u002Fneutral`\n- 代码、JSON seed、文档\n\n## 文档\n\n- PRD：[docs\u002Fprd\u002Fartist-battle\u002FPRD-v0.md](docs\u002Fprd\u002Fartist-battle\u002FPRD-v0.md)\n- 页面规格：[docs\u002Fprd\u002Fartist-battle\u002FMVP-page-spec.md](docs\u002Fprd\u002Fartist-battle\u002FMVP-page-spec.md)\n- 技术方案：[docs\u002Fprd\u002Fartist-battle\u002FTECH-v0.md](docs\u002Fprd\u002Fartist-battle\u002FTECH-v0.md)\n- 视觉规范：[docs\u002Fprd\u002Fartist-battle\u002Ffrontend-style-v0.md](docs\u002Fprd\u002Fartist-battle\u002Ffrontend-style-v0.md)\n- 头像规范：[docs\u002Fassets\u002Fartist-avatar-guidelines.md](docs\u002Fassets\u002Fartist-avatar-guidelines.md)\n",2,"2026-06-11 04:05:09","CREATED_QUERY"]