初级

文件系统即新数据库:我如何为AI智能体构建个人操作系统

文件系统即新数据库:我如何为AI智能体构建个人操作系统

文件系统即新数据库:我如何为AI智能体构建个人操作系统#

每次与AI对话的开场都如出一辙。
你先介绍自己是谁。
再说明正在做什么项目。
然后粘贴你的风格指南。
重新描述你的目标。
重复一遍昨天、前天、乃至更早之前已经交代过的背景信息。
接着,40分钟后,模型忘记了你的语言风格,开始写出像新闻稿一样的文字。
我受够了这一切。
于是我构建了一个系统来解决这个问题。
我称之为“个人大脑操作系统”。
这是一个基于文件的个人操作系统,存在于一个Git仓库中。
克隆它,在Cursor或Claude Code中打开,AI助手便拥有了一切:我的语言风格、我的品牌、我的目标、我的联系人、我的内容流水线、我的研究、我的失败经验。
没有数据库,没有API密钥,无需构建步骤。
只有80多个Markdown、YAML和JSONL格式的文件,人类和语言模型都能原生读取。
> 引用的推文 > 上下文工程技能让我的项目创建效率提升了10倍。
我用Claude Code配合Context插件重建了我的数字大脑系统,使其成为一个真正的个人操作系统。
它提供了一个完整的基于文件夹的架构,用于管理:- 个人品牌 - 语言风格、定位、价值观 - 内容... > https://x.com/i/web/status/2005827257458131321
我将分享完整的架构、设计决策以及犯过的错误,以便你也能构建自己的版本。
不是复制我的,而是属于你自己的。
具体的模块、文件模式、技能定义会根据你的工作内容而有所不同。
但其中的模式是相通的。
为AI智能体构建信息结构的原则是普适的。
取你所需,弃你所不需,打造一个真正有用而非泛泛而谈的AI助手。
以下是我如何构建它、为何架构决策至关重要,以及我通过艰难方式学到的经验。

1) 核心问题:上下文,而非提示#

