发码
建一个班级,为它批量生成授权码,并设定这个班统一的模型 / 模式 / 思考 / 每人送多少积分 / 有效期。
查看与管理
所有班级的状态、用量与配置。点「看码」进班级,查看完整授权码、搜索、看每个码的用量明细。
| 班级 | 状态 | 创建时间 | 已发 / 已激活 | 锁定 | 用量可看 | 已用 | 次数 | 到期 |
|---|
班级详情
| 授权码 | 备注 | 用户ID | 手机号 | 状态 | 已激活 | 到期 | 设备 | 已发 / 已用 / 还剩(积分) | 次数 / 字数 |
|---|
已归档
归档的班级只读留底 —— 数据都还在,可「看码」查授权码与用量,需要可「恢复」回主列表。物理删除只能直接动数据库文件。
| 班级 | 创建时间 | 已发 / 已激活 | 锁定 | 已用 |
|---|
授权码用量
| 时间 | 场景 | 给了多少积分 | 实际收了多少钱 | 有效期到 | 还剩 | 谁发的 |
|---|
| 模型 | 成功次数 | 总字数 | 扣了多少积分 |
|---|
| 时间 | 模型 | 输入 | 输出 | 合计字数 | 扣积分 | 状态 |
|---|
模型注册表
网关能中转的全部模型(全局,不属于任何班级)。这里看每个模型有多费积分,并定它的消耗倍率、上游硬限额、启用与默认。改完点「保存」即生效。
🔴 左边那三列是读数,不是输入框 —— 每一笔真花了多少钱本来就记着,不该让人填。 取最近 7 天的真实对话算;主数用中位数(一半的对话比它便宜), 平均被少数超长对话拉得很高,答「一个孩子通常扣多少」时平均数是错的那个。 没有样本的模型显示「—」(还没人用过它)。
「消耗倍率」是这一屏唯一的旋钮,默认 100% = 照我们真花的钱扣 (焊死的刻度:我们真花 1 分钱 = 扣 1 积分)。 上游哪天涨价、我们又不想涨家长的价,就在这里调快消耗 —— 调完只影响之后的新消耗, 已经扣过的账按当时的倍率留着,查得回去。
⚠️ 这里没有「这个模型多少钱一百万字」可填,那是供应商公布的客观事实,唯一真值在代码里
(seed.MODEL_DEFAULTS,每次启动无条件钉回库),官网原文存在
docs/ops/qwen-bailian-price-snapshot.md,对不上会有测试变红。
供应商涨价请找开发改代码,不是在这儿填数字。
限额三列 = 上游厂商的硬限制(0 = 该口径对此模型不适用),并发监控页的饱和度 / 警戒线按它算。
| 公开名 | 供应商 | 一来一回 通常扣 | 平均 | 比最便宜 的贵 | 样本 | 消耗倍率 | 限并发 | 限 RPM | 限 TPM | 启用 | 默认 |
|---|
并发监控
先选看当下还是看过去 → 再选看多久。
背景发黄 / 发红 = 那一刻逼近限额或错误偏高、该盯;鼠标划看轻预览,点某一刻 → 下方出完整体检。
| 模型 | 状态 | 峰值并发 | 饱和度 | 首字 p95 | 完成 p95 | 成功率 | 请求 / 错误 |
|---|
状态 = 饱和度与成功率里更差的那个;饱和度 挤不挤(离上游限额多远)、成功率 通不通、p95 快不快。断流不算错。 每个模型该盯的指标看模型名下「该盯 …」—— 不同厂商限的东西不同:DeepSeek 限并发、通义千问限 RPM + TPM,饱和度自动挑限得最紧那项算。
| 模型 | 状态 | 峰值并发 | 饱和度 | 成功率 | 用户等待 p95 | 总耗时 p95 | 请求 / 错误 |
|---|
账号管理
三级账号:超级管理员(唯一,可建任何账号)→ 主管(可新建/维护班主任,其余同超管)→ 班主任(只管被分配的班级)。 每个账号可看「详情」里的操作记录。
班主任只看得到、也只能管被分配的班级;点「分配班级」勾选它负责的班。
可发积分=他还能给学生发出去多少积分,发一笔扣一笔;扣到 0 才能点「补满可发积分」补回 10,000 积分(= 我们真花 ¥100)。
| 用户名 | 备注 | 分配班级 | 可发积分 | 状态 | 创建时间 |
|---|
工具
面向学员 / 家长的小工具。把下面的链接发给他们,即可自助查询(手机 / 电脑都能打开)。
微信支付
把微信商户平台上的几样东西填到这里,家长就能扫码给孩子的授权码充积分。 填进来的东西不会再显示回来 —— 要换就重新传一次。
就是那个证书文件夹里的两个 .pem。 选了证书之后,商户号和证书编号会自动认出来,不用手抄 —— 那两串有 40 位,抄错一位的报错看起来像"私钥不对",会把人带到错的方向去查。
商户平台 → 账户中心 → API安全 → 最下面「解密回调」那一块的 APIv3 密钥,点「设置」自己定一串。 ⚠️ 别跟上面那个「商户APIv2密钥」搞混,是两样东西。 设完微信就不再显示了,记得先存进你自己的密钥备份文件。
同一页「验证微信支付身份」那一块,点「管理公钥」下载。 它是用来确认"收到钱了"这条消息真是微信发的,不是别人伪造的 —— 没有它,谁知道我们的通知地址就能白拿积分。
下面这一格只影响「班主任发链接给家长」那条路。
家长在微信里点开链接,微信要先告诉我们"这是谁",才弹得出付款框 ——
而微信只肯告诉持有这把钥匙的人。不填也不影响孩子在软件里自己充值。
在公众号后台(不是商户平台)→ 基本配置 → 开发者密码(AppSecret)。
⚠️ 还有两件事要在公众号后台做,不做的话这条路照样通不了:
① 设置 → 公众号设置 → 功能设置 → 网页授权域名,填我们的域名;
② 基本配置 → IP 白名单,把服务器的出口 IP 加进去。
一档都没有 = 谁也充不了值 —— 这是故意的,免得随手填的价格跟着上线就真的开始收钱。 ⚠️ 名字请写成「多少积分 · 多少天使用包」,别写「充值到账」。 ⚠️ 每一档都必须写明能用多少天,积分不许无限期。
| 名字(家长看到的) | 价钱(元) | 给多少积分 | 能用多少天 |
|---|
上面全填好了也不会自动开始收钱 —— 得在这儿手动打开。 建议先点上面那个「测一下」,通过了再开。 ⚠️ 缺一样就打不开,尤其是那份公钥 —— 没有它,微信通知我们"收到钱了"的时候我们 验不出真假,钱进来了积分却永远不到账,而且两边都不会报错。
| 订单号 | 买的什么 | 金额 | 积分 | 状态 | 时间 |
|---|---|---|---|---|---|
| 还没有任何订单。 | |||||
积分 · 统一分析
不分班级学员还是自己买积分的散客,全部汇总在一起看。发积分不在这一屏 —— 去「查看与管理」找到那个码,在它的用量页上发。
📌 这一屏只看积分怎么用掉的。跟钱有关的数不在这儿 —— 那些归超级管理员单独一页看。
| 要覆盖到谁 | 一期(10 次课 / 两周) | 一学期(20 次课) | 摊到一次课 | 全按高峰价的话 |
|---|---|---|---|---|
| 读取中… | ||||
✅ 这是实测,不是外推 —— 每个班从它自己的开班日往后数 14 天, 把这个班所有已激活授权码在这两周里真烧掉的积分排个队,取分位数。
🔑 用得凶的孩子比中位孩子贵好几倍,所以覆盖 50% 和覆盖 80% 差的不是一点点。 定包按你想覆盖到谁来选,别按平均数。
⚠️ 这个数是暑期集训的:两周上完 10 次课。学期中同样 10 次课要排 10 周, 孩子在家用的天数多得多,消耗大概率更高 —— 秋季班开起来必须重量一次,别拿这张表去定秋季的包。
| 模型 | 占多少 | 多少笔 | 多少个孩子 | 最后一次用 |
|---|---|---|---|---|
| 读取中… | ||||
| 班级 | 开班日 | 已激活 | 真用过 | 一半人在 | 八成人在 | 九成人在 | 最能烧的那个 |
|---|---|---|---|---|---|---|---|
| 读取中… | |||||||
📌 「已激活」是分母:发了没激活的码不是学员,不算进来;激活了一次没用的算(他也占一个名额)。
📌 开班日是从班名里读的(「7月27日开班-…」)。 码的生效时间不能当开班日 —— 实测它比开班早 3~4 天,那几天孩子在装机试用。
⚠️ 标了「还没走完」的班,两周没满,数偏小,别拿它定包。
📌 「坐下来一次」是这么切的:同一个孩子,两次说话隔了一个钟头以上,就算下一次。 量了 48 万笔真实调用:96% 的相邻两笔在 5 分钟以内,而 15 分钟到 12 小时之间几乎是空的, 断点天然就在那儿。
📌 主数看中位数。平均被少数几次超长的拉得很高,答「通常花多少」时平均数是错的那个。
| 项目 | 模型 | 思考 | 一遍要多少 | 少的时候 | 多的时候 | 测了几遍 | 什么时候量的 |
|---|---|---|---|---|---|---|---|
| 读取中… | |||||||
📌 「少的时候 / 多的时候」这两列比中间那个数更该看 —— 同一道题同一个模型实测能差 3 倍,撑开它的是小悟中途返了几轮工。 定价按「多的时候」算,别按中间那个数。
⚠️ 上游价格和我们的提示词都一直在动,这个数注定会过期 —— 所以「什么时候量的」跟数字一起显示。太旧了就该重量一遍。
| 模型 | 一来一回中位数扣多少 | 平均 | 比最便宜的贵 | 样本笔数 |
|---|
📌 主数用中位数(一半的对话比它便宜):平均被少数超长对话拉得很高, 答「一个孩子通常扣多少」时平均数是错的那个。
| 来源场景 | 授权码 | 已发积分 | 已用掉 |
|---|
| 场景 | 开过几张单 | 发出去的积分 |
|---|
| 班级 | 人数 | 已发 | 已用 |
|---|
🔑 一个问题只许有一个答案。两个数摆在同一屏上,看的人没有任何办法知道该信哪个。
成本 · 每天烧了多少
我们真花给大模型的钱,按天和模型拆开。包含平台自己跑的活 (自动取现场、每天的日报)——那部分不扣任何人的积分,单独一列。
| 场景 | 开过几张单 | 发出去的积分 | 收到的钱 | 会计上算什么 |
|---|---|---|---|---|
| 读取中… | ||||
| 来源场景 | 授权码 | 已用积分 | 我们花的钱 | 收到的钱 |
|---|---|---|---|---|
| 读取中… | ||||
📌 这两张表是全历史累计,不跟着上面那个「看最近几天」走 —— 它答的是「一共收了多少 / 一共花在谁身上」,不是「这几天」。
| 北京日 | 笔数 | 学员用的 | 我们自己用的 | 合计 | 扣掉的积分 | 按模型拆 |
|---|---|---|---|---|---|---|
| 读取中… | ||||||
⚠️ 某一天带 「N 笔是估的」 说明那天有请求上游没回用量, 缓存命中比例是我们按同模型实测折算的。这个数变大就该看一眼 —— 折算出来的成本跟实测的长得一模一样。
Bug 登记簿
孩子软件自己传回来的问题、哨兵报的警,都会自动变成这里的一条记录 —— 不用等人填。 你每天扫一眼,把要处理的交给 AI;它处理完会自己改状态。 已完成 / 不修的记录保留约 24 小时后自动清理。
| 状态 | 问题 | 严重 | 影响 | 来源 | 发现时间 | 最近一次 |
|---|