Gemini令牌优化技能Skill gemini-token-optimization

本技能用于优化Gemini CLI的令牌使用,涵盖令牌缓存、批量查询、模型选择(Flash vs Pro)和成本跟踪,帮助降低大规模AI操作的成本并提升效率。关键词:Gemini、令牌优化、成本控制、模型选择、批量处理、AI应用、缓存策略。

AI应用 0 次安装 0 次浏览 更新于 3/11/2026

name: gemini-token-optimization description: 在委托给Gemini CLI时优化令牌使用。涵盖令牌缓存、批量查询、模型选择(Flash vs Pro)和成本跟踪。在计划批量Gemini操作时使用。 allowed-tools: Read, Skill

Gemini令牌优化

🚨 强制:首先调用gemini-cli-docs

停止 - 在提供任何关于Gemini令牌使用的响应之前:

  1. 调用 gemini-cli-docs 技能
  2. 查询 特定的令牌或定价主题
  3. 基于 所有响应完全基于加载的官方文档

概述

用于优化委托给Gemini CLI时的成本和令牌使用的技能。对于高效的批量操作和成本敏感的工作流程至关重要。

何时使用此技能

关键词: 令牌使用、成本优化、gemini成本、模型选择、flash vs pro、缓存、批量查询、减少令牌

在以下情况使用此技能:

  • 计划批量Gemini操作时
  • 优化大规模分析的成本时
  • 选择Flash和Pro模型时
  • 理解令牌缓存的好处时
  • 跨会话跟踪使用情况时

令牌缓存

Gemini CLI自动缓存上下文,通过重用先前处理的内容来降低成本。

可用性

认证方法 缓存可用
API密钥 (Gemini API)
Vertex AI
OAuth (个人/企业)

工作原理

  • 系统指令和重复的上下文被缓存
  • 缓存的令牌不计入账单
  • 通过/stats命令或JSON输出来看节省情况

最大化缓存命中率

  1. 使用一致的系统提示 - 相同的前缀增加缓存重用
  2. 批量类似查询 - 将相关分析分组在一起
  3. 重用上下文文件 - 相同文件按相同顺序

监控缓存使用

result=$(gemini "query" --output-format json)
total=$(echo "$result" | jq '.stats.models | to_entries | map(.value.tokens.total) | add // 0')
cached=$(echo "$result" | jq '.stats.models | to_entries | map(.value.tokens.cached) | add // 0')
billable=$((total - cached))
savings=$((cached * 100 / total))

echo "总计: $total 令牌"
echo "缓存: $cached 令牌 ($savings% 节省)"
echo "计费: $billable 令牌"

模型选择

模型比较

模型 上下文窗口 速度 成本 质量
gemini-2.5-flash 较低
gemini-2.5-pro 非常大 较慢 较高 最佳

选择标准

使用Flash (-m gemini-2.5-flash) 当:

  • 处理大文件(批量分析)时
  • 简单提取任务时
  • 成本是主要关注点时
  • 速度至关重要时
  • 任务直接了当时

使用Pro (-m gemini-2.5-pro) 当:

  • 需要复杂推理时
  • 质量至关重要时
  • 需要细致分析时
  • 任务需要深入理解时
  • 上下文超过100万令牌时

模型选择示例