大多数人认为AI助手的瓶颈在于提示词。
写出更好的提示,就能得到更好的答案。
对于单次交互和生产环境的智能体提示来说,这没错。
但当你希望AI在数周乃至数月的时间里,作为“你”来处理数十项任务时,这个思路就失效了。
注意力预算:语言模型拥有有限的上下文窗口,且并非所有上下文都同等重要。
这意味着把你所知的一切都塞进系统提示里不仅是浪费,还会主动降低性能。
你添加的每个标记都在争夺模型的注意力。
我们的大脑运作方式类似。
当有人在会议前向你简要介绍15分钟,你会记住他们说的第一件事和最后一件事。
中间的部分则变得模糊。
语言模型具有相同的U型注意力曲线,只不过它们的曲线是可数学测量的。
标记的位置会影响回忆概率。
新模型在这方面有所改进,但你仍然在分散模型对最重要事情的注意力。
了解这一点会改变你为AI系统设计信息架构的方式。
> 引用的推文 > AI智能体角色应模拟人类推理的结构。
我一直认为,仅靠提示工程无法“发明”出一个数字专家智能体。
你必须通过深度访谈来“提取”专家。
一篇新的NeurIPS论文《模拟社会需要模拟...》... > https://x.com/i/web/status/1999192104850133146
我没有编写一个庞大的系统提示,而是将个人操作系统拆分为11个独立的模块。
当我要求AI撰写博客文章时,它会加载我的语言风格指南和品牌文件。
当我要求它为会议做准备时,它会加载我的联系人数据库和互动历史。
模型在内容任务期间看不到网络数据,在会议准备任务期间也看不到内容模板。
> 引用的推文 > 你不应该使用LLM来生成合成的人类角色。
我刚读完NeurIPS论文《LLM生成的角色:有陷阱的承诺》,它证实了我们长久以来的怀疑:你无法仅凭统计数据和LLM“发明”一个真实的人类... > https://x.com/i/web/status/1998530190847390025
渐进式披露:这是使整个系统工作的架构模式。
系统不是一次性加载所有80多个文件,而是使用三个层级。
第1级是一个始终加载的轻量级路由文件。
它告诉AI哪个模块是相关的。
第2级是模块特定的指令,仅在需要该模块时才加载。
第3级是实际的数据——JSONL日志、YAML配置、研究文档,仅在任务需要时才加载。
这模拟了专家的工作方式。
这三个层级形成了一个漏斗:广泛的路由、然后是模块上下文、最后是具体数据。
在每个步骤中,模型都拥有恰好需要的信息,不多不少。
我的路由文件是 SKILL.md,它告诉智能体“这是一个内容任务,加载品牌模块”或“这是一个网络任务,加载联系人”。模块指令文件(CONTENT.mdOPERATIONS.mdNETWORK.md)每个有40-100行,包含文件清单、工作流序列以及一个包含该领域行为规则的 <instructions> 块。
数据文件最后加载,仅在需要时。
AI从JSONL中逐行读取联系人,而不是解析整个文件。
三个层级,任何信息最多只需两次跳转即可访问。
> 引用的推文 > 大多数人把AI当作谷歌:问一个问题,得到一个答案。
但如果AI能像你一样思考或与你一起思考呢?我逆向工程了“心智理论”,以测试模型是否能形成“关于我的心智的理论”。
通过给AI提供个人上下文,将其作为镜子来理解自己... > https://x.com/i/web/status/1997444237890081104
智能体指令层次结构:我构建了三个层次的指令,用于界定AI在不同层级的行为。
在仓库级别,CLAUDE.md 是入门文档——每个AI工具首先读取它,获得项目的完整地图。
在大脑级别,AGENT.md 包含七条核心规则和一个决策表,该表将常见请求映射到精确的操作序列。
在模块级别,每个目录都有自己的指令文件,包含特定领域的行为约束。
这解决了困扰大型AI项目的“指令冲突”问题。
当所有内容都存在于一个系统提示中时,规则会相互矛盾。
内容创建指令可能与网络指令冲突。
通过将规则限定在其领域内,你可以消除冲突,并为智能体提供清晰、不重叠的指导。
这种层次结构也意味着你可以更新一个模块的规则,而不会冒另一个模块行为退化的风险。
我的 AGENT.md 是一个决策表。
AI读取“用户说‘给Z发邮件’”,并立即看到:
  1. 步骤1,在HubSpot中查找联系人。
  2. 步骤2,验证电子邮件地址。
  3. 步骤3,通过Gmail发送。
OPERATIONS.md 这样的模块级文件定义了优先级级别(P0:今天做,P1:本周,P2:本月,P3:待办事项),以便智能体能一致地对任务进行优先级排序。
智能体遵循与我相同的优先级系统,因为系统是明确编码的,而非隐含的。

2) 文件系统即记忆#

