标签 token usage 下的文章

这是一个愚蠢的错误,因为长久以来我一直觉得 baseurl 可能不用加 /v1 (而且我也不理解,因为 baseurl 顾名思义就是基础 url, 所以我一直不理解), 除非出错了我才会想起来应该加 v1, 如果有大佬知道希望解惑一下


放一个仪表盘
你可能发现你的请求在 CLIPROXY 里看起来经常成功,但是 opencode 会卡住,要么是开始卡住,要么是新 task 的时候卡住,开始卡住是因为开始用的就是 CLIPROXY 的模型,新 task 卡住是因为新 task 配的模型是 CLIPROXY 模型
不知道为什么没有人提过这个问题,可能成功者的成功千篇一律,失败者的失败万里挑一吧
考虑到确实困扰了我一段时间,所以虽然很搞笑,但是我还是发出来了
但是我还是感觉很莫名其妙:baseurl 没有加 v1, 返回的全是页面首页,CLIPROXY 以为成功了所以不会报错,opencode 不知道为什么也不会报错,所以很难找出 bug, 除非灵机一动用 curl 看了看输出


📌 转载信息
原作者:
prosumer
转载时间:
2026/1/12 17:10:29

有小伙伴对使用量没有概念,我分享下自己用的,统计每日 token 使用量的 statusline 插件,适用于官方标准输出结构,有些 2api 结构不符合标准,响应缺少 token 使用量的字段,会导致无法统计。

Claude Pro 用量统计

一个五小时周期差不多可以使用 15-20M 的总 token 数,算上读写缓存的计费方式,一个五小时周期差不多可以使用 8-12 刀的用量

插件代码

文件路径以及文件名: ~/.claude/statusline-tokens.sh

插件代码
#!/bin/bash

# Status line with daily token usage tracking for Claude Code
input=$(cat)

# Extract basic info
cwd=$(echo "$input" | jq -r '.workspace.current_dir')
transcript_path=$(echo "$input" | jq -r '.transcript_path')
base_dir=$(basename "$cwd")

# Git info
git_info=""
if git -C "$cwd" rev-parse --git-dir > /dev/null 2>&1; then
  branch=$(git -C "$cwd" --no-optional-locks rev-parse --abbrev-ref HEAD 2>/dev/null)
  if ! git -C "$cwd" --no-optional-locks diff --quiet 2>/dev/null || \
     ! git -C "$cwd" --no-optional-locks diff --cached --quiet 2>/dev/null; then
    git_info=$(printf "\033[1;34mgit:(\033[0;31m%s\033[1;34m) \033[0;33m✗\033[0m " "$branch")
  else
    git_info=$(printf "\033[1;34mgit:(\033[0;31m%s\033[1;34m)\033[0m " "$branch")
  fi
fi

# Daily token tracking file
DAILY_TOKENS_FILE="$HOME/.claude/daily_tokens.json"
TODAY=$(date +%Y-%m-%d)

# Initialize or load daily tokens data
if [ ! -f "$DAILY_TOKENS_FILE" ]; then
  # Create initial structure
  echo "{\"date\":\"$TODAY\",\"sessions\":{}}" > "$DAILY_TOKENS_FILE"
fi

# Check if we need to reset for a new day
stored_date=$(jq -r '.date // ""' "$DAILY_TOKENS_FILE" 2>/dev/null)
if [ "$stored_date" != "$TODAY" ]; then
  # New day, reset the file
  echo "{\"date\":\"$TODAY\",\"sessions\":{}}" > "$DAILY_TOKENS_FILE"
fi

