十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VS Code Copilot 的 /chronicle cost-tips:基于会话历史数据的 Token 用量与成本优化指南

VS Code Copilot 的 /chronicle cost-tips:基于会话历史数据的 Token 用量与成本优化指南 VS Code Copilot 的 /chronicle cost-tips基于会话历史数据的 Token 用量与成本优化指南【免费下载链接】vscodeVisual Studio Code项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscodeCopilot 扩展内置了一套名为 Chronicle 的会话历史分析体系其中/chronicle cost-tips子命令专门用于分析你最近的 Chat 会话给出“个性化、有数据支撑”的降本建议——告诉你哪些会话烧掉了最多 token、哪些模型被用在了琐事上、哪些习惯从不压缩上下文、反复粘贴大段文件在推高成本。本文以 cost-tips 提示词文件 为主体结合 chronicle 技能定义 与 copilot_sessionStoreSql 工具实现完整讲解这一功能的启用前提、工作流程、数据模式与底层安全机制。1. 功能定位一条提示词 一个 SQL 工具 一份技能文档cost-tips 在仓库中的“骨架”非常小但它串联起了三个部分提示词定义chronicle-cost-tips.prompt.md。其全文核心指令是分析最近的会话历史给出个性化、数据支撑的降本建议要求使用chronicle技能该技能文档化了copilot_sessionStoreSql工具、会话存储 schema 和 Cost Tips 工作流程并强制要求每次调用copilot_sessionStoreSql时都设置subcommand: cost-tips用于遥测归因见第 5 节源码。技能文档chronicle/SKILL.md 的 “Cost Tips” 一节是真正的执行规范定义了分析范围、分后端的查询策略和产出要求第 3、4 节详述。工具实现sessionStoreSqlTool.ts 实现了copilot_sessionStoreSql工具本体负责 SQL 安全校验、本地/云端路由和结果格式化。注册关系可在 extensions/copilot/package.json 中确认copilot_sessionStoreSql工具声明了actionquery/reindex、query、force、description、subcommand枚举值standup/tips/cost-tips/search/improve/reindex五个参数且when: github.copilot.sessionSearch.enabledcost-tips 提示词文件同样以该条件注册为 chat prompt仅对local会话类型生效。2. 启用前提两个配置项决定功能形态SKILL.md 明确了 Chronicle 的前置条件且后端形态由配置决定配置项作用说明github.copilot.chat.localIndex.enabled启用本地 SQLite 会话索引和全部/chronicle命令若copilot_sessionStoreSql工具不可用需先在设置中启用此项。源码中该开关定义于 configurationService.ts名为chat.localIndex.enabled实验型设置默认truechat.sessionSync.enabled控制会话是否同步到云端开启后才会启用 per-event token 级分析。本地 SQLite 不记录逐事件 token 用量也没有events表开启云同步后查询会路由到云端 DuckDB 后端含所有设备、所有 agent 的会话路由逻辑在源码中由 SessionIndexingPreference 实现hasCloudConsent()检查chat.sessionSync.enabled是否为true且仓库未被chat.sessionSync.excludeRepositories的 glob 模式排除满足则返回user存储级别否则为local。工具类还会通过alternativeDefinition()在云同步开启时动态替换工具的 modelDescription 和 query 参数描述把 SQLite 语法说明换成 DuckDB 语法说明——所以技能文档反复强调“始终遵循工具描述中展示的 SQL 方言”。3. 核心流程第一步确定分析范围只看 VS Code 交互 ChatSKILL.md 对 Cost Tips 的第一条硬性要求是默认把每条查询都过滤到 VS Code 交互聊天面因为 Copilot CLI、Copilot Coding Agent、Code Review、自定义 agent/subagent 的成本画像差异很大混在一起会污染结论。只有用户明确要求时才扩大范围而且每个 agent 类型单独跑一遍查询绝不混合。难点在于agent_name的取值因后端而异必须逐字精确匹配大小写、空格敏感后端交互式 VS Code Chat 的 agent_name 值备注云DuckDBVS Code Chat—本地SQLiteGitHub Copilot Chat本地还会把 subagent 调用如Explore、summarizeConversationHistory记为独立会话行默认过滤恰好将其排除在正式分析前技能文档要求先跑一次“agent 构成检查”例如SELECT agent_name, COUNT(*) AS n FROM sessions WHERE updated_at 30-day cutoff GROUP BY 1 ORDER BY n DESC;如果交互式 Chat 会话在总盘中只占少数应在总结中明示“建议只覆盖了你活动的一个切片”并主动列出在构成检查中看到的其他候选面如 “要不要对Copilot CLI或Copilot Coding Agent单独跑一轮”让用户知道可以扩大范围。若用户指定了某个面“现在做 CLI 的”则把默认agent_name过滤换成目标值仅对该切片分析并在总结中注明范围变化常用取值跨后端包括Copilot CLI/copilotcli、Copilot Coding Agent以及Explore、summarizeConversationHistory等 subagent 名。4. 核心流程第二步分后端的成本模式排查SKILL.md 将排查策略按后端分叉这是本功能最重要的知识密度所在。4.1 云后端DuckDB直接钻取 token 成本前提是本地 SQLite 没有events表、不记录 per-event token 用量——如果当前后端是本地必须把 token 查询全部“闸门关闭”并告知用户真正的 token 级分析需要开启chat.sessionSync.enabled。云端的计费行是events表中type assistant.usage的行携带usage_input_tokens、usage_output_tokens、usage_model三列通过JOIN events e TO sessions s ON s.id e.session_id并WHERE s.agent_name VS Code Chat锁定范围。技能文档给出五个分析维度高 token 会话与回合按会话、按模型对usage_input_tokens/usage_output_tokens求和。哪些会话最烧 token用的是哪个模型输入/输出比当输入 token 远超输出 token 时说明用户每回合都在重复发送臃肿上下文——这是“该压缩、该缩小工作集、该开新会话”的最强信号。模型构成按usage_model拆分花费。高级模型是否被用在了例行工作改名、简单编辑、状态检查上逐回合增长长会话中usage_input_tokens是否随回合不断爬升强烈暗示从未使用压缩。超大粘贴对events中type user.message的行用LENGTH(user_content)找出本应写成文件引用的超长消息在session_files中也会表现为同一会话内对同一路径的反复读取。4.2 本地后端SQLite没有 token 列用代理指标本地所有查询都必须带上sessions.agent_name GitHub Copilot Chat过滤用以下代理信号替代 token 数据长会话未压缩回合多但checkpoints表无行的会话每行checkpoints代表一次成功的压缩。LEFT JOIN checkpoints c ON c.session_id s.id WHERE c.session_id IS NULL再配合回合数阈值即可筛出重点候选。压缩过晚对确实有 checkpoint 的会话比较checkpoint_number、created_at与会话回合数。80 回合的会话第 60 回合才做第一次压缩远不如第 25 回合做一次的收益大。反复读取大文件在session_files中找同一会话或跨会话内同一文件被读取多次的模式。工具调用抖动回合多且工具调用重复的会话往往意味着 agent 多次重新发现同样的上下文。超大粘贴用turns表的LENGTH(user_message)定位应当改为文件引用的超长用户消息。4.3 双后端通用维度长时运行会话回合多或跨越多小时的会话会把不断膨胀的上下文窗口拖过每一个回合。重复劳动同一文件/话题出现在大量会话中或同一类 agent 绊脚石反复出现——建议用自定义 skill、agent 或copilot-instructions.md条目让模型一次做对。subagent 使用重量级调研是否都在主会话里跑其 token 会沉淀进主上下文而本可以委派给只回传摘要的 subagent技能文档还特别要求钻取几个最贵的会话、阅读真实对话回合解释它们为什么贵而不是只报告聚合数字。5. 核心流程第三~四步映射到功能与习惯产出 3–5 条建议排查完成后技能文档要求先检查工作区的.github/目录只许看工作区内确认.github/copilot-instructions.md、.github/skills/、.github/agents/中已有哪些自定义配置然后把发现映射到以下成本相关能力上会话中压缩如/compact缩小上下文窗口——对从不压缩的用户这通常是最单项最大的收益模型选择器——例行工作切换到更便宜的模型开新聊天替代继续臃肿的旧会话subagent/委派——把重调研卸载到 token 不会累进主会话的上下文中自定义 skills.github/skills/与自定义 agents.github/agents/——让重复工作流不必每次重新推导上下文.github/copilot-instructions.md——把每个会话都要口头交代的项目约定固化下来对已开云同步的用户提示其用Copilot 用量视图查看当前 premium 请求花费。最终产出要求 3–5 条具体、可执行的建议每条必须满足四个标准扎根于用户数据引用观察到的具体会话、文件、模型、模式能带粗略数字就带回合数、token 总量、文件读取次数非显而易见假设用户已经知道压缩和新聊天的存在帮他注意到自己没有用尽可能量化收益“在那个 80 回合会话的第 30 回合左右压缩会让之后每个回合省下约 X 个输入 token” 远胜 “考虑压缩一下”具体点名工作流变更、命令或配置文件编辑若是自定义 skill/agent要勾勒覆盖范围。边界情况也有规定会话存储数据很少时直说并基于可用功能给 2–3 条非显而易见的省钱习惯不虚构发现纯本地存储用户结尾要注明开启chat.sessionSync.enabled可解锁 per-event token 分析让未来的建议更尖锐。6. 源码级补充copilot_sessionStoreSql 工具的安全与工程实现提示词和技能文档约束的是模型行为而 sessionStoreSqlTool.ts 约束的是执行边界。几个值得注意的实现事实只读 SQL 的三重校验对应 SKILL.md “Query Guidelines” 一节先剥离尾随分号再遍历BLOCKED_PATTERNS黑名单——INSERT/UPDATE/DELETE/DROP/CREATE/ALTER/TRUNCATE/REPLACE、ATTACH/DETACH/PRAGMAPRAGMA data_version例外、VACUUM/REINDEX/ANALYZE、LOAD_EXTENSION防原生代码加载导致的 RCE、事务控制语句剥掉前导注释后做白名单检查——首词必须是SELECT或WITH注释前缀无法把非查询语句“夹带”进来拒绝任何含分号的多语句输入——每次调用只允许一条查询。结果尺寸管控MAX_ROWS 100截断行数formatSqlResult 以 30,000 字符为总预算把预算均分到每个单元格做自适应截断超预算再硬截并提示 “Add a LIMIT clause or narrow your query”——这正是技能文档要求“必须用 LIMIT最大 100、优先聚合而非裸行 dump”的原因。路由与降级hasCloudConsent()为真时走 CloudSessionStoreClient 执行 DuckDB 查询云端返回错误时把错误和 “Cloud uses DuckDB SQL syntax…” 提醒回传给模型自行修正鉴权/网络失败则静默降级到本地 SQLitesource: local_fallback。subcommand: cost-tips的作用这就是提示词文件里那句“每次调用都要设置”的落点——SessionStoreSqlParams.subcommand 被原样送入chronicle.sqlQuery遥测事件属性subcommand注释写明“原始 /chronicle slash 命令standup, tips, cost-tips, search, improve, reindexad-hoc 调用为 unknown”用于事后分析各子命令的调用量、成功率、行数与耗时而不影响查询行为本身。reindex 动作action: reindex会调用 sessionReindexer 从调试日志重建本地会话存储默认跳过已索引会话force: true可全量重跑返回前后对比的 Sessions/Turns/Files/Refs 统计表若云同步开启还会触发github.copilot.sessionSync.reindex命令把新会话上传云端云端阶段失败不致命。7. 成本相关数据模式速查SKILL.md “Cost-relevant schema” 一节列出了超出基础 schema 的成本相关表结构与基础表sessions、turns、checkpoints、session_files、session_refs、本地独有的 FTS5search_index配合使用表/列后端用途events约 90 列重点列session_id、timestamp、type、user_content、assistant_content、usage_model、usage_input_tokens、usage_output_tokens仅云type assistant.usage行即计费行是 token 级分析的唯一数据源tool_requestssession_id、tool_call_id、name、arguments_json仅云工具调用明细turns.user_message/events.user_content各自后端用LENGTH()找超大粘贴sessions.agent_name/agent_description双后端范围过滤的关键列取值因后端而异见第 3 节表日期运算方言也随后端切换SQLite 用datetime(now, -1 day)DuckDB 用now() - INTERVAL 1 day文本搜索 SQLite 用 FTS5MATCHDuckDB 用ILIKE时长计算用date_diff(minute, start, end)。8. 小结/chronicle cost-tips的设计本质是“用你自己的会话数据驱动的建议引擎”提示词chronicle-cost-tips.prompt.md负责触发与强制subcommand标记技能文档SKILL.md负责定义“范围 → 排查 → 映射 → 产出”四步工作流和分后端的查询策略工具实现sessionStoreSqlTool.ts负责保证模型只能执行只读单语句 SQL 且结果尺寸有界。启用路径是开启github.copilot.chat.localIndex.enabled获得本地代理指标分析再开启chat.sessionSync.enabled获得 per-event token 级的精确成本剖析。理解这条从配置项到提示词再到工具校验的完整链路既能帮助你把 cost-tips 的输出读对知道每条建议背后查的是什么数据也为阅读仓库中其他 chronicle 子命令standup、tips、search、improve、reindex的提示词文件提供了同样的分析框架。【免费下载链接】vscodeVisual Studio Code项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscode创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表