譬彼北辰,居其所而众星共之。——《论语·为政》
「北辰」是一款面向高一学生的 AI 选科陪伴网页。它不从"哪个组合更热门"开始,而是通过一场一对一的深度谈心,陪学生回看学科手感、开窍与挫败、真正的热爱、理想生活、身边的声音与现实的取舍,最终点亮一张专属的「北辰星图」:文理方位与星值、五张贴着个人影子的星卡、可参考的 3+1+2 组合、对口专业解析,以及一段写给学生本人的寄语。
- 在线使用:https://yusheng266186-beep.github.io/beichen/(星门需输入向维护者获取的 6 位动态验证码)
- 旧版(v1)存档:https://yusheng266186-beep.github.io/beichen/legacy/index-v1.html(代码原样保留于
legacy/,仍可访问) - 发布页:https://github.com/yusheng266186-beep/beichen/releases
| 项目 | 说明 |
|---|---|
| 分类 | 选科与升学探索 |
| 平台 | 浏览器 / AI 中转 |
| 当前定位 | 现行主线 |
面向高中生的 AI 选科陪伴网页,通过谈心整理学科体验、兴趣与组合参考。
本库是北辰的现行主线;北辰 v3 是独立发布线,历史调试库 已归档。各自的页面、云函数和版本记录分开维护。
阅读导航: 本地开发 · 版本与历史 · 架构与安全模型 · 目录结构
生产后端与学生页面为 v2.10.0,模型能力版本为 v2.10.0。支持 DeepSeek 官方、Wefucke、ByteCat 三组入口、Command Code 与百度千帆;中转模型目录与 DSH 配置同步,按供应商分别适配 Chat Completions、Responses 和 Claude Messages。维护者在服务工作台“API 与模型”选择供应商、模型和默认思考强度;原生参数及流式检查通过后才切换,并回读运行结果。切换重载函数实例,建议在没有进行中的学生请求时操作。模型适配与星图完整性说明见 MODEL-ADAPTATION.md。
长对话、重新验证与弹窗返回已在 v2.9.3 修复。完整原话分段发送和本机保存,星图生成后也保留早期细节;不通过摘要删减换取长度。见 对话完整性与流程修复。
API 密钥只保存到云端配置与私有 Actions Secrets,不发送到学生浏览器或工作台 HTML。部署参数见 新手部署指南。
工作台为 v1.6,只保留真实 Redis 开关、服务与哨兵状态、API/模型/默认思考强度切换、任务进度及操作记录。具备交接库权限的维护者可从 私有交接库发行页 下载 HTML 或 ZIP,用浏览器打开。工作台与私有连接配置保存在交接库,本公开库保存学生应用源码。
当前暂不建设用户统计与管理后台;工作台演示数据及配套统计项目已移除。现有 Redis 继续承担短期会话、额度和防重放状态。维护工作台版本与学生应用版本独立;此次模型同步部署现有函数,没有增加统计数据库。维护流程见 运维说明。
维护工具已更新为 Redis 开关 1.0.1,修复关闭失败时的处理并增加桌面操作日志;修复与验证记录。
2026-09-07 已完成真实开关循环及哨兵联动验收。维护者可下载工具包,Windows 双击 Redis-Switch.cmd 操作。见 工具说明 和 验收与同步记录。当时运行版本为 v2.8.1,同步标签为 v2.8.1-sync.20260907。
v2.8.1 当时统一了后端和页面版本。围绕等待体验与学生自主调节:
- 思考强度三档:设置面板可选 省时 / 标准 / 深思(默认标准);客户端只传枚举,思考预算由服务端换算(标准沿用环境变量口径,省时减半、深思加倍)。设置面板给出各档预估星图生成时间。
- 思考低语优化 + 开关:低语行改为恒定尾窗与固定行宽,不再忽长忽短;设置面板可关(默认开)。
- 新密钥覆盖旧存档:每次输入新验证码自动开始全新谈心,旧对话存档自动覆盖;历次星图档案保留在本机。
- 值班哨兵:仓库内置 GitHub Actions 每 5 分钟拨测
/readyz,失败自动邮件告警。
详细的版本、部署和验收记录见 CHANGELOG.md。
| 模式 | 适合 | 体验 |
|---|---|---|
| 夜航(Wander) | 愿意多说、想被认真听的学生 | 没有选项、不下框架;第 5 轮起每轮实时评估画像成熟度,认为足够时给出「点亮星图」入口,满 15 轮固定给出;轮数不设上限(服务端单会话总轮数兜底) |
| 领航(Guided) | 不知道说什么、想要引导的学生 | 每轮给出思考扶手与 4 个具体选项,满十轮自动点亮星图;生成失败只走「重新点亮星图」按钮重试,不逐轮静默重试、不重复扣额度 |
- 文理方位与星值:刻度轴可视化方向倾向;线索冲突时如实标注"仍在观察",不假装精确;
- 五张星卡:学科底色 / 思维与学习 / 热爱与职业 / 决策工具透视(黄金三角 × 霍兰德 RIASEC × SWOT 逐一对照)/ 盲区叮嘱,全部融汇谈心中的具体细节;
- 3+1+2 组合推荐:首选 + 备选,附理由与专业覆盖率参考;
- 专业方向解析:5–8 个方向,点击弹出悬浮卡,每项含推荐分析(结合对话线索与选科衔接)与就业方向(行业 / 典型职业 / 升学路径);
- 宽容解析器:星图字段缺失逐级降级渲染、口语缩写组合自动归一,绝不死循环;彻底无效时只做一次有界格式修复。
- 深思考过程以思考低语实时上屏(仅显示、不落历史、不上传);
- 网关不流思考增量时,以叙述文案轮播兜底,等待不黑箱;
- 星图轮的前置回应实时流式上屏,并按字段分段提示进度。
四川 2025–2026 招录测算、十二组合速查、黄金三角 / 霍兰德 RIASEC / SWOT 三个决策工具、常见疑问 FAQ(事实类内容两源交叉验证后收录)。
学生浏览器(GitHub Pages,前端零密钥)
│ POST /verify · /run/complete · /chat/completions(SSE 流式)
▼
腾讯云 SCF Web Function(beichen-qianfan-mini,本仓库 scf-relay.js)
│ 对应供应商的 Bearer API Key(仅存云端配置)
▼
DeepSeek 官方 / Wefucke GLM / Wefucke GPT(维护工作台选择模型)
| 机制 | 说明 |
|---|---|
| 星门(2FA) | TOTP 动态码(6 位,SHA1,每 30 秒生成,每组从生成起有效 100 秒,一次性消费防重放)→ 换取 7 天 HMAC 签名会话票据;票据仅存本机 localStorage,重新验证自动覆盖,过期或"清除本机记录"后失效 |
| 额度纪律 | 一次验证 3 次完整谈心(以星图生成为计);/run/complete 以 X-Request-Id 幂等记账,网络重试不重复扣额;星图档请求在额度用尽后被服务端直接拒绝(防绕过记账);单会话总轮数上限兜底 |
| 模型参数 | 供应商和模型由维护工作台在服务端配置;学生请求不能指定模型。思考强度接受 eco / standard / deep,按模型能力映射原生参数;GPT-6 Sol 对应 low / high / max,其他模型以能力说明为准 |
| 上游边界 | DeepSeek 与 Wefucke 固定 HTTPS 域名及路径白名单,上游超时、响应体上限、SSE 背压;旧千帆仅保留兼容 |
| 浏览器边界 | 严格 CSP(脚本零第三方,截图组件自托管)、CORS 仅放行 Pages 主域、全部响应 no-store 与安全响应头 |
| 共享状态 | 动态码消费、会话、次数预占/释放、星图结算和重复请求收据统一写入共享 Redis;Redis 不可用时不降级到单机内存 |
| 隐私 | 对话与思考内容不落库、无第三方统计;云函数不打印请求内容 |
| 方法 | 路径 | 用途 |
|---|---|---|
POST |
/verify |
提交 { "code": "六位数字" },返回 HMAC 会话票据 |
POST |
/chat/completions |
提交现有页面格式的流式聊天请求;effort? 可选枚举 eco/standard/deep,未传时使用服务端默认档,原生参数与预算由适配配置换算 |
POST |
/run/complete |
提交空 JSON 与 X-Request-ID,确认一张已成功生成的星图 |
GET |
/healthz |
存活检查,不需要密钥;返回后端和页面版本标记 |
GET |
/readyz |
检查后端配置、Redis 和上游配置是否就绪;设置页用它判断连接结果 |
/run/complete 不接受“是否扣次数”或“增加几次”之类的客户端字段。它只接受空对象,是否可以结算、结算几次完全由服务端状态决定。
新手向完整步骤(含 zip 打包两条铁律:LF 换行 + 755 可执行位)见 beginner-deploy.md。概要:
- 腾讯云创建 Web Function(Nodejs18/20 优先),上传
scf-relay.js + scf_bootstrap,在加密环境变量中填写密钥(仓库不含任何真实密钥); - GitHub 仓库启用 Pages(main 分支根目录),前端零配置即可连云函数(CORS 按主域放行);
- 更新云函数前务必阅读
beginner-deploy.md的"更新会重启实例、清空内存会话"警告。
本次版本已完成腾讯云实际部署,沿用现有云函数、Redis 和网络资源,没有另外创建第二套资源。新版部署包需要把 Redis 运行依赖一起带上:
npm ci --omit=dev上传包至少包含:
scf-relay.js
state-store.js
scf_bootstrap
package.json
package-lock.json
node_modules/
生产状态使用 STATE_STORE=redis。Redis 地址可以使用 REDIS_URL,也可以分别填写 REDIS_HOST、REDIS_PORT、REDIS_USERNAME、REDIS_PASSWORD 和 REDIS_TLS;真实值只填入腾讯云环境变量,不能写入仓库。
远程部署完成后,生产函数的 /readyz 实测结果为:
| 检查项目 | 实际结果 |
|---|---|
| HTTP 状态 | 200 |
| 服务就绪 | ready: true |
| 后端配置 | providerConfigured: true |
| 状态保存 | stateStore: redis |
| Redis 连接 | stateStoreReachable: true |
| 后端版本 | v2.7.0 |
| 页面版本 | v2.7.0 |
此前“中转服务未就绪”的直接原因是部署检查脚本错误依赖腾讯云返回的 CodeSize 字段。函数已经进入运行状态,但该字段为空或为 0,脚本因此误报超时;现已改为根据函数进入 Active 或 Running 判断部署完成。
node --test tests/*.test.js # 三套契约测试全绿为基线(parse / index-contract / relay-contract)parse.test.js:星图宽容解析回归(6 场景,覆盖历史死循环案例);index-contract.test.js:前端结构与行为锁(双聊法、两段式契约、安全接线、动效系统、版本标记等,按版本分块);relay-contract.test.js:服务端契约(思考预算分档、端点白名单、请求校验、额度纪律、真实 IP 取尾)。
新增行为必须先加测试锁再合入。
当前状态层相关测试还包括:
tests/relay-integration.test.js:验证现有页面请求格式下的验证、普通轮回退、星图结算与幂等重试;tests/state-store.test.js:验证并发预占、失败释放、修复恢复和单次结算。
完整本地检查:
npm ci
npm run verify| 路径 | 说明 |
|---|---|
index.html |
唯一前端页面(单文件内联 CSS+JS:星门 / 序章 / 选聊法 / 双模式谈心 / 星图 / 数据参考 / 设置),设置面板可见版本号 |
scf-relay.js |
云函数唯一入口(验证 / 额度 / 转发 / 边界),生产运行时以环境变量持钥,并通过共享 Redis 保存关键状态 |
scf_bootstrap |
SCF 启动脚本(node 二进制运行时自检;.gitattributes 锁定 LF) |
state-store.js |
Redis 生产实现与内存测试实现;关键操作使用 Redis Lua 原子脚本 |
package.json / package-lock.json |
Redis 运行依赖和可重复安装锁文件 |
tests/ |
前端、解析器、中转服务与状态层测试 |
fonts/ |
Noto Serif SC / Cormorant Garamond 自托管分片(主源为 Google Fonts 大陆边缘,加载失败自动回退本目录) |
vendor/ |
自托管 html2canvas(截图组件,零第三方运行时依赖) |
legacy/ |
v1 旧版原样存档(legacy-v1 标签指向并入前状态) |
archive/ |
早期调试库原样存档(archive/* 标签指向各自仓库终态) |
- 当前生产版本:后端和页面均为 v2.9.0;
- 页面版本由
index.html的APP_VERSION控制,并与设置面板、后端返回的页面版本同步展示; - 本次详细更新记录见 CHANGELOG.md,正式发行版见 v2.7.0 Release;
- v2 重构版(v2.6.x,30+ 次迭代提交)于 2026-08-29 自调试库整体并入本仓库,
git log可完整回溯每一步的动机与实现; - v1 旧版见
legacy/与legacy-v1标签;早期私有调试库见archive/与archive/*标签; - 历史发布与变更说明见 Releases。
- 维护者:予笙(页面"设置 → 写给你"内有联系方式)
- 动态验证码按需发放;TOTP 种子、云函数密钥等敏感凭据仅存于维护者本地交棒文档,永不入库(
.gitignore已硬性排除)。 - 本次部署所需的真实配置只从受控的私有交接材料读取,未写入正式仓库、README、发行版说明或日志。
北辰的星图与数据参考仅为探索辅助,正式选科以本省教育考试院政策与高校招生章程为准。
2026-10-11:v2.9.4 为验证页和首页北辰图标增加全屏 SVG 星图彩蛋,自动配合明暗主题;验证页移除有效期提示。验证码规则、完整对话、模型适配与星图生成质量处理沿用现有逻辑。见 彩蛋说明与验收。
2026-10-11:v2.9.5 修复历次星图切换后只有寄语可见的问题:已打开的报告也重新显现新内容并回到顶部;修复保存提交确认、读取失败提示与当前星图回看入口。旧 IndexedDB 存档直接兼容。见 显示修复与验收。
2026-10-11:v2.9.6 修复参考数据问答开合动效:答案按实际高度平滑展开/收起,连续点击从当前高度接续,取消问题整行缩放。十条问答原文保留,其余功能未扩展。修复说明。
2026-10-13:v2.10.0 同步 DSH 的 133 个中转模型,新增 Claude Messages 与 Responses 流式适配,原话、星图接续、质量检查及额度结算保持。工作台 v1.6 支持模型筛选;模型密钥只同步到云函数。