synthadoc
将原始文档摄入时即编译成结构化 Wiki,让 AI 自动维护知识库,支持矛盾检测与声明级溯源
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
将原始文档摄入时即编译成结构化 Wiki,让 AI 自动维护知识库,支持矛盾检测与声明级溯源
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
开源 LLM Wiki 引擎,可以把任意原始文档(PDF、PPT、网页、视频字幕)编译成结构化、可编辑、永久存储的本地知识库。
想象一下:你花了三个月读完了 40 篇论文、20 个 PDF、十几段 YouTube 会议视频。三个月后有人问你:「你们团队的认知是什么?」
你只能笼统地回答——因为那些知识碎片散落在各个角落,RAG 系统能帮你检索,但无法帮你综合。两个来源相互矛盾?RAG 把两份文档一起返回,让 LLM 自己消化,最后你得到一个两边都不敢得罪的模糊答案。
Synthadoc 要解决的就是这个问题。它的核心理念来自 Andrej Karpathy 在 2024 年提出的一个朴素观点:
The LLM should be able to maintain a wiki for you.
这句话的潜台词是:知识不应该在查询时才临时生成,而应该在摄入时就编译好,像维基百科一样结构化、可引用、可交叉链接。Synthadoc 正是这套理念的完整工程实现。

图1:Synthadoc Web UI 查询界面,支持多 Provider 切换
Synthadoc 由独立开发者 axoviq-ai 维护,采用 AGPL-3.0 开源协议,目前版本 v0.9.0,社区版活跃迭代中。GitHub 仓库 484 颗星,46 个 Fork,话题标签覆盖 agent-skills、local-llm、knowledge-graph、obsidian-plugin 等多个 AI 热点领域。
它的目标用户分三个层级:个人研究者(可免费用 Gemini Flash 或本地 Ollama)、小型团队(3~20人,聚合多数据源为统一知识库)、中型企业(本地合规部署,带完整审计日志和 OpenTelemetry 监控)。
传统 RAG 在查询时才做摘要合成,Synthadoc 则在文档摄入时就完成编译。每次新文档进入系统,LLM 会重新遍历整个语料库,生成或更新对应的 wiki 页面,并在页面之间自动建立 [[wikilinks]] 双向链接。
这样做的好处是:矛盾在摄入时就被发现,不会等到查询时一起糊弄。

图2:支持批量摄入 PDF、Word、Excel、PPT、网页、视频等多种原始格式
当两个来源出现冲突时,Synthadoc 会将页面标记为 status: contradicted,同时保留两份原始主张并附上引用来源。如果配置了自动解决阈值(confidence >= threshold),系统会尝试自动裁决;否则交由人工复核。

图3:Wiki 页面矛盾检测,自动标记冲突来源
Synthadoc 还引入了一个独特的第二 LLM 审查机制:每次页面生成后,系统会调度一个「唱反调」的 LLM(建议使用不同模型家族,如主引擎用 Claude、审查用 Gemini)来挑战主 LLM 的结论,标记过度自信的主张、无根据的超级词汇,以及与公认事实相矛盾的表述。

图4:对抗性 Lint 报告,标记页面中的可疑断言
每个 wiki 页面有 5 种状态:draft -> active -> contradicted / stale -> archived,每种状态切换都记录在审计日志中。stale 状态由系统自动标记——当源文件在磁盘上发生变化时,相关页面自动过期;源文件删除则自动归档。

图5:5状态生命周期管理 + 完整审计轨迹
每个实质性主张都标注 ^[filename:L-L] 引用格式,指向源文件中精确的行范围。在 Obsidian 中点击引用芯片,可打开 Source Viewer 高亮对应段落;PDF 源文件则自动映射到 PDF 页码。

