构建本地 AI Agent 工作台:从 Obsidian 到 Software 2.0 的工程实践

5 阅读7分钟

基于 Karpathy LLM Knowledge Bases 理念的本地 Agent 系统构建指南


一、引言:为什么需要本地 Agent 工作台?

随着 Claude Code、Cursor 等 AI 编程工具的兴起,开发者们逐渐意识到:AI 的能力不仅在于生成代码,更在于持续积累和复用知识

但这里有一个核心问题:

  • AI 的会话会结束,上下文会丢失
  • 每次新开对话,都要重新解释项目背景和个人习惯
  • 有效的协作经验无法沉淀,重复造轮子

解决方案: 构建一个本地 Agent 工作台,让 AI 参与到能持续积累资产的系统中。


二、核心理念:把知识库当代码仓库,把 LLM 当编译器

这个理念来自 Andrej Karpathy 的 LLM Knowledge Bases 方法论:

"原始资料不是最终知识,就像源码不是可以直接跑的程序。它需要经过整理、抽取、索引,才能变成真正可用的东西。"

类比理解:

传统开发Agent 系统
源码原始资料 (raw/)
编译器LLM
编译产物提炼后的知识 (wiki/)
构建工具脚本 (scripts/)
运行时环境Agent 配置 (agent/)

三、分层架构设计:每一层只回答一个问题

基于上述理念,我设计了一个七层架构:

workspace/
├── raw/              # 原始输入 → "我收集了什么"
├── wiki/             # 知识编译层 → "我知道了什么"
├── projects/         # 项目推进层 → "我正在推进什么"
├── writing/          # 稳定输出层 → "我准备输出什么"
├── outputs/          # 运行时产物 → "我产生了什么"
├── agent/            # Agent 配置 → "我是谁、该怎么协作"
└── scripts/          # 本地工具 → "我能做什么"

3.1 raw/ - 原始输入层

作用: 存放未经处理的原始资料

内容示例:

  • 网页剪藏
  • 会议记录
  • 临时笔记
  • 代码片段

关键原则:

  • 不要试图在这里保持整洁
  • 允许混乱,因为这里是"源码"
  • 定期通过脚本"编译"到 wiki/

3.2 wiki/ - 知识编译层

作用: 存放经过 LLM 整理后的结构化知识

内容示例:

  • 概念解释
  • 最佳实践
  • 常见问题 (FAQ)
  • 技术决策记录 (ADR)

与 raw/ 的区别:

  • raw/ 是"我收集了什么"(原始)
  • wiki/ 是"我理解了什么"(提炼)

3.3 projects/ - 项目推进层

作用: 存放正在进行的项目、研究、实验

内容示例:

  • 项目计划
  • 实验记录
  • 阶段性结论
  • 待办事项

为什么从 wiki/ 分离出来?

  • 知识积累 ≠ 项目推进
  • 研究一个主题时,有目标、假设、实验记录,这些不适合放在 wiki/

3.4 writing/ - 稳定输出层

作用: 存放即将发布或已发布的内容

内容示例:

  • 博客草稿
  • 选题池
  • 已发布文章归档

3.5 outputs/ - 运行时产物

作用: 存放脚本运行产生的临时文件

内容示例:

  • 生成的图表
  • 导出的数据
  • 临时报告

3.6 agent/ - Agent 配置层

这是整个系统的核心,回答"我是谁、最近在做什么、该怎么协作"。

子目录设计:

agent/
├── AGENTS.md       # 启动导航页(不是记忆!)
├── memory/         # 长期记忆
│   ├── profile.md  # 个人画像
│   ├── preferences.md  # 偏好设置
│   └── context.md  # 当前上下文
├── sessions/       # 会话历史
├── qa/             # 高价值问答
├── prompts/        # 常用 Prompt 模板
└── playbooks/      # 标准操作流程

AGENTS.md 的定位:

很多人第一反应是:把什么都塞进 AGENTS.md。但正确的做法是:

  • AGENTS.md 是导航页,不是记忆库
  • 它应该告诉 Agent:这个仓库是什么、有哪些层、新会话先读什么
  • 真正的记忆分散在 memory/、sessions/、qa/、projects/、wiki/

3.7 scripts/ - 本地工具层

作用: 把高频动作固化成脚本,让 Agent 也能调用

核心脚本:

# recall.py - 新会话开始时读取本地记忆
def recall():
    """读取 agent/memory/ 和 agent/context.md"""
    pass

# capture_session.py - 把有价值的会话落成 session
def capture_session(session_content):
    """保存到 agent/sessions/YYYY-MM-DD-HH-MM.md"""
    pass

# archive_qa.py - 把高价值问答沉淀成 QA 卡片
def archive_qa(question, answer):
    """保存到 agent/qa/ 并更新索引"""
    pass

# search_qa.py - 先检索已有经验
def search_qa(query):
    """检索 agent/qa/ 中的相关内容"""
    pass

