Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ContextPilot

开源的 AI 编码上下文智能压缩与监控引擎 解决 Claude Code / Cursor / OpenCode 等工具的上下文窗口爆炸问题


它是干什么的?

你用 Claude Code 或 Cursor 写代码时,有没有遇到这些问题?

  • 聊了十几分钟,AI 突然说"上下文太长了"
  • 每次读取一个文件,几百行代码全部塞进了上下文
  • 同一个文件被读取了三次,三份完整内容全在上下文里
  • 工具调用的返回结果越来越多,token 消耗飞速增长 image

ContextPilot 就是为了解决这个问题的。

它作为一个透明代理运行在你的电脑上,拦截 AI 工具发出的请求,自动压缩上下文、去除重复内容、智能裁剪工具返回结果,然后把优化后的内容发给真正的 API。你的 AI 工具完全感知不到这个过程。

同时,它提供一个 Web 控制面板,让你可以实时看到上下文占用情况、调整压缩策略、手动管理消息。


快速上手

第一步:获取代码

git clone https://github.com/xxx/contextpilot.git
cd contextpilot

第二步:一键启动

Windows 用户:

start.bat --target https://api.anthropic.com

macOS / Linux 用户:

./start.sh --target https://api.anthropic.com

脚本会自动完成:检查 Python 版本 → 创建虚拟环境 → 安装依赖 → 构建前端 → 启动服务。

启动成功后会看到:

🚀 ContextPilot v0.1.0
📡 代理运行在: http://localhost:8090
📊 控制面板:   http://localhost:8090  (已在浏览器中打开)
🎯 目标 API:   https://api.anthropic.com
⚡ 压缩引擎:   已启用

第三步:配置你的 AI 工具

把 AI 工具的 API 地址改成 ContextPilot 的代理地址:

Claude Code:

export ANTHROPIC_BASE_URL=http://localhost:8090
# 之后正常使用 claude 命令即可

Cursor: 在设置 → API 配置中,把 Base URL 改为 http://localhost:8090

OpenCode / 其他 OpenAI 兼容工具:

export OPENAI_BASE_URL=http://localhost:8090

搞定! 从现在起,所有请求都会经过 ContextPilot 自动优化。


控制面板

启动后,打开浏览器访问 http://localhost:8090,进入 Web 控制面板。

概览页

实时显示你当前的上下文健康状态:

  • 进度条:显示已用 token 占总量的百分比(绿色正常,橙色警告,红色危险)
  • 占用分布:饼图展示系统提示、对话历史、工具返回各占多少
  • 节省统计:本次会话已经帮你省了多少 token,折算成大约省了多少钱
  • 立即压缩:不想等自动触发,点一下按钮立刻压缩
  • 开新会话:清空当前上下文,重新开始统计

消息管理页

逐条查看当前上下文里的每条消息:

  • 每条消息显示:角色(系统/用户/AI/工具)、占用 token 数、内容预览
  • 可以对单条消息操作:保护(不让任何策略碰它)、删除(从上下文中移除)
  • 批量去重:一键处理所有检测到的重复内容
  • 点击消息行可展开查看完整内容

压缩策略页

这是核心设置页。你可以:

选择预设(推荐初次使用):

预设 适合谁
保守模式 上下文窗口大(200K+)、不太爆,想最大保留信息
均衡模式(默认) 大多数用户,平衡压缩率和信息保留
激进模式 上下文经常爆,想最大程度压缩

或者自定义每个策略:

  • 对话历史压缩:保留最近几轮完整对话,更早的历史自动摘要
  • 工具结果裁剪:读取的代码文件超过多少行就截断,命令输出保留头尾
  • 重复内容去重:自动检测同一文件被读取多次,只保留最新版本
  • 优先级淘汰:上下文快满时,按优先级从低到高依次淘汰,系统提示和你最新的消息永远不会被删

所有修改立即生效,不需要重启。

历史记录页

查看所有历史会话的统计数据:

  • 累计处理了多少个会话
  • 总共节省了多少 token(折算成钱更有体感)
  • 近7天的每日消耗趋势图
  • 每个会话的详细记录

常用参数

# 连接到不同的 AI 服务
./start.sh --target https://api.anthropic.com    # Claude
./start.sh --target https://api.openai.com        # OpenAI
./start.sh --target http://localhost:11434         # Ollama(本地模型)

# 自定义端口(默认代理 8090)
./start.sh --target https://api.anthropic.com --port 9090

# 不自动打开浏览器
./start.sh --target https://api.anthropic.com --no-browser

工作原理(技术版)

