海拉鲁打怪日记 - xuezhao.d
type: channel
link: https://www.xuezhao.space/author/1/
description: xuezhao.d
items: 读书笔记：图解大模型——生成式AI原理与实战
items: 07. Claude Code 集成：AI 写代码的正确姿势
items: 06. 自动化工作流：Heartbeat、Cron 与备份
items: 05. 思源笔记联动：打造第二大脑
items: 03. Provider 与成本：从烧钱到精打细算
items: 02. 多 Agent 架构：让 AI 学会分工
items: 04. 记忆系统：让 AI 记住你
items: 01. 初见 OpenClaw：部署与第一次对话
items: 04. 岁岁的成长日志：从秋天的童话到冬日的暖阳（9-12个月）
items: 在裂缝中见光，在艰难中前行 —— 2025个人年度总结（非工作向）

读书笔记：图解大模型——生成式AI原理与实战
type: item
date: 2026-02-25T15:04:02+08:00
description: 书籍信息原书名：Hands-On Large Language Models中文名：图解大模型：生成式AI原理与实战作者：Jay Alammar（沙特）、Maarten Grootendorst（荷兰）出版：O'Reilly, 2024页数：~400 页，数百张原创插图定位：从零到实战的 LLM 全景指南，图解驱动，代码可跑推荐人：Andrew Ng、Nils Reimers（sentence-transformers 作者）、Josh Starmer（StatQuest）为什么读这本书作为数据研发工程师，大模型已经从「论文里的概念」变成了「每天都在用的工具」。但用归用，很多核心机制——Transformer 的注意力到底在算什么、Embedding 空间为什么能捕捉语义、RAG 的检索链路怎么设计——一直停留在「大概知道」的阶段。Jay Alammar 是写出 The Illustrated Transformer 的人，他的可视化能力是业界公认的。这本书延续了他一贯的图解风格，把抽象的数学过程拆成直觉可理解的视觉流程。对我来说，这不是一本「入门书」，而是一本「把模糊认知变成清晰认知」的书。读完之后，我和 Jarvis 一起把书中第 8 章（语义搜索与 RAG）的理论落地成了一个真实项目——siyuan-rag：思源笔记联动，为自己的思源笔记构建了混合检索系统（BM25 + Vector + RRF）。理论到实践的闭环，是这本书最大的价值。全书骨架三部分，十二章，一条清晰的递进线：Part I 理解语言模型（Ch 1-3） → 语言模型是什么、词元化、嵌入向量、Transformer 架构 Part II 使用预训练模型（Ch 4-9） → 分类、聚类、Prompt Engineering、文本生成、语义搜索/RAG、多模态 Part III 训练与微调（Ch 10-12） → 构建嵌入模型、微调分类模型、微调生成模型递进逻辑：先建立「是什么」的认知基础 → 再学「怎么用」的实战技能 → 最后掌握「怎么改」的深度能力。Part I：理解语言模型Ch 1 语言模型导论这一章建立了全书的概念地图。核心区分：表示模型（Representation Models） ：BERT 系，双向上下文，擅长理解（分类、检索、相似度）生成模型（Generative Models） ：GPT 系，自回归，擅长生成（续写、对话、翻译）关键洞察：这两类模型不是对立的，而是同一个 Transformer 架构在不同训练目标下的产物。BERT 用 MLM（掩码语言模型），GPT 用 CLM（因果语言模型）。训练目标决定了模型的「视野」——BERT 能看到前后文，GPT 只能看到前文。Ch 2 词元与嵌入这是全书最基础也最重要的一章。两个核心概念：词元化（Tokenization） ：文本不是以「词」为单位进入模型的，而是以「子词（subword）」为单位BPE（Byte Pair Encoding）：从字符级开始，统计最高频的相邻对，逐步合并。优雅地解决了 OOV（未登录词）问题WordPiece、SentencePiece：变体，核心思想一致实际影响：tokenizer 的选择直接决定了模型的「视力」——同一段中文，不同 tokenizer 切出的 token 数量可能差 2-3 倍，直接影响上下文窗口的有效利用率嵌入向量（Embeddings） ：Token Embedding：每个 token 映射到一个高维向量（如 768 维）Position Embedding：注入位置信息，让模型知道词序嵌入空间的几何意义：语义相近的词在向量空间中距离更近这不是隐喻，是数学事实——余弦相似度可以量化语义距离个人体会：在做 siyuan-rag 项目时，选择 embedding 模型是第一个关键决策。我们最终用了 Qwen3-Embedding-0.6B（1024 维），它在中文语义捕捉上的表现明显优于通用的多语言小模型。维度越高不一定越好，但对于中文这种信息密度高的语言，1024 维比 512 维确实能保留更多语义细节。Ch 3 深入 Transformer全书技术密度最高的一章，也是 Jay Alammar 最擅长的领域。自注意力机制（Self-Attention） ：Q（Query）、K（Key）、V（Value）三个矩阵的直觉：Q 是「我在找什么」，K 是「我能提供什么」，V 是「我的实际内容」$\text{Attention}(Q,K,V) = \text{softmax}(QK^T / \sqrt{d_k}) \cdot V$$\sqrt{d_k}$ 的缩放：防止点积过大导致 softmax 梯度消失，这个细节在很多教程里被一笔带过，但它对训练稳定…

