maheshmakvana/graphsift

GitHub: maheshmakvana/graphsift

一款 LLM 上下文与 token 优化工具,通过 AST 依赖图排序和 CLI 输出压缩,大幅削减 AI 代码审查及编程助手的 API 成本。

Stars: 4 | Forks: 0

# graphsift — 节省 Claude Token,降低 LLM API 成本,优化 Context Window **graphsift** 是排名第一的开源 AI 代码审查 **token 优化工具**。它能为你代码库构建 AST 依赖图,利用 BM25 + 图距离排序算法根据每个文件与 diff 的相关性进行打分,并提供严格限制在 token 预算内的 context window —— 确保 Claude、GPT-4、GPT-5、Gemini 或任何 LLM 只看到关键内容。 每次代码审查可**节省 80-150 倍的 token**。在 CLI 命令输出进入你的 LLM context 之前,削减其 **60-90% 的 token**。这是用于 AI 辅助开发的最全面的 **token 缩减工具**。 - 每次代码审查调用可**降低 93-99% 的 API 成本** - **优化 context window** — 基于排序的相关性,而非二元的影响范围 - 在 Claude Code、Cursor、Copilot 以及任何兼容 MCP 的 agent 上**节省 token** - **压缩命令输出** — 包含 19 个针对 pytest、docker、git、kubectl、npm 等工具的压缩器 [![PyPI version](https://img.shields.io/pypi/v/graphsift.svg)](https://pypi.org/project/graphsift/) [![Python](https://img.shields.io/pypi/pyversions/graphsift.svg)](https://pypi.org/project/graphsift/) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) [![Downloads](https://img.shields.io/pypi/dm/graphsift.svg)](https://pypi.org/project/graphsift/) [![GitHub stars](https://img.shields.io/github/stars/maheshmakvana/graphsift.svg)](https://github.com/maheshmakvana/graphsift) [![tests](https://img.shields.io/badge/tests-271%20passed-blue)](https://github.com/maheshmakvana/graphsift/actions) [![MCP tools](https://img.shields.io/badge/MCP%20tools-25-orange)](https://github.com/maheshmakvana/graphsift) [![compressors](https://img.shields.io/badge/compressors-19-green)](https://github.com/maheshmakvana/graphsift) ![graphsift — 为 Claude GPT Gemini 节省 token,通过排序后的代码选择降低 LLM API 成本,优化 context window,F1 0.85,支持 14 种语言,强制执行 token 预算](https://static.pigsec.cn/wp-content/uploads/repos/cas/5e/5eb47edf4f56eb67b7ec1ea60eaacffc9f3e31579196d48bc8ba8228a1438475.png) ## 为什么你需要 Token 节省工具 每次 LLM API 调用都会消耗 token。每个 token 都要花钱。当 LLM 审查代码变更时,最简单粗暴的方法是发送所有间接相关的文件 —— 对于中等规模的代码库,这意味着 **500k-2M 个 token**。你是在为无效信息买单。 **graphsift 解决了这个问题:** - 每次代码审查使用 **80-150 倍更少的 token** — 排序打分取代了二元的影响范围分析 - 相关性准确度达到 **F1 ~0.85**,而 code-review-graph 等工具的 F1 仅为 0.54 - **严格的 token 预算控制** — 绝不超出 context 限制或你的成本阈值 - 在每天处理 100 个 PR 的情况下,相比直接倾倒源码,**每天可节省 $150-180 的 API 成本** ### 谁需要 Token 优化? | 用例 | graphsift 如何节省 token | |---|---| | **CI/CD AI 代码审查** | 自动为每个 PR 选择相关 context,削减 93-99% 的成本 | | **Monorepo 代码审查** | 影响范围工具会陷入无关文件的泥潭;graphsift 会进行排序和裁剪 | | **Claude Code / Cursor / Copilot** | MCP server 将高 token 效率的 context 提供给编程 agent | | **LLM 成本优化** | Token 预算 + 压缩 + 缓存 = 可预测的 API 开销 | | **企业级 AI 审查 pipeline** | 硬性限制防止 API 成本失控;分析功能追踪每一个节省的 token | | **RAG / agent context 构建** | 通用方案:任何需要排序代码 context 的 LLM 任务 | ## Token 节省一览 在一个包含 143 个文件的 FastAPI 应用上进行基准测试,审查对 `src/auth/manager.py` 进行的 50 行代码变更: | 方法 | 发送的文件数 | Token | 成本 (Opus @ $15/M) | 相比原始数据节省 | |---|---|---|---|---| | 原始源码 (每个文件) | 143/143 | ~180,000 | $2.70 | — | | 二元影响范围 (code-review-graph) | 8-12/143 | 6,000-8,000 | $0.10 | 96% | | **graphsift (排序 + 预算)** | **3-5/143** | **800-1,200** | **$0.015** | **99.4%** | ### CLI 输出压缩 — 节省 60-90% 的命令 Token 除了代码审查之外,graphsift 还能节省命令输出的 token。你通过管道传给 LLM 的每一个 `pytest`、`docker ps`、`kubectl get` 或 `git diff` 都在浪费 token 处理无效信息。 | 命令 | 原始 token 数 | 压缩后 token 数 | **节省的 token** | |---|---|---|---| | `grep -r` (25 个结果) | 413 tk | 22 tk | **95%** | | `eslint` (12 个问题) | 308 tk | 17 tk | **94%** | | `git diff` (2 个文件) | 889 tk | 60 tk | **93%** | | `pytest -v` (45 个测试) | 1,334 tk | 136 tk | **90%** | | `npm install` 输出 | 288 tk | 39 tk | **87%** | | `docker ps` (10 个镜像) | 463 tk | 63 tk | **86%** | | `git status` | 174 tk | 25 tk | **86%** | | `pip install` (7 个包) | 312 tk | 47 tk | **85%** | | `cargo build` | 463 tk | 80 tk | **83%** | | `kubectl get all` | 581 tk | 110 tk | **81%** | | `git log` (3 次提交) | 234 tk | 47 tk | **80%** | | `make` 输出 | 250 tk | 55 tk | **78%** | | `aws` CLI JSON | 477 tk | 115 tk | **76%** | | `jest` (10 个测试) | 310 tk | 76 tk | **75%** | | `go test` | 284 tk | 74 tk | **74%** | | App 日志 (16 行) | 402 tk | 155 tk | **61%** | | `cat` (大文件) | 672 tk | 479 tk | **29%** | | **加权平均值** | **8,138 tk** | **1,884 tk** | **77%** | 如果每天通过管道向 LLM 发送 100 条 CLI 命令,这相当于**每天节省约 625,000 个 token** — 按照 Opus 的定价,**每天大约节省 $9.37**。 ## graphsift 如何节省 Token 从 diff 到优化后的 context 共需四个步骤: 1. **解析 (Parse)** — 根据你的源码构建 AST 依赖图。支持 14 种语言、7 种边类型(CALLS、IMPORTS、INHERITS、DECORATES、REFERENCES、TEST_COVERS、DYNAMIC_IMPORT)。v1.6 增加了对 Python、JavaScript、TypeScript、Go、Rust、Java、C、C++、Ruby、PHP 和 Bash 的精确 **tree-sitter 解析**。 2. **排序 (Rank)** — 利用 **BM25 关键词重叠度**与从变更文件推导出的**图距离衰减**相融合的方法,为每个文件生成 0-1 的相关性得分。不再是简单的二元包含/排除 — 细致的排序意味着 LLM 看到的是有效信号,而不是噪音。 3. **选择 (Select)** — 采用贪婪算法进行 token 预算选择,包含**三个层级**(hot/warm/cold)。Hot 文件提供完整源码,warm 文件仅提供签名,cold 文件被排除。支持 diff 感知裁剪,仅保留变更区域及其周围的 context。基于熵的 deduplication 会移除几乎相同的文件,从而获得更好的 context 多样性。 4. **渲染 (Render)** — 生成单个 Markdown 字符串,可直接注入任何 LLM prompt。为重复查询提供可选的 Anthropic/OpenAI 缓存断点。 API 非常简单:导入 `ContextBuilder` 和 `ContextConfig`,设置你的 token 预算,索引你的文件,然后使用 `DiffSpec` 调用 `builder.build()`。结果会告诉你选择了多少个文件、使用的 token 总数以及节省的百分比 — 接着就可以将 `result.rendered_context` 直接粘贴到你的 LLM API 调用中。 ## 安装说明 需要 Python 3.9+。核心依赖:`pydantic>=2.0`。零强制性原生扩展。 使用 `pip install graphsift` 安装基础包。添加 `[treesitter]` 以支持 11 种语言的精确 AST 解析,或者添加 `[all]` 获取包含压缩和开发工具的完整安装。 ## 为什么 graphsift 优于二元影响范围工具 code-review-graph 和大多数 MCP 代码审查工具采用的“发送所有导入了变更文件的文件”的方法有两个致命缺陷: 1. **Token 溢出** — 超过 500k+ 的 token 会超出 context 限制*并且*超出你的预算。每个无关的文件都在烧钱。 2. **噪音降低输出质量** — 当充斥着无关的 context 时,LLM 产生的幻觉会更多。仅仅因为导入了 `base.py` 就发送 `config.py`、`utils/logging.py` 和 40 个测试文件,这会淹没真正的信号。 graphsift 将 context 选择视为一个**排序问题**,而不是图遍历。LLM 能够在每个 token 上获得最大信号 — 这是使用 AI 代码审查最具成本效益的方式。 ### 面对面:graphsift vs code-review-graph ![graphsift vs code-review-graph comparison — 节省更多 token,F1 0.85 vs 0.54,80-150x token 缩减,14 种语言,排序相关性,强制执行 token 预算](https://static.pigsec.cn/wp-content/uploads/repos/cas/68/6873223844ba2dda1a96a1e0dbbe33bd9b3d5004653220674038c43e90d58a98.png) | 特性 | code-review-graph | **graphsift** | |---|---|---| | **目标** | 显示相关文件 | 在最大化相关性的同时**节省 token** | | **选择方式** | 二元影响范围 | 排序 0-1,包含 hot/warm/cold 层级 | | **F1 准确度** | 0.54 (46% 假阳性) | **0.85** (排序过滤 + dedup) | | **Token 预算** | 无 | **硬性预算** — 适应任何模型限制 | | **Token 缩减** | 8-49 倍 | **80-150 倍** (多文件 + 压缩 + 裁剪) | | **多文件 diff** | 不支持 | 所有变更文件的影响范围联合计算 | | **装饰器边** | 忽略 | 追踪 DECORATES 并打分 | | **动态导入** | 遗漏 | 通过 regex + AST + tree-sitter 检测 | | **压缩** | 无 | tokenpruner + diff 感知裁剪 | | **Deduplication** | 无 | 基于熵的近似重复移除 | | **Tree-sitter 解析** | 无 | 支持 11 种语言的精确 CST/AST | | **Hybrid search** | MRR=0.35,公认已损坏 | BM25 + TF-IDF 向量融合 | | **死代码检测** | 无 | 从入口点检测不可达代码 | | **循环依赖检测** | 无 | 依赖循环分析 | | **自动修复建议** | 无 | 基于图的问题检测 + 修复建议 | | **语言** | 仅限 Python | **14 种语言** | | **增量索引** | 无 | 使用 SHA-256 跳过未更改的文件 | | **Monorepo** | 无 | 针对多包仓库的 `index_roots()` | | **MCP server** | 否 | 完整的 MCP 协议 + 25 个节省 token 的工具 | | **CLI** | 否 | install / serve / build / status / compress / gain | | **SQLite 持久化** | 否 | 带有迁移的 6 版本 GraphStore | | **感知缓存的输出** | 否 | Anthropic/OpenAI 缓存断点 | | **输出压缩** | 否 | **19 个 CLI命令压缩器(平均节省 77%)** | | **分析** | 否 | Token 节省追踪 + 发现 | | **测试覆盖率** | 未知 | 271 个测试,>80% 的覆盖率 | ## 核心功能 ### Token 与成本优化 - **硬性 token 预算** — 绝不超出 context window 或成本上限 - **三层选择 (hot/warm/cold)** — 完整源码 -> 签名 -> 排除 - **Diff 感知 context 裁剪** — 仅保留变更区域 + 周围的 context 行 - **基于熵的 deduplication** — 移除近乎相同的文件以获得更好的 context 多样性 - **4 种输出模式** — FULL / SIGNATURES / COMPRESSED / SMART(按文件自动选择) - **感知缓存的输出** — 用于重复查询的 Anthropic/OpenAI cache_control 断点 - **跨 session 缓存** — 基于 session_id 的内存在对话之间重用 - 相比原始源码**缩减 80-150 倍 token**;相比二元影响范围工具**缩减 10-15 倍** ### 代码分析与智能 - **14 种语言解析** — Python、JS、TS、Go、Rust、Java、C++、C、Ruby、PHP、Bash、Terraform/HCL、Helm - **Tree-sitter 精确解析** — 11 种语言支持完整的 CST/AST - **7 种边类型** — CALLS、IMPORTS、INHERITS、DECORATES、REFERENCES、TEST_COVERS、DYNAMIC_IMPORT - **Hybrid search** — BM25 全文 + TF-IDF 稀疏向量融合,用于语义代码搜索 - **循环检测** — 查找并报告具有严重性分级的依赖循环 - **死代码检测** — 从入口点识别不可达的函数、类、方法 - **自动修复建议** — 跨 5 个类别(import、type、structure、cycle、dead_code)进行基于图的问题检测 - **装饰器追踪** — 追踪大多数工具遗漏的 `@require_auth`、`@cached_property` 边 - **动态导入检测** — `importlib.import_module()`、`__import__()`、`require()`、延迟导入 ### CLI 输出压缩 — 19 个压缩器,平均节省 86% - 根据输出特征**自动检测**命令类型 — 只需通过管道传递给 `graphsift compress` - **19 个专用压缩器** — pytest (94%)、git_diff (92%)、docker (91%)、pip (86%)、npm (83%)、git_status (83%)、git_log (82%)、eslint (77%)、kubectl (75%)、log (61%)、grep (97%) 等 - **Bash wrapper** — 无需手动管道操作即可实现透明压缩 - **Tee 模式** — 保存原始未压缩输出,同时让 LLM 看到压缩后的版本 - **Token 分析** — 累积追踪、每日明细、成本估算、机会发现 ### v1.7 — Agent 智能与记忆 (新增) - **Agent 记忆层** — 基于 SQLite 的知识图谱,用于在不同 session 间持久化 agent 对话 context,结合混合 BM25+TF-IDF 召回 - **类型化图检索** — PRISM 风格的类型化路径遍历,支持 6 种查询意图(安全审查、重构影响、测试影响、依赖更新、架构审查、通用) - **对话压缩** — 3 种策略(观察掩码、边界保留、自适应 ACON 风格),可在 agent 对话中节省 60-82% 的 token - **证据引用** — 完整的审计跟踪,解释选择或排除每个文件的原因,包含分数细分和连接追踪 - **A2A 协议服务器** — 通过 HTTP 上的 JSON-RPC 支持 Agent-to-Agent 协议,将代码智能暴露为 A2A agent card - **MCP 异步任务** — 支持长时间运行的操作,包括进度追踪、取消和渐进式工具发现加载 - **Harness 工程** — 前后验证钩子、图完整性检查、预算强制执行、源码新鲜度验证和 agent 漂移检测 - **时代码图** — 感知 git 历史的符号追踪,支持双时态查询(提交时的符号、引入于、最后修改、基于时长的相关性提升) - **代码感知记忆** — 锚定到特定代码符号的记忆,具备图邻近召回和对频繁更改代码的智能衰减 ### 开发者体验 - **完整的 MCP server** — 兼容 Claude Code、Cursor、Copilot、Windsurf、Codex、Gemini 以及 23+ 个 MCP 客户端 - **25 个 MCP 工具** — 构建/更新图、get_context、get_impact、detect_changes、query_graph、search_symbols、list_flows、list_communities、get_architecture_overview、refactor、apply_refactor、generate_wiki、semantic_search_nodes、cross_repo_search 等 - **4 个 MCP prompt** — review_code、analyze_impact、find_issues、explain_architecture - **10 个 MCP 资源** — 图统计、架构概览、社区、流程、wiki 页面、风险指数 - **CLI** — `graphsift install / serve / build / status / compress / gain / discover` - **10 个高级功能** — 缓存、pipeline、验证器、异步批处理、速率限制器、流式传输、diff 引擎、断路器、重试、schema 演进 - **增量索引** — 对未更改的文件跳过 SHA-256;2 秒内重新索引 - **Monorepo 支持** — 针对多包仓库的 `index_roots()` - **SQLite 持久化** — 6 版本迁移历史 ## 快速开始 ### 1. 索引你的仓库 从文件系统适配器使用 `load_source_map` 扫描你的仓库,然后使用你的 token 预算创建一个 `ContextBuilder`。调用 `index_files()` — 它会返回已解析文件、已发现符号和已建立边的统计信息。 ### 2. 为 diff 构建优化的 context 使用你更改的文件和审查查询创建一个 `DiffSpec`,然后调用 `builder.build()`。结果会显示选择了多少个文件、使用的 token 总数以及节省的百分比。直接将 `result.rendered_context` 粘贴到你的 LLM prompt 中。 ## CLI 用法 GraphSift 提供了一个完整的 CLI,用于管理图、压缩和分析: - `graphsift install` — 安装 MCP server 和可选的 bash wrapper - `graphsift serve` — 为自定义客户端启动 MCP server - `graphsift build` — 构建或更新依赖图 - `graphsift status` — 显示索引状态和累积 token 节省情况 - `graphsift register` — 在多仓库模式下注册仓库 - `graphsift compress` — 通过管道传递任何 CLI 输出,进行自动检测和压缩(节省 60-97%) - `graphsift gain` — 显示所有 session 的累积 token 节省情况 - `graphsift discover` — 寻找错过的 token 节省机会 - `graphsift bash-wrapper` — 打印用于透明压缩的 bash wrapper ## CLI 输出压缩 **v1.6 新功能:** graphsift 会在 CLI 命令输出到达你的 LLM context window 之前对其进行压缩。通过管道将任何命令传递给 `graphsift compress` 以进行自动检测,或者使用 `--ultra` 进行最大程度的压缩。`--tee` 标志会保存原始输出,同时让 LLM 看到压缩后的版本。 ### 全部 19 个压缩器 — 自动检测 | 压缩器 | 压缩内容 | 策略 | **Token 节省** | |---|---|---|---| | `grep` | 搜索结果 | 按匹配项分组,dedup 相同行 | **95%** | | `eslint` | ESLint 输出 | 每个文件的错误/警告计数 | **94%** | | `git_diff` | Git 差异 | 每个文件的路径 + 前 3 行更改 | **93%** | | `pytest` | 测试运行 | 保留断言 + 失败,剥离 traceback | **90%** | | `npm` | npm/yarn | 错误标头 + 冲突摘要 + 计数 | **87%** | | `docker` | docker ps/images | ID + 名称/状态,上限为 40 | **86%** | | `git_status` | git status | 分支 + 暂存/未暂存/未追踪计数 | **86%** | | `pip` | pip install | 仅保留最终摘要 + 错误 | **85%** | | `cargo` | Rust 构建 | 保留错误 + 警告 + Finished 行 | **83%** | | `kubectl` | kubectl get | 标头 + 前 5 行,压缩空格 | **81%** | | `git_log` | git log | 最后 5 次提交,仅显示 hash + 主题 | **80%** | | `make` | make 输出 | 仅显示 Error + *** 行 | **78%** | | `aws` | AWS CLI JSON | 压缩大型 JSON,保留 key + 原始值 | **76%** | | `jest` | JavaScript 测试 | 保留 FAIL/PASS + 快照摘要 | **75%** | | `go_test` | Go 测试 | 保留 FAIL 行 + panics + 摘要 | **74%** | | `log` | App 日志 | 剥离时间戳,保留 ERROR/FATAL,dedup WARN | **61%** | | `cat` | 文件输出 | 截断为 40 行头 + 20 行尾 | **29%** | | `json_output` | 任何 JSON | 压缩小型 JSON,将大型 JSON 剥离为 key + 原始值 | — | | `generic` | 任何内容 | 剥离空白,dedup,在 200 行处截断 | **60%** | ### 透明 Bash 压缩 运行 `graphsift install --bash-wrapper` 可以透明地压缩来自 pytest、cargo、npm、docker、kubectl、aws、grep、cat、make、pip、jest、eslint、git、go test、npx 和 yarn 的输出 — LLM 再也不会看到这些噪音了。 ## Token 节省分析 GraphSift 会追踪跨 session 节省的每一个 token。`graphsift gain` CLI 命令会显示节省的 token 总数和估算的成本节省。添加 `--history` 以获取每日明细。使用 `graphsift discover` 查找最能从压缩中受益的命令。 对于编程式访问,Python 分析 API 提供了 `gain()`、`history(days)` 和 `discover(path)` 函数,返回适合仪表板和监控的结构化数据。 ## MCP server — 在你的 IDE 中节省 Token ![graphsift MCP server — 25 个工具,4 个 prompt,10 个资源,每次工具调用平均减少 77% 的 token(对比读取原始文件)](https://static.pigsec.cn/wp-content/uploads/repos/cas/32/3250fe322280cec325c2d87cb68e5a532a00fd72cda5f15d84b3633209741856.png) graphsift 的 MCP server 是在 Claude Code、Claude 桌面版、Cursor 或任何兼容 MCP 的 agent 中节省 token 的最简单方法。平均每次工具调用**减少 77% 的 token**。使用 `graphsift install` 进行安装。 ### MCP 工具 — 每一个都旨在节省 Token | 工具 | 功能 | **类别** | |---|---|---| | `build_graph` | 索引所有源文件并构建依赖图 | Graph | | `update_graph` | 仅使用更改的文件增量更新图 | Graph | | `get_context` | 为 diff 构建排序的、限制在 token 预算内的 context | Context | | `get_impact` | 返回影响范围 — 所有可能受变更影响的文件 | Impact | | `graph_status` | 检查图是否已构建并查看当前统计信息 | Status | | `search_symbols` | 按名称搜索函数、类或模块 | Search | | `list_files` | 列出所有已索引的文件(按 token 数量排序) | Files | | `get_file_context` | 检索特定已索引文件的完整源码 | Files | | `minimal_context` | 超低 token 的 context — 仅签名,无函数体 | Context | | `clear_graph` | 清除内存中的图,强制进行全面重建 | Graph | | `run_postprocess` | 运行流/社区检测、FTS 重建、风险评分 | Analysis | | `detect_changes` | 检测带有风险评分影响分析的已更改文件 | Impact | | `query_graph` | 运行预定义查询:callers_of、callees_of、imports_of 等 | Query | | `list_flows` | 列出检测到的执行流(按关键程度排序) | Analysis | | `get_flow` | 获取有关单个执行详细信息 | Analysis | | `get_affected_flows` | 查找经过已更改文件的执行流 | Impact | | `list_communities` | 列出检测到的代码社区(按大小排序) | Analysis | | `get_community` | 获取有关单个代码社区的详细信息 | Analysis | | `get_architecture_overview` | 生成包含社区和风险文件的架构概览 | Analysis | | `refactor` | 重命名预览、死代码检测或建议 | Refactor | | `apply_refactor` | 将之前预览过的重命名应用到源文件 | Refactor | | `generate_wiki` | 根据社区结构生成 markdown wiki 页面 | Docs | | `get_wiki_page` | 按社区名称获取特定的 wiki 页面 | Docs | | `semantic_search_nodes` | 按名称或关键字搜索代码符号(FTS5 驱动) | Search | | `list_repos` | 列出注册表中所有已注册的仓库 | Registry | | `cross_repo_search` | 跨所有已注册的仓库进行搜索 | Search | ## 高级功能 ### 智能缓存 — 不要为相同的 Context 买单两次 `GraphCache` 通过 `@cache.memoize` 装饰器提供 LRU+TTL 缓存。通过 `.stats()` 追踪缓存命中率。线程安全。 ### 带有审计跟踪的分析 Pipeline `AnalysisPipeline` 通过重试逻辑链接处理步骤。每一步都是可审计的 — 完整跟踪每个步骤对 context 执行了什么操作。 ### 异步批处理 — 并行审查 `batch_index()` 和 `async_batch_build()` 在有界 semaphore 控制下并发处理多个仓库或 diff。 ### 流式传输 — 在完成前处理 `stream_context()` 在文件排序完成后立即生成带分数的文件批次,从而实现渐进式渲染。 ### Diff 引擎 — 比较配置 `ContextDiff` 比较两个 `ContextResult` 对象 — 准确查看配置更改如何影响 token 使用和文件选择。 ## 常见问题解答 ### 如何在 Claude Code 上节省 token? 安装 graphsift 的 MCP server (`graphsift install`),它会自动为每个 session 压缩工具输出并优化 context。 ### 降低 API 成本的最快方法是什么? 使用带有硬性 `token_budget` 的 `ContextBuilder`。它会根据相关性对文件进行排序,并且仅发送符合预算的内容。添加 `diff_aware_trimming=True` 可额外减少 40-60%。对于重复查询,启用 `cache_aware=True`。 ### 每次代码审查的 API 成本是多少? 不使用 graphsift:每次审查 $0.50-$2.70。使用 graphsift:**每次审查 $0.01-$0.05** — 缩减了 93-99%。在每天 100 个 PR 的情况下,对比是从 $50-270/天 降至 $1-5/天。 ### graphsift 可以与 GPT-4 / GPT-5 / OpenAI 一起使用吗? 可以。排序和选择逻辑与提供商无关 — 将 `result.rendered_context` 粘贴到任何 LLM prompt 中即可。 ### graphsift 与 code-review-graph 有什么不同? code-review-graph 使用二元的影响范围。graphsift 会为每个文件打分(0-1),并在 token 预算内贪婪地进行选择。F1 准确度:0.85 vs 0.54。Token 缩减:80-150 倍 vs 8-49 倍。 ### graphsift 可以处理 monorepo 吗? 可以。`index_roots()` 可以一次性索引多个包,并具有正确的跨包依赖评分。 ### graphsift 需要互联网连接吗? 不需要。所有解析、排序和压缩都在本地运行。不需要外部网络调用。 ### 支持哪些 Python 版本? Python 3.9+。唯一必需的依赖项是 `pydantic>=2.0`。 ## 支持的语言 | 语言 | 解析器 | Tree-sitter | 关键能力 | |---|---|---|---| | Python | 原生 `ast` + tree-sitter | 是 | 函数、类、方法、async、装饰器、动态导入 | | JavaScript | Regex + tree-sitter | 是 | 函数、类、方法、箭头函数、async | | TypeScript | Regex + tree-sitter | 是 | 与 JS 相同 + 类型注解、接口 | | Go | Regex + tree-sitter | 是 | 函数、接收者方法、结构体、接口 | | Rust | Regex + tree-sitter | 是 | 函数、结构体、trait、impl 块 | | Java | Regex + tree-sitter | 是 | 类、方法、接口 | | C++ | Regex + tree-sitter | 是 | 函数、类、结构体 | | C | Regex + tree-sitter | 是 | 函数、结构体 | | Ruby | Regex + tree-sitter | 是 | 方法、类、模块 | | PHP | Regex + tree-sitter | 是 | 函数、类、trait | | Bash/Shell | Regex + tree-sitter | 是 | 函数、`source` 导入 | | Terraform/HCL | 自定义解析器 | 否 | 资源、变量、局部变量、模块、数据源 | | Helm Charts | 模板解析器 | 否 | YAML 中的 Go 模板、Chart.yaml 依赖 | | Dockerfile | 自定义 | 否 | FROM、COPY、RUN、ENV、ARG 指令 | ## 性能 - **索引**:在拥有 10,000+ 个文件的仓库上少于 2 秒 - **增量重新索引**:通过 SHA-256 hash 跳过未更改的文件 - **无挂起**:深度上限(默认为 4)防止在循环导入时进行无限遍历 - **线程安全**:所有共享状态都在 `threading.RLock` 的保护下 - **异步**:所有阻塞操作都有对应的 `async` 版本 - **Context 构建**:在已索引的 1,000 个文件的仓库中,处理典型的 diff 仅需 <50ms ## 测试 克隆仓库,安装开发依赖,然后运行 `pytest tests/ -v`。所有 271 个测试在约 4 秒内通过,涵盖 8 个测试文件,包括核心 pipeline、高级功能、hybrid search、tree-sitter 解析、diff 裁剪、deduplication 和自动修复建议。 ## 架构 — 六边形(端口与适配器) **核心模块:** `__init__.py`(公共 API)、`core.py`(领域逻辑)、`models.py`(Pydantic 模型)、`exceptions.py`(类型化错误)、`advanced.py`(7 个功能类别)、`compress.py`(19 个压缩器)、`analytics.py`(token 追踪)、`hooks.py`(bash wrapper)、`hybrid_search.py`(BM25+TF-IDF)、`auto_fix.py`(修复建议)、`cli.py`(CLI)、`mcp_server.py`(25 个 MCP 工具) **v1.7 模块:** `memory.py`(agent 记忆)、`typed_retrieval.py`(PRISM 检索)、`compact_context.py`(对话压缩)、`evidence.py`(审计跟踪)、`a2a_server.py`(A2A 协议)、`mcp_tasks.py`(异步任务)、`harness.py`(验证钩子)、`temporal_graph.py`(git 历史)、`code_memory.py`(代码锚定记忆) **适配器:** `storage.py`(SQLite)、`filesystem.py`、`postprocess.py` **解析器:** 支持 11 种语言的 Tree-sitter ## 贡献 欢迎在 [github.com/maheshmakvana/graphsift](https://github.com/maheshmakvana/graphsift) 提交 issue 和 pull request。阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 了解指南。 ## 许可证 MIT — 查看 [LICENSE](LICENSE)。 ## 相关项目 - **[tokenpruner](https://pypi.org/project/tokenpruner/)** — graphsift 的 COMPRESSED 输出模式使用的 LLM 输入 token 压缩工具;可额外增加 3-5 倍的 token 缩减 - **[code-review-graph](https://github.com/tirth8205/code-review-graph)** — 二元影响范围的替代方案(无排序、无预算、无压缩 — graphsift 的构建目标就是为了超越它) ## 仓库 | | | |---|---| | **Stars** | ![GitHub stars](https://img.shields.io/github/stars/maheshmakvana/graphsift) | | **Forks** | ![GitHub forks](https://img.shields.io/github/forks/maheshmakvana/graphsift) | | **MCP tools** | 25 个工具 + 4 个 prompt + 10 个资源 | | **Test coverage** | 8 个测试文件中的 271 个测试 | | **Latest version** | v1.7.0 | | **License** | MIT | ### 标签 `python` `ai` `mcp` `developer-tools` `llm` `copilot` `claude-code` `token-optimization` `mcp-server` `code-review` `agentic-coding` `context-engineering` `reduce-token-costs` `ast-parser` `dependency-graph` `context-window` `tree-sitter` `output-compression` `bm25` `agent-memory` `graphrag` `a2a-protocol` ### 隐私与安全 - **无遥测** — graphsift 100% 在本地运行,没有任何数据会离开你的机器 - **无需互联网** — 所有解析、排序和压缩均在本地进行 - **零云依赖** — 使用 SQLite 进行持久化,无需账户或 API key - MCP server 仅绑定到 localhost (127.0.0.1) ### 卸载 使用 `pip uninstall graphsift` 移除,并删除 `~/.graphsift` 以清除所有本地数据。 **今天就开始节省 token:** `pip install graphsift`
标签:AI辅助开发, DLL 劫持, MCP工具, Token压缩, 上下文窗口优化, 代码审查, 大语言模型, 逆向工具