海拉鲁打怪日记 - xuezhao.d
type: channel
link: https://xuezhao.space/author/1/
description: xuezhao.d
items: 守住人间 ——写于我的三十一岁生日
items: 读《贫穷的本质》：当系统剥夺了你的容错率与认知带宽
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：部署与第一次对话

守住人间 ——写于我的三十一岁生日
type: item
date: 2026-07-05T15:56:00+08:00
description: 去年三十岁生日时，我写过一篇《人间在世》。那时候的我，像是刚刚从自己的精神孤岛上被拉回人间。老婆、可乐、岁岁，像三股温暖的绳索，让我第一次如此具体地理解了责任、牵挂和被需要。那一年，我终于承认，所谓自由并不只是一个人冷静地站在世界之外，也可以是心甘情愿地被爱所束缚。转眼三十一岁。这不是一个特别宏大的年纪，不像三十岁那样带着某种仪式感，也远没有到可以坦然把人生看透的时候。但它像一个安静的转折点：你不再频繁地向世界索要答案，却开始更认真地看见眼前的一切。孩子长大了一点，猫还是会在家里找一个舒服的位置蹲着，生活没有给出什么终极解释，却把答案藏在这些具体的瞬间里。这一年经历了太多太多。很多时刻说不上是熬过来的，还是被生活推着往前走的。好像一直在处理问题，承担责任，回应期待，追赶一个又一个被不断提前的节点。世界的速度越来越快，快到连疲惫都来不及被承认，只能先被折叠起来，塞进下一件必须完成的事情里。有些清晨，天还没亮，我会突然醒来。身体明明很累，意识却像被强行拽回现实。头晕、心悸、胸口发紧，脑子里盘旋的不是某个宏大的理想，而是一些很具体、甚至有点荒诞的念头：身体还能不能撑住，日子会不会突然中断，万一真的出了什么事，身后的人要怎么办。到了这个年纪才发现，成年人所谓的坚强，很多时候并不是内心真的无比坚定，而是你知道自己不能轻易倒下。因为身后已经有了人，有了家，有了那些你牵挂、也牵挂着你的人。这一年，我也更切身地感受到技术浪潮的另一面。过去我们常说，技术会解放人。可真正站在浪潮中间时才发现，技术在拓宽能力边界的同时，也会悄悄抬高世界对人的要求。它让许多事情看起来变得更简单，让许多原本需要漫长讨论和审慎设计的东西，忽然可以被快速生成、快速拼装、快速推进。于是人们开始相信，既然工具已经如此强大，那么人也应该更快、更稳、更无所不能。可真实世界不是原型图，也不是几句漂亮的描述。系统有系统的重量，现实有现实的阻力，复杂性不会因为被暂时遮住就真的消失。它只是换了一种方式，最终落回到人的身上，落到一个个深夜、一次次返工、一轮轮无法绕开的细节里。我越来越觉得，超级智能到来之前，最先被改变的未必是某个遥远的未来，而是我们今天的工作方式、协作方式，以及对自身边界的感知。机器越快，人越容易被要求跟上；工具越强，人越容易被默认不该喊累。效率成为一种新的道德，慢下来反而像是一种错误。但人终究不是系统的一部分，不是某个可以无限扩容的计算节点，也不是一台只要接上电源就能持续运转的机器。人的身体会报警，情绪会迟钝，心会在某些时刻忽然空下去。那些无法被压缩的睡眠、心跳、恐惧、爱与牵挂，才不断提醒我：我不是一个只负责响应需求、解决问题、提供产能的工具。去年三十岁，我以为自己终于从孤岛回到了人间。到了三十一岁，我才更清楚地意识到：回到人间不是终点，守住人间才是更漫长的事。因为真正回到人间之后才会明白，人间并不只是温暖、安稳和烟火气。它也意味着责任、疲惫、限制和无法逃避的牵挂。它让你不再能轻易地把自己抽离出去，也让你在几乎被生活耗尽的时候，仍然会因为一个很小的瞬间，被重新拉回来。比如这个普通的生日。孩子低头去碰蛋糕，猫蹲在一旁看着镜头，桌上有没收拾完的碗筷，家人在旁边闲聊，空气里有一点疲惫，也有一点温柔。那一刻没有什么宏大的意义，也不产生任何可见的效率。可它会让人忽然相信，生活真正重要的部分，可能一直都藏在这些微小、具体、不可替代的瞬间里。而时代正在朝相反的方向狂奔。判断、表达、记忆，甚至情绪本身，都越来越像是可以被拆解、重组、计算和优化的东西。人被推着变得更快、更清晰、更稳定、更有用；慢下来、迟疑、心软，反而像某种需要被修正的缺陷。所以我才更想守住一点不那么“先进”的东西。希望自己还能认真地开心，认真地疲惫，认真地害怕，也认真地爱；还能被一个眼神牵动，被一个普通夜晚安慰；还能在被生活和技术同时推着向前时，承认身体的警报，承认心里的迟疑，承认自己不是一台可以无限加速的机器。这些东西并不高效，也不总是体面。它们会让人脆弱，让人犹豫，让人无法用最优路径处理生活。但也正是它们，让人不至于只剩下功能、角色和产能。它们是柔软、牵挂、心疼、舍不得，也是那些无法被量化的温度。所以我想守住的，也许不是某种宏大的信念，而是这些微小但真实的反应：会累，会怕，会爱，会被日常安慰，也会因为一个普通瞬间重新相信生活。在超级智能席卷世界的前夜，这些东西显得笨拙，却也因此更像是人。愿三十一岁之后的日子里，无论世界变得多快，我都还能维持住一个真正的人的感受。仍然热爱家人，珍惜日常，对未知保持好奇，也对眼前的一切保有感恩。