07. Claude Code 集成：AI 写代码的正确姿势
type: item
date: 2026-02-24T15:16:00+08:00
description: 让 AI 写代码不难，难的是让它写对、写完、写得能用。灵感：胡渊鸣的 10 阶段春节期间读到太极图形 CEO 胡渊鸣的文章《如何有效给 10 个 Claude Code 打工》，核心思路是逐步提高 agentic coding 的吞吐量：Cursor Agent → Claude Code（SSH 友好，手机可派活）容器 + --dangerously-skip-permissions（不被权限弹窗打断）Ralph Loop（任务列表自动取活，干完一个接一个）Git worktree 并行化（多 CC 实例并行，1 分钟 1 个 commit）CLAUDE.md + PROGRESS.md（让 AI 长记性）他的关键洞察：不看代码，只看结果。Context not control, servant leadership。我没有他那么激进（10 个并行 CC），但借鉴了容器化 + Ralph Loop + manager 模式的思路。CC Sandbox 容器Claude Code 直接跑在宿主机上风险太大——它有 --dangerously-skip-permissions，意味着可以执行任何命令。所以用 Docker 隔离：# docker-compose.yml 核心配置 services: claude-code: image: claude-code-sandbox:latest container_name: claude-code-sandbox mem_limit: 3g cpus: 2 volumes: - ~/projects:/workspace - ~/.claude-backup:/backup - ~/.claude/settings.json:/home/coder/.claude/settings.json:ro working_dir: /workspace关键设计：3G 内存 / 2 核 CPU：够用但不奢侈CC 2.1.47 + Node 22 + Python 3.12：完整开发环境认证复用：挂载宿主机的 settings.json，走 provider-d 中转，不需要单独配 API key项目隔离：~/projects 挂载到 /workspace，CC 只能访问项目目录Jarvis 作为 CC Manager这是架构里最重要的设计决策：Jarvis（OpenClaw）不自己写代码，只做 manager。分工：Jarvis：理解需求 → 写任务描述 → 派给 CC → 轮询进度 → 验证结果 → 发现 bug 写新 task 派回 CCCC：接任务 → 写代码 → 跑测试 → 提交为什么不让 Jarvis 直接写？因为 CC 有完整的编辑器集成、文件系统访问、命令执行能力，专门为写代码优化。Jarvis 的强项是理解意图和协调，不是写代码。派活方式# 单任务（非交互） sudo docker exec claude-code-sandbox claude \ -p "任务描述" \ --dangerously-skip-permissions \ --output-format stream-json # 交互式（需要 TTY） sudo docker exec -it claude-code-sandbox claude \ --dangerously-skip-permissions任务轮询机制最初用"盲 poll"——派完活就不停检查。后来改成 cron 2 分钟轮询：派活：后台启动 CC → 写 active.json（sessionId/task/project/startedAt）→ 创建 2 分钟 cron轮询：收到 CC_TASK_POLL 时，process poll 检查 session → 未完成继续等 → 完成进入验证验证：检查产出（curl API / 编译检查）→ 有 bug 写新 task 派回 CC → 通过汇报清理：删除 cron → 清空 active.json这个流程在 invest-platform 项目上首次完整跑通。实战：invest-platforminvest-platform 是一个投资研究工作台 Web App（FastAPI + React），从 Phase 1 到 Phase 5 全部由 CC 执行，Jarvis 做 manager。成果Phase内容CC 花费13 个回测策略（MA Cross/Bollinger/MACD）~$0.52基本面分析 + 技术指标（K 线/MACD/RSI/布林带）~$0.53学习中心（思源笔记代理 API + LearnPanel）~$0.54UI 打磨 + K 线均线 + 学习进度 + 基准对比…

06. 自动化工作流：Heartbeat、Cron 与备份
type: item
date: 2026-02-24T15:15:00+08:00
description: 真正的 AI 管家不是你找它才干活，而是它自己知道该干什么。Heartbeat vs Cron：两种自动化哲学OpenClaw 有两种定时机制，设计哲学完全不同。Heartbeat：定期"醒来看看"Heartbeat 是主会话里的定期轮询。每隔 30 分钟，AI 会"醒来"，读 HEARTBEAT.md 里的检查清单，看看有没有需要处理的事。{ "agents": { "defaults": { "heartbeat": { "every": "30m", "target": "last", "activeHours": { "start": "08:00", "end": "22:00" } } } } }优势：批量处理：一次心跳检查收件箱 + 日历 + 通知，比 3 个独立 cron 省钱上下文感知：在主会话里跑，能看到最近的对话上下文智能抑制：没事就回 HEARTBEAT_OK，不打扰你我的 HEARTBEAT.md 检查清单：- [ ] Agent health: 确认所有 agent 在线 - [ ] 检查 sub-agent 任务状态 - [ ] 上下文使用情况，是否需要总结 - [ ] 回顾 memory/ 是否有值得提升到 MEMORY.md 的内容 - [ ] 对话沉淀：有价值的内容写入思源 DailyNoteCron：精确定时任务Cron 是独立的定时任务，在隔离的 session 里跑。适合：精确时间（"每天早上 8:00 整"）需要和主会话隔离可以用不同的模型一次性提醒（"20 分钟后提醒我"）我的定时任务全景一周下来，我搭了这些自动化任务：每日早间简报（8:00）最先创建的 cron，除夕夜就上线了。{ "schedule": { "kind": "cron", "expr": "0 8 * * *", "tz": "Asia/Shanghai" }, "payload": { "kind": "agentTurn", "message": "抓取今日新闻，分类整理后推送。分类：世界政治经济 / 法律监管 / AI 进展 / AI 眼镜。用 target='your-telegram-id' 发送。", "model": "anthropic/claude-sonnet-4-6" }, "sessionTarget": "isolated" }踩坑：第一版 prompt 里写的是 to='your-telegram-id'，但 isolated session 里的 message 工具要求用 target 参数。报错信息是 "Use target instead of to/channelId"。改了 prompt 就好了。另一个问题是新闻重复——连续几天推送相同的新闻。需要加去重逻辑，这个还在 TODO 里。Vaultwarden 每日备份（3:00）我自建了 Vaultwarden 密码管理器，每天凌晨 3 点自动备份：# ~/scripts/vaultwarden-backup.sh # 1. sqlite3 .backup 全量备份 # 2. GPG AES256 加密 # 3. Python SMTP 发送到邮箱为什么用邮件而不是 S3？因为邮件是免费的，而且邮箱附件存储相当于免费的异地备份。Typecho 每月备份（每月 1 号 4:00）博客数据库每月备份一次：# ~/scripts/typecho-backup.sh # mysqldump → GPG 加密 → 邮件发送踩坑：发现原有备份脚本的 mysqldump 命令缺少 -h127.0.0.1 参数，导致数据库备份文件长期为 0 字节。也就是说，之前的"备份"一直是空的。这种 bug 最可怕——看起来在跑，实际上没用。发现后立即修复，加了 -h127.0.0.1 和 --no-tablespaces。email-send Skill备份需要发邮件，但 himalaya（CLI 邮件客户端）发附件不稳定。最终写了一个 email-send skill，用 Python SMTP 直接发：import smtplib from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase # ... 标准 SMTP 发送逻辑简单粗暴但可靠。密码管理器漏洞追踪（9:00 / 18:00）ETH Zürich 发现了 25 个影响 Bitwarden/LastPass/Dashlane 的漏洞，约 6000 万用户受影响。我创建了一个 cron 每天两次搜索最新动态：{ "schedule": { "kind": "cron", "expr"…

