日报 — 2026-02-12
今日概览
- 做了什么: 跨两台设备完成了两项独立任务:一是将 MIHD 项目的英文增强计划翻译整理为结构化中文版,二是为 ccusage 工具添加 GLM 模型计费支持并完成格式/类型检查验证
- 怎么做的: DCC 端通过读取文件后 AI 压缩输出中文摘要;tianhe 端通过探索 ccusage 代码库的定价加载链路,在
_pricing-fetcher.ts中添加本地 JSON 文件读取与合并逻辑,并经过多轮 TypeScript/ESLint 错误修复达到可通过检查的状态 - 有什么用: MIHD 计划文档可读性显著提升便于团队对齐;ccusage 现可自动读取本地 ccusage.json 计算 GLM 模型费用,解决了原来仅支持 Claude 计费的核心痛点
DCC
- 做了什么: 阅读并翻译 MIHD 项目
/docs/ENHANCEMENT_PLAN.md,生成结构化中文版增强计划 - 怎么做的: AI 读取原始 Markdown 文件,按 6 个 BIG AIM 逐一压缩提炼,保留文件名、CLI 参数、配置字段等关键细节
- 有什么用: 为后续按阶段实施 MIHD 归一化、Q-Former、批次校正等功能提供了清晰的中文参考文档
tianhe
- 做了什么: 为 ccusage 实现 GLM/本地定价文件加载功能,修复多个 TypeScript 与 ESLint 错误直至 format/typecheck/目标测试全部通过
- 怎么做的: 探索
_pricing-fetcher.ts、_macro.ts、packages/internal/pricing.ts链路,在loadLocalPricing()函数中通过node:fs/promises读取本地 JSON 并与预取 Claude 定价合并;迭代修复Result.try()调用方式错误、process全局变量 ESLint 报错、sample_spec元数据误入定价表等问题 - 有什么用: ccusage 现支持通过
CCUSAGE_PRICING_FILE环境变量或默认路径~/.ccusage/ccusage.json加载任意 LiteLLM 格式定价,GLM 计费问题得到根本解决
在 tianhe 设备完成 ccusage GLM 计费支持的代码实现与调试,在 DCC 设备完成 MIHD 增强计划的中文版本整理
今日任务
架构与策略
- 🔄 ccusage GLM 模型计费支持 — 在
apps/ccusage/src/_pricing-fetcher.ts中添加loadLocalPricing()函数,支持从本地 LiteLLM 格式 JSON 文件(默认~/.ccusage/ccusage.json,可通过CCUSAGE_PRICING_FILE覆盖)加载定价数据并合并至离线缓存。format/typecheck 和_pricing-fetcher.ts定向测试已通过;全局测试中apps/amp存在与本次改动无关的失败
实现与修复
- ✅ MIHD 增强计划中文翻译 — 将 ENHANCEMENT_PLAN.md 中的 6 个 BIG AIM(归一化、UNI2+scGPT 实验、Q-Former/LLaVA、Niche 查询、批次校正、全流程配置化)翻译为结构化中文版,保留文件名、CLI 参数和配置字段等关键实现细节
问题与解决方案
关键问题
1. Result.try() 在 @praha/byethrow 库中返回的是一个函数而非直接结果,AI 初始代码将其当作直接结果使用导致 TypeScript 类型错误
解决方案: 将 const parsedResult = Result.try({...}) 改为 const parseLocalPricing = Result.try({...}); const parsedResult = parseLocalPricing();
关键洞察: Result.try() 是高阶函数,返回可复用的解析器函数,调用该函数才返回 Result<T, E>;这是该库不同于常见 Result monad 实现的特殊之处
2. 本地 ccusage.json 包含 sample_spec 等元数据键,经 valibot schema 解析后被当作空定价条目处理,导致测试断言「只有包含 token 成本字段的条目才应被加载」失败
解决方案: 在 schema 解析通过后额外检查 input_cost_per_token != null || output_cost_per_token != null,过滤掉无定价数据的条目
关键洞察: LiteLLM 定价 JSON 中混有描述文档(sample_spec)和真实模型条目,需在 schema 层之外再加业务语义过滤
一般问题
3. ESLint 规则禁止直接使用全局 process 对象,AI 在新代码中使用了 process.env.CCUSAGE_PRICING_FILE 导致 lint 失败
解决方案: 在文件顶部添加 import process from 'node:process'
关键洞察: 该项目强制要求所有 Node.js 内置对象通过 node: 协议显式导入,是 ESLint 配置的严格约束
4. ccusage 环境中 pnpm 命令不存在,corepack 因网络权限 EPERM 无法下载 pnpm,导致无法运行 format/typecheck/test
解决方案: 用户自行安装 pnpm 后,以提升权限重新运行 pnpm install,成功安装 930 个依赖包
关键洞察: HPC 集群环境对 ~/.cache/node/corepack 目录无写权限,且 npm registry 网络受限,需要用户手动安装包管理器
人类思路 vs AI 思路
战略层面
GLM 定价数据来源
| 角色 | 思路 |
|---|---|
| 人类 | 用户主动指出本地已有包含 GLM 条目的 /HOME/sysu_gbli2/sysu_gbli2xy_1/.ccusage/ccusage.json 文件,直接要求 AI 利用该现有文件 |
| AI | AI 最初的方案是在代码中手动添加 GLM provider prefix 并扩展 isClaudeModel 过滤函数,未意识到用户已有完整的本地定价文件 |
差异分析: 人类知道存在现成的数据资产,避免了重复造轮子;AI 的默认思路是修改代码逻辑而非复用已有数据文件
实现层面
pnpm 环境问题处理
| 角色 | 思路 |
|---|---|
| 人类 | 用户自行安装 pnpm 解决环境问题,反馈「now I installed pnpm」 |
| AI | AI 尝试通过 corepack、调整 XDG_CACHE_HOME 等变通方法绕过权限问题,但均失败 |
差异分析: 对于 HPC 集群上的工具链安装问题,人类直接解决根本(安装工具)比 AI 的迂回方案更高效
AI 局限性
重要局限
- 对
@praha/byethrow库的Result.try()API 存在误用:假设其行为与常见 Result monad 实现相同(直接返回结果),实际上它返回的是一个可复用的解析器函数,需要额外调用才能获得结果,导致需要两轮修复 - 首次实现时未考虑到 LiteLLM 定价 JSON 中混有非定价元数据键(如
sample_spec),导致测试失败后才补充了 token cost 字段的业务过滤逻辑
一般局限
- 未能预判 HPC 集群环境的网络和权限限制,多次尝试通过 corepack 安装 pnpm 均因 EPERM 或网络 fetch 失败,浪费了大量轮次才意识到需要用户手动解决
今日收获
核心收获
@praha/byethrow的Result.try({try, catch})返回一个函数(工厂模式),而非直接执行并返回 Result;这与 Rust/fp-ts 等常见 Result 实现不同,需特别注意- ccusage 的离线定价通过
_macro.ts中的isClaudeModel函数在构建时预过滤,仅保留 Claude 相关模型;扩展多模型支持需要在该 macro 和_pricing-fetcher.ts两处同步修改 - MIHD 项目计划按严格依赖顺序实施:配置基础(Idea 6 Phase 1)→ 归一化 → UNI2+scGPT 实验 → Q-Former/LLaVA → Niche 查询 → 批次校正 → 完整配置收口,这个顺序设计是为了避免重构成本累积
实践收获
- 在 HPC 集群上使用 Node.js 项目时,包管理器(pnpm)和 corepack 可能因文件系统权限或网络隔离而失效,需要提前确认工具链可用性
会话摘要
MIHD
✅ MIHD 增强计划翻译:6 个 BIG AIM 的中文结构化版本 23:05:59.274 | codex 用户请求将 MIHD 项目的 ENHANCEMENT_PLAN.md 翻译为中文。AI 读取文件后,按归一化、UNI2+scGPT 实验、Q-Former/LLaVA 融合、Niche 查询、批次校正、全流程配置化 6 个模块逐一压缩,保留了文件名、CLI 参数和 YAML 配置片段等实现细节。最终生成了一份完整的中文版计划文档,包含依赖顺序、实施阶段和验证方案。
ccusage
🔄 为 ccusage 添加 GLM 模型计费支持:本地定价文件加载实现与多轮调试
15:47:15.640 | codex
用户先询问 ccusage 基本用法,随后提出需要计算 GLM 模型费用。AI 探索了定价链路(_pricing-fetcher.ts → _macro.ts → packages/internal/pricing.ts),发现离线模式仅预取 Claude 模型。用户指出本地已有包含 GLM 条目的 ccusage.json,AI 随即实现了 loadLocalPricing() 函数。调试阶段经历了 pnpm 缺失、Result.try() 误用导致的 TypeScript 错误、process 全局变量 ESLint 报错、元数据键误入定价表等四个问题,最终 format/typecheck 和 _pricing-fetcher.ts 定向测试全部通过,apps/amp 的无关测试失败未修复。
Token 用量
Claude Code
总览
| 指标 | 数值 |
|---|---|
| 总 Token | 2,812,835 |
| 输入 Token | 45,385 |
| 输出 Token | 144 |
| Cache 创建 | 368,229 |
| Cache 读取 | 2,399,077 |
| Cache 命中率 | 86.7% |
| 总费用 (USD) | $1.7933 |
模型明细
| 模型 | 输入 | 输出 | Cache 创建 | Cache 读取 | 费用 | 占比 |
|---|---|---|---|---|---|---|
| claude-opus-4-6 | 15 | 63 | 137,190 | 899,384 | $1.3088 | 73.0% |
| claude-haiku-4-5-20251001 | 45,370 | 81 | 231,039 | 1,499,693 | $0.4845 | 27.0% |
Codex
总览
| 指标 | 数值 |
|---|---|
| 总 Token | 2,078,880 |
| 输入 Token | 2,058,788 |
| 输出 Token | 20,092 |
| 推理 Token | 9,479 |
| Cache 读取 | 1,840,256 |
| 总费用 (USD) | $0.9858 |
模型明细
| 模型 | 输入 | 输出 | 推理 | Cache 读取 | 费用 | 占比 |
|---|---|---|---|---|---|---|
| gpt-5.2-codex | 56,282 | 1,260 | 0 | 45,440 | $0.0446 | 4.5% |
| gpt-5.3-codex | 2,002,506 | 18,832 | 9,479 | 1,794,816 | $0.9412 | 95.5% |