你的 AI 工具
    │
    │  发出请求(header 里带 API key,body 里带 messages)
    ▼
ContextPilot 代理 (localhost:8090)
    │
    ├── 读取 body 中的 messages 数组
    ├── 识别 API 类型(/v1/messages → Anthropic,/v1/chat/completions → OpenAI)
    ├── 按你在 Web UI 里设置的策略执行压缩
    ├── header 原样透传(API key 绝不读取、不记录、不存储)
    └── 把优化后的 messages 发给真正的 API

真正的 LLM API(Anthropic / OpenAI / ...)

关于隐私和安全:

  • API key 只在请求 header 里传递,ContextPilot 完全不读取它
  • 代码和对话内容只在内存里短暂处理,绝不写入文件
  • 本地 JSON 文件只存储 token 数量等统计数字,不存任何内容
  • 纯本地运行,没有任何数据发送到远端服务器

数据文件

所有数据存储在项目的 data/ 目录下,纯 JSON 文件,可以直接读取和编辑:

data/
├── settings.json       # 全局设置(端口、通知等)
├── strategies.json     # 压缩策略配置(Web UI 中的所有选项)
├── sessions/           # 每个会话一个文件(只有统计数字)
└── presets/            # 三个内置预设(保守/均衡/激进)

想清除所有历史数据?直接删除 data/sessions/ 目录里的文件,或者在控制面板的历史记录页点"清除所有历史"。


环境要求

要求 版本
Python 3.11 或以上
Node.js 18 或以上(仅首次构建前端时需要)
操作系统 Windows / macOS / Linux

手动启动(不用 start 脚本)

如果你想手动控制启动过程:

# 1. 创建并激活虚拟环境
python -m venv .venv
source .venv/bin/activate      # macOS/Linux
# 或 .venv\Scripts\activate    # Windows

# 2. 安装依赖
pip install -r requirements.txt

# 3. 构建前端(只需做一次)
cd frontend
npm install
npm run build
cd ..

# 4. 启动
python -m backend.main --target https://api.anthropic.com

常见问题

Q:会影响 AI 回复的速度吗? A:有极少量额外延迟(目标 < 50ms),通常感知不到。压缩上下文反而会让 AI 回复更快,因为处理的 token 更少了。

Q:会不会压缩掉重要内容? A:默认的均衡模式比较保守,会保留最近8轮完整对话。你可以在策略页设置"保护关键词",含有这些词的消息绝对不会被压缩。也可以在消息管理页对单条重要消息点"保护"。

Q:支持哪些 AI 服务? A:支持所有兼容 Anthropic API(/v1/messages)或 OpenAI API(/v1/chat/completions)的服务,包括 Claude、GPT、DeepSeek、本地 Ollama 等。不认识的请求路径会直接透传,不做任何处理。

Q:数据安全吗? A:完全安全。API key 从不被读取,代码内容从不写入磁盘,所有数据都在本地。你可以审查全部源码。

Q:和各 AI 工具自带的"自动压缩"有什么区别? A:各工具自带的自动压缩是黑盒,你不知道它压了什么、什么时候触发、会不会丢重要上下文。ContextPilot 让这个过程完全可见可控,你可以实时看到上下文状态,自己决定保留什么、压缩什么。


项目状态

当前版本:v0.1.0 (MVP)

已实现功能:

  • 反向代理核心(透明拦截 + header 透传)
  • Streaming(SSE)响应原样转发
  • 自动识别 Anthropic / OpenAI API 格式
  • Token 计数(tiktoken)+ 智能模型识别
  • 对话历史滑动压缩
  • 工具返回结果按行数截断
  • 精确重复去重 + 同文件重复检测
  • 优先级淘汰(超阈值自动触发)
  • Web 控制面板(概览/消息/策略/历史,四个 Tab)
  • WebSocket 实时推送
  • JSON 文件存储(三个策略预设)
  • 一键启动脚本(Windows + macOS/Linux)

路线图:

  • tree-sitter AST 智能代码裁剪(Python/JS/Go)
  • 拖拽排序优先级淘汰列表
  • 浏览器通知告警
  • 策略实时预估效果
  • Docker 镜像

开源协议

MIT License — 自由使用、修改、分发。


如果这个工具对你有帮助,欢迎给个 Star

About

ContextPilot 是一个本地运行的反向代理工具,拦截 AI 编码工具与 LLM API 之间的请求,自动压缩上下文、去除冗余、智能裁剪,实时查看上下文消息,同时提供实时可视化监控仪表盘,让开发者永远不再遇到上下文爆炸。

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages