如何为小模型调优graphify知识图谱?--token-budget与并发参数实战经验
【免费下载链接】graphifyTurn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.项目地址: https://gitcode.com/GitHub_Trending/graph/graphify
graphify 是一款把代码库、文档、SQL 架构和 PDF 转化为可查询知识图谱的工具,它提供/graphify技能接入 Claude Code、Cursor、Codex、Gemini CLI,使用本地确定性 AST 解析、逐边可解释、无需向量数据库。当你想用 Ollama、llama.cpp 等本地小模型跑 graphify 时,两个参数决定成败:--token-budget(控制每次发给模型的输入块大小)和--max-concurrency(控制并行 LLM 调用数)。本文给出完整的调优思路与实战经验。
两个参数到底控制什么
理解参数的作用域,才能调得准。graphify 的提取流程分为两阶段:
- AST 解析阶段(纯本地,不调用模型)——由
--max-workers控制线程数 - 语义提取阶段(调用 LLM)——由
--token-budget决定输入块大小、--max-concurrency决定并行请求数
| 参数 | 默认值 | 作用 | 面向 |
|---|---|---|---|
--token-budget | 60000 | 把文件贪心打包进"装得下"的 chunk | LLM 输入侧 |
--max-concurrency | 4 | 线程池并行调用 LLM 的上限 | LLM 请求侧 |
--max-workers | — | AST 解析的并行线程数 | 本地 CPU |
- chunk 打包逻辑源码:graphify/llm.py
- 参数解析入口:graphify/cli.py
- 分块行为的测试用例:tests/test_chunking.py
小模型调优三步法
第一步:把 --token-budget 降到小模型能吃下的量
小模型的上下文窗口通常只有 4k~32k token,默认的 60000 直接爆窗口。经验值:
# Ollama 本地推理:8k 上下文窗口 + 4k 输入块,安全起步 GRAPHIFY_OLLAMA_NUM_CTX=8192 graphify extract ./docs --backend ollama --token-budget 4000 # llama.cpp / vLLM / LM Studio 等 OpenAI 兼容服务 OPENAI_BASE_URL=http://localhost:8080/v1 OPENAI_MODEL=my-model \ graphify extract ./docs --backend openai --token-budget 4000经验法则:token-budget ≈ 模型上下文窗口的 1/3 左右。官方代码中甚至有提示逻辑——检测到上下文不够时会建议--token-budget {num_ctx // 3}(见 graphify/llm.py)。预算越小,单块输出也越小,越不容易被截断。
第二步:把 --max-concurrency 调低,别让本地推理互相踩踏
云端 API 不怕并发,本地模型(单卡/单进程)同时处理 4 个请求只会更慢甚至 OOM:
# 本地推理建议降到 1~2 个并行请求 graphify extract ./docs --backend ollama --max-concurrency 2--max-concurrency 1即为严格串行,排查问题时最好用- 集群命名阶段是另一回事,大图的社区打标可以调高并发:
graphify cluster-only ./my-project --max-concurrency 16 --batch-size 200
第三步:慢模型要放宽超时、限制输出
本地小模型生成一个 chunk 可能要几分钟,默认的 600 秒超时可能不够:
graphify extract ./docs --api-timeout 900 --timing # 加长超时并打印各阶段耗时小显存 GPU 还可以让每个 chunk 处理完就卸载模型,省 VRAM:
GRAPHIFY_OLLAMA_KEEP_ALIVE=0 graphify extract ./docs --backend ollama常见报错与对策(实战速查)
| 报错/现象 | 对策 |
|---|---|
| Ollama 爆 VRAM / 上下文超限 | GRAPHIFY_OLLAMA_NUM_CTX=8192+--token-budget 4000 |
LLM returned invalid JSON(JSON 被截断) | graphify 会自动拆分 chunk 重试;用--token-budget 4000或GRAPHIFY_MAX_OUTPUT_TOKENS=16384缓解 |
| 小模型输出被自己的 max-output 上限截断 | 降低--token-budget是最可靠的杠杆 |
| 请求 429 限流 | 调低并发 +GRAPHIFY_MAX_RETRIES(默认 6 次) |
一个容易混淆的点:LLM returned invalid JSON警告不代表数据丢失——graphify 会把 chunk 拆成两半重新提取,超大文档还会先按标题/段落边界切片,保证全文覆盖(详见 README.md 的 Troubleshooting 一节)。
相关源码与文档
想深入阅读实现,可以从这些文件入手:
- 分块与并行提取核心:graphify/llm.py
- CLI 参数解析(
--token-budget/--max-concurrency/--max-workers):graphify/cli.py - 后端适配与测试:tests/test_llm_backends.py
- 工作原理解释:docs/how-it-works.md
- 各后端环境变量全表:README.md
- 提取性能数据:BENCHMARKS.md
小结
给小模型调 graphify 的心法一句话:小模型 = 小块输入 + 低并发 + 长超时。先用--token-budget 4000起步、--max-concurrency 1~2兜稳,跑通后再逐步放大参数换取速度。graphify 对截断、失败都有自动重试和拆分恢复机制,大胆调参也不会丢数据。
【免费下载链接】graphifyTurn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.项目地址: https://gitcode.com/GitHub_Trending/graph/graphify
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考