图6:声明级引用,在 Obsidian 中点击可跳转源文件
Synthadoc 主包采用 Python 3.11+,CLI 基于 Typer + Rich,HTTP 服务基于 FastAPI + Uvicorn,前端 Web UI 基于 React 19 + Vite + TypeScript,存储层使用 aiosqlite(异步 SQLite)。
核心包结构:
| 目录/模块 | 职责 |
|---|---|
synthadoc/agents/ | 7 种 Agent:IngestAgent、QueryAgent、LintAgent、SummarizeAgent、RewriteAgent、ExportAgent、ScaffoldAgent |
synthadoc/core/ | 核心运行时:orchestrator(编排器)、queue(任务队列)、scheduler(定时调度)、routing(路由)、cost_guard(成本守卫)、cache(3层缓存) |
synthadoc/providers/ | LLM 适配层:Anthropic、OpenAI、Ollama、CodingTool(含 Claude Code、Opencode) |
synthadoc/skills/ | 10+ 技能插件:pdf、docx、pptx、xlsx、url、web_search、youtube 等 |
synthadoc/observability/ | OpenTelemetry 集成,成本审计、事件追踪 |
obsidian-plugin/ | Obsidian 插件(TypeScript),提供 Ingest/Lint/Query UI 模态框 |
web-ui/ | React 前端,轻量构建 |
整体架构是典型的 Agent Orchestration 模式:orchestrator 调度多个专业 Agent,每个 Agent 对应一个具体任务(摄入、查询、审查、导出),通过 aiosqlite 共享状态,通过 FastAPI 暴露 HTTP 接口。

图7:知识图谱导出功能
# 安装
pip install synthadoc
# 安装演示知识库
synthadoc demo install history-of-computing
# 启动引擎(后台运行)
synthadoc serve -w history-of-computing --background
# 摄入文档
synthadoc ingest path/to/papers/ --wiki my-wiki
# 查询
synthadoc query "什么是冯诺依曼架构?" --wiki my-wiki
# 审查
synthadoc lint --wiki my-wiki
启动 synthadoc serve 后自动在本地 7070 端口提供 FastAPI 服务,Web UI 通过 http://localhost:7070 访问,支持任务列表、摄入进度、查询结果等图形化操作。

图8:Obsidian Vault 演示,支持图谱视图
安装 Obsidian 插件后,可在 Obsidian 内直接触发摄入、审查、查询操作。Synthadoc 也支持 Model Context Protocol,可直接作为 MCP Server 连接到 Claude Code,通过自然语言指令操控知识库。
1. 成本不可忽视:摄入时全量编译意味着每次新文档进入,系统都要遍历整个已有语料库进行综合。随着 wiki 规模增长,单次摄入的 token 消耗会显著上升。官方提供了 3 层缓存来缓解重复开销,但冷启动首次摄入仍需准备足够 API 额度。
2. 无容器化支持:当前版本没有 Dockerfile 和 docker-compose,对需要 Docker 隔离部署的用户不友好。虽然 pip 安装本身简单,但依赖 Python 3.11+ 环境,在部分企业环境中配置门槛较高。
3. 复杂度的双刃剑:5状态生命周期、对抗性审查、矛盾检测……这些能力组合起来功能强大,但也意味着学习曲线较陡。个人用户可能只用到了 20% 的功能,却要承担 100% 的复杂度。
4. 依赖 LLM 质量:系统输出的上限完全取决于底层 LLM 的能力——如果主 LLM 不够强,矛盾检测和对抗性审查的效果都会大打折扣。

图9:完整操作审计历史
Synthadoc 的出现代表了一种正在兴起的 AI 知识管理范式:从检索增强生成(RAG)转向编译型知识库(LLM Wiki)。
传统 RAG 的局限在于:每次查询都要临时生成答案,矛盾无法被系统性地发现,知识之间的关联完全依赖向量相似度。LLM Wiki 则在文档摄入时就完成了知识的结构化重组——这更接近人类整理笔记的方式:读一本新书,在已有的知识体系上更新和补充,而不是每次被问到问题时才临时翻书。
从行业趋势看,2024 年 Karpathy 提出 LLM Wiki 概念后,Synthadoc 是目前实现最完整、社区最活跃的开源项目之一。它与 Notion AI、NotebookLM 等闭源产品的最大区别在于完全本地优先——数据永远在你自己机器上,API 调用成本可控,Obsidian 生态无缝集成。
如果你的团队正在构建 AI Native 应用、需要让 AI 在长周期内保持「记忆」、或者厌倦了 RAG 的局限性,Synthadoc 值得深入了解。

图10:Synthadoc 自动构建的知识图谱
本文基于 Synthadoc v0.9.0 Community Edition 分析撰写。