如何为小模型调优graphify知识图谱?--token-budget与并发参数实战经验
2026/8/30 13:01:07 网站建设 项目流程

如何为小模型调优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 的提取流程分为两阶段:

  1. AST 解析阶段(纯本地,不调用模型)——由--max-workers控制线程数
  2. 语义提取阶段(调用 LLM)——由--token-budget决定输入块大小、--max-concurrency决定并行请求数
参数默认值作用面向
--token-budget60000把文件贪心打包进"装得下"的 chunkLLM 输入侧
--max-concurrency4线程池并行调用 LLM 的上限LLM 请求侧
--max-workersAST 解析的并行线程数本地 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 4000GRAPHIFY_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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询