跳转至

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 标签获取。