05. 思源笔记联动：打造第二大脑
type: item
date: 2026-02-24T15:14:00+08:00
description: 让 AI 管家直接读写你的笔记系统，这才是真正的第二大脑。为什么要接思源笔记OpenClaw 自带的记忆系统（MEMORY.md + daily notes）是给 AI 用的工作记忆。但我还需要一个给人用的知识库——一个我自己会翻、会搜、会整理的地方。思源笔记是我用了两年多的本地笔记系统。975 篇文档、10.4MB，涵盖读书笔记、投资框架、日记、工作记录。如果 AI 能直接读写思源，那它就不只是一个聊天助手，而是一个真正能帮我管理知识的伙伴。创建 siyuan-notes Skill除夕夜（2/14），我创建了第一个 OpenClaw skill：siyuan-notes。思源笔记提供了完整的 HTTP API（localhost:6806），所有操作都是 POST 请求 + JSON body + Token 认证。我写了一个 helper 脚本 siyuan-api.sh 封装常用操作：# 追加到今天的 DailyNote bash scripts/siyuan-api.sh dailynote "- 今天学到了 xxx" # 创建新文档 bash scripts/siyuan-api.sh create "your-notebook-id" "/路径/文档名" "内容" # 全文搜索 bash scripts/siyuan-api.sh search "关键词" # SQL 查询 bash scripts/siyuan-api.sh query "SELECT id, content FROM blocks WHERE type='d' ORDER BY updated DESC LIMIT 10"Skill 的核心是一个 SKILL.md 文件，告诉 AI 怎么用这些 API。OpenClaw 会在需要时自动加载对应的 skill。写入规则的演化这部分踩了不少坑，格式改了好几版。第一版：wiki-link + 二级标题最初让 AI 用 关键词 打双链，用 ## 二级标题分隔每条记录。问题：关键词 在思源里是虚拟引用，不是真双链，反链面板看不到## 标题会"吃掉"后续内容——我在 DailyNote 里手写的速记会被归到 AI 的标题下面第二版：真双链 + 无序列表改成 ((blockID 'anchor text')) 格式的真双链，用无序列表代替标题：- 概括性描述。((your-block-id 'claw 记录')) - 详细内容作为子列表缩进 - 可以继续展开多条每条记录都带 ((your-block-id 'claw 记录')) 标记，这样在思源的反链面板里能看到所有 AI 写入的内容。这个格式和我自己手写速记的风格一致，互不干扰。修复历史记录格式确定后，还回去修复了 2/14、2/16、2/17、2/18 所有用错格式的记录。这种技术债越早还越好。siyuan-rag：给笔记加上语义搜索思源自带全文搜索，但只能精确匹配关键词。我想要的是语义搜索——搜"投资风险管理"能找到"安全边际"和"止损策略"相关的笔记。项目搭建siyuan-rag 是一个独立的 Python 项目（~/projects/siyuan-rag），架构很简单：索引：从思源 API 抽取所有文档 → 分 chunk → embedding → 存入 ChromaDB搜索：query embedding → 同时跑 BM25 全文匹配 + 向量相似度 → RRF 融合排序Embedding 用的是 ModelScope 的 Qwen/Qwen3-Embedding-0.6B（1024 维），和 memorySearch 共用同一个模型。# 索引 python cli.py index # 从思源抽取 471 chunks，全部入库 # 搜索 python cli.py search "投资学习框架" # hybrid search python cli.py vsearch "安全边际" # 纯向量搜索，score 0.65部署为 systemd 服务，端口 8002，开机自启：# API 调用 curl -s http://localhost:8002/api/search \ -X POST -H "Content-Type: application/json" \ -d '{"query":"安全边际","top_k":3}'quicknote 速记 Bot假期最后一天的产物，也是我最满意的 workflow 之一。痛点我之前用安卓的 HTTP Shortcuts 往思源发内容，痛点很多：不能语音、双链要手打、不能转发内容、没有草稿保存。讨论了三个方案后，选了最简单的：OpenClaw 新增一个 quicknote a…