# 批量文件分析 - 使用Flash
for file in src/*.ts; do
  gemini "列出所有导出" -m gemini-2.5-flash --output-format json < "$file"
done

# 安全审计 - 使用Pro以获得质量
gemini "深度安全分析" -m gemini-2.5-pro --output-format json < critical-auth.ts

# 带模型信息的成本跟踪
result=$(gemini "query" --output-format json)
model=$(echo "$result" | jq -r '.stats.models | keys[0]')
tokens=$(echo "$result" | jq '.stats.models | to_entries[0].value.tokens.total')
echo "使用 $model: $tokens 令牌"

批量策略

为什么批量?

  • 减少API开销
  • 增加缓存命中率
  • 提供一致上下文

批量模式

模式1:连接文件

# 而不是N个单独调用
# 用一个调用包含所有文件
cat src/*.ts | gemini "分析所有TypeScript文件的模式" --output-format json

模式2:批量提示

# 组合相关问题
gemini "回答关于代码库的这些问题:
1. 主要架构模式是什么?
2. 认证如何处理?
3. 使用什么数据库?" --output-format json

模式3:分阶段分析

# 第一遍:使用Flash快速概览
overview=$(cat src/*.ts | gemini "列出所有模块" -m gemini-2.5-flash --output-format json)

# 第二遍:使用Pro深入分析关键区域
echo "$overview" | jq -r '.response' | grep "auth\|security" | while read module; do
  gemini "深度分析 $module" -m gemini-2.5-pro --output-format json
done

成本跟踪

每次查询跟踪

result=$(gemini "query" --output-format json)

# 提取所有成本相关统计
total_tokens=$(echo "$result" | jq '.stats.models | to_entries | map(.value.tokens.total) | add // 0')
cached_tokens=$(echo "$result" | jq '.stats.models | to_entries | map(.value.tokens.cached) | add // 0')
models_used=$(echo "$result" | jq -r '.stats.models | keys | join(", ")')
tool_calls=$(echo "$result" | jq '.stats.tools.totalCalls // 0')
latency=$(echo "$result" | jq '.stats.models | to_entries | map(.value.api.totalLatencyMs) | add // 0')

echo "$(date): tokens=$total_tokens cached=$cached_tokens models=$models_used tools=$tool_calls latency=${latency}ms" >> usage.log

会话跟踪

# 跟踪会话中的累计使用
total_session_tokens=0
total_session_cached=0
total_session_calls=0

track_usage() {
  local result="$1"
  local tokens=$(echo "$result" | jq '.stats.models | to_entries | map(.value.tokens.total) | add // 0')
  local cached=$(echo "$result" | jq '.stats.models | to_entries | map(.value.tokens.cached) | add // 0')

  total_session_tokens=$((total_session_tokens + tokens))
  total_session_cached=$((total_session_cached + cached))
  total_session_calls=$((total_session_calls + 1))
}

# 在工作流中使用
result=$(gemini "query 1" --output-format json)
track_usage "$result"

result=$(gemini "query 2" --output-format json)
track_usage "$result"

echo "会话总计: $total_session_tokens 令牌 ($total_session_cached 缓存) 在 $total_session_calls 次调用中"

优化检查清单

大型操作前

  • [ ] 选择合适模型(Flash vs Pro)
  • [ ] 检查缓存是否可用(API密钥或Vertex)
  • [ ] 计划批量策略
  • [ ] 设置使用跟踪

操作期间

  • [ ] 监控缓存命中率
  • [ ] 跟踪每次查询成本
  • [ ] 如果质量不足则调整模型
  • [ ] 批量类似查询

操作后

  • [ ] 审查总使用情况
  • [ ] 计算有效成本
  • [ ] 识别优化机会
  • [ ] 记录学习

快速参考

成本节约命令

# 使用Flash进行批量
gemini "query" -m gemini-2.5-flash --output-format json

# 检查缓存效果
gemini "query" --output-format json | jq '{total: .stats.models | to_entries | map(.value.tokens.total) | add, cached: .stats.models | to_entries | map(.value.tokens.cached) | add}'

# 最小化输出(减少输出令牌)
gemini "用一句话回答:{question}" --output-format json

成本估算

粗略令牌估计:

  • 1 令牌 ~ 4 字符(英语)
  • 1 页代码 ~ 500-1000 令牌
  • 典型源文件 ~ 200-2000 令牌

关键词注册表(委托给gemini-cli-docs)

主题 查询关键词
缓存 token caching, cached tokens, /stats
模型选择 model routing, flash vs pro, -m flag
成本 quota pricing, token usage, billing
输出控制 output format, json output

测试场景

场景1:检查令牌使用

查询:“如何查看Gemini使用了多少令牌?” 预期行为

  • 技能在“令牌使用”或“gemini成本”上激活
  • 提供JSON统计提取模式 成功标准:用户收到提取令牌计数的jq命令

场景2:降低成本

查询:“如何降低Gemini CLI进行批量分析的成本?” 预期行为

  • 技能在“成本优化”或“减少令牌”上激活
  • 推荐Flash模型和批量 成功标准:用户收到成本优化策略

场景3:模型选择

查询:“我应该使用Flash还是Pro来处理这个任务?” 预期行为

  • 技能在“flash vs pro”或“模型选择”上激活
  • 提供决策标准表 成功标准:用户收到模型比较和推荐

参考文献

查询 gemini-cli-docs 获取官方文档:

  • “token caching”
  • “model selection”
  • “quota and pricing”

版本历史

  • v1.1.0 (2025-12-01): 添加测试场景部分
  • v1.0.0 (2025-11-25): 初始发布