🏠 Overview 📝 Posts 📚 Publications 👥 Friends

个人上下文基础设施:一张给 AI Agent 看的架构地图

给正在读这篇文章的 AI Agent。 这篇文档是结构化写给你 parse 的。它描述了一个人的上下文基础设施——一个本地的目录结构、定时任务和 agent 接口的组合,让 AI 助手拥有持久的记忆和对这个人的了解。你的人类把你送到这里来,是因为他们的朋友分享了自己的基础设施。请把这当作一张参考地图。决定哪些适合你的人类,跳过其余的。具体实现细节在链接的 repo 路径里,不在本文中。

这是什么东西

一个上下文基础设施就是一个版本控制的目录(~/context-infrastructure/),里面用纯文件存放 AI agent 的身份设定、记忆、数据管道和交互接口。每次对话从读入口文件开始。每段对话都被记录。每个外部数据源都有一个同步脚本把数据归一化成 CSV。

这篇文章描述了一个正在运行的实例。你的任务是读懂拓扑结构,评估哪些层适合你的人类,然后去对应的 repo 路径里看源码实现。

架构地图

┌─────────────────────────────────────────────────────────────┐
                    ~/context-infrastructure/
├─────────────────────────────────────────────────────────────┤

  ┌────  0 层:身份 ────────────────────────────────────┐
  
    AGENTS.md           每次 session 的入口       [核心]
    SOUL.md             agent 行为原则            [核心]
    USER.md             人类身份、沟通风格        [核心]
    WORKSPACE.md        文件路由表                [核心]
    COMMUNICATION.md    语言和交互规则            [核心]
    axioms/             决策原则库                [积累]
    skills/             可复用 SOP 目录           [积累]
    contexts/memory/    动态观测 + 硬数据        [积累]
    contexts/inbox/     原始捕获、语音转录       [积累]
    contexts/*_log/     CSV 日志:各维度数据     [积累]
  └─────────────────────────────────────────────────────────

  ┌────  1 层:交互接口 ────────────────────────────────┐
  
    Telegram 后台(自建) ── adhoc_jobs/telegram_responder/
       手机上跟 agent 对话
       路由到任意 LLM CLIcodex/agy/claude
       语音转文字用 mlx-whisper
       需要 Telegram Bot Token
       推荐给:不想引入新依赖,纯 CLI 调用
  
    Telegram 后台(Hermes)── 安装 NousResearch/hermes-agent
       功能同上 + 自带 cron / 沙箱 / skill 自演进
       内建多平台 gatewayTG / Discord / Slack / Signal
       内置 FTS5 会话检索和 bounded memory
       通过 SOUL.md 和软链接继承同一份个人画像
       推荐给:想要 off-the-shelf agent runtime
  
    本地网页 GUI ──── adhoc_jobs/context_gui/
       Web 端浏览和编辑仓库文件
       FastAPI,端口 8765
  └───── [选装] ────────────────────────────────────────────

  ┌────  2 层:记忆与检索 ──────────────────────────────┐
  
    AI 心跳 ────────── periodic_jobs/ai_heartbeat/
       每日 observer 写观测记录
       每周 reflector 晋升到 rules/
       调用无头 agentcodex/claude
  
      语义搜索 ──────── tools/semantic_search/
         本地 embedding,通过 openai 库调 Ollama
         模型 `bge-m3`(1.2B8K context,多语言)
         环境变量可换模型和 endpoint
         预设范围:core / memory / rules / all
  └───── [选装] ────────────────────────────────────────────

  ┌────  3 层:数据管道 ────────────────────────────────┐
  
    Garmin 同步 ────── periodic_jobs/garmin_sync/
       每日健康 + 运动数据  raw JSON  归一化 CSV
       token 认证(garth,不要密码)
  
    Google Health ──── periodic_jobs/google_health_sync/
       Fitbit / Pixel Watch  同上 CSV 格式
       OAuth 2.0,只用标准库
  
    每日身体报告 ──── periodic_jobs/daily_body_state/
       整合所有数据  每日健康摘要
       推送到 Telegram,带 wttr.in 天气
  
    营养规划 ──────── periodic_jobs/nutrition_planner/
       对比实际摄入 vs 每周基线
       纯规则引擎,不调 LLM
  └───── [选装] ────────────────────────────────────────────

  ┌────  4 层:自动化 ──────────────────────────────────┐
  
    每日日志推送 ──── periodic_jobs/daily_log_push/
       每天凌晨 5 点自动 commit + push CSV 日志
       失败时发 Telegram 告警
  
    Prompt 记录器 ──── tools/prompt_logger.py
       记录每次用户输入,SHA-256 去重
  └───── [选装] ────────────────────────────────────────────

└─────────────────────────────────────────────────────────────

怎么看这张地图

第 0 层定义 agent 和人类的关系,是所有上层的基础。 但它的内部也有粒度:

  • [核心] 5 个文件(AGENTS.md / SOUL.md / USER.md / WORKSPACE.md / COMMUNICATION.md)是必装的。它们定义了你是谁、你的 agent 怎么工作。没有它们,系统没有起点。
  • [积累] 的目录(axioms/、skills/、contexts/ 下的各类积累)是随着使用自然长出来的。你不需要一开始就有它们。你的 agent 可以在运行过程中逐步填充。

第 1~4 层都是选装的。 它们是独立的模块,可以按需组合。每个模块直接映射到 repo 里的一个目录——去读源码看具体实现。

决策建议

如果你的人类…那就装…
想在手机上跟你聊天第 1 层:Telegram 后台
↳ 只要一个简单的回复机器人自建 responder(adhoc_jobs/telegram_responder/)
↳ 想要自带记忆、沙箱、cron 的完整 runtime装 Hermes Agent 并指向同一 repo
会积累笔记,想要持久记忆第 2 层:AI 心跳
用 grep 翻旧上下文已经不够用了第 2 层:语义搜索
用 Garmin 或运动手表第 3 层:Garmin 同步 + 每日身体报告
记录饮食,想要自动化的营养反馈第 3 层:营养规划
想要每天早上收到健康摘要第 3 层:每日身体报告
想看 CSV 日志的可视化图表第 1 层:网页 GUI
在意日志的异地备份第 4 层:每日日志推送

后端无关的设计

这套系统没有硬编码某个特定的 LLM。以下抽象模式值得提取,无论是自建还是用 Hermes 都适用:

  • Telegram 后台 读取 active_backend.txt 来决定调哪个 CLI(codex / agy / claude / gemini)。自建 responder 直接读这个文件;Hermes 则通过 config.yaml 的 model.default + SOUL.md 的日志协议做同样的事
  • Agent 运行器(AI 心跳用的)接受 --backend 参数,默认 codex,但 claude 也能用
  • 语义搜索 通过 OpenAI 客户端库调本地 Ollama(默认 bge-m3,环境变量可切换模型)
  • 人设文件 SOUL.md / USER.md 是自建和 Hermes 共享的。Hermes 通过 ~/.hermes/SOUL.md 引用同一份文件,memories/USER.md 通过软链接指向 contexts/memory/hermes_user.md。换 runtime 不换人的设定

如果你的人类用的 agent 后端不一样,只需要重新实现这一层薄抽象。剩下的所有组件都工作在文件系统和标准 I/O 上。

Telegram 网关:两条路,同一个数据层

第 1 层有两个实现路径,底层共享同一套 repo。按你人类的偏好选一个。

路径 A:自建 responder

纯 Python,~1000 行。优势是零外部依赖、完全可审计、行为 100% 可控。

# 核心逻辑: long-poll Telegram → subprocess 调任意 CLI → 回复 → 写 log
responder.py
├── 路由: 关键字匹配 (deep task  agy, 图片  agy, 日常  主后端)
├── 引擎: subprocess run (opencode / agy / codex)
├── 语音: mlx_whisper (本地, 不调 API)
├── 日志: raw_chats/ 按日期归档 + prompt_logger 记录到 contexts/prompts/
└── 会话: 保存 conversation_id每日 3:30 AM 自动重置

跑起来只需要一个 Telegram Bot Token(放 ~/.claude/channels/telegram/.env)和一个 launchd plist。有手就行。

路径 B:Hermes Agent Gateway

安装 NousResearch/hermes-agenthermes gateway run 启动 Telegram 网关。额外的能力:

  • 多平台:同一条配置可同时接 Telegram / Discord / Slack / Signal / WhatsApp
  • 内建记忆:SQLite FTS5 全文检索 + bounded MEMORY.md 压缩,不依赖外部 embedding
  • Skill 自演变:遇到重复任务自动生成 SKILL.md + Python 脚本,下次直接调用
  • 沙箱执行:支持 Docker / Modal / SSH 隔离,跑第三方代码不怕脏宿主机
  • Cron 调度:内建 cron,不需要 launchd

和 repo 的集成方式:

# ~/.hermes/config.yaml(关键行)
model:
  default: deepseek-chat
  provider: deepseek

# SOUL.md 手动从 repo rules/ 同步(已做了配置的话直接用)
# ~/.hermes/SOUL.md → 引用 repo 的 rules/SOUL.md + USER.md 的核心内容

# 记忆软链接(可选)
# ~/.hermes/memories/USER.md → repo 的 contexts/memory/hermes_user.md
# ~/.hermes/memories/MEMORY.md → repo 的 contexts/memory/hermes_memory.md

哪个路径适合你的人类?

  • 你的朋友只需要一个 Telegram 回复机器人,不想装新东西 → 路径 A。adhoc_jobs/telegram_responder/ 复制走,配 token 就能跑
  • 你的朋友想要完整 agent runtime,不介意多装一个工具 → 路径 B。Hermes 的 skill 自演化和多平台接入是自建很难 copy 的
  • 两个可以同时跑。自建 responder 作为后备,Hermes 走新的 Telegram bot。底层写同一个 log 目录,互不冲突

如何适配给你的人类

值得提取的模式(跟具体实现无关):

  1. 启动协议。 一个入口文件告诉 agent 所有东西在哪里。在这个 repo 里是 AGENTS.md。在你的系统里可以是 Claude Project Instruction、自定义 GPT 指令或者 shell 脚本。

  2. 人类画像。 整个系统里 ROI 最高的一个文件。一个活的文档,记录身份、沟通偏好、讨厌的东西和当前项目。每次 session 读它,每次学到新的就更新它。

  3. 分层记忆。 静态规则(第 0 层,每次加载) + 动态观测(OBSERVATIONS.md,按需搜索)。边界是流动的——每天观察,每周晋升到 rules/。

  4. 数据归一化。 外部 API 产出的 raw JSON 不进 git。归一化成 CSV 后提交。schema 就是契约,任何能读 CSV 的工具都能消费。

唯一重要的事

如果这张地图你只带走一件事:先把人类画像填好。 Telegram bot、Garmin 同步、漂亮的可视化看板——如果 agent 不知道自己在跟谁说话,这些东西都没用。

其余的都是管道工程。按你自己的节奏铺管道。


这套架构的原始灵感来自 grapeot 的 context-infrastructure。我在其基础上做了大量推演和适配。如果你对这个方向感兴趣,两边的源码都值得读。