ExtensionSession@piex-dev/context

context — 看清 Session 到底吃了多少 Token

导语

/context 一眼看清当前 session 的内容分布:谁在占用上下文、哪些条目膨胀最快、你的 token 预算都花在哪了。

简介

coding agent 用久了,上下文窗口是最大的隐形成本。你感觉「越聊越慢」「回答变浅」,但很难定位根源——是 tool results 膨胀?某次 read 拉了冗余内容?还是对话历史本身过长?pi 内置的 /session 只展示 session 列表,缺少单 session 内容分布分析。@piex-dev/context 填补这个缺口:一次性输出结构化条目分析、角色占比和 token 估算。

技术原理

Token 估算:不做精确 token counting(精确计数需调模型 tokenizer,成本太高),用业界通用的「字符数 / 3.5」经验公式。对中英混合偏保守但不失为有用的相对比较。分析维度:按 role(user/assistant/system)+ type(message/tool_call/tool_result/custom)分类统计字符数,三个角色为分析主轴——Assistant(模型回答,通常大头)、User(你的指令)、Tool Results(最容易意外膨胀,如 read 大文件、grep 结果过多)。

flow
session entries → 按 role 分类 → 按 type 分类
→ 按角色统计字符数 → ASCII bar chart + 结构化表格

使用说明

安装

bash
pi install npm:@piex-dev/context

仓库源码:extensions/context

用法

bash
/context

输出 Overview 表格 + Distribution ASCII 柱状图 + token 估算。

配置

无配置项,开箱即用。token 估算固定用 chars / 3.5 系数。

验证

bash
pi -e ./extensions/context/src/context.ts -p "what is 1+1" --no-session

实现方案

约 160 行单文件。核心函数:analyzeEntries()(遍历 entries 按 role/type 统计)、countChars()(适配 string 与 content block 数组)、buildReport()(Markdown 表格 + ASCII 柱状图)、estimateTokens()(chars/3.5)、buildBar()(█/░ 柱状图)。

report
## Context Usage Report

### Overview
| Metric            | Value |
| Total entries     | 42    |
| Estimated tokens  | ~3.2k |

### Distribution
████████████░░░░░░░░ Assistant     62%
██████░░░░░░░░░░░░░░ User          28%
██░░░░░░░░░░░░░░░░░░ Tool Results  10%
pi /sessioncontext (piex)
展示 session 列表展示当前 session 内容分布
无分布图表ASCII bar chart
无 token 估算chars → tokens 估算
无条目分类按 role/type 详细分类

设计参考

项目机制piex 取舍
pi 内置 /session展示 session 列表,无单 session 内容分布并存:context 补齐分布分析、token 估算、role/type 分类,不替换 /session
业界 token 估算字符数 / 3.5 经验公式采纳:相对比较够用且零成本,偏保守但适合定位「谁在膨胀」

核心取舍:相对比较优先于精确计数(零成本、定位问题够用),静态快照优先于时序分析(先解决「现在谁占得多」)。

迭代记录

路线图

方向打算
精确 token 计数chars/3.5 对中英混合偏差较大;pi 暴露 tokenizer 接口后切换精确计算
时序分析当前只做静态快照;加「token 消耗随 turn 增长」时序图定位哪个 turn 膨胀最快
异常检测自动标记 tool results 超阈值(如 50K chars)的条目,提示检查是否拉了多余内容
可配置度量按项目自定义估算系数,甚至接入外部 tokenizer

版本记录

版本日期变更
0.1.02026-07-19初始版本:/context 输出 session 内容分布报告;analyzeEntries 按 role(user/assistant/system)+ type(message/tool_call/tool_result/custom)分类统计;estimateTokens(chars/3.5);ASCII bar chart 分布可视化;与 pi /session 并存(补分布分析 + token 估算 + 分类)