LLM Wiki理论与实践-01:使用Obsidian来感受LLM Wiki的三层架构我们简单介绍了LLM Wiki的三层架构,并使用Obsidian对此进行了简单的模拟。LLM Wiki理论与实践-02:使用Obsidian导入外部数据源构建知识库我们介绍了如何充分利用Obsidian的插件导入外部数据源来建立知识库。在LangChain体系中针对LLM Wiki的实现是一个名为OpenWiki的CLI工具。
1. OpenWiki概述
OpenWiki并非一个孤立的文档工具,而是LangChain对LLM Wiki这一模式的具体开源实现。它的核心定位是为Agent生成并自动维护结构化的、可检索的Markdown知识库,作为Agent的持久化上下文或记忆,从而解决Agent在理解代码库或跨源信息时反复消耗token去重新发现上下文的痛点。OpenWiki提供了如下两种模式:
- 代码(Code)模式
代码模式会在openWiki/ 目录下构建一个包含架构、集成和工作流程等持久化细节的Wiki仓库(代码库)。Coding Agent会使用该Wiki作为上下文,从而更高效地处理软件包,减少重复发现和标记的使用。人类也可以阅读相同的Markdown文档,但Agent才是主要受众。Agent通过OpenWiki在AGENTS.md中维护的指针发现该Wiki。Claude Code也会通过CLAUDE.md中的@AGENTS.md导入语句发现该Wiki。
- 个人(Personal)模式
个人模式在~/.openwiki/wiki/%UserProfile%.openwiki/wiki(可以通过环境变量控制)中构建一个基于当前登录用户的Wiki知识库,其来源包括本地存储库、自定义 MCP、Gmail、Notion、网络搜索、Hacker News、Slack和X/Twitter等。
2. 使用个人模式初始化知识库
前面我们利用Obsidian构建了知识库,现在我们试着利用OpenWiki的个人模式完成类似的工作。和Obsidian可以创建任意Vault不同,OpenWiki的知识库是针对当前登录用户,所以它默认会将这个知识库映射到~/.openwiki/wiki/%UserProfile%.openwiki/wiki目录下。由于我希望为某个Agent构建一个知识库,所以我更倾向于使用指定的目录,为此我通过OPENWIKI_CONFIG_DIR环境变量指定了专属的目录(E:\AI\llm-wiki\openwiki\kb)。通过执行npm install -g openwiki完成了Openwiki的全局安装之后,我们通过执行openwiki personal --init按照如下的步骤来初始化这个个人知识库。
步骤1:设置LLM
第一个步骤是设置LLM,OpenWiki提供如下所示的LLM提供商。由于我采用的是部署在Azure上的OpenAI系列模型,所以我选择的是OpenAI-compatible选项。然后根据提示输入API-KEY、URL和模型ID(我这里使用的是gpt-5.4-mini)就可以了。
步骤2:设置LangSmith API KEY
如果希望使用LangSmith提供的跟踪能力,可以设置对应的API KEY。
步骤3:设置核心范围与目标
接下来我们为知识库框定一个大致核心范围与目标(Wiki Brief),它决定了OpenWiki未来从你连接的数据源(如 Gmail、Notion、X 等)中摄入信息时,应该关注什么、忽略什么、以及如何组织内容。我们采用默认设置,如果有需要以后再改。
步骤4:设置内容摄取调度
OpenWiki的自动摄取调度(Ingestion Schedule)决定在什么时间自动去拉取你已配置的数据源(如 Gmail、Notion、网页搜索等)的最新数据,并同步更新你的个人Wiki。界面提供了如下两个选项:
- Use suggested schedule:使用建议的调度,即每天凌晨02:00 AM运行一次,这也是 OpenWiki 的默认建议值。
- Enter custom cron:手动输入自定义的 Cron 表达式。你可以按自己的节奏设定,比如每 6 小时一次(0 */6 * * *)或每周一早上 8 点(0 8 * * 1)。
步骤5:设置数据源
与Obsidian的Importer插件类似,OpenWiki利用相应的Connector摄取外部数据来生成Wiki。

