1 line
52 KiB
JSON
1 line
52 KiB
JSON
{"repo": "aimfllys/studysolo", "files": {"docs/summaries/2026-03-26-ai-usage-billing-dashboard-implementation-summary.md": {"70344a86e1046454758aa5f6bee3a5a874e7ff0b": {"t": 1785596113.235884, "n": 8456, "h": "47239862a0a5906a", "c": "<!-- 编码:UTF-8 -->\n\n# 2026-03-26 AI 使用量、模型目录与计费体系升级总结\n\n## 1. 这次升级解决了什么\n\n这次不是单纯“多加几个图表”,而是把 StudySolo 当前 AI 调用、模型目录、价格体系、usage 账本、用户侧左面板、后台 AI 仪表盘和项目规范文档统一成了一套完整机制。\n\n本次升级后,系统具备了以下能力:\n\n- 使用真实 usage 账本记录 AI 请求与真实 provider 调用\n- 明确区分 `assistant` 和 `workflow` 两本账\n- 从 USD 试运行口径切换到正式 `CNY` 计费口径\n- 引入 `ai_model_families + ai_model_skus` 双层模型目录\n- 前端和后台统一从 catalog API 读取模型目录\n- 后台模型页可以直接管理平台级 SKU 元数据\n- 规范文档、命名、API 契约和新增模型 SOP 同步升级\n\n## 2. 本次确认的核心业务策略\n\n### 2.1 便宜模型\n\n统一策略:\n\n- 原生 API 优先\n- `routing_policy = native_first`\n\n适用方向:\n\n- DeepSeek 全系\n- 通义千问非 Max 系\n- 大多数 Doubao\n- GLM 4.5 到 4.7 的低价通道\n- Kimi 低价模型\n\n### 2.2 贵模型\n\n统一策略:\n\n- 聚合优先,再逐级回原生\n- `routing_policy = proxy_first`\n\n默认顺序:\n\n- `qiniu -> siliconflow -> native`\n\n### 2.3 工具模型\n\n统一策略:\n\n- 能力固定平台\n- `routing_policy = capability_fixed`\n\n当前明确规则:\n\n- OCR:智谱原生\n- Search:七牛云主通道,预留智谱扩量\n\n## 3. 数据模型升级\n\n### 3.1 新增模型目录表\n\n新增:\n\n- `public.ai_model_families`\n- `public.ai_model_skus`\n\n作用:\n\n- `ai_model_families` 表示逻辑模型族\n- `ai_model_skus` 表示平台级可调用且可计费的真实 SKU\n\n关键意义:\n\n- 同名模型跨平台不再混成一条价格记录\n- `provider` 与 `vendor` 分离\n- 真正支持多原生厂商 + 多聚合平台差异计费\n\n### 3.2 旧表状态\n\n旧表:\n\n- `public.ai_models`\n\n处理方式:\n\n- 继续保留一轮兼容期\n- 已被标记为 deprecated compatibility source\n- 新代码不再把它作为主目录表\n\n### 3.3 usage 表结构扩展\n\n扩展:\n\n- `public.ss_ai_usage_events`\n- `public.ss_ai_usage_minute`\n\n新增字段:\n\n- `sku_id`\n- `family_id`\n- `vendor`\n- `billing_channel`\n- `input_price_cny_per_million`\n- `output_price_cny_per_million`\n- `cost_amount_cny`\n- `total_cost_cny`\n\n### 3.4 分钟聚合主键升级\n\n`ss_ai_usage_minute` 新主键收口为:\n\n- `(minute_bucket, user_id, source_type, source_subtype, sku_id)`\n\n同时补了旧数据去重逻辑,避免历史 request 桶在切新主键时冲突。\n\n## 4. 迁移与 Supabase 云端状态\n\n### 4.1 本地迁移文件\n\n新增迁移:\n\n- [20260326162000_upgrade_ai_catalog_and_cny_billing.sql](/D:/project/Study_1037Solo/StudySolo/supabase/migrations/20260326162000_upgrade_ai_catalog_and_cny_billing.sql)\n\n该迁移完成:\n\n- 新建 `ai_model_families`\n- 新建 `ai_model_skus`\n- 扩展 usage 账本字段\n- 将分钟聚合切到新主键\n- 新建 / 重建 `fn_ss_ai_usage_minute_increment`\n- 预置首批 family 与 SKU 种子\n\n### 4.2 云端 Supabase 同步\n\n本次已通过 MCP 将该迁移成功应用到云端 Supabase 项目:\n\n- project id: `hofcaclztjazoytmckup`\n- migration name: `upgrade_ai_catalog_and_cny_billing`\n\n第一次云端执行失败的原因:\n\n- 旧 `ss_ai_usage_minute` 在切新主键时存在重复桶\n\n处理方式:\n\n- 在迁移中补充去重聚合逻辑\n- 重新执行后成功\n\n### 4.3 云端结果\n\n云端现在已经同步具备:\n\n- `ai_model_families`\n- `ai_model_skus`\n- 扩展后的 `ss_ai_usage_events`\n- 扩展后的 `ss_ai_usage_minute`\n\n说明:\n\n- 这不是只存在本地文件的计划状态\n- 云端数据库结构已经同步到位\n\n## 5. 后端改造\n\n### 5.1 配置分层\n\n重构:\n\n- [config.yaml](/D:/project/Study_1037Solo/StudySolo/backend/config.yaml)\n- [config_loader.py](/D:/project/Study_1037Solo/StudySolo/backend/app/core/config_loader.py)\n\n现在分层清晰为:\n\n- YAML 负责运行时路由策略\n- Supabase 负责模型目录与价格元数据\n- usage ledger 负责真实消耗记录\n\n### 5.2 YAML 新职责\n\n当前 YAML 重点保留:\n\n- `providers`\n- `task_routes`\n- `compatibility`\n- `engine`\n\n已经明确表达:\n\n- `native_first`\n- `proxy_first`\n- `capability_fixed`\n\n并支持旧环境变量兼容别名,例如:\n\n- `QINIU_AI_API_KEY | QINIU_API_KEY`\n- `COMPSHARE_API_KEY | YOUYUN_API_KEY`\n\n### 5.3 Catalog 服务\n\n新增:\n\n- [ai_catalog_service.py](/D:/project/Study_1037Solo/StudySolo/backend/app/services/ai_catalog_service.py)\n\n核心能力:\n\n- 从 Supabase 读取 family 与 SKU\n- 进程内缓存目录\n- 通过 `selected_model_key` 或旧字段解析真实 SKU\n- 提供 task route 对应 SKU 列表\n\n### 5.4 AI 路由器\n\n重构:\n\n- [ai_router.py](/D:/project/Study_1037Solo/StudySolo/backend/app/services/ai_router.py)\n\n现在逻辑是:\n\n- YAML 决定路由策略和候选链\n- catalog service 决定这一步到底用哪个平台级 SKU\n- usage ledger 写入真实平台、真实模型、真实价格快照\n\n### 5.5 usage 账本\n\n升级:\n\n- [usage_ledger.py](/D:/project/Study_1037Solo/StudySolo/backend/app/services/usage_ledger.py)\n- [usage_analytics.py](/D:/project/Study_1037Solo/StudySolo/backend/app/services/usage_analytics.py)\n- [usage.py](/D:/project/Study_1037Solo/StudySolo/backend/app/models/usage.py)\n\n当前已正式改为:\n\n- `CNY`\n- 每百万 Token 计价\n- 真实平台级 SKU 计费\n\n### 5.6 请求入口兼容\n\n升级:\n\n- [ai_chat.py](/D:/project/Study_1037Solo/StudySolo/backend/app/api/ai_chat.py)\n- [ai_chat_stream.py](/D:/project/Study_1037Solo/StudySolo/backend/app/api/ai_chat_stream.py)\n- [ai_chat.py](/D:/project/Study_1037Solo/StudySolo/backend/app/models/ai_chat.py)\n\n当前规则:\n\n- 新入口:`selected_model_key`\n- 兼容入口:`selected_platform + selected_model`\n\n同时:\n\n- premium 校验已从静态模型名列表改为按 catalog `required_tier` 判断\n\n### 5.7 新接口\n\n新增用户侧目录接口:\n\n- `GET /api/ai/models/catalog`\n\n文件:\n\n- [ai_catalog.py](/D:/project/Study_1037Solo/StudySolo/backend/app/api/ai_catalog.py)\n\n新增后台目录接口:\n\n- `GET /api/admin/models/catalog`\n- `PUT /api/admin/models/{sku_id}`\n\n文件:\n\n- [admin_models.py](/D:/project/Study_1037Solo/StudySolo/backend/app/api/admin_models.py)\n\n说明:\n\n- 后台只允许编辑目录元数据\n- 不允许直接改运行时 YAML 路由\n\n## 6. 前端改造\n\n### 6.1 模型目录来源统一\n\n新增:\n\n- [ai-catalog.service.ts](/D:/project/Study_1037Solo/StudySolo/frontend/src/services/ai-catalog.service.ts)\n- [ai-catalog.ts](/D:/project/Study_1037Solo/StudySolo/frontend/src/types/ai-catalog.ts)\n\n重构:\n\n- [ai-models.ts](/D:/project/Study_1037Solo/StudySolo/frontend/src/features/workflow/constants/ai-models.ts)\n\n现在前端模型来源原则:\n\n- 正式来源:catalog API\n- 本地常量:仅开发兜底\n\n### 6.2 用户侧 AI 选模\n\n重构:\n\n- [SidebarAIPanel.tsx](/D:/project/Study_1037Solo/StudySolo/frontend/src/components/layout/sidebar/SidebarAIPanel.tsx)\n- [ModelSelector.tsx](/D:/project/Study_1037Solo/StudySolo/frontend/src/components/layout/sidebar/ModelSelector.tsx)\n- [use-ai-chat-store.ts](/D:/project/Study_1037Solo/StudySolo/frontend/src/stores/use-ai-chat-store.ts)\n- [use-stream-chat.ts](/D:/project/Study_1037Solo/StudySolo/frontend/src/features/workflow/hooks/use-stream-chat.ts)\n\n改动点:\n\n- 模型选择器改为接收 catalog 返回的 SKU 列表\n- 发送请求时优先传 `selected_model_key`\n- 旧 `selected_platform + selected_model` 继续兼容提交\n\n### 6.3 用户侧左侧仪表盘\n\n重构:\n\n- [DashboardPanel.tsx](/D:/project/Study_1037Solo/StudySolo/frontend/src/components/layout/sidebar/DashboardPanel.tsx)\n- [usage.service.ts](/D:/project/Study_1037Solo/StudySolo/frontend/src/services/usage.service.ts)\n- [usage.ts](/D:/project/Study_1037Solo/StudySolo/frontend/src/types/usage.ts)\n\n当前状态:\n\n- 成本字段已切到 `CNY`\n- 显示个人 AI 使用镜像\n- 与后台使用同一套 usage 数据口径\n\n### 6.4 后台 AI 仪表盘\n\n重构:\n\n- [AdminDashboardPageView.tsx](/D:/project/Study_1037Solo/StudySolo/frontend/src/features/admin/dashboard/AdminDashboardPageView.tsx)\n- [DashboardKpiSection.tsx](/D:/project/Study_1037Solo/StudySolo/frontend/src/features/admin/dashboard/DashboardKpiSection.tsx)\n- [DashboardChartsSection.tsx](/D:/project/Study_1037Solo/StudySolo/frontend/src/features/admin/dashboard/DashboardChartsSection.tsx)\n- [DashboardActivityTable.tsx](/D:/project/Study_1037Solo/StudySolo/frontend/src/features/admin/dashboard/DashboardActivityTable.tsx)\n\n当前状态:\n\n- 成本字段改为 `CNY`\n- 展示 provider、vendor、billing_channel\n- 模型排行已按平台级 SKU 思路展示\n\n### 6.5 后台模型目录页\n\n重构:\n\n- [models/page.tsx](/D:/project/Study_1037Solo/StudySolo/frontend/src/app/(admin)/admin-analysis/models/page.tsx)\n\n当前页面能力:\n\n- 查看平台级模型 SKU 目录\n- 编辑展示名、tier、价格、可见性、用户可选开关、fallback-only 等元数据\n- 直接调用后台 catalog API 保存\n\n## 7. 规范文档同步\n\n本次同步更新:\n\n- [naming.md](/D:/project/Study_1037Solo/StudySolo/docs/项目规范与框架流程/项目规范/naming.md)\n- [api.md](/D:/project/Study_1037Solo/StudySolo/docs/项目规范与框架流程/项目规范/api.md)\n\n新增:\n\n- [项目AI调用及计费分析统一规范.md](/D:/project/Study_1037Solo/StudySolo/docs/项目规范与框架流程/项目规范/项目AI调用及计费分析统一规范.md)\n- [新增AI模型-SOP.md](/D:/project/Study_1037Solo/StudySolo/docs/项目规范与框架流程/功能流程/新增AI模型/新增AI模型-SOP.md)\n\n这些文档现在已经覆盖:\n\n- provider / vendor / family / sku 定义\n- CNY 计费字段\n- 新 catalog API\n- `selected_model_key` 主入口\n- 新增模型流程\n\n## 8. 测试与验证\n\n### 8.1 后端\n\n通过:\n\n- `backend\\\\.venv\\\\Scripts\\\\python.exe -m pytest backend\\\\tests\\\\test_usage_analytics_property.py`\n- `backend\\\\.venv\\\\Scripts\\\\python.exe -m compileall backend\\\\app`\n\n结果:\n\n- 3 个 usage analytics 测试全部通过\n- 后端模块编译通过\n\n### 8.2 前端\n\n通过:\n\n- `npx vitest --run src/__tests__/usage-service.property.test.ts src/__tests__/admin-service.property.test.ts`\n\n结果:\n\n- 7 个测试全部通过\n\n### 8.3 TypeScript 检查\n\n执行:\n\n- `npx tsc --noEmit`\n\n结果:\n\n- 本次改动新增的问题已清掉\n- 当前剩余 2 个错误为仓库内既有无关问题:\n - `src/__tests__/edge-connection-system.smoke.test.ts`\n - `src/features/admin/users/UserDetailPanels.tsx`\n\n说明:\n\n- 本次升级没有新增新的全量 TypeScript 错误\n\n## 9. 这次做完后,系统现在是什么状态\n\n截至 2026-03-26,这套体系已经从“usage 看板试运行版”升级为“平台级模型目录 + CNY 计费版”。\n\n现在已经具备:\n\n- YAML 路由策略中心\n- Supabase 模型目录中心\n- 真实 provider 使用账本\n- 平台级 SKU 成本分析\n- 用户侧 / 后台侧同步显示\n- 文档与 SOP 同步\n\n## 10. 仍未彻底完成的部分\n\n### 10.1 价格完整度\n\n当前仍有部分模型价格待核验,因此这些 SKU 可能表现为:\n\n- 有调用\n- 有 token\n- 成本暂时为 `0 CNY`\n\n典型待补:\n\n- 部分 Moonshot\n- 部分 GLM\n- 部分 Doubao 映射\n- 部分 SiliconFlow / 搜索扩量价格\n\n### 10.2 人工 UI 级联调\n\n建议后续补一次真实操作链路验收:\n\n1. 用户侧实际选一个 catalog 模型发起聊天\n2. 触发一次 generate-workflow\n3. 执行一次 workflow\n4. 观察左侧仪表盘与后台仪表盘是否按轮询周期同步刷新\n\n## 11. 一句话结论\n\n这次升级已经把 StudySolo 的 AI 配置、模型目录、平台级计费、usage 分析、后台模型管理和项目规范收口成一套统一体系;剩余工作主要是补价格元数据和做最后一层真实页面联调,而不是再重做底层架构。\n"}}, "docs/Plans/daily_plan/API/README.md": {"70344a86e1046454758aa5f6bee3a5a874e7ff0b": {"t": 1785596113.7349424, "n": 12815, "h": "a7b17299618389f8", "c": "# StudySolo API 统一路由规划 · 权威索引\n\n> 📅 创建日期:2026-02-26 \n> 🔄 最新更新:2026-02-26 \n> 📌 所属模块:API 调用与路由 \n> 🎯 定位:**项目内所有 AI API 调用相关设计的唯一权威汇总入口** \n> ⚠️ 本文档具有最终决定权。其余散落文档中如有与本文冲突的旧版 API 描述,均以本文为准。\n\n---\n\n## 📑 目录\n\n- [一、架构演进:从旧到新](#一架构演进从旧到新)\n- [二、当前权威架构:八平台双层分治](#二当前权威架构八平台双层分治)\n- [三、十路任务分流总矩阵](#三十路任务分流总矩阵)\n- [四、节点到模型到平台的完整映射](#四节点到模型到平台的完整映射)\n- [五、YAML 配置中心化方案](#五yaml-配置中心化方案)\n- [六、容灾降级全景图](#六容灾降级全景图)\n- [七、散落文档冲突消解矩阵](#七散落文档冲突消解矩阵)\n- [八、后续 ACTION ITEMS](#八后续-action-items)\n\n---\n\n## 一、架构演进:从旧到新\n\n本项目 API 层经历了三次大版本迭代:\n\n| 版本 | 核心策略 | 平台数 | 决策文档 | 状态 |\n| :--- | :--- | :---: | :--- | :---: |\n| **v0** | 双模型路由(豆包 + 千问) | 2 | `项目深度功能规划.md` §5.1 | ❌ 已废弃 |\n| **v1** | 四平台线性优先级(七牛>优云>火山>百炼) | 4 | `多平台AI-API统一路由与容灾规划.md` 旧版 | ❌ 已废弃 |\n| **v2 ✅** | **八平台双层分治 + 十路任务分流** | 8 | `多平台AI-API统一路由与容灾规划.md` v2 | ✅ **当前生效** |\n\n### 每次迭代解决了什么问题\n\n| 迭代 | 解决的核心问题 |\n| :--- | :--- |\n| v0 → v1 | 增加容灾维度,从单平台扩展到四平台线性降级链 |\n| v1 → v2 | 引入「原生优先」原则,区分格式严格/推理/长文/搜索/向量化等任务类型,按任务分流而非线性排队 |\n\n---\n\n## 二、当前权威架构:八平台双层分治\n\n### 2.1 三层架构图\n\n```\n ┌─────────────────────────────────────────┐\n │ StudySolo AI 路由引擎 v2 │\n │ (ai_router.py · 任务分类驱动) │\n └──────────────┬──────────────────────────┘\n │\n ┌──────────────────────────┼──────────────────────────┐\n │ │ │\n═══════════▼══════════════ ═══════════▼══════════════ ═══════════▼══════════════\n║ 🏠 第一层:原生直连层 ║ ║ 🌐 第二层:代理聚合层 ║ ║ 🔧 第三层:增值服务层 ║\n║ (纯净·满血·低价) ║ ║ (海外·聚合·灾备) ║ ║ (独占功能·无替代) ║\n═══════════════════════════ ═══════════════════════════ ═══════════════════════════\n```\n\n### 2.2 八大平台身份证\n\n#### 原生直连(5 家) — 工作流默认使用\n\n| # | 平台 | Base URL | 环境变量 | 核心角色 |\n| :--- | :--- | :--- | :--- | :--- |\n| 1 | **阿里云百炼** | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` | Qwen 原生宿主 + 向量化/OCR/Rerank 全栈 |\n| 2 | **DeepSeek 官方** | `https://api.deepseek.com/v1` | `DEEPSEEK_API_KEY` | 推理之王 + 缓存命中极低价 |\n| 3 | **月之暗面 (Moonshot)** | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` | 原生Kimi |\n| 4 | **火山引擎** | `https://ark.cn-beijing.volces.com/api/v3` | `VOLCENGINE_API_KEY` | 原生满血豆包模型 |\n| 5 | **智谱AI** | `https://open.bigmodel.cn/api/paas/v4` | `ZHIPU_API_KEY` | 原生智谱模型、深度联网搜索 + GLM-OCR |\n\n#### 代理聚合(3 家) — 灾备 / 海外模型 / 独占增值\n\n| # | 平台 | Base URL | 环境变量 | 核心角色 |\n| :--- | :--- | :--- | :--- | :--- |\n| 6 | **七牛云 AIGC** | `https://api.qnaigc.com/v1` | `QINIU_AI_API_KEY` | 百度搜索 API + 图片/视频/TTS 独占 |\n| 7 | **优云智算** | `https://api.compshare.cn/v1` | `COMPSHARE_API_KEY` | 海外旗舰模型独占 (GPT-5.x/Claude-4.x) |\n| 8 | **硅基流动** | `https://api.siliconflow.cn/v1` | `SILICONFLOW_API_KEY` | 开源模型加速池 / DS/Qwen 分流灾备 |\n\n### 2.3 两条铁律\n\n> **铁律 1:** 工作流中所有节点默认使用各家 AI 的原生服务。聚合平台仅用于海外模型调用和灾备降级。\n>\n> **铁律 2:** 要求格式严格(JSON / 结构化输出)的任务,**绝不使用聚合平台**。\n\n---\n\n## 三、十路任务分流总矩阵\n\n| 路由链 | 任务类型 | 首选平台 | 首选模型 | 降级路径 |\n| :--- | :--- | :--- | :--- | :--- |\n| **A** | 格式严格 (JSON输出) | 百炼 (原生) | `qwen3-turbo` | DeepSeek → 火山 |\n| **B** | 深度推理 (CoT) | DeepSeek (原生) | `deepseek-r1` | 百炼 Max → 火山 → 七牛 |\n| **C** | 超长文本 (10K-200K) | Moonshot (原生) | `kimi-k2.5` | 百炼 Long → 七牛 |\n| **D** | 简单快速 (≤500T) | 百炼 (原生) | `qwen-turbo` | 火山 mini → 七牛 |\n| **E** | 海外旗舰 (Pro用户) | 优云智算 (代理) | `gpt-5.1` | 七牛 GPT-4o |\n| **F** | 联网搜索 (三级分流) | 见下方详表 | — | 逐级降级 |\n| **G** | 多模态向量 (RAG) | 百炼 (原生) | `qwen3-vl-embedding` | `tongyi-vision-flash` |\n| **H** | 文本向量 + Rerank | 百炼 (原生) | `text-embedding-v4` / `qwen3-vl-rerank` | 无替代 |\n| **I** | 专业 OCR | 智谱 (原生) | `glm-ocr` | 百炼 `qwen-vl-ocr` → 七牛 |\n| **J** | 其他增值服务 | 七牛云 (独占) | 图片/视频/TTS | 无替代 |\n\n### 联网搜索三级分流详表 (路由链 F)\n\n| 等级 | 场景 | 平台 | 服务/模型 |\n| :--- | :--- | :--- | :--- |\n| **深度搜索** | 工作流调研节点 `search_depth: deep` | 智谱AI (原生) | Web Search API + Search Agent |\n| **一般搜索** | 工作流普通节点 `search_depth: general` | 七牛云 (代理) | Baidu Search API |\n| **普通搜索** | 单独 AI 对话 (非工作流) 默认 | 百炼 (原生) | `qwen3.5-flash` + `enable_search: true` |\n\n### RAG 管线完整链路 (路由链 G + H)\n\n```\n用户查询\n │\n ├─ 包含图片/视频 ──→ 多模态向量化 (qwen3-vl-embedding) ──→ pgvector 检索\n │\n └─ 纯文本 ──→ 文本向量化 (text-embedding-v4) ──→ pgvector 检索\n │\n 取 Top-K 结果\n │\n 重排序 (qwen3-vl-rerank)\n │\n 取 Top-N 精排结果\n │\n 注入 System Prompt\n │\n LLM 生成最终回答\n```\n\n---\n\n## 四、节点到模型到平台的完整映射\n\n> 此表为 `ai_router.py` 的实现蓝图。每个工作流节点在执行时,路由器根据 `node.type` 查此表确定调用链。\n\n### 4.1 工作流核心节点\n\n| 节点 ID | 中文名 | 路由链 | 首选平台 | 首选模型 | Token 消耗 |\n| :--- | :--- | :--- | :--- | :--- | :--- |\n| `ai_analyzer` | 需求分析器 | A 格式严格 | 百炼 | `qwen3-turbo` | ~500-1K |\n| `ai_planner` | 工作流编排器 | A 格式严格 | 百炼 | `qwen3-turbo` | ~1K-2K |\n| `flashcard` | 闪卡生成 | A 格式严格 | 百炼 | `qwen-turbo` | ~300-800 |\n| `outline_gen` | 大纲生成 | B 深度推理 | DeepSeek | `deepseek-r1` | ~1K-3K |\n| `content_extract` | 知识提炼 | B 深度推理 | DeepSeek | `deepseek-r1` | ~2K-5K |\n| `summary` | 总结归纳 | B 深度推理 | DeepSeek | `deepseek-r1` | ~1K-3K |\n| `merge_polish` | 润色合并 | C 超长文本 | Moonshot | `kimi-k2.5` | ~3K-8K |\n| `intent_classify` | 意图分类 | D 简单快速 | 百炼 | `qwen-turbo` | ~100-300 |\n\n### 4.2 搜索 / RAG / OCR / 增值节点\n\n| 节点 ID | 路由链 | 首选平台 | 首选模型/服务 |\n| :--- | :--- | :--- | :--- |\n| `deep_search` | F 深度搜索 | 智谱AI | Web Search API |\n| `general_search` | F 一般搜索 | 七牛云 | Baidu Search API |\n| `chat_search` | F 普通搜索 | 百炼 | `qwen3.5-flash` + enable_search |\n| `mm_embed` | G 多模态向量 | 百炼 | `qwen3-vl-embedding` |\n| `text_embed` | H 文本向量 | 百炼 | `text-embedding-v4` |\n| `rerank` | H 重排序 | 百炼 | `qwen3-vl-rerank` |\n| `document_ocr` | I 专业OCR | 智谱 | `glm-ocr` |\n| `img_gen` | J 增值 | 七牛云 | Kling |\n| `video_gen` | J 增值 | 七牛云 | Kling |\n| `tts` | J 增值 | 七牛云 | TTS |\n\n### 4.3 与旧版节点分析的关键差异\n\n> 来源:`daily_plan/core/节点分析.md` §6「节点与模型路由映射」\n\n| 节点 | 旧版绑定模型 | 新版绑定模型 | 变更原因 |\n| :--- | :--- | :--- | :--- |\n| `ai_analyzer` | 豆包 2.0-pro (火山免费池) | **百炼 `qwen3-turbo`** | 格式严格任务必须走原生,避免聚合平台污染 JSON |\n| `ai_planner` | qwen3-turbo (百炼) | **百炼 `qwen3-turbo`** | 不变,但明确走路由链 A |\n| `outline_gen` | qwen3-turbo (百炼) | **DeepSeek `deepseek-r1`** | 大纲生成属深度推理,需要 CoT 慢思考 |\n| `content_extract` | qwen3-turbo (百炼) | **DeepSeek `deepseek-r1`** | 同上 |\n| `flashcard` | 豆包 2.0-pro (火山免费池) | **百炼 `qwen-turbo`** | 闪卡输出为严格 JSON 数组,需原生平台保障 |\n| `merge_polish` | qwen3-turbo (百炼) | **Moonshot `kimi-k2.5`** | 超长文本场景,需 256K 上下文窗口 |\n\n---\n\n## 五、YAML 配置中心化方案\n\n> 来源:`daily_plan/core/02-yaml-config-and-markdown-rendering.md`\n\n### 5.1 核心原则\n\n所有模型配置、节点→模型映射、容灾策略均集中在 `config.yaml` 中管理。代码侧通过 `config_loader.py` 加载配置,`ai_router.py` 零硬编码调用。\n\n### 5.2 配置文件结构(关键片段)\n\n```yaml\n# config.yaml 顶层结构\nplatform_tiers:\n native:\n - id: dashscope\n native_models: [qwen-turbo, qwen3-turbo, ..., text-embedding-v4, qwen3-vl-embedding, qwen-vl-ocr]\n - id: deepseek\n native_models: [deepseek-chat, deepseek-reasoner]\n - id: moonshot\n native_models: [kimi-k2.5, moonshot-v1-128k]\n - id: volcengine\n native_models: [doubao-2.0-pro, doubao-seed-2.0-mini]\n - id: zhipu\n native_models: [glm-4, glm-5, web-search-pro, glm-ocr]\n proxy:\n - id: qiniu\n - id: compshare\n - id: siliconflow\n\ntask_routing:\n strict_format: { chain: [dashscope → deepseek → volcengine] }\n reasoning: { chain: [deepseek → dashscope → volcengine → qiniu] }\n long_context: { chain: [moonshot → dashscope → qiniu] }\n simple_fast: { chain: [dashscope → volcengine → qiniu] }\n deep_search: { chain: [zhipu → qiniu → dashscope(enable_search)] }\n multimodal_embed: { chain: [dashscope(qwen3-vl-embedding) → dashscope(tongyi-flash)] }\n text_embedding: { chain: [dashscope(text-embedding-v4)] }\n text_rerank: { chain: [dashscope(qwen3-vl-rerank)] }\n document_ocr: { chain: [zhipu(glm-ocr) → dashscope(qwen-vl-ocr) → qiniu] }\n # ...\n```\n\n### 5.3 代码加载链路\n\n```\nconfig.yaml ──read──→ config_loader.py ──inject──→ ai_router.py\n │\n resolve $ENV_VARS\n │\n lru_cache() 应用生命周期缓存\n```\n\n> 完整 YAML 结构和 Python 代码示例见 → [`daily_plan/core/02-yaml-config-and-markdown-rendering.md`](../core/02-yaml-config-and-markdown-rendering.md)\n\n---\n\n## 六、容灾降级全景图\n\n### 6.1 十路降级总表\n\n| 路由链 | 正常通道 | Level 1 | Level 2 | Level 3 极端 |\n| :--- | :--- | :--- | :--- | :--- |\n| **A. 格式严格** | 百炼 `qwen3-turbo` | DeepSeek `deepseek-v3` | 火山 `doubao-2.0-pro` | 友好错误页 |\n| **B. 深度推理** | DeepSeek `deepseek-r1` | 百炼 `qwen3-max` | 火山 `deepseek-r1` → 七牛 | 友好错误页 |\n| **C. 超长文本** | Moonshot `kimi-k2.5` | 百炼 `qwen-long` | 七牛 `kimi` | 友好错误页 |\n| **D. 简单快速** | 百炼 `qwen-turbo` | 火山 `doubao-mini` | 七牛 `qwen-turbo` | 友好错误页 |\n| **E. 海外旗舰** | 优云 `gpt-5.1` | 七牛 `gpt-4o` | — | \"高端模型暂不可用\" |\n| **F. 联网搜索** | 智谱 Web Search | 七牛 百度搜索 | 百炼 enable_search | 禁用联网搜索 |\n| **G. 多模态向量** | 百炼 `qwen3-vl-embedding` | 百炼 `tongyi-vision-flash` | — | \"向量化暂不可用\" |\n| **H. 文本向量** | 百炼 `text-embedding-v4` | — | — | \"检索暂不可用\" |\n| **I. 专业 OCR** | 智谱 `glm-ocr` | 百炼 `qwen-vl-ocr` | 七牛 OCR | \"文档解析失败\" |\n| **J. 增值服务** | 七牛云独占 | — | — | \"功能暂时不可用\" |\n\n### 6.2 跨链路紧急降级\n\n```\n格式严格链全挂 → 借用 深度推理链的 DeepSeek-R1\n深度推理链全挂 → 借用 格式严格链的 Qwen3-Turbo\n超长文本链全挂 → 借用 深度推理链的 DeepSeek-R1 (128K)\n简单快速链全挂 → 借用 格式严格链的 Qwen3-Turbo\n```\n\n---\n\n## 七、散落文档冲突消解矩阵\n\n以下表格列出了项目中所有涉及 API 调用描述的文档,以及它们与 v2 架构的冲突点和处置方式。\n\n| 散落位置 | 具体内容 | 与 v2 冲突点 | 处置 |\n| :--- | :--- | :--- | :--- |\n| `global/项目深度功能规划.md` §5.1 | \"双模型路由:豆包 + 千问\" | ❌ 已过时,实际为八平台 | 以本文为准 |\n| `global/项目深度功能规划.md` §5.5 | \"四平台优先级路由\" | ❌ 已过时,旧版线性排序 | 以本文为准 |\n| `global/PROJECT_PLAN.md` §2.1 | 架构图中仅列\"火山 + 百炼\" | ❌ 缺少 5 个原生平台 | 以本文为准 |\n| `技术指导/AI_API参考资料/README.md` | \"供应商按路由优先级排列:七牛>优云>火山>百炼\" | ❌ 已过时,v2 按任务类型分流 | 以本文为准 |\n| `技术指导/AI_API参考资料/01-项目规划映射与选型.md` | \"四路模型供应商均走 OpenAI 兼容格式\" | ⚠️ 部分过时,实际为八路 | 以本文为准,但 OpenAI SDK 统一调用仍有效 |\n| `daily_plan/core/节点分析.md` §6 | \"ai_analyzer→豆包,outline→qwen\" | ⚠️ 模型绑定已更新 | 参见本文 §4.3 差异表 |\n| `daily_plan/core/工作流AI交互规划.md` §2.2 | \"ai_analyzer 由豆包 2.0-pro 完成\" | ⚠️ 已改为百炼 qwen3-turbo | 以本文为准 |\n| `daily_plan/core/02-yaml-config.md` | config.yaml 仅含豆包+千问两模型 | ⚠️ YAML 结构需升级为完整 v2 版 | 执行时以本文 §5.2 为准 |\n| `技术指导/核心工作流AI交互/04-RAG.md` | \"rerank: 百炼/方舟可选\" | ⚠️ 已确定为百炼 `qwen3-vl-rerank` | 以本文为准 |\n| `技术指导/混合RAG/02-三层漏斗.md` | 未指定具体 embedding 模型 | ⚠️ 已确定为 `text-embedding-v4` | 以本文为准 |\n\n> **处置原则**:上述旧文档暂不修改(保留历史参考价值),但所有开发实现以本文为唯一依据。\n\n---\n\n## 八、后续 ACTION ITEMS\n\n### 8.1 代码实现清单\n\n| 优先级 | 任务 | 涉及文件 | 备注 |\n| :--- | :--- | :--- | :--- |\n| **P0** | `ai_router.py` 重构为按任务类型查路由链 | `backend/app/services/ai_router.py` | 从线性遍历 → 任务分流 |\n| **P0** | `config.yaml` 升级为 v2 完整版 | `config.yaml` | 含八平台定义 + 十路路由 |\n| **P0** | `config_loader.py` 增强(支持 `params` 字段) | `backend/app/core/config_loader.py` | 搜索链需透传 `enable_search` |\n| **P1** | 智谱 Web Search API 适配 | `backend/app/services/search/` | Base URL 为 `/v4` 非 `/v1` |\n| **P1** | 百炼 Embedding/Rerank 适配 | `backend/app/services/rag/` | 非 Chat Completions 接口 |\n| **P1** | 智谱 GLM-OCR + 百炼 Qwen-VL-OCR 适配 | `backend/app/services/ocr/` | 双引擎 OCR |\n| **P2** | DeepSeek 超时降级(8s 硬切百炼) | `ai_router.py` | 高峰期排队问题 |\n| **P2** | 硅基流动作为 DS/Qwen 分流池接入 | `config.yaml` | 仅灾备,不作首选 |\n\n### 8.2 环境变量 Checklist\n\n```env\n# === 原生直连平台(5 家) ===\nDASHSCOPE_API_KEY= # 阿里云百炼 — https://bailian.console.aliyun.com\nDEEPSEEK_API_KEY= # DeepSeek官方 — https://platform.deepseek.com\nMOONSHOT_API_KEY= # 月之暗面Kimi — https://platform.moonshot.cn\nVOLCENGINE_API_KEY= # 火山引擎 — https://console.volcengine.com/ark\nZHIPU_API_KEY= # 智谱AI — https://open.bigmodel.cn\n\n# === 代理聚合平台(3 家) ===\nQINIU_AI_API_KEY= # 七牛云AIGC — https://portal.qiniu.com\nCOMPSHARE_API_KEY= # 优云智算 — https://www.compshare.cn\nSILICONFLOW_API_KEY= # 硅基流动 — https://cloud.siliconflow.cn\n```\n\n---\n\n## 📎 关联文档索引\n\n| 类别 | 文档路径 | 说明 |\n| :--- | :--- | :--- |\n| **全局规划 (权威)** | [`global/多平台AI-API统一路由与容灾规划.md`](../../global/多平台AI-API统一路由与容灾规划.md) | 完整版八平台配置 + YAML + 节点映射 |\n| **核心节点设计** | [`core/节点分析.md`](../core/节点分析.md) | 节点 JSON Schema + 状态机(模型绑定以本文为准) |\n| **工作流交互** | [`core/工作流AI交互规划.md`](../core/工作流AI交互规划.md) | 付费体系 + RAG + 明暗线(模型选用以本文为准) |\n| **YAML 配置** | [`core/02-yaml-config-and-markdown-rendering.md`](../core/02-yaml-config-and-markdown-rendering.md) | 配置加载器代码 + Markdown 渲染(YAML 结构以本文为准) |\n| **技术参考** | [`技术指导/AI_API参考资料/`](../../../技术指导/AI_API参考资料/) | 各平台接入指南(优先级排序已过时) |\n| **深度技术指导** | [`技术指导/核心工作流AI交互深度技术指导/`](../../../技术指导/核心工作流AI交互深度技术指导/) | 结构化输出/流式协议/RAG 检索策略 |\n| **混合 RAG** | [`技术指导/混合RAG知识库技术指导/`](../../../技术指导/混合RAG知识库技术指导/) | 三层漏斗 + pgvector + 缓存优化 |\n\n---\n\n> **一句话总结**:**原生主战、代理辅助、十路分流、按任务分治、每条链路都有降级兜底。本文档是所有 API 调用设计的唯一权威入口。**\n"}}, "backend/config.yaml": {"70344a86e1046454758aa5f6bee3a5a874e7ff0b": {"t": 1785596114.5930274, "n": 6045, "h": "012a2c80b39af04d", "c": "# StudySolo AI 运行时配置中心\n# 说明:\n# 1. YAML 只负责运行时路由策略,不再承担模型目录与价格中心职责。\n# 2. 模型目录、价格、可见性、tier gating 统一由 Supabase ai_model_families / ai_model_skus 维护。\n# 3. $ENV_A|ENV_B 表示兼容旧环境变量别名,config_loader.py 会按顺序解析。\n\nproviders:\n dashscope:\n display_name: \"阿里云百炼\"\n role: \"native\"\n base_url: \"$DASHSCOPE_BASE_URL\"\n api_key: \"$DASHSCOPE_API_KEY\"\n\n deepseek:\n display_name: \"DeepSeek 官方\"\n role: \"native\"\n base_url: \"$DEEPSEEK_BASE_URL\"\n api_key: \"$DEEPSEEK_API_KEY\"\n\n moonshot:\n display_name: \"月之暗面\"\n role: \"native\"\n base_url: \"$MOONSHOT_BASE_URL\"\n api_key: \"$MOONSHOT_API_KEY\"\n\n volcengine:\n display_name: \"火山引擎\"\n role: \"native\"\n base_url: \"$VOLCENGINE_BASE_URL\"\n api_key: \"$VOLCENGINE_API_KEY\"\n\n zhipu:\n display_name: \"智谱 AI\"\n role: \"native\"\n base_url: \"$ZHIPU_BASE_URL\"\n api_key: \"$ZHIPU_API_KEY\"\n\n qiniu:\n display_name: \"七牛云\"\n role: \"proxy\"\n base_url: \"$QINIU_BASE_URL\"\n api_key: \"$QINIU_AI_API_KEY|QINIU_API_KEY\"\n\n siliconflow:\n display_name: \"硅基流动\"\n role: \"proxy\"\n base_url: \"$SILICONFLOW_BASE_URL\"\n api_key: \"$SILICONFLOW_API_KEY\"\n\n compshare:\n display_name: \"优云智算\"\n role: \"proxy\"\n base_url: \"$COMPSHARE_BASE_URL|YOUYUN_BASE_URL\"\n api_key: \"$COMPSHARE_API_KEY|YOUYUN_API_KEY\"\n\ntask_routes:\n trigger_input:\n routing_policy: \"native_first\"\n sku_ids:\n - \"sku_dashscope_qwen_turbo_native\"\n - \"sku_deepseek_chat_native\"\n - \"sku_volcengine_doubao_pro_32k_native\"\n\n ai_analyzer:\n routing_policy: \"native_first\"\n sku_ids:\n - \"sku_dashscope_qwen_turbo_native\"\n - \"sku_deepseek_chat_native\"\n - \"sku_volcengine_doubao_pro_32k_native\"\n\n ai_planner:\n routing_policy: \"native_first\"\n sku_ids:\n - \"sku_dashscope_qwen_turbo_native\"\n - \"sku_deepseek_chat_native\"\n - \"sku_volcengine_doubao_pro_32k_native\"\n\n flashcard:\n routing_policy: \"native_first\"\n sku_ids:\n - \"sku_dashscope_qwen_turbo_native\"\n - \"sku_deepseek_chat_native\"\n - \"sku_volcengine_doubao_pro_32k_native\"\n\n quiz_gen:\n routing_policy: \"native_first\"\n sku_ids:\n - \"sku_dashscope_qwen_turbo_native\"\n - \"sku_deepseek_chat_native\"\n - \"sku_volcengine_doubao_pro_32k_native\"\n\n logic_switch:\n routing_policy: \"native_first\"\n sku_ids:\n - \"sku_dashscope_qwen_turbo_native\"\n - \"sku_deepseek_chat_native\"\n\n outline_gen:\n routing_policy: \"native_first\"\n sku_ids:\n - \"sku_deepseek_reasoner_native\"\n - \"sku_dashscope_qwen_plus_native\"\n - \"sku_volcengine_doubao_pro_256k_native\"\n\n content_extract:\n routing_policy: \"native_first\"\n sku_ids:\n - \"sku_deepseek_reasoner_native\"\n - \"sku_dashscope_qwen_plus_native\"\n - \"sku_volcengine_doubao_pro_256k_native\"\n\n summary:\n routing_policy: \"native_first\"\n sku_ids:\n - \"sku_deepseek_reasoner_native\"\n - \"sku_dashscope_qwen_plus_native\"\n - \"sku_volcengine_doubao_pro_256k_native\"\n\n merge_polish:\n routing_policy: \"proxy_first\"\n sku_ids:\n - \"sku_qiniu_kimi_k2_5_proxy\"\n - \"sku_moonshot_v1_128k_native\"\n\n compare:\n routing_policy: \"native_first\"\n sku_ids:\n - \"sku_deepseek_reasoner_native\"\n - \"sku_dashscope_qwen_plus_native\"\n\n chat_response:\n routing_policy: \"native_first\"\n sku_ids:\n - \"sku_deepseek_reasoner_native\"\n - \"sku_dashscope_qwen_plus_native\"\n - \"sku_volcengine_doubao_pro_256k_native\"\n\n premium_chat:\n routing_policy: \"proxy_first\"\n sku_ids:\n - \"sku_qiniu_qwen3_max_proxy\"\n - \"sku_siliconflow_qwen_72b_proxy\"\n - \"sku_dashscope_qwen_max_native\"\n\n search:\n routing_policy: \"capability_fixed\"\n sku_ids:\n - \"sku_qiniu_search_primary\"\n - \"sku_zhipu_search_expansion\"\n\n ocr:\n routing_policy: \"capability_fixed\"\n sku_ids:\n - \"sku_zhipu_glm_ocr_native\"\n\ncompatibility:\n provider_aliases:\n youyun: \"compshare\"\n\nengine:\n timeout_ms: 30000\n max_retries: 3\n max_nodes_per_workflow: 12\n json_validation_retries: 3\n\n# ============================================================\n# AI 对话面板精选模型路由(轨道 A)\n# 设计原则:\n# - sku_ids 数组即降级链:index 0 = 首选,index 1 = 降级\n# - 只有 1 个 sku_id = 无降级,挂了直接报错\n# - is_recommended = true 则前端渲染 ⭐ 推荐图标\n# - required_tier 决定前端置灰 + 后端拦截\n# ============================================================\nchat_models:\n - key: \"deepseek_r1\"\n display_name: \"DeepSeek R1\"\n vendor: \"deepseek\"\n required_tier: \"free\"\n sort_order: 1\n is_recommended: false\n sku_ids:\n - \"sku_deepseek_reasoner_native\"\n\n - key: \"qwen35_flash\"\n display_name: \"Qwen3.5-Flash\"\n vendor: \"qwen\"\n required_tier: \"free\"\n sort_order: 2\n is_recommended: false\n sku_ids:\n - \"sku_dashscope_qwen35_flash_native\"\n\n - key: \"qwen3_max\"\n display_name: \"Qwen3-Max\"\n vendor: \"qwen\"\n required_tier: \"pro\"\n sort_order: 3\n is_recommended: false\n sku_ids:\n - \"sku_qiniu_qwen3_max_proxy\" # 首选:七牛云代理\n - \"sku_dashscope_qwen_max_native\" # 降级:百炼官网\n\n - key: \"glm45\"\n display_name: \"GLM-4.5\"\n vendor: \"zhipu\"\n required_tier: \"free\"\n sort_order: 4\n is_recommended: false\n sku_ids:\n - \"sku_zhipu_glm_45_native\"\n\n - key: \"glm47\"\n display_name: \"GLM-4.7\"\n vendor: \"zhipu\"\n required_tier: \"pro\"\n sort_order: 5\n is_recommended: true # ⭐ 推荐图标\n sku_ids:\n - \"sku_zhipu_glm_47_native\"\n\n - key: \"doubao_seed\"\n display_name: \"DouBao-Seed2.0\"\n vendor: \"doubao\"\n required_tier: \"pro\"\n sort_order: 6\n is_recommended: false\n sku_ids:\n - \"sku_qiniu_doubao_seed_lite_proxy\" # 首选:七牛云代理\n - \"sku_volcengine_doubao_seed_native\" # 降级:火山引擎官网\n\n - key: \"kimi_k2\"\n display_name: \"Kimi-K2\"\n vendor: \"moonshot\"\n required_tier: \"pro\"\n sort_order: 7\n is_recommended: false\n sku_ids:\n - \"sku_moonshot_kimi_k2_native\"\n\n - key: \"gpt_oss_120b\"\n display_name: \"GPT-OSS-120B\"\n vendor: \"openai_oss\"\n required_tier: \"pro\"\n sort_order: 8\n is_recommended: false\n sku_ids:\n - \"sku_qiniu_gpt_oss_120b_proxy\"\n\n"}}, "backend/.env.example": {"70344a86e1046454758aa5f6bee3a5a874e7ff0b": {"t": 1785746738.8077087, "n": 2114, "h": "73f806644e5ee03a", "c": "# ============================================\n# StudySolo Backend - Environment Variables Template\n# ============================================\n# Copy this file to .env and fill in real values\n# cp .env.example .env\n# ============================================\n\n# Server\nPORT=2038\nENVIRONMENT=development\n\n# Supabase Access Token (for MCP/CLI tools)\n# https://supabase.com/dashboard/account/tokens\nSUPABASE_ACCESS_TOKEN=sbp_xxx\n\n# Supabase Project Config\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_SERVICE_ROLE_KEY=eyJxxx\n\n# GitHub Personal Access Token\nGITHUB_PERSONAL_ACCESS_TOKEN=github_pat_xxx\n\n# ============================================\n# AI Platform API Keys & Base URLs\n# ============================================\n\n# 火山引擎 (Volcengine)\nVOLCENGINE_API_KEY=xxx\nVOLCENGINE_BASE_URL=https://ark.cn-beijing.volces.com/api/v3\n\n# 阿里云百炼 (DashScope)\nDASHSCOPE_API_KEY=xxx\nDASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1\n\n# DeepSeek\nDEEPSEEK_API_KEY=xxx\nDEEPSEEK_BASE_URL=https://api.deepseek.com/v1\n\n# 月之暗面 (Moonshot)\nMOONSHOT_API_KEY=xxx\nMOONSHOT_BASE_URL=https://api.moonshot.cn/v1\n\n# 智谱AI (Zhipu)\nZHIPU_API_KEY=xxx\nZHIPU_BASE_URL=https://open.bigmodel.cn/api/paas/v4\n\n# 七牛云 (Qiniu)\nQINIU_API_KEY=xxx\nQINIU_BASE_URL=xxx\n\n# 优云智算 (YouYun)\nYOUYUN_API_KEY=xxx\nYOUYUN_BASE_URL=xxx\n\n# 硅基流动 (SiliconFlow)\nSILICONFLOW_API_KEY=xxx\nSILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n\n# ============================================\n# Security\n# ============================================\nJWT_SECRET=change-this-to-a-secure-random-string\nCAPTCHA_SECRET=这里放一串强随机字符串\nCORS_ORIGIN=http://localhost:2037\n\n# ============================================\n# Email Service (Aliyun DirectMail)\n# 发件地址:accounts@email.1037solo.com(与 Platform 共用)\n# ============================================\nSMTP_HOST=smtpdm.aliyun.com\nSMTP_PORT=80\nSMTP_USER=xxx\nSMTP_PASS=xxx\n\n# ============================================\n# Agent Gateway - Agent API Keys\n# Gateway 调用子后端 Agent 时的认证凭证\n# 值需与对应 Agent 的 AGENT_API_KEY 一致\n# ============================================\nAGENT_CODE_REVIEW_KEY=code-review-secret\n"}, "8476ba0d6412426da783337995b659b232d91372": {"t": 1785767407.8710644, "n": 2114, "h": "73f806644e5ee03a", "c": "# ============================================\n# StudySolo Backend - Environment Variables Template\n# ============================================\n# Copy this file to .env and fill in real values\n# cp .env.example .env\n# ============================================\n\n# Server\nPORT=2038\nENVIRONMENT=development\n\n# Supabase Access Token (for MCP/CLI tools)\n# https://supabase.com/dashboard/account/tokens\nSUPABASE_ACCESS_TOKEN=sbp_xxx\n\n# Supabase Project Config\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_SERVICE_ROLE_KEY=eyJxxx\n\n# GitHub Personal Access Token\nGITHUB_PERSONAL_ACCESS_TOKEN=github_pat_xxx\n\n# ============================================\n# AI Platform API Keys & Base URLs\n# ============================================\n\n# 火山引擎 (Volcengine)\nVOLCENGINE_API_KEY=xxx\nVOLCENGINE_BASE_URL=https://ark.cn-beijing.volces.com/api/v3\n\n# 阿里云百炼 (DashScope)\nDASHSCOPE_API_KEY=xxx\nDASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1\n\n# DeepSeek\nDEEPSEEK_API_KEY=xxx\nDEEPSEEK_BASE_URL=https://api.deepseek.com/v1\n\n# 月之暗面 (Moonshot)\nMOONSHOT_API_KEY=xxx\nMOONSHOT_BASE_URL=https://api.moonshot.cn/v1\n\n# 智谱AI (Zhipu)\nZHIPU_API_KEY=xxx\nZHIPU_BASE_URL=https://open.bigmodel.cn/api/paas/v4\n\n# 七牛云 (Qiniu)\nQINIU_API_KEY=xxx\nQINIU_BASE_URL=xxx\n\n# 优云智算 (YouYun)\nYOUYUN_API_KEY=xxx\nYOUYUN_BASE_URL=xxx\n\n# 硅基流动 (SiliconFlow)\nSILICONFLOW_API_KEY=xxx\nSILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n\n# ============================================\n# Security\n# ============================================\nJWT_SECRET=change-this-to-a-secure-random-string\nCAPTCHA_SECRET=这里放一串强随机字符串\nCORS_ORIGIN=http://localhost:2037\n\n# ============================================\n# Email Service (Aliyun DirectMail)\n# 发件地址:accounts@email.1037solo.com(与 Platform 共用)\n# ============================================\nSMTP_HOST=smtpdm.aliyun.com\nSMTP_PORT=80\nSMTP_USER=xxx\nSMTP_PASS=xxx\n\n# ============================================\n# Agent Gateway - Agent API Keys\n# Gateway 调用子后端 Agent 时的认证凭证\n# 值需与对应 Agent 的 AGENT_API_KEY 一致\n# ============================================\nAGENT_CODE_REVIEW_KEY=code-review-secret\n"}, "8f5dba2f85871eaa656e2c47c3a300348cdf3a39": {"t": 1785767409.2183952, "n": 1883, "h": "53fafcf391e0551b", "c": "# ============================================\n# StudySolo Backend - Environment Variables Template\n# ============================================\n# Copy this file to .env and fill in real values\n# cp .env.example .env\n# ============================================\n\n# Server\nPORT=2038\nENVIRONMENT=development\n\n# Supabase Access Token (for MCP/CLI tools)\n# https://supabase.com/dashboard/account/tokens\nSUPABASE_ACCESS_TOKEN=sbp_xxx\n\n# Supabase Project Config\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_SERVICE_ROLE_KEY=eyJxxx\n\n# GitHub Personal Access Token\nGITHUB_PERSONAL_ACCESS_TOKEN=github_pat_xxx\n\n# ============================================\n# AI Platform API Keys & Base URLs\n# ============================================\n\n# 火山引擎 (Volcengine)\nVOLCENGINE_API_KEY=xxx\nVOLCENGINE_BASE_URL=https://ark.cn-beijing.volces.com/api/v3\n\n# 阿里云百炼 (DashScope)\nDASHSCOPE_API_KEY=xxx\nDASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1\n\n# DeepSeek\nDEEPSEEK_API_KEY=xxx\nDEEPSEEK_BASE_URL=https://api.deepseek.com/v1\n\n# 月之暗面 (Moonshot)\nMOONSHOT_API_KEY=xxx\nMOONSHOT_BASE_URL=https://api.moonshot.cn/v1\n\n# 智谱AI (Zhipu)\nZHIPU_API_KEY=xxx\nZHIPU_BASE_URL=https://open.bigmodel.cn/api/paas/v4\n\n# 七牛云 (Qiniu)\nQINIU_API_KEY=xxx\nQINIU_BASE_URL=xxx\n\n# 优云智算 (YouYun)\nYOUYUN_API_KEY=xxx\nYOUYUN_BASE_URL=xxx\n\n# 硅基流动 (SiliconFlow)\nSILICONFLOW_API_KEY=xxx\nSILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n\n# ============================================\n# Security\n# ============================================\nJWT_SECRET=change-this-to-a-secure-random-string\nCAPTCHA_SECRET=这里放一串强随机字符串\nCORS_ORIGIN=http://localhost:2037\n\n# ============================================\n# Email Service (Aliyun DirectMail)\n# 发件地址:accounts@email.1037solo.com(与 Platform 共用)\n# ============================================\nSMTP_HOST=smtpdm.aliyun.com\nSMTP_PORT=80\nSMTP_USER=xxx\nSMTP_PASS=xxx\n"}, "3429bd7f39709d60212ad39c34b79558b4fe617f": {"t": 1785767410.7194629, "n": 1856, "h": "b56496ab025ee85d", "c": "# ============================================\n# StudySolo Backend - Environment Variables Template\n# ============================================\n# Copy this file to .env and fill in real values\n# cp .env.example .env\n# ============================================\n\n# Server\nPORT=2038\nENVIRONMENT=development\n\n# Supabase Access Token (for MCP/CLI tools)\n# https://supabase.com/dashboard/account/tokens\nSUPABASE_ACCESS_TOKEN=sbp_xxx\n\n# Supabase Project Config\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_SERVICE_ROLE_KEY=eyJxxx\n\n# GitHub Personal Access Token\nGITHUB_PERSONAL_ACCESS_TOKEN=github_pat_xxx\n\n# ============================================\n# AI Platform API Keys & Base URLs\n# ============================================\n\n# 火山引擎 (Volcengine)\nVOLCENGINE_API_KEY=xxx\nVOLCENGINE_BASE_URL=https://ark.cn-beijing.volces.com/api/v3\n\n# 阿里云百炼 (DashScope)\nDASHSCOPE_API_KEY=xxx\nDASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1\n\n# DeepSeek\nDEEPSEEK_API_KEY=xxx\nDEEPSEEK_BASE_URL=https://api.deepseek.com/v1\n\n# 月之暗面 (Moonshot)\nMOONSHOT_API_KEY=xxx\nMOONSHOT_BASE_URL=https://api.moonshot.cn/v1\n\n# 智谱AI (Zhipu)\nZHIPU_API_KEY=xxx\nZHIPU_BASE_URL=https://open.bigmodel.cn/api/paas/v4\n\n# 七牛云 (Qiniu)\nQINIU_API_KEY=xxx\nQINIU_BASE_URL=xxx\n\n# 优云智算 (YouYun)\nYOUYUN_API_KEY=xxx\nYOUYUN_BASE_URL=xxx\n\n# 硅基流动 (SiliconFlow)\nSILICONFLOW_API_KEY=xxx\nSILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n\n# ============================================\n# Security\n# ============================================\nJWT_SECRET=change-this-to-a-secure-random-string\nCORS_ORIGIN=http://localhost:2037\n\n# ============================================\n# Email Service (Aliyun DirectMail)\n# 发件地址:accounts@email.1037solo.com(与 Platform 共用)\n# ============================================\nSMTP_HOST=smtpdm.aliyun.com\nSMTP_PORT=80\nSMTP_USER=xxx\nSMTP_PASS=xxx\n"}, "68787dc8badc7aa500ef11d00a3f5ea33fb7cc2b": {"t": 1785767412.0229964, "n": 1857, "h": "8fea5b2b42618b9f", "c": "# ============================================\n# StudySolo Backend - Environment Variables Template\n# ============================================\n# Copy this file to .env and fill in real values\n# cp .env.example .env\n# ============================================\n\n# Server\nPORT=2038\nENVIRONMENT=development\n\n# Supabase Access Token (for MCP/CLI tools)\n# https://supabase.com/dashboard/account/tokens\nSUPABASE_ACCESS_TOKEN=sbp_xxx\n\n# Supabase Project Config\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_SERVICE_ROLE_KEY=eyJxxx\n\n# GitHub Personal Access Token\nGITHUB_PERSONAL_ACCESS_TOKEN=github_pat_xxx\n\n# ============================================\n# AI Platform API Keys & Base URLs\n# ============================================\n\n# 火山引擎 (Volcengine)\nVOLCENGINE_API_KEY=xxx\nVOLCENGINE_BASE_URL=https://ark.cn-beijing.volces.com/api/v3\n\n# 阿里云百炼 (DashScope)\nDASHSCOPE_API_KEY=xxx\nDASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1\n\n# DeepSeek\nDEEPSEEK_API_KEY=xxx\nDEEPSEEK_BASE_URL=https://api.deepseek.com/v1\n\n# 月之暗面 (Moonshot)\nMOONSHOT_API_KEY=xxx\nMOONSHOT_BASE_URL=https://api.moonshot.cn/v1\n\n# 智谱AI (Zhipu)\nZHIPU_API_KEY=xxx\nZHIPU_BASE_URL=https://open.bigmodel.cn/api/paas/v4\n\n# 七牛云 (Qiniu)\nQINIU_API_KEY=xxx\nQINIU_BASE_URL=xxx\n\n# 优云智算 (YouYun)\nYOUYUN_API_KEY=xxx\nYOUYUN_BASE_URL=xxx\n\n# 硅基流动 (SiliconFlow)\nSILICONFLOW_API_KEY=xxx\nSILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n\n# ============================================\n# Security\n# ============================================\nJWT_SECRET=change-this-to-a-secure-random-string\nCORS_ORIGIN=http://localhost:2037\n\n# ============================================\n# Email Service (Aliyun DirectMail)\n# 发件地址:accounts@email.1037solo.com(与 Platform 共用)\n# ============================================\nSMTP_HOST=smtpdm.aliyun.com\nSMTP_PORT=465\nSMTP_USER=xxx\nSMTP_PASS=xxx\n"}, "a3d31f0277be51d1cc7347c32eed42eb7aea2469": {"t": 1785767413.646496, "n": 1807, "h": "fea365cee7e3a908", "c": "# ============================================\n# StudySolo Backend - Environment Variables Template\n# ============================================\n# Copy this file to .env and fill in real values\n# cp .env.example .env\n# ============================================\n\n# Server\nPORT=2038\nENVIRONMENT=development\n\n# Supabase Access Token (for MCP/CLI tools)\n# https://supabase.com/dashboard/account/tokens\nSUPABASE_ACCESS_TOKEN=sbp_xxx\n\n# Supabase Project Config\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_SERVICE_ROLE_KEY=eyJxxx\n\n# GitHub Personal Access Token\nGITHUB_PERSONAL_ACCESS_TOKEN=github_pat_xxx\n\n# ============================================\n# AI Platform API Keys & Base URLs\n# ============================================\n\n# 火山引擎 (Volcengine)\nVOLCENGINE_API_KEY=xxx\nVOLCENGINE_BASE_URL=https://ark.cn-beijing.volces.com/api/v3\n\n# 阿里云百炼 (DashScope)\nDASHSCOPE_API_KEY=xxx\nDASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1\n\n# DeepSeek\nDEEPSEEK_API_KEY=xxx\nDEEPSEEK_BASE_URL=https://api.deepseek.com/v1\n\n# 月之暗面 (Moonshot)\nMOONSHOT_API_KEY=xxx\nMOONSHOT_BASE_URL=https://api.moonshot.cn/v1\n\n# 智谱AI (Zhipu)\nZHIPU_API_KEY=xxx\nZHIPU_BASE_URL=https://open.bigmodel.cn/api/paas/v4\n\n# 七牛云 (Qiniu)\nQINIU_API_KEY=xxx\nQINIU_BASE_URL=xxx\n\n# 优云智算 (YouYun)\nYOUYUN_API_KEY=xxx\nYOUYUN_BASE_URL=xxx\n\n# 硅基流动 (SiliconFlow)\nSILICONFLOW_API_KEY=xxx\nSILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1\n\n# ============================================\n# Security\n# ============================================\nJWT_SECRET=change-this-to-a-secure-random-string\nCORS_ORIGIN=http://localhost:2037\n\n# ============================================\n# Email Service (Aliyun DirectMail)\n# ============================================\nSMTP_HOST=smtpdm.aliyun.com\nSMTP_PORT=465\nSMTP_USER=xxx\nSMTP_PASS=xxx\n"}}}} |