我做的最反直觉的决定之一:没有数据库
没有向量存储。
除了Cursor或Claude Code的功能外,没有检索系统。
只有磁盘上的文件,用Git进行版本控制。
格式-功能映射:系统中的每种文件格式都因其与AI智能体处理信息的方式相关的特定原因而被选择。
JSONL用于日志,因为它是按设计仅追加的、流友好的(智能体无需解析整个文件即可逐行读取),并且每一行都是自包含的有效JSON。
YAML用于配置,因为它能清晰地处理分层数据、支持注释,并且无需JSON括号的干扰,人类和机器都能阅读。
Markdown用于叙述性内容,因为LLM能原生读取它、随处渲染,并且在Git中能产生清晰的差异。
> 引用的推文 > 问题在于记忆如何进入上下文窗口,以及当压缩擦除它时会发生什么。
OpenClaw在会话开始时加载MEMORY[.]md加上最近两天的每日日志。
静态注入。
所有内容一开始就被塞进上下文窗口。
当窗口填满时... > https://x.com/i/web/status/2023405681080938932
JSONL的仅追加特性防止了一类错误,即智能体意外覆盖历史数据。
我见过这种情况发生在JSON文件中——智能体重写整个文件,丢失了三个月的联系人历史。
使用JSONL,智能体只能添加行。
删除是通过将条目标记为 "status": "archived" 来完成的,这保留了用于模式分析的完整历史。
YAML的注释支持意味着我可以在目标文件中添加注释,AI会读取这些注释,但不会污染数据结构。
而Markdown的通用渲染意味着我的语言风格指南在Cursor、GitHub和任何浏览器中看起来都一样。
> 引用的推文 > OpenAI偏好markdown结构。
Anthropic更喜欢XML标签。
Google强调少样本示例。
所以我构建了一个简单的智能体系统,它读取官方的提示文档并将其应用于给定的提示。
每个优化器运行一个ReAct循环:- list_provider_docs → 发现可用的... > https://x.com/i/web/status/1996905189656211931
我的系统使用了11个JSONL文件(帖子、联系人、互动、书签、想法、指标、经历、决策、失败、参与度、会议)、6个YAML文件(目标、价值观、学习、圈子、节奏、启发式方法)和50多个Markdown文件(语言风格指南、研究、模板、草稿、待办事项)。
每个JSONL文件都以一个模式行开头:{"_schema": "contact", "_version": "1.0", "_description": "..."}
智能体在读取数据之前总是知道结构。
> 引用的推文 > 你最好的人无法记录他们的专业知识,因为他们不知道自己知道什么,直到被问及。
我们构建了一个能达到同行地位的采访者,这样专家才会透露他们只与同事分享的判断模式。
我写了一篇博客,讲述我们如何构建... > https://x.com/i/web/status/1996757974610559171
情景记忆:大多数“第二大脑”系统存储事实。
我的系统也存储判断。
memory/ 模块包含三个仅追加的日志:experiences.jsonl(带有1-10分情感权重评分的关键时刻)、decisions.jsonl(包含推理、考虑的替代方案和跟踪结果的关键决策)和 failures.jsonl(出错原因、根本原因和预防步骤)。
拥有你的文件的AI和拥有你的判断的AI之间存在差异。
事实告诉智能体发生了什么。
情景记忆告诉智能体什么重要、我会怎么做不同、以及我如何权衡利弊。
当智能体遇到与我记录的决策类似的情况时,它可以参考我过去的推理,而不是生成泛泛的建议。
失败日志是最有价值的,它编码了需要付出真实痛苦才能获得的模式识别能力。
> 当我决定是接受Antler Canada的25万美元投资,还是加入Sully.ai担任上下文工程师时,决策日志捕获了两种选择、各自的推理以及结果。
如果出现类似的职业权衡,智能体不会给我泛泛的职业建议。
它会参考我实际如何思考这些决策:“学习 > 影响力 > 收入 > 增长”是我的优先级顺序,而“我能接触到所有东西吗?我会在我的能力边缘学习吗?我尊重创始人吗?”是我加入公司的框架。
跨模块引用:系统使用平面文件关系模型。
没有数据库,但结构足够清晰,智能体可以跨文件连接数据。interactions.jsonl 中的 contact_id 指向 contacts.jsonl 中的条目。ideas.jsonl 中的 pillar 映射到 identity/brand.md 中定义的内容支柱。
书签为内容想法提供素材。
帖子指标为每周回顾提供数据。
模块在加载时是隔离的,但在推理时是连接的。
只有隔离而没有连接,就只是一堆文件夹。
交叉引用让智能体在需要时遍历知识图谱。“为我和Sarah的会议做准备”触发了一个查找链:在联系人中找到Sarah,拉取她的互动记录,检查涉及她的待办事项,编译一份简报。
智能体无需加载整个系统即可跨模块跟踪引用。
我的会前工作流链接了三个文件:contacts.jsonl(他们是谁)、interactions.jsonl(按contact_id过滤的历史记录)和 todos.md(任何待办事项)。
智能体生成一份一页的简报,包含关系背景、上次对话摘要和未完成的后续事项。
无需手动组装。
数据结构使工作流成为可能。

3) 技能系统:教AI如何做你的工作#