如上图所示,OpenWiki默认支持的数据源包括:
- custom-mcp: 摄取任意已配置的 HTTP 或 stdio MCP 服务器数据(仅限只读安全工具),提供高度定制化的外部异构系统接入。
- git-repo: 摄取本地版本库数据,读取仓库路径并生成紧凑的清单文件,提供本地代码与资产上下文。
- x: 摄取主页时间线、用户帖子、提及、书签和列表推文,提供个人社交网络与外部关注动态。
- notion: 摄取Notion工作区内的页面与文档,提供个人知识库与结构化笔记上下文。
- google: 摄取最近的邮件通信数据,提供个人日常沟通与事务往来信息。
- web-search: 摄取实时的公开网页搜索结果,提供广泛的外部互联网信息追踪。
- hackernews: 摄取公开的科技新闻与讨论数据,提供科技、创业领域的行业趋势与社区信号。
- slack: 摄取团队工作区内的对话与消息,提供企业内部协作与即时通讯上下文。
我选择了如下四个数据源:
- git-repo:绑定了本地创建的git仓库(
E:\\jaydenai\\blog); - notion:提供CLIENT_ID、ACCESS_TOKE和REFRESH_TOKEN连接Notion MCP;
- web-search:提供Tavily API-KEY实现网络搜索,在实施摄取的时候会根据指定的查询文本获取相应的内容来填充Wiki。我设置的查询文本是
Track the latest news about mid-term election of US. - hackernews:提供感兴趣的主题从HN(Hacker News)提取感兴趣的新闻,我采用默认提供的查询主题:
Monitor threads about AI agents, evals, infrastructure, and startups.
整个初始化过程提供的设置都会写入$(OPENWIKI_CONFIG_DIR)目录下相应的配置文件中。onboarding.json是 OpenWiki个人模式(Personal Mode)的非机密引导配置文件,用于持久化保存你在首次运行向导中做出的各项选择与设置,以便后续更新或调度时能读取这些偏好。
{
"sourceInstances": [
{
"connectedAt": "2026-11-06T00:13:36.134Z",
"ingestionGoal": "Ingest product specs, meeting notes, and research pages.",
"connectorId": "notion",
"id": "notion-1",
"name": "Notion 1: Ingest product specs, meeting notes, and research pages."
},
{
"connectedAt": "2026-11-06T00:32:54.735Z",
"connectorConfig": {
"repos": [
{
"id": "blog",
"path": "E:\\jaydenai\\blog"
}
]
},
"ingestionGoal": "Track architecture notes from this repo.",
"connectorId": "git-repo",
"id": "git-repo-1",
"name": "Local Git repository 1: Track architecture notes from this repo."
},
{
"connectedAt": "2026-11-06T00:33:44.440Z",
"connectorConfig": {
"enabled": true,
"includeAnswer": true,
"includeImages": false,
"includeRawContent": false,
"maxResults": 5,
"queries": [
"Track the latest news about mid-term election of US."
],
"searchDepth": "basic",
"timeRange": "day",
"topic": "general"
},
"ingestionGoal": "Track the latest news about mid-term election of US.",
"connectorId": "web-search",
"id": "web-search-1",
"name": "Web Search (Tavily) 1: Track the latest news about mid-term election of US."
},
{
"connectedAt": "2026-11-06T00:34:05.317Z",
"connectorConfig": {
"enabled": true,
"feeds": [
"top",
"new"
],
"maxItemsPerFeed": 30,
"maxResultsPerQuery": 20,
"queries": [
"Monitor threads about AI agents, evals, infrastructure, and startups."
],
"queryTags": [
"story"
]
},
"ingestionGoal": "Monitor threads about AI agents, evals, infrastructure, and startups.",
"connectorId": "hackernews",
"id": "hackernews-1",
"name": "Hacker News 1: Monitor threads about AI agents, evals, infrastructure, and startups."
}
],
"sources": {
"notion": {
"connectedAt": "2026-11-06T00:13:36.134Z",
"ingestionGoal": "Ingest product specs, meeting notes, and research pages."
},
"git-repo": {
"connectedAt": "2026-11-06T00:32:54.735Z",
"connectorConfig": {
"repos": [
{
"id": "blog",
"path": "E:\\jaydenai\\blog"
}
]
},
"ingestionGoal": "Track architecture notes from this repo."
},
"web-search": {
"connectedAt": "2026-11-06T00:33:44.440Z",
"connectorConfig": {
"enabled": true,
"includeAnswer": true,
"includeImages": false,
"includeRawContent": false,
"maxResults": 5,
"queries": [
"Track the latest news about mid-term election of US."
],
"searchDepth": "basic",
"timeRange": "day",
"topic": "general"
},
"ingestionGoal": "Track the latest news about mid-term election of US."
},
"hackernews": {
"connectedAt": "2026-11-06T00:34:05.317Z",
"connectorConfig": {
"enabled": true,
"feeds": [
"top",
"new"
],
"maxItemsPerFeed": 30,
"maxResultsPerQuery": 20,
"queries": [
"Monitor threads about AI agents, evals, infrastructure, and startups."
],
"queryTags": [
"story"
]
},
"ingestionGoal": "Monitor threads about AI agents, evals, infrastructure, and startups."
}
},
"version": 1,
"completedAt": "2026-11-06T00:34:10.529Z",
"modeId": "personal",
"modeName": "Personal",
"templateId": "personal",
"templateName": "Personal",
"ingestionSchedule": {
"description": "At 02:00 AM",
"expression": "0 2 * * *",
"updatedAt": "2026-11-08T10:19:23.031Z",
"warning": "Schedule saved, but native installation is currently macOS-only."
},
"powerManagement": {
"pmset": {
"days": "MTWRFSU",
"enabled": false,
"sleepTime": "02:30:00",
"updatedAt": "2026-11-08T10:19:25.438Z",
"wakeTime": "01:58:00",
"warning": "Wake setup is currently macOS-only."
}
}
}
各种Client-ID、API-KEY和Token等将会写入.env文件中,OpenWiki启动的时候将会加载它们写入环境变量。上面的设置涉及如下的的环境变量:
OPENAI_COMPATIBLE_API_KEY="..."
OPENAI_COMPATIBLE_BASE_URL="..."
OPENWIKI_PROVIDER="openai-compatible"
OPENWIKI_MODEL_ID="gpt-5.4-mini"
OPENWIKI_NOTION_MCP_CLIENT_ID="qWRhQzFR7QKrP1Wk"
OPENWIKI_NOTION_MCP_ACCESS_TOKEN="..."
OPENWIKI_NOTION_MCP_REFRESH_TOKEN="..."
OPENWIKI_GOOGLE_CLIENT_ID="..."
OPENWIKI_GOOGLE_CLIENT_SECRET="..."
TAVILY_API_KEY="..."
LANGSMITH_API_KEY="..."
LANGCHAIN_PROJECT="openwiki"
LANGCHAIN_TRACING_V2="true"
OPENWIKI_NOTION_MCP_TOKEN_EXPIRES_AT="2026-11-08T18:39:24.115Z"
OPENWIKI_NOTION_MCP_TOKEN_TYPE="bearer"
第3步设置的Wiki Brief将会定义在INSTRUCTIONS.md中。换句话说,我们可以通过修改这些文件随时改变配置。
Your personal brain. Track active projects, people, organizations, decisions, commitments, follow-ups, useful links, recurring themes, and fresh external signals. Organize the wiki so a personal assistant can answer what changed, what matters, what needs attention, and where supporting evidence came from. Be selective: summarize durable context and explicit action items, not every raw item.
3. 进一步修改Connector的配置
每个Connector在$(OPENWIKI_CONFIG_DIR)/connectors目录下都具有专属的子目录,它们可以拥有自己的配置文件config.json。如果需要我们可以通过修改配置文件的方式对每个Connector进一步设置。比如我们为web-search这个Connector添加了对应的config.json文件,并定义了如下的内容使之获取关于美国中期选举相关的内容。
{
"queries": [
"美国中期选举",
"US midterm elections",
"2026 midterm elections",
"congressional race 2026"
]
}
4. 利用Connectors刷新知识库
我们可以执行openwiki personal --update命令刷新知识库。这是OpenWiki个人模式下的核心维护命令,用于在你完成初始化并配置好数据源后,刷新本地的个人知识库 Wiki。它会基于你已连接的数据源(如Gmail、Notion、网页搜索等)拉取最新信息,并让 AI 代理将新内容合成到~/.openwiki/wiki 下的 Markdown 文件中。该命令的底层逻辑通常涉及以下环节:
- 加载配置:读取
$(OPENWIKI_CONFIG_DIR)目录下的环境变量文件.env、onboarding.json中的连接器配置以及INSTRUCTIONS.md中定义的Wiki范围与目标。 - 摄取数据:根据配置的调度或当前指令,依次从各数据源拉取最新数据。
- Wiki合成:Agent读取新拉取的数据,将其与现有Wiki内容合并,更新相关页面。如果 Wiki 内容确实发生了变化,系统会写入更新元数据;若没有实质变化,则避免无意义的覆盖。
我直接执行命令openwiki personal --update "Refresh the wiki from configured connectors"利用配置的Connectors刷新知识库:

最终生成的Wiki将会全部存储在$(OPENWIKI_CONFIG_DIR)/wiki目录下:
📁 wiki
├── 📁 large_tool_results
├── 📁 sources
├── 📄 .last-update.json
├── 📄 commitments.md
├── 📄 index.md
├── 📄 open-questions.md
├── 📄 personal-logistics.md
├── 📄 quickstart.md
└── 📄 themes.md
各个子目录的Markdown文件说明如下:
- large_tool_results/:存放摄取或合成过程中产生的、体积较大的工具输出结果(中间件数据)。
- sources/:来源证据索引目录。存放各连接器(如 Gmail、Notion 等)的简明证据与数据覆盖范围,用于追溯Wiki信息的原始出处,不存放主要的合成内容。
- .last-update.json:系统状态文件。机器写入的运行元数据,记录最近一次运行的时间、命令、模型和状态,用于判断更新新鲜度,不建议手动编辑。
- commitments.md:任务与承诺追踪。记录工作事项、待办任务、后续跟进与审批事项,并标注负责人(如
Owner: me)。 - index.md:Wiki 索引文件。包含版本声明和页面列表,用于组织整个知识库的结构。
- open-questions.md:待解决问题追踪。记录尚未解决的知识空白或疑问,分为活跃(Active)、已回答(Answered)和已过时(Stale)三个部分。
- personal-logistics.md:个人生活事务。记录日程、出行、家务等个人生活相关的后勤信息,与工作承诺区分开来。
- quickstart.md:导航入口与高层状态。作为整个个人Wiki的起点,汇总关键信息并链接到其他主要页面,强调基于确认事实的内容。
- themes.md:主题与趋势索引。以紧凑格式呈现你持续关注的主题和趋势(如特定项目、研究领域),每条通常限制在 1-2 句话内。
openwiki personal --update的设计是增量更新:它会检查数据源是否有变化,如果内容快照没变,它会跳过写入。如果你只是不想等预定的调度时间,想立刻从Gmail、Notion、Web Search 等源拉取最新数据,最直接的方式是使用openwiki ingest命令:
openwiki ingest all
openwiki ingest web-search
5. 可视化形式查看Wiki
为了方便浏览OpenWiki Markdown wiki,我们可以执行openwiki visualize命令在浏览器中提供一个本地交互式节点图和一个实时Markdown阅读器。您还可以将相同的节点图和阅读器导出为静态目录进行托管。
E:\AI\llm-wiki\openwiki\kb\wiki>openwiki visualize ./
↻ initial scan: 12 pages, 30 links
OpenWiki visualizer
wiki: E:\AI\llm-wiki\openwiki\kb\wiki
open: http://127.0.0.1:4321
live: editing pages under the wiki refreshes the browser
Ctrl-C to stop.
我们通过上面的方式在输出Wiki所在的目录下执行openwiki visualize ./后,基于我们构建知识库的交互式Markdown阅读器将会出现浏览器上。