# Token info - parse JSONL format
token_info=""
if [ -f "$transcript_path" ]; then
  # Calculate tokens from current session's JSONL file - separate by type
  session_input_tokens=$(jq -s '
    [.[] | select(.type == "assistant") |
     .message.usage.input_tokens // 0
    ] | add // 0
  ' "$transcript_path" 2>/dev/null)

  session_cache_creation_tokens=$(jq -s '
    [.[] | select(.type == "assistant") |
     .message.usage.cache_creation_input_tokens // 0
    ] | add // 0
  ' "$transcript_path" 2>/dev/null)

  session_cache_read_tokens=$(jq -s '
    [.[] | select(.type == "assistant") |
     .message.usage.cache_read_input_tokens // 0
    ] | add // 0
  ' "$transcript_path" 2>/dev/null)

  session_output_tokens=$(jq -s '
    [.[] | select(.type == "assistant") |
     .message.usage.output_tokens // 0
    ] | add // 0
  ' "$transcript_path" 2>/dev/null)

  # Update session tokens in the daily file (overwrite, not add)
  if [ -n "$session_input_tokens" ] && [ -n "$session_output_tokens" ] && \
     [ "$session_input_tokens" != "null" ] && [ "$session_output_tokens" != "null" ]; then

    # Escape the transcript path for use as JSON key
    escaped_path=$(echo "$transcript_path" | sed 's/\\/\\\\/g; s/"/\\"/g')

    # Update the session data with all token types
    jq --arg path "$escaped_path" \
       --argjson inp "$session_input_tokens" \
       --argjson cr "$session_cache_creation_tokens" \
       --argjson rd "$session_cache_read_tokens" \
       --argjson outp "$session_output_tokens" \
       '.sessions[$path] = {"input": $inp, "cache_create": $cr, "cache_read": $rd, "output": $outp}' \
       "$DAILY_TOKENS_FILE" > "${DAILY_TOKENS_FILE}.tmp" && \
       mv "${DAILY_TOKENS_FILE}.tmp" "$DAILY_TOKENS_FILE"

    # Calculate total from all sessions - separate by type
    input_tokens=$(jq '[.sessions[].input] | add // 0' "$DAILY_TOKENS_FILE" 2>/dev/null)
    cache_create_tokens=$(jq '[.sessions[].cache_create] | add // 0' "$DAILY_TOKENS_FILE" 2>/dev/null)
    cache_read_tokens=$(jq '[.sessions[].cache_read] | add // 0' "$DAILY_TOKENS_FILE" 2>/dev/null)
    output_tokens=$(jq '[.sessions[].output] | add // 0' "$DAILY_TOKENS_FILE" 2>/dev/null)

    # Format and display if we have valid data
    if [ "$input_tokens" != "0" ] || [ "$cache_create_tokens" != "0" ] || [ "$cache_read_tokens" != "0" ] || [ "$output_tokens" != "0" ]; then
      total_tokens=$((input_tokens + cache_create_tokens + cache_read_tokens + output_tokens))

      # Function to format number with K (thousands) and M (millions)
      format_number() {
        local num=$1
        if [ "$num" -ge 1000000 ]; then
          # Convert to M with 1 decimal place
          local m_value=$(echo "scale=1; $num / 1000000" | bc | sed 's/\.0$//')
          echo "${m_value}M"
        elif [ "$num" -ge 1000 ]; then
          # Convert to K with 1 decimal place
          local k_value=$(echo "scale=1; $num / 1000" | bc | sed 's/\.0$//')
          echo "${k_value}K"
        else
          echo "$num"
        fi
      }

      # Format with K/M suffix for all token types
      input_fmt=$(format_number $input_tokens)
      cache_create_fmt=$(format_number $cache_create_tokens)
      cache_read_fmt=$(format_number $cache_read_tokens)
      output_fmt=$(format_number $output_tokens)
      total_fmt=$(format_number $total_tokens)

      token_info=$(printf "\033[0;35m[📊 今日用量 |\033[0m In:\033[0;36m%s\033[0m CW:\033[0;33m%s\033[0m CR:\033[0;32m%s\033[0m Out:\033[0;35m%s\033[0m Total:\033[1;32m%s\033[0;35m]\033[0m " \
        "$input_fmt" "$cache_create_fmt" "$cache_read_fmt" "$output_fmt" "$total_fmt")
    fi
  fi
fi

# Output final status line
printf "\033[1;32m➜\033[0m  \033[0;36m%s\033[0m %s\n%s" "$base_dir" "$git_info" "$token_info"

配置方法

1. 设置状态栏脚本

~/.claude/settings.json 文件中添加以下配置:

{ "statusLine": { "type": "command", "command": "bash ~/.claude/statusline-tokens.sh" } } 

2. 确保脚本可执行

chmod +x ~/.claude/statusline-tokens.sh

3. 重启 Claude Code

配置完成后,重启 Claude Code 即可看到新的状态栏显示。


显示效果

状态栏格式

➜  项目名称 git:(分支名)
[📊 今日用量 | In:12.5K CW:5K CR:8K Out:6.3K Total:31.8K]

各部分说明

部分说明示例
命令提示符
项目名称当前工作目录名称my-project
git:(分支名)Git 分支信息(如果是 Git 仓库)git:(main)
📊 今日用量Token 统计标识📊 今日用量
In:XXX输入 Token 数量(青色)In:12.5K
CW:XXX缓存写入 Token 数量(黄色)CW:5K
CR:XXX缓存读取 Token 数量(绿色)CR:8K
Out:XXX输出 Token 数量(紫色)Out:6.3K
Total:XXX总 Token 数量(亮绿色加粗)Total:31.8K



📌 转载信息
原作者:
fuller-xu
转载时间:
2026/1/1 16:14:22