name: gemini-token-optimization description: 在委托给Gemini CLI时优化令牌使用。涵盖令牌缓存、批量查询、模型选择(Flash vs Pro)和成本跟踪。在计划批量Gemini操作时使用。 allowed-tools: Read, Skill
Gemini令牌优化
🚨 强制:首先调用gemini-cli-docs
停止 - 在提供任何关于Gemini令牌使用的响应之前:
- 调用
gemini-cli-docs技能- 查询 特定的令牌或定价主题
- 基于 所有响应完全基于加载的官方文档
概述
用于优化委托给Gemini CLI时的成本和令牌使用的技能。对于高效的批量操作和成本敏感的工作流程至关重要。
何时使用此技能
关键词: 令牌使用、成本优化、gemini成本、模型选择、flash vs pro、缓存、批量查询、减少令牌
在以下情况使用此技能:
- 计划批量Gemini操作时
- 优化大规模分析的成本时
- 选择Flash和Pro模型时
- 理解令牌缓存的好处时
- 跨会话跟踪使用情况时
令牌缓存
Gemini CLI自动缓存上下文,通过重用先前处理的内容来降低成本。
可用性
| 认证方法 | 缓存可用 |
|---|---|
| API密钥 (Gemini API) | 是 |
| Vertex AI | 是 |
| OAuth (个人/企业) | 否 |
工作原理
- 系统指令和重复的上下文被缓存
- 缓存的令牌不计入账单
- 通过
/stats命令或JSON输出来看节省情况
最大化缓存命中率
- 使用一致的系统提示 - 相同的前缀增加缓存重用
- 批量类似查询 - 将相关分析分组在一起
- 重用上下文文件 - 相同文件按相同顺序
监控缓存使用
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): 初始发布