6. 以对话形式与Agent交互
既然承载知识库的Wiki已经生成好了,我们自然就可以采用对话的形式与OpenWiki这个Agent进行交互。我们只需要执行openwiki personal命令便可开启对话模式。在如下的对话中,我们针对notion、web-search和hackernews三个Connector摄取的内容问了三个问题,均得到希望的回复。
___ __ ___ _ _
/ _ \ _ __ ___ _ __ \ \ / (_) | _(_)
| | | | '_ \ / _ \ '_ \ \ \ /\ / /| | |/ / |
| |_| | |_) | __/ | | | \ V V / | | <| |
\___/| .__/ \___|_| |_| \_/\_/ |_|_|\_\_|
|_|
> 提取最近一份会议记录,并对其进行总结
✓ Completed openwiki chat in 26s · gpt-5.4-mini
1 read · 3 searches
根据最近一份会议记录《Meeting Minites》,最近的会议内容是 2026-11-07 跨组同步。总结如下:
- **数据迁移演练** 定于下周二,运维组需要准备回滚方案。
- **导出乱码问题** 已定位,修复会随 **v2.3** 发布。
- **上线前检查会** 已确认安排在 **下周一上午 10 点**。
如果你愿意,我也可以继续帮你把这份会议记录整理成:
1. **更正式的会议纪要**
2. **行动项清单**
3. **一页式摘要**
> 1
✓ Completed openwiki chat in 3s · gpt-5.4-mini
Warning: model "gpt-5.4-mini" is not a known OpenAI-compatible model (it belongs to GitHub Copilot, OpenAI, OpenAI (ChatGPT login)). The request may fail. Set OPENWIKI_MODEL_ID to a OpenAI-compatible model,
or switch providers.下面是一版更正式的会议纪要摘要:
会议纪要:2026-11-07 跨组同步
会议结论
- 数据迁移演练安排在下周二进行,运维组需提前准备回滚方案。
- 客服反馈的导出乱码问题已定位,修复将随 v2.3 一并发布。
- 上线前检查会已确认安排在下周一上午 10 点。
主要事项
- 迁移演练:确认了时间与责任方,重点在于演练前的回滚准备。
- 缺陷修复:导出乱码问题已找到原因,进入随版本修复流程。
- 发布准备:上线前检查会已排期,用于发布前确认关键事项。
风险与关注点
- 迁移演练涉及回滚方案,需确保预案可执行。
- v2.3 发布前需完成修复验证,避免影响上线质量。
如果你需要,我可以继续把它整理成:
- **带行动项和负责人版本**
- **适合发送到群里的简短版**
- **中英双语版**
> 关于美国中期选举,最近有什么消息?
✓ Completed openwiki chat in 24s · gpt-5.4-mini
2 reads · 1 search
基于最近的网页搜索结果,目前关于美国中期选举的“最近消息”主要是 2026 年中期选举的结果与后续影响,而不是单纯的背景介绍。重点如下:
- **民主党表现强势**:多条结果显示,民主党在这次中期选举中取得显著进展,甚至被描述为“blue wave”。
- **众议院控制权发生变化**:搜索结果显示,民主党赢回了众议院控制权。
- **参议院仍有竞争/分歧说法**:不同来源摘要里对参议院控制权的表述不完全一致,但一致反映出参议院格局对双方都很关键,且结果会深刻影响后续立法与任命。
- **年轻候选人崛起**:The Hill 的结果提到,一批更年轻的候选人赢得选举,出现明显的“youth quake”现象。
- **政策影响受关注**:Brookings、NBC、Reuters 等结果都强调,这次中期选举会影响未来几年华盛顿的政策走向,尤其是公共支出、移民、经济与外交议题。
如果你要,我可以继续给你整理成:
1. **中文简报版**
2. **按“结果 / 影响 / 争议点”三栏整理**
3. **只列最新 3 条最重要消息**
> Hacker News最近有什么关于AI的新闻?提取最新的5条
✓ Completed openwiki chat in 12s · gpt-5.4-mini
2 actions
下面是基于最近 Hacker News 抓取结果里,和 AI 相关度较高的最新 5 条,按时间从新到旧整理:
1. Cyber at the Frontier - 来源:OpenAI
- 链接:`https://openai.com/cyber-at-the-frontier/`
- 说明:偏 AI 安全 / 网络安全方向的内容,属于近期新发帖。
2. Ask HN: Is it possible to backtest math/scinse breakthroughs with AI models? - 类型:Ask HN
- 说明:讨论是否可以用 AI 模型回测数学/科学突破,偏研究方法与能力边界。
3. Old, Polluting Jet Engines Are Being Scavenged to Power Data Centers - 来源:The New York Times
- 链接:`https://www.nytimes.com/2026/11/03/climate/jet-engines-ai-data-center-generators-boneyard.html`
- 说明:虽然主题是数据中心供电,但明显与 AI 基础设施扩张相关。
4. Llama-modchip: 284B DeepSeek on 64GB RAM, no GPU - 来源:GitHub
- 链接:`https://github.com/synchopate/llama-modchip`
- 说明:关于在有限硬件上运行超大模型,属于 AI 推理 / 部署工程话题。
5. Goodbye Claude, Hello Pi - 来源:caleb.software
- 链接:`https://caleb.software/posts/claude-to-pi.html`
- 说明:标题显示明显涉及 Claude,应该是作者迁移或替代 AI 工具的实践总结。
如果你要,我还可以继续帮你做两种进一步整理:
- **只保留“纯 AI”新闻,不含基础设施/泛科技**
- **把这 5 条提炼成中文要点摘要**
355



被折叠的 条评论
为什么被折叠?