读《贫穷的本质》：当系统剥夺了你的容错率与认知带宽
type: item
date: 2026-06-29T10:00:00+08:00
description: 读《贫穷的本质》：当系统剥夺了你的容错率与认知带宽传统的宏观经济学在探讨贫困时，往往陷入“自由市场”与“制度决定论”的意识形态之争。而《贫穷的本质》最大的贡献，在于它用微观实证的方法，为“贫困”这个复杂的黑盒建立了一套底层的可观测指标。然而，透过数据与实证的视角深入剖析时会发现，贫穷并非一种简单的经济状态，而是一种被系统性剥夺了“容错率”与“认知默认值”的架构瘫痪。第一部分：微观模型重构——在极高风险溢价下运转的机制书中极具洞见地指出：“穷人就像对冲基金经理一样，唯一的不同点在于二者的收入水平。”但如果用更严谨的投资与资产配置逻辑来审视，穷人其实是没有任何“安全垫”的裸奔者。1. 风险敞口与防御性多元化在没有完善的医疗保险、失业救济和底层社会保障的情况下，穷人的个人资产负债表极度脆弱。一场小病或一次干旱，就能让现金流彻底断裂。为了对冲这种极高的风险敞口，穷人被迫进行“业务多元化”——比如早上卖饼，白天做苦力，晚上串珠子。这种分散并非为了追求超额收益，而纯粹是生存驱动的防御机制。但代价是致命的：它直接扼杀了规模效应的产生。缺乏安全边际的底层商业模式，使得他们永远只能在极低的利润率中挣扎，无法跨越成本的门槛。书中打破了“穷人都是天生的企业家”的浪漫幻想——真正的企业家精神需要容错率来支撑，而穷人的小生意，更多是系统性失败下的无奈代偿。2. S 型曲线陷阱与时间不一致性为什么穷人知道储蓄和教育很重要，却依然会把钱花在买电视机和加糖茶上？行为经济学中的“双曲贴现”给出了底层算法的解释：$$ V = \frac{A}{1 + kD} $$(其中 $V$ 是当前感知价值，​$A$ 是未来收益，​$D$ 是延迟时间，​$k$ 是贴现率)在压力激素（皮质醇）长期高位水平的环境下，穷人的贴现率 $k$ 值被急剧放大。当教育或储蓄的回报呈现出漫长的“S 型曲线”（必须越过极高的投入阈值才能看到收益）时，长远目标的当前感知价值会迅速衰减。此时，大脑会理智地选择“及时行乐”作为多巴胺代偿。这不是短视，而是高压系统下维持心智运转的必然选择——俗称“活着已经很痛苦了，来点快乐的吧”。第二部分：RCT 实验的统计学过拟合阿比吉特·班纳吉等人凭借随机对照实验（RCT）获得了诺贝尔奖，但从数据工程和因果推断的角度来看，试图用局部 A/B 测试的成功去推导全局社会的因果律，存在致命的逻辑缺陷。1. 局部均衡 vs. 全局均衡的规模化反噬RCT 最大的痛点在于其结论极难跨语境迁移，在统计学上这相当于模型在训练集上完美，但在测试集上严重“过拟合”。例如，给几十个穷人发放小额信贷，他们确实能增加收入（局部均衡）。但如果将干预规模化，给一万人发放信贷，所有人都在做同质化的小买卖，就会导致供过于求、价格暴跌（全局均衡）。局部测试有效的变量，一旦全局铺开，系统的底层逻辑就变了。2. SUTVA 假设的破裂与溢出效应RCT 要成立，必须满足严苛的 SUTVA（稳定个体处理值假设），即控制组和实验组必须完全隔离。但在复杂的社会网络中，如果实验组的村民拿到了免费蚊帐，控制组的村民可能会产生极大的不公平感，从而彻底放弃原有的卫生习惯。这种行为博弈会严重扭曲最终的因果推断。3. 黑盒归因的危险性书中提到“持续两年吃打虫药的孩子，成年后收入多 20%”。在长达十几年的时间跨度里，将 20% 的收入增长线性归因于童年时的两片药，忽略了宏观经济周期、家庭资源重新分配等无数个混杂变量。正如安格斯·迪顿所讽刺的，这是一种“水管工经济学”——不去重构腐朽的底层官僚体制和公共财政，只试图通过设计海报来提高护士的出勤率。战术上的勤奋，掩盖了战略上的系统性崩塌。第三部分：系统默认值与心智带宽的关联思考要真正理解贫穷，我们需要跳出单纯的经济学框架，将其与《助推》中的“选择架构”，以及《超级智能》中的算力/带宽概念进行对撞。核心维度《贫穷的本质》：带宽剥夺《助推》：系统默认值《超级智能》：Agent 算力模型环境架构充满惩罚机制，容错率极低。系统预设了友好的“默认选项”。算力充沛时优化终极目标，受限时被动响应。心智负荷纯手动模式，高频调用自控力。用环境设计代替个人意志，降低摩擦。算力被生存类“中断请求”占满，无长期规划。1. 被剥夺的“父爱主义”红利中产阶级之所以显得比穷人更有远见，并不是因为基因或意志力更好，而是因为现代社会的基础设施替我们做出了无数个较优的“默认选择”。住房公积金的自动扣缴、自来水的集中净化、疫苗的强制接种——我们不需要每天消耗意志力去执行这些长远规划。而穷人被彻底抛入了一个毫无预设缓冲的旷野。他们的每一次储蓄、每一次健康干预，都需要在繁杂的决策因素之间抉择。没有任何人的意志力，能够承受每天上百次的、缺乏默认安全值的高风险决策摩擦。2. 算力锁死与 Agent 的认知瘫痪如果把人看作一…

读书笔记：图解大模型——生成式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…