llm-wiki-compiler 常见问题与故障排查指南:过期页面修复、状态恢复、Embedding 失败与性能调优完整清单
【免费下载链接】llm-wiki-compilerThe knowledge compiler. Raw sources in, interlinked wiki out. Inspired by Karpathy's LLM Wiki pattern.项目地址: https://gitcode.com/gh_mirrors/ll/llm-wiki-compiler
llm-wiki-compiler(llmwiki)是一个「知识编译器」:输入原始资料(URL、文档、笔记、PDF),输出可交叉引用、可语义检索的 Markdown Wiki。本文面向新手,汇总了一份llm-wiki-compiler 常见问题与故障排查清单,覆盖四大高频场景:过期页面(Stale Pages)的检测与修复、state.json状态损坏或版本过新的恢复、Embedding 嵌入失败的排查与恢复,以及编译慢、检索退化时的性能调优参数。照着清单自查,基本能解决 90% 的日常故障 🔧
一、排障第一步:用 status 与 lint 摸清项目状态
遇到任何异常,先别急着重新编译。llmwiki 提供了三个只读的诊断入口,它们不调用 LLM、不需要 API Key,全部基于磁盘状态实时计算:
| 命令 | 作用 | 关注什么 |
|---|---|---|
llmwiki status | 项目健康快照 | stateStatus是否为ok;stale / orphaned 页面数量;待编译、待审查的积压 |
llmwiki lint | 质量检查 | stale-page、orphaned-page规则命中的具体页面与责任源文件 |
llmwiki next | 下一步建议 | 当存在过期页面时,它会自动推荐refresh --stale |
一个健康项目的status输出形如:
llmwiki status # ✓ Fresh: no stale or orphaned pages # ✓ State: ok若出现State: missing — run llmwiki compile或State: corrupt,说明状态文件有问题,直接跳到第三节处理。更多细节见 docs/cli/status.mdx 与 docs/troubleshooting/faq.mdx。
二、过期页面(Stale Pages)与孤儿页面:检测与一键修复
💡核心机制:每个 wiki 页面在编译时都会记录「由哪些源文件生成 + 内容哈希」。之后每次执行命令,llmwiki 都会把记录的哈希与sources/磁盘现状对比——这就是源新鲜度追踪。
两种新鲜度状态怎么区分
- Stale(过期):源文件还在,但内容改了;或多源页面中部分源被删除。页面还能读,但可能已不代表最新资料。
- Orphaned(孤儿):生成该页面的所有源文件都被删除了,页面已无法再生,是清理候选。
⚠️ 注意:llmwiki query --save保存的问答页是生成答案,永远不会被标记为过期。
三步修复流程(推荐顺序)
第 1 步:查看哪些页面过期
llmwiki lint # 关注规则名 stale-page 与 orphaned-page 的结果第 2 步:预览修复计划(零成本)
llmwiki refresh --stale --dry-run--dry-run只打印计划——哪些源会重编译、哪些孤儿页会被删除——不发生任何 LLM 调用,不写盘。
第 3 步:执行修复
llmwiki refresh --stale它只做三件事:重编译「变更且拥有过期页」的源、清理孤儿页面(纯文件操作、免 API Key)、不碰无关页面。若所有过期页都是孤儿(只是删源文件),整个修复甚至不需要配置任何凭证。
防止问题积累:编辑期间保持llmwiki watch运行,文件一保存就自动增量重编译,过期页几乎不会堆积。完整的生命周期说明见 docs/troubleshooting/stale-pages.mdx。
📌 小提示:llmwiki view打开的 Viewer 会在页面元数据栏显示STALE / ORPHANED徽标,顶部横幅显示整库新鲜度判定——不敲命令也能肉眼发现过期页。
三、state.json 损坏或被新版本写入:两种恢复路径
.llmwiki/state.json是增量编译的账本,带有 schemaversion字段。当它由更新版本的 llmwiki 写入(比如同事用了新版本编译过),当前构建会故意失败关闭并报错:
.llmwiki/state.json (version 3) was written by a newer llmwiki version (this build understands up to version 2). Upgrade llmwiki to read this project.这是设计好的安全行为:宁可不读,也不冒险误读或覆盖。你有两条路可走:
路线 A:升级 llmwiki(推荐)
npm install -g llm-wiki-compiler@latest升级后直接读取现有状态,增量编译记录完整保留。
路线 B:重置状态文件(保留备份)
llmwiki state reset # 先预览,不做任何修改 llmwiki state reset --yes # 确认执行:备份为 state.json.bak 后移除原文件 llmwiki compile # 从当前 sources/ 重建状态state reset --yes直接操作原始字节、从不解析状态文件,因此即使文件「太新或损坏」也能可靠执行。原内容原子备份在.llmwiki/state.json.bak,以后升级了版本还可以改回去。
状态缺失或 JSON 损坏时:lint和status会报告stateStatus: missing / corrupt并把所有页面标为unverified,Viewer 顶部出现损坏横幅。恢复方法统一是重新完整编译:
llmwiki compile官方恢复手册见 docs/troubleshooting/state-recovery.mdx,新鲜度判定算法的源码位于 src/freshness/。
四、Embedding 失败:从报错到恢复的完整排查
4.1 最常见:ProviderUnavailableError
跑compile时若报ProviderUnavailableError,含义是找不到有效的 LLM 凭证——此时没有任何 LLM 调用发生、没有写入任何内容,可安全重试。排查顺序:
- 默认 Anthropic 供应商:确认
ANTHROPIC_API_KEY或ANTHROPIC_AUTH_TOKEN已设置(二选一即可)。 - 若已配置本地 Claude Code(
~/.claude/settings.json的env块),裸跑llmwiki compile应自动兜底读取。 - 不想用 API Key?可切换到免 Key 方案:
LLMWIKI_PROVIDER=claude-agent(用本地 Claude Code 登录)、ollama(本地模型)或copilot。
4.2 query 检索不到相关内容
llmwiki query的语义检索依赖嵌入索引(.llmwiki/embeddings.bin或embeddings.json)。索引缺失时会自动降级为纯词法(BM25)检索——能用,但排序质量下降。常见原因:
- 当前供应商不支持嵌入:
copilot与claude-agent不暴露嵌入端点。claude-agent可设VOYAGE_API_KEY开启;或显式指定LLMWIKI_EMBEDDING_PROVIDER(如ollama,免 Key)。 - 全新项目:先跑一次
llmwiki compile,页面与嵌入会一起构建。
⚠️ 若报embedding-store-unavailable,说明索引文件存在但无法加载(损坏)。不要删除二进制索引去回退旧 JSON 快照——正确做法是执行llmwiki compile,它会自动发现缺失向量并重建(注意:重建会消耗嵌入 API 额度,隔离页除外)。
4.3 嵌入重试与隔离(Quarantine)机制
嵌入生成失败时,llmwiki 在.llmwiki/pending-embeddings.json中记录持久化重试预算:同内容连续 5 次失败后,页面被移入.llmwiki/quarantined-embeddings.json,后续刷新跳过它,让其他页面正常嵌入。内容一旦变化,会以全新预算自动重试。
排查信号看status输出的告警码:
embeddings-refresh-pending:等待再次嵌入的页面embeddings-refresh-quarantined:已耗尽重试、被隔离的页面
修复供应商后的正确重置姿势:① 确认没有 compile/refresh 在运行;② 从两个标记文件中移除该页面条目(重置全部则删除两个文件);③ 重新llmwiki compile。注意:只改嵌入配置不会清除隔离状态。
4.4 切换嵌入后端会重建整个索引
索引会记录生产它的供应商、模型与端点。修改LLMWIKI_EMBEDDING_PROVIDER/LLMWIKI_EMBEDDING_MODEL/ 端点后,即使没有任何源变更,下次 compile 也会重新嵌入全部合格页面(有 API 成本)。不同后端产出的向量不可比较,重建前 query 会报告索引过时并退回词法排序。例外:anthropic与claude-agent之间切换不重建(二者走同一 Voyage 模型)。
五、性能调优清单:让 compile 更快、检索更稳
✅ 首次编译慢是正常现象(所有源要走「概念提取 → 页面生成」两阶段流水线);之后的编译是增量的,未变更语料通常几秒完成。想进一步优化,按此清单逐项检查:
| 环境变量 | 默认值 | 调优场景 |
|---|---|---|
LLMWIKI_COMPILE_CONCURRENCY | 5 | 冷启动/大批量刷新慢 → 调高(上限 50,可用--concurrency单次覆盖);被供应商限流 → 调低 |
LLMWIKI_PROMPT_BUDGET_CHARS | 200000 | stderr 频繁出现截断警告(热门概念共享源过多)→ 为大上下文模型调高,如400000 |
LLMWIKI_EMBED_BATCH_SIZE | 按供应商 64~256 | 减少请求往返次数;触到供应商上限则调低(超上限会被钳制并告警) |
LLMWIKI_EMBED_STRICT | 未设置 | CI 中设为1:嵌入失败直接非零退出,而非警告继续 |
LLMWIKI_REQUEST_TIMEOUT_MS | 供应商内置(openai 10 分钟 / ollama 30 分钟) | 慢网关或本地模型超时 → 调大毫秒数 |
LLMWIKI_STAGE_TIMING_FILE | 关闭 | 设为绝对路径后,compile/query 逐阶段追加 JSON 计时(detect-changes、extraction、page-generation、embeddings 等),精确定位慢在哪一步 |
LLMWIKI_VERBOSE | 未设置 | 任意非空值,等价于--verbose,查看分步进度与总耗时 |
四条实用策略:
- 小步快跑:大语料先用
llmwiki quickstart <单个源>跑通,再增量加入其余源。 - 换更快的模型:设
LLMWIKI_MODEL为供应商的轻量模型变体。 - 大索引自动走二进制存储:超过 64 MiB 的 JSON 上限后自动切换
embeddings.bin,无需手动干预(上限:512 MiB 文件 / 10 万条记录)。 - 编辑期开 watch:
llmwiki watch实时增量重编译,避免积压。
完整变量参考(含调试开关LLMWIKI_DEBUG)见 docs/configuration/environment-variables.mdx。
六、症状速查表
| 症状 | 最可能原因 | 快速修复 |
|---|---|---|
ProviderUnavailableError | API Key 未设置 | 配置ANTHROPIC_API_KEY或切换免 Key 供应商 |
lint报stale-page | 源文件内容已变更 | llmwiki refresh --stale(先--dry-run) |
status报State: corrupt | state.json 不可读 | llmwiki compile重建 |
| 报错「written by a newer llmwiki version」 | 新版本写过状态 | 升级 llmwiki,或llmwiki state reset --yes |
| query 结果相关性差 | 嵌入索引缺失 | 配置LLMWIKI_EMBEDDING_PROVIDER后 compile |
embedding-store-unavailable | 索引损坏 | llmwiki compile自动重建索引 |
| compile 首次极慢 | 全量两阶段编译 | 属正常;后续用LLMWIKI_COMPILE_CONCURRENCY提速 |
| CI 中嵌入静默失败 | 非严格模式只告警 | 设LLMWIKI_EMBED_STRICT=1 |
七、相关文档与源码路径
- 故障排查 FAQ:docs/troubleshooting/faq.mdx
- 过期页面检测与修复:docs/troubleshooting/stale-pages.mdx
- 状态版本恢复手册:docs/troubleshooting/state-recovery.mdx
- 环境变量全参考(嵌入重试与隔离、存储上限):docs/configuration/environment-variables.mdx
- status 命令输出字段:docs/cli/status.mdx
- 新鲜度追踪实现:src/freshness/
- lint 规则实现:src/linter/
🧭 记住排障口诀:先看status定方向,再用lint定页面,dry-run预览后才动手,compile兜底一切状态问题。
【免费下载链接】llm-wiki-compilerThe knowledge compiler. Raw sources in, interlinked wiki out. Inspired by Karpathy's LLM Wiki pattern.项目地址: https://gitcode.com/gh_mirrors/ll/llm-wiki-compiler
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考