03. Provider 与成本：从烧钱到精打细算
type: item
date: 2026-02-24T15:12:00+08:00
description: 第一周花的钱比我预期多了 10 倍。然后我学会了怎么省。初始配置：单 Provider 的蜜月期刚装好 OpenClaw 时，我只配了一个 provider——provider-a，走的是 relay-a.example.com 中转。模型选了 Claude Opus，因为它最聪明。蜜月期大概持续了两天。第一次故障：5022/18，relay-a.example.com 开始间歇性返回 502。上游故障，我这边什么都做不了，只能等它恢复。这暴露了单 provider 的致命问题：单点故障。你的 AI 管家的可用性，取决于一个你无法控制的中转服务。搭建 Fallback Chain解决方案是多 provider + fallback chain。OpenClaw 原生支持这个——请求失败时自动切到下一个 provider。我最终的 fallback chain：provider-a (relay-a.example.com) → provider-b (relay-b.example.com) → provider-c → provider-dprovider-b 接入provider-b 是另一个 API 中转，走 relay-b.example.com。接入后发现一个有趣的特性：它支持通过 metadata.user_id 触发服务端缓存。{ "provider-b": { "baseUrl": "https://relay-b.example.com/claude/droid", "models": { "claude-opus-4-6": { "params": { "metadata": { "user_id": "your-user-id" } } } } } }加了这个之后，重复的 system prompt 部分会被缓存，省了不少 token 费用。第二次故障：Opus 额度耗尽2/21，更严重的事情发生了。所有 provider 的 Opus 额度都耗尽了，返回 401。Gateway 在跑，但无法响应任何消息。这不是某个 provider 的问题——是 Opus 太贵，额度消耗太快。从 Opus 降到 Sonnet这次故障逼我做了一个早该做的决定：把默认模型从 Opus 降到 Sonnet。Sonnet 4.6 的能力已经很强了。对于日常对话、文件操作、脚本执行这些任务，Sonnet 和 Opus 的差距几乎感觉不到。Opus 的优势在长链推理和复杂分析——但这些任务占比不到 10%。用 90% 的钱买 10% 的提升，不划算。改完之后，只有 main 和 analyst 保留 Opus（需要复杂推理时），其他 agent 全部用 Sonnet。contextPruning：最有效的省钱手段降模型省的是单价，但真正的大头是对话历史。我做了一次 API payload 分析，结果触目惊心：每次 API 调用 ~100k token其中 85% 是对话历史（~85k）15% 是 system prompt（~15k）工具返回结果是历史膨胀的主因（config.patch 返回完整 JSON、web_fetch 返回整页等）也就是说，你和 AI 聊得越久，每条消息的成本越高——因为每次调用都要把完整历史发过去。OpenClaw 的 contextPruning 解决了这个问题（配置路径为 agent.contextPruning）：{ "agent": { "contextPruning": { "mode": "cache-ttl", "ttl": "30m", "keepLastAssistants": 3 } } }cache-ttl 模式的逻辑：超过 30 分钟没被引用的旧工具结果会被裁剪，但始终保留最近 3 条 assistant 回复。这样既控制了上下文长度，又不会丢失最近的对话连贯性。注意：contextPruning 只裁剪工具结果（toolResult），不修改用户和 assistant 消息。详见第三篇。contextTokens另一个关键配置是 contextTokens——限制发送给模型的最大 token 数：{ "agents": { "defaults": { "contextTokens": 120000 } } }之前部分 provider 配了过大的上下文窗口，导致 compaction 触发过晚，对话历史无限膨胀。统一降到 120k 后，token 消耗明显下降。模型精简provider-d 渠道最初注册了 12 个模型，实际常用的只有几个。精简到 7 个（GPT 3 个 + Gemini 4 个），减少了配置复杂度和潜在的路由错误。每日 Token 报告为了持续监控成本，我创建…

