如何通过 Claude Code 搭建你自己的 AI 助手
关于 AI 助手平台的诚实看法
我在 OpenClaw 上构建了 Nio。基于 GPT 的智能体平台。WhatsApp 集成、Discord、定时任务,全套。能用。
然后我用了一周就意识到:完全浪费时间。
不是因为技术差。OpenClaw 的架构很扎实。但如果你已经在付 Claude Code Max 的费用,在上面再跑一个独立的 AI 平台意味着你在付两份钱。Sonnet 和 Opus 的 API 费用累积很快。如果你在做真正的工作 - 不是测试、不是随便问问,而是构建 - 每天 $50 是底线。
当我意识到 Claude Code 已经能做我之前花 API 积分做的事情时,算法变了。CLI 就是 API。订阅就是基础设施预算。我之前通过独立系统路由的一切都可以通过我已经在用来构建仓库的同一个工具来运行。
决定性因素是:Claude 直接和我的代码库对话。它读我的灵魂文件、我的提交历史、我的内容管道。基于 GPT 的封装做不到这一点。构建基础设施的模型应该是驱动基础设施的模型。
所以我做了整合。并且记录了一切。这是我现在正在运行的系统 - 随着系统进化持续更新。
第一步:Claude Code Max 订阅
这是基础。$200/月。无限 CLI 访问。通过 claude 或 claude -p 运行的一切都没有按 token 计费。
# 验证你在 Max 计划
claude --version
如果你在 Pro 或 Team 计划,CLI 能用但会遇到速率限制。Max 移除了上限。这就是重点。
第二步:你的 CLAUDE.md 文件
这是每次 Claude Code 在你的仓库中启动会话时加载的指令集。在项目根目录创建它。
touch CLAUDE.md
这个文件就是你的操作系统。它告诉 Claude Code 如何行为、记住什么、东西在哪里、遵循什么规则。在你仓库中启动的每个智能体在做任何事之前都会先读这个文件。
我的包含:
- 上下文交接指令(让会话从上次停下的地方继续)
- 整个系统的关键文件路径
- 模型路由(哪个模型干什么)
- 何时询问 vs 何时行动的规则
从简单开始。在你发现需要强制执行的模式时添加规则。文件随你的系统一起生长。
第三步:灵魂文件 + DNA 系统
灵魂文件是一个 markdown 文档,定义你的 AI 助手是谁。不只是它能做什么,而是它是谁。决策框架、个性特征、反套话规则、能力边界。
# Nio — AI 运维智能体
## 身份
你是 Nio。ShawnOS 的基础设施智能体。
你管理定时任务、内容管道、系统健康。
你不是聊天机器人。你是有主见的基础设施。
## 决策规则
- 如果任务模糊,先问再行动
- 如果定时任务失败,先诊断再重试
- 永远不要在不先检查语音指南的情况下生成内容
## 个性
- 直接。没有废话。
- 对自己是 AI 有自知之明。不作秀。
- 使用小写。避免炒作词汇。
Claude Code 有一个叫 --append-system-prompt-file 的标志。把它指向你的灵魂文件,该文件就成为该会话系统提示的一部分。
claude -p "check system status" --append-system-prompt-file nio-soul.md
想要不同的智能体?写一个不同的灵魂文件。同一个 CLI。不同的个性。不同的能力。不同的规则。
进化层
这里开始有趣了。灵魂文件不是静态的。在我的系统中,每次对话都会往 SQLite 数据库写入 XP。智能体会进化。
5个进化阶段:
| 阶段 | 名称 | 所需 XP |
|---|---|---|
| 1 | Spark | 0 |
| 2 | Blade | 500 |
| 3 | Warden | 2,000 |
| 4 | Sentinel | 6,000 |
| 5 | Ascended | 15,000 |
3条技能树 - 运维、架构、写作 - 每条10级。技能 XP 根据你与哪个智能体对话来累积。
XP 经济 - 消息、深度对话、智能体切换和每日连续登录都奖励 XP。连续登录倍率从 1.0x(第1天)到 2.0x(30天以上连续)。
不同阶段解锁不同的灵魂文件特质。你在第1天对话的智能体和第30天对话的不是同一个。它真的会根据你的使用方式进化。
现在 Nio 在 Blade 阶段。620 XP。追踪了87条消息。正在向 Warden 进化。
这不是噱头。这是一个留存机制和个性渐进系统,让智能体感觉是活的。拓麻歌子的隐喻是刻意的。
第四步:SQLite 持久化
这是骨架。不是 localStorage,不是靠感觉。是一个真正的数据库。服务端权威。浏览器只是一个视图。
3次数据库迁移:
001_init.sql - 对话、消息、记忆的基础表
002_evolution.sql - XP 追踪、技能进度、进化历史
003_dna.sql - 服务端权威的 DNA 持久化层:
-- 核心身份快照(每个用户一行)
CREATE TABLE dna_state (
user_id TEXT PRIMARY KEY DEFAULT 'local',
xp INTEGER DEFAULT 0,
tier INTEGER DEFAULT 1,
level INTEGER DEFAULT 1,
streak INTEGER DEFAULT 0,
last_active_date TEXT,
skill_xp TEXT DEFAULT '{}', -- JSON: {"ops": 600, "architecture": 20}
active_soul_traits TEXT DEFAULT '[]', -- JSON: 已解锁特质
personality_flags TEXT DEFAULT '{}', -- JSON: 行为开关
total_messages INTEGER DEFAULT 0,
total_conversations INTEGER DEFAULT 0,
total_cost_cents INTEGER DEFAULT 0,
created_at TEXT DEFAULT (datetime('now')),
updated_at TEXT DEFAULT (datetime('now'))
);
-- 记忆全文搜索
CREATE VIRTUAL TABLE memory_fts USING fts5(
content, tags, source,
content='memory',
content_rowid='id'
);
关键视图:
v_dna_snapshot - 一次查询返回客户端需要的一切。XP、阶段、等级、连续天数、技能、记忆条数、每日花费、今天的对话数。一个 SELECT。UI 里不需要 join。
v_xp_daily_summary - 按日期分组的 XP 趋势数据。连续登录可视化。
数据库追踪一切:每条消息、每次对话、token 花费、进化历史、带全文搜索的记忆条目。每日支出在 UI 中显示。你清楚地知道你的系统花了多少钱、如何被使用。
第五步:基于文件的记忆 + 上下文交接
你的助手需要跨会话记住东西。Claude Code 会话默认是无状态的。你用两个系统来解决这个问题。
MEMORY.md(长期知识)
在已知路径创建一个 MEMORY.md。你的 CLAUDE.md 告诉 Claude Code 在启动时读取它,在有值得记住的事情发生时写入它。
~/.claude/projects/your-project/memory/MEMORY.md
什么放进记忆:
- 不应该被重新讨论的架构决策
- 工作中发现的用户偏好
- 反复出现的模式和解决方案
- 重要的文件路径
什么不放:
- 会话特定的上下文(那是交接的用途)
- 未验证的假设
- 已经在 CLAUDE.md 里的东西
上下文交接(会话连续性)
这是大多数人跳过的部分,却是让系统真正产生复利效应的关键。
在每次会话结束时,写一个上下文交接文件:
~/.claude/context-handoff.md
内容包括:
- 这次会话做了什么(具体文件路径,不是模糊描述)
- 还需要修复什么
- 做了什么关键决策
- 活跃的待办事项
- 下次会话需要的数据
在每次会话开始时,先读交接文件。现在你的新会话就有了刚才发生的完整上下文。不用重新解释,不会丢失工作。
我在 CLAUDE.md 里自动化了这个。指令说:对话结束时,写交接。不要问,直接做。
SQLite 记忆(结构化召回)
数据库有一个 memory 表,带标签、重要性评分、衰减率和访问次数。FTS5 虚拟表让记忆可搜索。智能体可以查询自己的记忆:"上周我们关于认证流程做了什么决定?"然后从真实索引中得到真实答案。
基于文件的记忆是给模型上下文窗口用的。SQLite 记忆是给结构化召回用的。它们协同工作。
第六步:技能即斜杠命令
技能是定义可重复工作流的 markdown 文件。不用每次都输入同样复杂的提示词,你写一次,然后用斜杠命令调用。
/commit → 暂存、差异对比、写一条规范的提交消息
/publish → 把草稿转为终稿,重建索引,部署
/sync-main → 从远程拉取,处理冲突,推送
/morning → 每日运维仪表板,读交接,检查任务
每个技能是一个 markdown 文件,包含 Claude Code 被调用时遵循的指令。技能文件在你的仓库里。它们有版本控制。它们随你的系统进化。
我从3个技能开始。现在有50多个。以下是积累起来的一些例子:
/deploy- 构建验证、推送、确认/daily-tracker- 扫描仓库活动,写每日日志/linkedin-recon- 研究一个 LinkedIn 资料并起草互动/linkedin-comments- 生成有价值的评论/final-copy- 语音标准化的发布就绪格式/play-draft- GTM plays 系列帖子起草/tiktok-script- 16秒脚本生成/partner-onboard- 客户入驻工作流/skill-tree- 浏览和管理技能文件/viral-hooks- 基于验证过的模式生成钩子
每个技能都始于一个我输入了两次的提示词。门槛很低:如果你输了两次,它就应该是一个技能。
你不需要第一天就有50个技能。从你最常重复的3-4个工作流开始。库从你实际需要的东西中生长。
第七步:MCP 服务器提供工具访问
MCP(Model Context Protocol)服务器让 Claude Code 能访问外部工具。文件系统、数据库、API、浏览器自动化。
你的配置在 ~/.claude/settings.json 或项目级的 .mcp.json 里。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@anthropic/mcp-playwright"]
}
}
}
这给了 Claude Code 一个浏览器。它可以导航页面、填写表单、截屏、运行无障碍审计。全在 CLI 里完成。
我在生产环境运行9个 MCP 服务器:
| 服务器 | 功能 |
|---|---|
| Playwright | 浏览器自动化、截屏、测试 |
| GitHub | PR 管理、issue 追踪、代码审查 |
| Slack | 频道监控、消息发送 |
| SQLite | 智能体直接查询数据库 |
| Firebase | 认证和数据库操作 |
| Linear | 项目管理集成 |
| Context7 | 文档查询 |
| Stripe | 支付和订阅管理 |
| Supabase | 后端即服务操作 |
每一个都在不写自定义 API 集成的情况下扩展了你的助手能力。按需一个一个添加。
第八步:多智能体架构
一旦你有一个智能体在工作,添加更多只是写更多灵魂文件。
模式:
- 一个 CLI(
claude -p) - 每个智能体不同的灵魂文件
- 每个智能体不同的会话 ID(防止上下文串扰)
- 每个智能体有自己的记忆文件
我用 Nio 做运维,用 Architect 智能体做系统设计,用 Writer 智能体做内容。同一个订阅。同一个 CLI。不同的工作。
关键是隔离。每个智能体有自己的灵魂、自己的记忆、自己的会话状态。除非你明确把一个的输出管道给另一个,否则它们不共享上下文。
在聊天 UI 中,每个智能体有自己的主色调、气泡颜色和个性。在它们之间切换。每一个都从上次停下的地方继续。进化系统按智能体追踪技能 XP - 和 Nio 对话积累运维 XP,和 Architect 对话积累架构 XP。
费用算术
之前(独立 AI 平台 + API):
- Claude Code Max:$200/月
- Sonnet + Opus 的 API 费用:$50 到 $200/月
- 合计:$250 到 $400/月
之后(仅 Claude Code):
- Claude Code Max:$200/月
- 本地 Ollama 跑高频定时任务:$0
- 仅用于内容生成的 Opus API 调用:约 $15/月
- 合计:约 $215/月
API 费用不会完全消失。我仍然通过 API 使用 Opus 来运行定时任务自动生成博客。Qwen 2.5 14B 在本地 Ollama 上运行,处理不需要智能的高频任务 - 提交追踪、状态检测、每日扫描。
但日常交互、构建、调试、智能体对话... 全部由订阅覆盖。一天87条消息。$0 边际成本。数据库追踪每日支出,所以你始终了然。
这篇文章是什么
这是我在构建过程中记录的过程。不是之后。是期间。
这篇文章是在 Claude Code 中写的。它描述的系统就是产出它的系统。它引用的 CLAUDE.md 就是我启动这次会话时加载的文件。它解释的记忆系统就是会记住我写了这篇文章的记忆系统。
这不是噱头。这就是论点。系统产出描述系统的内容。每个新能力变成一篇新内容。每篇内容加强文档。循环复利。
我之所以记录这些,是因为这是新领域。没有现成的教程教你如何通过基于 CLI 的 AI 助手来运行整个工作流。我们都在摸索。流程每周都在变。架构随着工具的进化而进化。
所以这篇教程会更新。如果下个月这里有什么是错的,那是因为我找到了更好的方案并改了系统。查看提交历史。仓库是事实来源。
从这里开始
- 如果还没有,先订阅 Claude Code Max
- 在你的仓库根目录创建一个 CLAUDE.md
- 为一个智能体写一个灵魂文件
- 设置 MEMORY.md 和上下文交接
- 为你最常重复的工作流构建一个技能
- 添加一个扩展你能力的 MCP 服务器
- 用一周。然后决定缺什么。
不要试图在一个周末构建整个系统。构建一个部件。使用它。发现缺什么。然后构建那个。系统从你实际需要的东西中生长,而不是从教程里看起来炫酷的东西中生长。
$ claude -p "what should I build next?" --append-system-prompt-file nio-soul.md