使用说明
模型上下文引擎
令牌感知透明代理,消除了AI代理的上下文窗口膨胀。
问题
AI代理(Claude Code、Cursor、Windsurf)浪费 40-80%的上下文窗口 关于臃肿的工具响应——原始HTML、base64 blob、空字段、截断数组。每一个被浪费的代币都会让你付出代价,减缓推理速度,并将重要的上下文推到窗外。
解决方案
MCE作为一个 透明反向代理 在您的AI代理和MCP工具服务器之间。它拦截每个工具响应,评估其令牌成本,并应用一个3层压缩管道——在标准硬件上几乎没有延迟。
┌──────────┐ JSON-RPC ┌──────────┐ JSON-RPC ┌──────────────┐
│ AI Agent │ ───────────────→ │ MCE │ ───────────────→ │ MCP Server │
│ │ ←─── minified ── │ Proxy │ ←─── raw ─────── │ (Tool) │
└──────────┘ └──────────┘ └──────────────┘
│
┌───────┴───────┐
│ Squeeze Engine │
│ L1: Pruner │
│ L2: Semantic │
│ L3: Synth. │
└───────────────┘
MCE做什么
- 🧹 李废弃物 --strips HTML、base64 blob、空值、过多空白
- 🧠 语义过滤 --通过CPU友好的RAG仅提取相关块
- 📝 可选LLM摘要 --到达局部模型(Ollama)进行最终压缩的路线
- 💾 语义缓存 --重复请求的零令牌响应(状态突变时自动清除)
- 🔒 策略引擎 --阻止破坏性命令(
rm -rf,DROP TABLE) - 🔄 断路器 --连续工具错误(运输或逻辑错误)导致相同或模糊相似($Jaccard\ge 85%$)的行程
isError) - 🔌 动态元工具 --动态能力注册表搜索(
search_tools)以及域卸载(release_capabilities) - 📊 实时仪表板 --实时TUI显示令牌节省和缓存统计信息
快速开始
1.安装
git clone https://github.com/DexopT/MCE.git
cd MCE/mce-core
pip install -r requirements.txt
2.配置
编辑 config.yaml --将MCE指向您的实际MCP服务器:
upstream_servers:
- name: "filesystem"
url: "http://localhost:3001"
token_limits:
safe_limit: 1000 # pass through if under
squeeze_trigger: 2000 # compress if over
absolute_max: 8000 # hard cap
3.跑步
python main.py # start the proxy
python main.py --dashboard # start with live TUI dashboard
4.连接您的代理
将AI代理的MCP配置指向 http://127.0.0.1:3025 而不是直接的工具服务器URL。MCE透明地代理所有内容。
建筑
| 组件 | 文件 | 目的 |
|---|---|---|
| 代理服务器 | core/proxy_server.py |
FastAPI JSON-RPC反向代理 |
| MCP客户端 | core/mcp_client.py |
将调用转发到真实的工具服务器 |
| 代币经济学家 | engine/token_economist.py |
通过tiktoken设置预算护栏 |
| 政策引擎 | engine/policy_engine.py |
破坏性命令拦截器+HitL |
| 断路器 | engine/circuit_breaker.py |
无限环路检测器 |
| 懒惰的注册员 | engine/lazy_registrar.py |
即时模式注入 |
| L1修剪机 | engine/squeeze/layer1_pruner.py |
HTML→MD、空条带、base64删除 |
| L2语义 | engine/squeeze/layer2_semantic.py |
CPU友好的RAG过滤 |
| L3合成器 | engine/squeeze/layer3_synthesizer.py |
可选本地LLM摘要(Ollama) |
| 语义缓存 | models/semantic_cache.py |
LRU+TTL响应缓存 |
| 上下文管理器 | core/context_manager.py |
会话令牌跟踪 |
| TUI仪表板 | tui/dashboard.py |
实时富终端仪表板 |
挤压发动机管路
Raw Response (e.g., 12,000 tokens)
│
▼
┌─── Layer 1: Pruner ────────────────┐
│ HTML → Markdown │
│ Strip base64 blobs │
│ Remove null values │
│ Truncate arrays (50 items max) │
│ Normalize whitespace │
└────────────────────────────────────┘
│ ~4,000 tokens
▼
┌─── Layer 2: Semantic Router ───────┐
│ Chunk text (500 tokens each) │
│ Embed chunks + agent query │
│ Cosine similarity search │
│ Return top-5 relevant chunks │
└────────────────────────────────────┘
│ ~1,500 tokens
▼
┌─── Layer 3: Synthesizer (opt.) ────┐
│ Send to Ollama (Qwen 2.5 3B) │
│ Generate 300-token summary │
│ Graceful fallback if unavailable │
└────────────────────────────────────┘
│ ~300 tokens (97.5% reduction)
▼
Minified Response → Agent
配置参考
Full config.yaml reference
proxy:
host: "127.0.0.1"
port: 3025
token_limits:
safe_limit: 1000 # pass through if under
squeeze_trigger: 2000 # route to squeeze engine
absolute_max: 8000 # hard cap after squeeze
squeeze:
layer1_pruner: true # deterministic pruning
layer2_semantic: true # semantic RAG filtering
layer3_synthesizer: false # requires Ollama
cache:
enabled: true
max_entries: 512
ttl_seconds: 600
upstream_servers:
- name: "filesystem"
url: "http://localhost:3001"
policy:
blocked_commands:
- "rm -rf"
- "mkfs"
- "FORMAT"
blocked_network:
- "0.0.0.0"
- "169.254."
hitl_commands:
- "DROP"
- "TRUNCATE"
- "git push --force"
circuit_breaker:
window_size: 5
failure_threshold: 3
synthesizer:
model: "qwen2.5:3b"
ollama_url: "http://localhost:11434"
max_summary_tokens: 300
embeddings:
model_name: "all-MiniLM-L6-v2"
logging:
level: "INFO"
show_tokens: true
运行测试
cd mce-core
python -m pytest tests/ -v
技术栈
- Python 3.11+ --异步运行时
- FastAPI+Uvicorn --高性能异步代理
- 令牌。 --OpenAI令牌化器,用于精确的令牌计数
- 句子变换器 --CPU友好型嵌入(全MiniLM-L6-v2)
- 数值Python --内存向量存储(无FAISS依赖性)
- httpx --用于上游通信的异步HTTP客户端
- 富有的 --漂亮的终端日志和TUI仪表板
- Pydantic v2 --类型安全配置和模式验证
贡献
看 贡献.md 作为指导方针。
安全
看 安全.md 用于报告漏洞。
许可证
此项目根据MIT许可证获得许可——请参阅 许可证 了解详情。
建造于 蛇 黑树
如果MCE保存了您的代币,请给它一个⭐