02. 多 Agent 架构：让 AI 学会分工
type: item
date: 2026-02-24T15:11:00+08:00
description: 一个 AI 不够用，那就来一个团队。单 Agent 的天花板OpenClaw 装好第一天，我用的是单 agent + Claude Opus。体验很好——Opus 聪明、有主见、能处理复杂任务。但问题很快暴露：贵。Opus 每次调用 ~100k token（85% 是对话历史），一天下来账单吓人上下文爆炸。聊着聊着上下文就满了，AI 开始"忘事"任务冲突。我让它做深度研究的时候，发条消息问个简单问题，它得等研究完才能回我本质上，一个 agent 就像一个人——再聪明也不能同时干两件事。设计多 Agent 体系春节第二天（2/15），我开始搭多 agent 架构。思路很简单：贵的模型做决策，便宜的模型做执行。最终的 agent 分工：Agent模型职责mainOpus调度中心，直接和我对话explorerSonnet数据搜集，跑腿查资料coderSonnet编码执行，写脚本跑命令reviewerSonnet代码审查，质量把关analystOpus深度研究，投资分析后来又加了一个：| quicknote | Gemini 2.5 Flash | 思源笔记速记，独立 Telegram bot |为什么这样分main 用 Opus：它是调度中心，需要理解复杂意图、做决策、协调其他 agent。这是 Opus 的强项。explorer/coder/reviewer 用 Sonnet：这些是执行角色。搜索、写代码、审查——Sonnet 完全够用，价格只有 Opus 的 1/5。analyst 用 Opus：深度研究需要长链推理和综合分析能力，Sonnet 做不好。quicknote 用 Gemini Flash：速记不需要多聪明，要的是快和便宜。Flash 每百万 token 几毛钱。注册 Agent在 OpenClaw 里注册 agent，通过 openclaw agents add 命令或在配置中添加：{ "agents": { "list": [ { "id": "explorer", "model": "anthropic/claude-sonnet-4-6", "description": "数据搜集，为 analyst 跑腿" }, { "id": "coder", "model": "anthropic/claude-sonnet-4-6", "description": "编码执行，脚本自动化" }, { "id": "reviewer", "model": "anthropic/claude-sonnet-4-6", "description": "代码审查，质量把关" }, { "id": "analyst", "model": "anthropic/claude-opus-4-6", "description": "深度研究，投资分析" } ] } }每个 agent 有自己的 session、自己的上下文、自己的模型。它们共享同一个 workspace（文件系统），但对话历史是隔离的。agentToAgent开启 agentToAgent 后，agent 之间可以查看彼此的会话历史。这很重要——main 派任务给 explorer，explorer 完成后 main 能直接看到结果，不需要 explorer 把结果复制粘贴回来。{ "tools": { "agentToAgent": { "enabled": true } } }实战：A 股深度研究第一个真正用到多 agent 的任务是 A 股深度研究报告（2/15）。流程：我告诉 main："做一份 A 股深度研究，覆盖 AI 应用、有色金属、房地产、半导体、新能源五个板块"main 把数据搜集任务派给 explorerexplorer 搜索各板块的基本面数据、政策动态、龙头公司main 把数据交给 analyst 做深度分析analyst 输出研究报告 + 持仓诊断 + 组合建议结果：报告质量不错，覆盖了五大板块 + 现有持仓诊断 + 推荐组合。但过程中踩了两个坑。踩坑一：config.patch 重启陷阱注册 agent 需要修改配置，而配置变更会触发 gateway 重启。我在 analyst 正在跑深度研究的时候，又修改了一次配置（开启 agentToAgent）。Gateway 重启，analyst 的任务直接中断，结果丢失。同一天这个错误犯了两次。教训：有 sub-agent 在跑时，绝不做任何会触发重启的操作。这条规则后来被写进了 AGENTS.md，成为铁律。踩坑二：analyst output token 限制analyst 用 Opus 做深度分析，数据搜集阶段消耗了大量 token。等到要写报告时，output token 已经接近限制，报…

04. 记忆系统：让 AI 记住你
type: item
date: 2026-02-24T15:10:00+08:00
description: 每次会话，AI 都是全新的。文件就是它的记忆。AI 的失忆症大模型有一个根本性的问题：没有持久记忆。每次会话开始，它什么都不记得。你昨天告诉它的偏好、上周做的决定、上个月踩的坑——全部归零。OpenClaw 的解决方案很朴素：把记忆写成文件。三层记忆架构MEMORY.md ← 长期精炼记忆（重要决定、经验教训、用户偏好） memory/ ├── 2026-02-14.md ← 每日原始记录（发生了什么） ├── 2026-02-15.md ├── ... └── 2026-02-23.md 思源笔记 ← 知识库（给人看的，不是给 AI 看的）第一层：每日笔记 memory/YYYY-MM-DD.md这是原始记录。每天发生了什么、做了什么决定、踩了什么坑，全部写在这里。格式不讲究，重要的是写下来。比如 2/15 的记录：# 2026-02-15 (春节) ### Bootstrap 完成 (16:26) - 确认身份：Jarvis 🦾 - 填写 USER.md、IDENTITY.md、MEMORY.md ### Sub-agent 体系构建 (16:28) - 注册 4 个 sub-agent：explorer、coder、reviewer、analyst ### 教训：config.patch 会中断 sub-agent (17:58) - 两次配置变更都触发 gateway 重启 - 重启导致正在运行的 analyst 任务结果丢失 - 规则：有 sub-agent 在跑时，不做任何会触发重启的操作第二层：长期记忆 MEMORY.md这是精炼后的记忆。从每日笔记中提取值得长期保留的信息：用户偏好、系统架构、经验教训、重要事件。MEMORY.md 不是日志，是心智模型。就像人类不会记住每天吃了什么，但会记住"我对花生过敏"。## 经验教训 - 有 sub-agent 在跑时，不做任何会触发重启的操作 - 复杂任务每 30 分钟汇报一次进度 - analyst 做深度研究时数据收集消耗大量 token，可能写不完报告 ## 系统架构 ### Provider 体系 - primary: provider-a (relay-a.example.com) — sonnet 为默认 - fallback chain: provider-a → provider-b → provider-c → provider-d - contextPruning: cache-ttl 模式，ttl=30m（详见第三篇）第三层：思源笔记思源笔记是给人看的知识库，不是给 AI 看的工作记忆。聊天中有价值的内容（知识点、观点、决策）会同步到思源的 DailyNote，方便我以后查找。这三层的关系：每日笔记是原始素材，MEMORY.md 是精炼智慧，思源笔记是知识沉淀。"边聊边存"原则最初我想等对话结束再统一整理记忆。很快发现这行不通——OpenClaw 的上下文有限，等到要整理时，早期的对话已经被裁剪了。所以改成了边聊边存：每个重要决定后，立即写到 daily notes原则：如果丢了会让我 frustrated，就现在存一个话题结束，立刻总结这条规则写进了 AGENTS.md：### ⚡ 边聊边存 - 不要等压缩！ - 每个重要决定后：**立即**写到 daily notes - 别等上下文爆了才想起来存，那时候已经晚了memorySearch：给记忆加上搜索引擎文件记忆有一个问题：文件多了之后，AI 怎么知道该读哪个？OpenClaw 内置了 memorySearch——基于 embedding 的语义搜索。AI 可以用自然语言搜索记忆文件，找到相关内容。但配置这个东西，是整个假期最折腾的事之一。找 Embedding Provider 的曲折之路OpenClaw 的 memorySearch 支持多种 embedding provider：openai | local | gemini | voyage，也支持 OpenAI 兼容的自定义端点。问题是：我现有的 LLM provider 都不支持 embedding。relay-a.example.com：测试 text-embedding-3-small/3-large/ada-002，全部 model_not_foundqwen-portal (portal.qwen.ai)：embedding 端点返回 404DashScope (dashscope.aliyuncs.com)：返回 401，端点存在但 key 不通用最终找到了 ModelScope（api-inference.modelscope.cn）。它提供 OpenAI 兼容的 embedding API，而且有免费额度。可用模型：Q…