# compile_note.py - 把 raw 编译成 wiki
def compile_note(raw_file):
    """调用 LLM 整理 raw/ 中的笔记到 wiki/"""
    pass

# refresh_indexes.py - 刷新知识索引
def refresh_indexes():
    """更新 wiki/ 和 agent/qa/ 的索引"""
    pass

# consolidate_memory.py - 压缩短期记忆到长期记忆
def consolidate_memory():
    """整合 agent/sessions/ 到 agent/memory/"""
    pass

# health_check.py - 定期体检
def health_check():
    """检查各层健康状态"""
    pass

四、工作流程:人 + Agent + 仓库的协作闭环

4.1 新会话启动流程

  1. Agent 读取 AGENTS.md - 了解仓库结构
  2. 执行 recall.py - 加载长期记忆和当前上下文
  3. 检索相关 QA - 查看是否有类似问题的历史记录
  4. 开始协作 - 基于已有上下文进行对话

4.2 会话中沉淀流程

  1. 产生有价值的问答 → 执行 archive_qa.py
  2. 完成项目里程碑 → 更新 projects/
  3. 整理 raw 笔记 → 执行 compile_note.py
  4. 会话结束 → 执行 capture_session.py

4.3 定期维护流程

  1. 每日 - refresh_indexes.py 刷新索引
  2. 每周 - consolidate_memory.py 压缩记忆
  3. 每月 - health_check.py 系统体检

五、实践案例:用这套系统写技术博客

场景描述

我要写一篇关于"Redis 高级用法"的博客文章。

传统方式

  1. 打开 ChatGPT/Claude
  2. 从零开始解释:我是谁、要写什么主题、目标读者是谁
  3. 生成大纲
  4. 逐段生成内容
  5. 会话结束,所有上下文丢失
  6. 下次想写续集,重新解释一遍

使用本地 Agent 工作台

第一步:在 projects/ 创建项目

# projects/redis-advanced-usage/README.md

## 目标
写一篇关于 Redis 10种高级用法的博客

## 目标读者
后端开发者,有一定 Redis 基础

## 大纲
1. 布隆过滤器
2. 分布式锁
3. 延迟队列
4. ...

## 参考资料
- [链接1]
- [链接2]

第二步:Agent 读取上下文

[Agent 自动加载]
- AGENTS.md: 了解仓库结构
- agent/memory/profile.md: 了解我的写作风格
- projects/redis-advanced-usage/: 了解项目背景

第三步:协作写作

我:帮我写第一段,介绍布隆过滤器
Agent:好的,基于你的风格(简洁、有代码示例),这里是草稿...

我:不错,但例子太简单了,加个电商场景
Agent:已更新,加入了防止缓存穿透的电商场景...

第四步:沉淀经验

会话结束,执行 capture_session.py
→ 保存到 agent/sessions/2026-04-08-redis-blog.md

有价值的问题"如何防止缓存穿透"
→ 执行 archive_qa.py 保存到 agent/qa/

第五步:下次续写

新会话自动加载:
- 项目背景(projects/redis-advanced-usage/)
- 上次写到哪了(agent/sessions/)
- 已有问答(agent/qa/)

Agent:我们继续写第5点 HyperLogLog?

六、工具推荐

6.1 笔记工具

  • Obsidian - 本地优先,强大的链接和插件生态
  • Logseq - 大纲式笔记,适合快速记录

6.2 Agent 工具

  • Claude Code - 最强编程 Agent
  • OpenClaw - 本地 Agent 框架,支持自定义 Skill

6.3 脚本语言

  • Python - 丰富的库,适合数据处理
  • Bash - 系统级操作,轻量快速

七、常见问题

Q1: 这和直接用 ChatGPT 有什么区别?

区别:

  • ChatGPT:会话结束,上下文清零
  • 本地工作台:上下文持续积累,越用越懂你

Q2: 需要多少技术门槛?

门槛:

  • 基础:会用 Obsidian 或类似工具
  • 进阶:会写简单 Python 脚本
  • 高级:能设计适合自己工作流的架构

Q3: 投入产出比如何?

前期: 需要 1-2 天搭建系统 后期: 每次会话节省 5-10 分钟解释时间,长期收益巨大


八、总结

构建本地 Agent 工作台的核心思想:

  1. 分层 - 每层只回答一个问题,避免混乱
  2. 导航 - AGENTS.md 是入口,不是记忆库
  3. 脚本 - 把高频动作固化,让 Agent 也能调用
  4. 沉淀 - 每次有效协作都要保存下来
  5. 复利 - 系统越用越智能,上下文越积越丰富

最终目标: 不是"我在用一个 Agent",而是"我在维护一个更大的 Agent 系统"。


参考来源:

  • Karpathy LLM Knowledge Bases 方法论
  • 掘金《Software 2.0 落地:把 Obsidian 仓库改造成本地 Agent 工作台》
  • OpenClaw 官方文档

标签: #AIAgent #Obsidian #知识管理 #Software2.0 #本地优先 #Agent工作台


本文基于实际工程实践整理,代码示例可直接使用。