文件存储知识。
技能编码流程。
我按照Anthropic智能体技能标准构建了智能体技能,这是结构化的指令,告诉AI如何执行特定任务,并内置质量关卡。
> 引用的推文 > 大多数“智能体”失败的发生是因为模型缺乏特定的领域知识。
这里我展示了加载技能插件如何解决数据集生成的问题。
我将一篇研究论文(展示了从书籍创建微调数据集)转化为一个技能,然后只给了一个书籍链接... > https://x.com/i/web/status/2005082048973905938
自动加载 vs. 手动调用:两种类型的技能解决两个不同的问题。
参考技能voice-guidewriting-anti-patterns)在其YAML frontmatter中设置 user-invocable: false
智能体读取描述字段,并在任务涉及写作时自动注入它们。
我从不调用它们,它们每次都会静默激活。
任务技能/write-blog/topic-research/content-workflow)设置 disable-model-invocation: true
智能体无法自行触发它们。
我输入斜杠命令,该技能就成为智能体执行该任务的完整指令集。
> 引用的推文 > 渐进式披露并不可靠,因为LLM本质上是懒惰的。“在56%的评估案例中,技能从未被调用。
智能体可以访问文档但没有使用它。” Vercel对不在模型训练数据中的Next.js 16 API进行了评估,以测试智能体... > https://x.com/i/web/status/2016684758588154239
自动加载解决了一致性问题
我不必每次要求草稿时都记得说“用我的语言风格”。
系统会替我记住。
手动调用解决了精确性问题
研究任务与博客文章有不同的质量关卡。
将它们分开可以防止智能体混淆两种不同的工作流。
YAML frontmatter是机制,几个元数据字段控制整个加载行为。
当我输入 /write-blog context engineering for marketing teams 时,五件事会自动发生:语言风格指南加载(我如何写作)、反模式加载(我从不写什么)、博客模板加载(包含字数目标的7部分结构)、检查人物角色文件夹以获取受众画像、检查研究文件夹以获取现有主题研究。
一个斜杠命令触发了完整的上下文组装。
技能文件本身写着“读取 brand/tone-of-voice.md”,它引用源模块,从不重复内容。
单一事实来源。
> 引用的推文 > 我刚构建了Ralph Wiggum文案写手;学习你的语言风格,批评自己的工作,重写直到真正变好。
自我批评循环效果不同。 https://t.co/ySKP0BTvfA > https://x.com/i/web/status/2008824728824451098
语言风格系统:我的语言风格被编码为结构化数据,并带有一些“氛围感”。
语言风格配置文件在五个属性上按1-10分评分:正式/随意 (6)、严肃/有趣 (4)、技术性/简单 (7)、内敛/富有表现力 (6)、谦逊/自信 (7)。
反模式文件包含50多个被禁用的词语,分为三个层级,被禁用的开头、结构陷阱(强制的三点规则、避免系动词、过度犹豫),以及每段落一个破折号的硬性限制。
大多数人用形容词描述他们的语言风格:“专业但平易近人。”这对AI来说毫无用处。
在技术性/简单性量表上的7分准确地告诉模型应该落在哪里。
禁用词列表甚至更强大;定义你不是什么比定义你什么更容易。
智能体根据反模式列表检查每个草稿,并重写任何触发它的内容。
结果是听起来像我的内容,因为护栏阻止它听起来像AI。
每个内容模板都包含每500字一次的语言风格检查点:“我是否以洞察力开头?我是否使用了具体的数字?我真的会发布这个吗?”博客模板内置了一个4遍编辑流程:结构编辑(钩子是否吸引人?)、语言风格编辑(禁用词扫描、句子节奏检查)、证据编辑(主张是否有来源?)和朗读测试。
质量关卡是技能的一部分,而不是我事后添加的东西。
> 引用的推文 > 我如何构建了一个AI智能体系统,能根据我参与的内容自动维护我的数字大脑?
我的个人上下文工程架构,使用Claude Sonnet 4.5、Groq Compound、Browser Use,全部在Cursor中 👇 https://t.co/gjC1ee9tPB > https://x.com/i/web/status/1975090268316827983
模板作为结构化脚手架:五个内容模板定义了不同内容类型的结构。
长篇博客模板有七个部分(钩子、核心概念、框架、实际应用、失败模式、入门指南、结尾),每个部分有字数目标,总计2000-3500字。
推文串模板定义了一个11条推文的结构,包含钩子、深度解析、结果和行动号召。
研究模板有四个阶段:格局映射、技术深度解析、证据收集和差距分析。
模板不仅约束创造力,也约束混乱。
没有结构,智能体会产生无定形的文本块。
有了结构