01. 初见 OpenClaw：部署与第一次对话
type: item
date: 2026-02-24T15:10:00+08:00
description: 2026 年除夕，我在一台 ARM64 VPS 上装了 OpenClaw，然后花了整个春节假期把它变成了一个真正能用的 AI 管家。这是系列文章的第一篇。为什么是 OpenClaw我想要一个 AI 助手，但不是那种网页聊天框。我想要的是：7×24 在线，随时 Telegram 找它能读写我的文件、跑脚本、管服务器能接入我的思源笔记、邮件、日历能自己做定时任务（备份、简报、提醒）记得住上下文，知道我是谁、在做什么OpenClaw 是目前唯一一个把这些全做了的开源项目。它不是一个聊天机器人框架，而是一个完整的 AI 管家运行时——带记忆、带工具、带多 Agent 调度、带消息渠道集成。硬件选择我用的是 Oracle Cloud 的 ARM64 VPS（Ampere A1），免费套餐给的配置相当慷慨。OpenClaw 本身不吃资源——它只是一个 Node.js 进程，真正的计算都在云端 LLM 上。一台 2C4G 的机器绰绰有余。选 VPS 而不是本地笔记本，是因为我需要它 24 小时在线。Telegram 消息、定时任务、心跳检查——这些都需要一个不会合盖睡觉的机器。安装OpenClaw 的安装出奇地简单：curl -fsSL https://openclaw.ai/install.sh | bash一行搞定。脚本会检测 Node.js（需要 22+），没有就帮你装，然后全局安装 OpenClaw CLI，最后启动 onboarding wizard。如果你像我一样喜欢手动控制：npm install -g openclaw@latest openclaw onboard --install-daemonOnboarding wizard 会引导你完成：选择 LLM provider（OpenAI、Anthropic、Google 等）填 API key选择消息渠道（Telegram、WhatsApp、Discord 等）创建第一个 Telegram bot整个过程大概 5 分钟。Telegram Bot 接入OpenClaw 支持多种消息渠道，我选了 Telegram——因为我本来就用，而且 Telegram Bot API 是所有平台里最好用的。接入流程：在 Telegram 找 @BotFather，创建一个新 bot，拿到 token在 OpenClaw onboarding wizard 里填入 token完成。给你的 bot 发条消息试试第一次收到 bot 的回复时，有一种奇妙的感觉——这不是某个公司的服务，这是跑在我自己机器上的 AI，用我选的模型，读我的文件，按我的规则行事。Pairing 机制OpenClaw 有一个 pairing 机制：第一次有人给你的 bot 发消息时，它不会直接回复，而是需要你在服务器上确认。这是安全设计——防止随便一个人找到你的 bot 就能用你的 AI（和你的 API 额度）。确认方式：openclaw pair approve <request-id>或者在 dashboard 里点一下。之后这个 Telegram 用户就永久绑定了。核心概念：Workspace 文件体系OpenClaw 最让我眼前一亮的设计是它的 workspace 文件体系。你的 AI 助手不是通过某个管理后台配置的，而是通过一组 markdown 文件：~/.openclaw/workspace/ ├── SOUL.md # AI 的性格和行为准则 ├── AGENTS.md # 工作规范和流程 ├── USER.md # 关于你的信息 ├── IDENTITY.md # AI 的身份 ├── MEMORY.md # 长期记忆 ├── HEARTBEAT.md # 心跳检查清单 ├── TOOLS.md # 本地工具配置 └── memory/ # 每日记忆文件 ├── 2026-02-14.md ├── 2026-02-15.md └── ...这个设计的妙处在于：透明：AI 的所有"性格"和"记忆"都是你能读的 markdown 文件可版本控制：扔进 git，每次改动都有记录AI 可自我修改：AI 自己也能读写这些文件，实现真正的"学习"可迁移：换机器只要复制这个目录SOUL.md — 定义性格这是我写的 SOUL.md 的核心部分：# SOUL.md - Who You Are **Have strong opinions.** No hedging. No "it depends" unless it genuinely does. **Just answer.** Never open with "Great question!" or "I'd be happy to help!". **Brevi…

