2026-06-08 学习日志
今日主题
- Go 常量类型系统
- LLM Prompt Cache 机制
- 对话概览
- Claude Code Statusline 与 Transcript 机制
新增认知
Go 常量类型系统
-
常量尚未定型:Go 的字面量常量有类别但不一定有具体类型,例如 1 是无类型整数常量,"proxy" 是无类型字符串常量;这里的无类型不是没有语义,
而是还没有绑定到 int、string、TokenType 这类具体 Go 类型。前提是它仍处在常量上下文中,尚未赋给变量或经过显式类型转换。 -
赋值触发定型:const A TokenType = "proxy" 不需要强转,因为右侧 "proxy" 是无类型字符串常量,
可以在编译期按左侧目标类型定型为 TokenType。若右侧已经是 var s string,则它已有具体类型 string,
赋给 TokenType 时必须显式写 TokenType(s),Go 不做变量之间的隐式自定义类型转换。 -
枚举边界校验:Go 没有封闭 enum,type TokenType string 加 const 只能提供命名常量,
外部仍可构造 TokenType("other")。工程上通常接受这个事实,并在 Handler、配置解析、DB 反序列化等边界用 Valid 方法校验,
而不是用复杂封装强行阻止构造。
LLM Prompt Cache 机制
-
OpenAI 24h 缓存本质是磁盘持久化:
OpenAI 的 prompt_cache_retention="24h" 并非延长 GPU 内存中的 TTL,
而是将 KV tensors 转储到本地存储(SSD/GPU-local storage),请求时再加载回显存。
官方文档明确说明"only key/value tensors may be persisted in local storage; the original customer content is only retained in memory"。
这与 in_memory 模式(5-10 分钟,纯 GPU 内存常驻)是互斥的二选一模式,不能同时存在。 -
Anthropic ephemeral type 是协议预留扩展点:
Anthropic 的 cache_control 中 type 字段目前只有 "ephemeral" 一个值,
但设计上这是个可扩展的 type 枚举而非固定常量。未来如果要支持类似 OpenAI 24h 的持久化缓存,
可以直接加 "type": "persistent" 而不改协议结构。同一请求中可以混用不同 TTL(1h 块必须在 5m 块之前),
缓存计费按 breakpoint 位置分段计算。
对话概览
- 了解了 claude-hud(Head-Up Display)开源插件:在 Claude Code 终端底部提供实时状态栏,
展示 token 用量、上下文窗口余量、子 agent 状态、任务进度和 git 信息等会话仪表盘。
Claude Code Statusline 与 Transcript 机制
-
Statusline stdin JSON 只含实时快照:Claude Code 每 ~300ms 调用 statusline 脚本,
通过 stdin 传入 JSON,
包含 model、context_window(token 用量/百分比)、cost、rate_limits、workspace、session_id 等实时字段。
但不包含工具调用历史和 agent 状态。 -
Transcript JSONL 是会话历史的唯一来源:
showTools/showAgents/showTodos 等动态活动信息不在 stdin JSON 中,
必须从 transcript_path 指向的 JSONL 文件解析。transcript 每行一个 JSON 对象,
type 为 assistant/user/system 等,message.content 中包含 tool_use 和 tool_result block,
分别记录工具调用和结果。 -
claude-hud 双通道数据架构:stdin JSON 提供实时快照(上下文用量、费用、速率限制),
transcript JSONL 提供会话历史(工具活动、agent 状态、todo 进度、累计 token、compact 边界、advisor 模型等)。
两者互补——前者回答"当前状态",后者回答"发生过什么"。 -
后台 Agent 完成时间需从 queue-operation 获取:
transcript 中 tool_result 的时间戳是 agent 启动时写入的,不是真正完成时间。
后台 agent 的精确完成时间要从 type=queue-operation、operation=enqueue 的条目中解析 task-id 和 tool-use-id 标签获取。