日报 — 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.tspackages/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/byethrowResult.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.tspackages/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%