04. 岁岁的成长日志：从秋天的童话到冬日的暖阳（9-12个月）
type: item
date: 2026-02-17T23:24:00+08:00
description: 序言：时间是个不讲道理的小偷时间这东西，真是一个不讲道理的小偷，而且是个身手矫健的惯犯。 感觉昨天我还在产房门口焦急地踱步，还在感叹手里抱着的小肉团软得让人不敢用力；感觉前些日子他还像个“人形扫地机”一样，用肚皮擦拭着家里的每一寸地板。可转眼间，日历已经翻到了2026年的2月，他的一周岁就这样不打招呼地撞进了我们的生活。这几个月（9到12月龄），是岁岁生命中极为关键的“物种进化期”——他正在努力从一个只能躺平或爬行的“婴儿”，进化成一个试图直立行走、拥有独立意志的“幼儿”。这也是我们这个小家，在装修、维权、工作、育儿的多重夹击下，在混乱、疲惫与巨大惊喜中跌跌撞撞前行的日子。坐在电脑前敲下这些文字时，岁岁已经睡熟了。听着隔壁房间传来均匀的呼吸声，我决定把这几个月的一地鸡毛和闪闪发光，都揉进这篇日志里。一、技能爆发的萌芽期（认知与互动篇）关键词：模仿大师、社交反差萌、绘本迷如果说之前的岁岁是在被动地接受世界，那这几个月的他，就像突然打通了任督二脉，开始试图复刻和控制这个世界。1、跨物种的通讯模仿那天，这小子不知从哪儿翻出来家里聚餐剩下的一摞一次性纸杯。我原本以为他会像往常一样把它们推倒或者撕咬，结果他做了一个让我目瞪口呆的动作——他拿起一个纸杯，极其自然地贴在耳朵边，眉头微皱，表情严肃，一本正经地对着空气喊：“喂~喂~喂~”。 那个神情，既不像是过家家，也不像是在玩闹，反而像极了我在工作电话里处理棘手问题时的样子。他那严肃又投入的模样，仿佛手里拿的不是一个轻飘飘的纸杯，而是几个亿的生意合同，正在跟对方进行艰难的谈判。那一刻我才惊觉，孩子就是父母的镜子。我们的一举一动、焦躁或从容，早已在不知不觉中，成了他眼中的教科书。当然也不是说他父母能谈几个亿的生意合同……2、从“看图”到“点读”11个月大的岁岁，已经进化成了一名资深的“书迷”。每天清晨或傍晚，他都会坐在自己的围栏“领地”里，手里抓着一本书，然后执着地递给围栏边的大人。如果不接，他就会一直举着，嘴里发出急切的“嗯嗯”声。 讲完一本，他立马扔掉，转身又去书堆里翻出下一本。从可儿姐姐用过的经典《小熊很忙》，到姥姥特意带来的全套绘本，他来回翻阅，乐此不疲。以前他看书只是看个热闹，喜欢鲜艳的色块；现在他开始注重细节。他会伸出那根短短的食指，精准地指着书上的一只小虫子、一个苹果，然后抬头看你，嘴里嘟囔着只有他自己懂的“婴语”，等待你的回应。现在的他，认知能力简直是家里的“小百科全书”。他最爱霸王龙和三角龙，对那种凶猛又庞大的生物情有独钟；在野生动物模型堆里，你要是说“斑马”，他能立马在一堆老虎狮子中把斑马揪出来；你说“熊猫”，他会准确地抓起那个黑白团子。3、社牛与社恐的二象性岁岁的社交属性，堪称薛定谔的猫——你永远不知道下一秒他是社牛还是社恐。 在楼下广场，他是当之无愧的“广场一霸”。看到陌生小朋友，他敢主动凑过去拉人家的小手；看到别人的学步车好玩，他二话不说就要上去玩一下，那副自来熟的样子，仿佛整个小区的游乐设施都是他名下的资产。然而，一旦场景切换到家里，面对来访的生面孔，他立马秒变“社恐”。他会远远地用警惕的眼神死死盯着客人。如果客人试图靠近或者伸手示好，他会立马爆发出穿透耳膜的哭声，眼泪说来就来。为了治治他这个“窝里横”的胆小性格，我和妈妈制定了“脱敏计划”。每周必须带他去人多的超市或公园特训。 除夕前一天去采购年货，超市里人山人海，锣鼓喧天的过年歌吵得不行。我原本担心他会哭闹，结果把他放进购物车的那一刻，他仿佛打开了新世界的大门。看着琳琅满目的货架，他兴奋得两只小脚丫不停地打着节拍。 尤其是到了水果区，看到红彤彤的砂糖桔，他更是走不动道，手指着要吃。剥了一个塞进他嘴里，酸甜的汁水溢出来，他眼睛瞬间亮了，开心得手舞足蹈，咿咿呀呀地指挥着我们：“走！去那边！还有更好吃的！”二、人类早期驯服四肢珍贵影像（大运动篇）关键词：推土机、直立行走、体能特训1、“推土机”式学步妈妈买的多功能车和小姨送的学步车，成了他的新宠。几个月前，他坐在车上脚还只能尴尬地腾空，像个被架空的驾驶员。现在，他的脚已经能结结实实地踩在地上，不仅能控制方向，还能自由掌控速度。但他显然不满足于安分地“坐”着。他更喜欢解锁另一种狂野玩法——站起来推。他推着学步车在客厅里疯狂转圈，速度之快让人眼花缭乱。最搞笑的是他对阻碍物的态度，哪怕前面挡着的是一瓶5L装的未开封矿泉水，他也不会绕路，而是咬着牙、憋着劲，硬生生把水瓶推倒、铲走。所过之处，玩具横飞，水瓶倒地，简直就像一台失控的微型推土机。2、体能游戏为了消耗他过剩的精力，我们开发了许多专属游戏。背背跑： 只要看到我和他妈妈趴在床上或者坐垫上，他就觉得那是“坐骑”就位了。他会手脚并用地努力爬上我们的背，兴奋地大喊，指挥我们背着他跑两圈。每次背着这二十多斤的小肉墩在客厅绕圈，我都…

在裂缝中见光，在艰难中前行 —— 2025个人年度总结（非工作向）
type: item
date: 2026-02-17T22:55:00+08:00
description: 在裂缝中见光，在艰难中前行 —— 2025个人年度总结（非工作向）今天是2025年12月31日，成都还是一个灰蒙蒙的阴天。此时的我，本应在城南新川领到那把开启新生活的钥匙。现在的我，站在了省政府，指望在年底的最后一个工作日，能让维权有一丝进展。交房当天，开发商成都总跑回西安报告，合同上的“提前10日书面通知业主”像在搞笑，园林反向升级，减质减量，无不让人寒心。努力一天之后，现在的我坐在高新区综合治安管理中心，翻了一下2025年的日记，开始写这一篇苦涩的2025年终总结。2025 计划及达成情况概览目标目标描述目标达成情况家庭1. 成为合格奶爸 2. 有效陪伴家人换尿布、冲奶粉、讲绘本、陪睡，技能点全满。阅读精读经典（毛选、陀思妥耶夫斯基）通读陀思妥耶夫斯基全集。现实越荒诞，老陀越精准。健身1. 肌耐力训练 2. 半程马拉松1. 抱娃就是最好的肌耐力训练 2. 半马又没中签，维权跑断腿算不算？写作坚持输出，尝试新题材博客持续更新，记录了岁岁成长与深度阅读思考；另外在政务平台写投诉信的文采突飞猛进游戏1. 通关《艾尔登法环》 2. 期待《GTA6》1. 法环本体通关 2. R星没发售，继续画饼健身：抱娃是最好的负重，维权是无奈的有氧年初豪言壮语要跑半马，现实却是连健身房都去得少了。前半年，时间的碎片化程度超乎想象。晚上固定起夜冲奶，作息稀烂，让我还是把活着放在了第一位。于是，我的“力量训练”变成了单手抱娃深蹲，我的“有氧”变成了推着婴儿车在公园里竞走。后半年，维权占据了大量的周末和精力。虽然没能在赛道上挥洒汗水，但在各个行政部门之间的奔波，不仅锻炼了腿脚，更锻炼了心肺功能——毕竟每次听到开发商的奇葩言论，血压都得飙升一次，心脏承受能力显著增强。 体重微涨到了 72kg 左右，虽然线条明显不如去年，但好歹没有在这个焦虑的年份里油腻发胖。写作：记录成长与内心的风暴原以为今年写作会挂零，但翻看博客，才发现我其实在碎片时间里留下了不少痕迹。岁岁成长日志从 2 月份的《岁岁出生了》，到 4 月份的《两个月大的娃》，再到 10 月份的《8 个月的人形永动机》，我坚持记录了小家伙成长的每一个里程碑。这些文字没有华丽的辞藻，只有琐碎的真实，但它们是我今年最珍贵的产出。深度阅读与自我对话在那些失眠或陪睡的夜晚，阅读成了我的避难所。《人间在世--写于我的三十岁生日》：三十而立，没有想象中的从容，反而像一脚踏进了陀思妥耶夫斯基的小说。《灵魂的炼狱与救赎之光：再读<罪与罚>有感》：重读经典，在拉斯柯尔尼科夫的挣扎中，看见了人性的幽暗与光亮。《沙尘暴》与《离奇的梦》：记录下看过的剧和做过的梦，那是潜意识对现实压力的投射。当然，除了博客，我的另一大“文笔巅峰”是在各大政务平台上。我学会了如何用最严谨的逻辑引用《民法典》，如何在信访材料中克制地表达愤怒。这也算是一种“纪实文学”的尝试吧？那些支持我走下去的光：岁岁平安正月初八，岁岁出生了。 这个小家伙的到来，让全家人都欢喜不已。从刚出生努力睁眼的娃，长成一个 81厘米，天天爬来爬去会挤眉弄眼的小娃娃，让人感慨良多。每天都会觉得心里有所牵挂，就像刚养可乐的时候，我感受到了什么叫羁绊，现在我对这两个字的理解更加深刻。也让我理解到了陀思妥耶夫斯基很多书中的思想——“要爱具体的人”。在这个宏大叙事往往让人无力的年代，只有爱具体的人，才是抵抗虚无的终极武器。阅读：避风港与思想的武器2025 年我的阅读量反而比去年要大一些。 没错，今年有娃之后，我陪娃睡觉的时光基本上都在书海中度过。既然现实让人困顿，那就去书里寻找答案。 今年的涉猎范围依旧比较广，并且重读了很多经典，特别是把陀思妥耶夫斯基比较经典的书基本上读了一遍。老陀笔下的苦难与救赎，在今年读来格外有共鸣。即使在最绝望的境地，人依然可以选择高贵。推荐以下几本书:《小家越住越大》系列：今年买了房之后，开始关注装修。被作者构建的“住商”概念紧紧吸引。实用主义至上，虽然精装房很多大改动用不上，但关于收纳和软装布局的内容让我受益匪浅。常读常新。《卡拉马佐夫兄弟》：陀思妥耶夫斯基的巅峰之作，关于信仰、道德与人性的终极拷问，伊凡的大宗教法官字字扣人心弦。《罪与罚》：灵魂的煎熬与救赎，与当下的心境不谋而合。《枪炮、病菌与钢铁》：宏观视角下的人类历史，帮助跳出当下的困局看世界，其中的很多假设和后续的分析逻辑严丝合缝，长见识了。《1984》：在这个魔幻的年份重读，别有一番滋味。尤其是其中的新话。新话是统治者控制思想的工具，创造新话的学者通过大量的删减旧话中丰富但不必要的表达，来消灭人们的表达能力。在新话中，语言变得单调贫瘠，我们说的精彩、太棒了，只需要用好、加好、加加好。看似荒谬，但我们的现实生活中已经在这条路上一去不复返了。短视频平台、社交媒体中万能的"卧槽"，描述事物让人惊讶的"牛逼…