自己动手搭一个“私人 AI 助手”,和买一台现成设备完全是两码事。机器买回来插上电就能用,私人助手却得先解决一连串问题:它跑在哪、认不认得你、能访问你的哪些数据、什么时候该自己作主、什么时候必须停下来问人。我最初接触 OpenClaw,就是被这些问题逼出来的——消息太多、日历太乱、笔记散落各处,总想着有个东西能帮我把碎片拢一拢,可市面上的助手要么关在别人的服务器里,要么能力固定死,想让它懂我的工作习惯,比训练一只真猫还难。
后来在几个开源项目里翻到 OpenClaw 的设计思路,终于想明白一件事:所谓私人助手,核心不是“模型有多聪明”,而是“调度链有多顺”。这篇文章不打算铺开讲每个配置字段的来源,而是把我从零开始搭 OpenClaw 的完整路线梳理出来。看完你会有两条收获:一是知道这玩意儿到底能做什么、边界在哪,二是一套可以直接抄作业的最小实现,从装环境、配模型、写第一个技能插件,到调参避坑,全程可复现。
1. 先想清楚:OpenClaw 到底是什么,适合谁
1.1 它不是“一个模型”,而是一个调度框架
很多人第一次听到“ AI 助手”这个名字,下意识以为核心就是大语言模型。这个理解不算错,但很容易导致失望:你把一个很强的模型单独装进聊天框,它确实能回答问题,却记不住你上周说过的需求,也不会帮你关掉明天早上的闹钟。
OpenClaw 解决的是模型之外的那一层。可以这么理解:模型就像刚入职的实习生,语言表达能力强,但不知道公司有哪些系统、哪些事能碰、碰完怎么收尾。OpenClaw 是带他的项目主管,负责把用户的自然语言拆成任务,决定调用哪个工具,再把工具返回的结果整理成实习生看得懂的上下文,最后让实习生把话说给用户听。实习生可以换,主管的流程不变,整个系统才谈得上“助手”而不是“聊天框”。
这套设计带来的直接收益是,你可以不断给 OpenClaw 接新技能。今天加一个备忘插件,明天加一个网页摘要插件,后天想让它读本地文档,也不用推翻重启,只是多注册一个插件的事。对非开发者来说,可能感觉不到插件机制本身,但会明显感到助手“越来越懂这个家”。
1.2 本地优先不是情怀,是安全边界
OpenClaw 最吸引我的一点,是它默认走“本地优先”的路线。对话记录、个人文件、插件数据,第一落点都在你控制的设备上,而不是某个厂商的云盘。这么做不是否定云服务,而是想清楚了一个问题:私人助手的价值恰恰来自它掌握你的长期信息,信息越私密,助手越有用,但同时越不该被二次复制。我自己的原则是,能落本地的绝不外发,必须联网的(比如实时天气)才走接口,而且走接口之前要明确告知用户。
本地优先还有个隐藏好处:可控和可恢复。云服务哪天改了接口、调整了收费策略、关停某功能,你只能等公告;本地部署的东西,只要代码和数据文件在自己手里,大不了回滚上一个版本。对长期使用的东西来说,这种“我随时能拆开看里面有什么”的踏实感,比某一版模型跑分高 5 分重要得多。
1.3 什么样的人适合折腾 OpenClaw
先泼一点凉水,它不适合所有人。如果你想要的是“打开软件就能和 AI 聊得很开心”,那现成的商业助手显然更省事。OpenClaw 适合的,是这几类人:
- 对数据隐私比较敏感,希望对话记录和文件留在自己设备上的人。
- 有固定工作流(日程、笔记、项目追踪、定时任务),希望助手参与而不是接管的人。
- 喜欢自己动手、遇到问题愿意读日志和改配置的人。
- 对开源社区有基本信任,能从社区交流中获取新技能包的人。
对“开发者”和“非开发者”的边界,我多说一句。OpenClaw 的日常使用其实不要求你会写代码,改配置、装插件像填表一样;但如果你想定制自己的技能插件,至少得有一点脚本语言的基础,常用的插件协议很简单,看两三个示例就能上手。下面的内容我默认你已经会打开终端、会编辑文本文件,其他技能都会在文中随时补充。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 零基础起步:准备一套能跑的最小环境
2.1 一台旧笔记本也能用:硬件怎么取舍
先说硬件底线。OpenClaw 本身是个偏轻量的调度框架,主要资源消耗来自两处:一是本地模型推理,二是向量检索。如果你手头有 8G 内存以上、支持 AVX 指令集的 CPU,跑一个小尺寸的量化模型完全够;内存如果能到 16G,体验会从容很多。显卡不是必须,有 NVIDIA 显卡会加速推理,但不值得为了它专门买整机。我最初是在一台六年前的老笔记本上跑的,内存 8G,没有独显,推理速度大约每秒 5~8 个 token,等回复时会慢一点,但用来做备忘、摘要、查询本地笔记已经足够。
如果连这种配置都没有,也有变通方案:本地只跑调度框架,模型推理放到另一台机器或局域网内的高性能服务器上。配置里把模型接口地址指向那台机器就行,权限做到只在内部网络可访问,别暴露到公网。这种混合部署是我比较推荐的方案,既保留本地数据控制权,又解决了算力瓶颈。
2.2 安装前先建好目录骨架
OpenClaw 的设计里,一切有迹可循。动手之前,先定一个专属目录,比如 ~/openclaw,所有配置文件、数据、插件都放在这里面,方便备份和迁移。我的目录结构是:
text复制~/openclaw/
├── config/ # 主配置和插件配置
├── plugins/ # 技能插件,一个目录一个技能
├── data/ # 对话记录、状态、索引文件
├── logs/ # 运行日志,排查问题主要看这里
└── models/ # 下载的本地模型文件
打这个骨架的用意,是让每个角色各归其位。刚折腾的第一周我犯过糊涂,把模型文件、插件脚本、日志全放在一层,结果模型换版本时把旧插件覆盖了,哭都来不及。现在哪怕只是临时测试,我也会把新东西放进它该在的目录,维护成本下降非常明显。
2.3 准备好模型推理服务
OpenClaw 不只是对话模型,还会通过接口调用推理服务。所谓推理服务,就是把你下载好的模型变成一个本地接口,OpenClaw 把对话上下文发送过去,你收到返回字符串。所以说模型是“实习生”,这句话在实现层面也是真的:实习生在后台跑,项目主管和他说话走的是标准协议。
目前在本地跑推理服务,优先考虑支持 OpenAI 兼容接口的实现。这样 OpenClaw 侧只需要配置一个 endpoint 地址,以后换模型、换推理栈都不用改业务代码。我选了一个常见配置:端口 11434,路径 /v1/chat/completions,模型名填你在本地服务里看到的名字。第一次起服务会有一个模型加载过程,几十秒到几分钟不等,耐心等着就行,后面我还会专门聊这个坑。
3. 第一层核心:配置、对话与记忆
3.1 配置文件的底层逻辑
OpenClaw 的配置我建议用一份 config.yaml 管全局。它的设计逻辑其实和写简历一样:先写你希望它“是谁”,再写它能“调用谁”,最后写它“记得什么”。一份最小配置长这样:
yaml复制# config.yaml 片段(OpenClaw 示例)
assistant:
name: "小爪"
wake_words: ["小爪", "claw"] # 不是必须,但唤名能减少误触发
session_ttl: 1800 # 会话上下文保持时间,单位秒
model:
endpoint: "http://127.0.0.1:11434/v1/chat/completions"
model_name: "local-chat"
temperature: 0.7
top_p: 0.9
max_tokens: 2048
memory:
storage: "sqlite" # 对话历史存在本地
vector_index: "local" # 向量索引走本地轻量方案
top_k: 5 # 每次检索取回几条相关记忆
plugins:
enabled: ["note", "reminder", "web_summary"]
注意 temperature 和 top_p 的作用不是“调聪明”,而是调发散度。temperature=0.7 表示回答有一定随机性,适合闲聊和头脑风暴;如果你要它做精确的信息抽取或按模板输出,我会调到 0.1~0.3。这些参数背后没有统一最优值,必须配合你的模型和任务反复试,后面我会给一套试的方法。
你可能会问,为什么需要 wake_words。直接的意义是给助手一个“边界感”——不是每句话都触发它,而是你喊它时才进入工作模式。我实际用下来,这个设置节省很多不必要的上下文消耗,也让模型更清楚什么时候该认真处理任务。
3.2 首次对话:把链路跑通
配置写好后,先做一次极简测试,不要一上来就接插件。启动 OpenClaw 后,它会读取配置,接着做三件事:加载本地记忆库、连接模型推理服务、启动对话入口。日志里会依次出现这几行,看到“ready”字样才算跑通。
测试时我问的第一句是:“今天天气怎么样?” 有意不接插件,预期它不会知道实时天气,但至少能正常组织语言。第一次把链路跑通比什么都重要,因为后面的插件、记忆、定时任务全都依托这条主线。
如果这一步就报错,九成是模型 endpoint 没配对。检查顺序:先直接在浏览器访问接口地址,能返回内容说明服务活着;再确认 model_name 和本地服务里实际注册的名字完全一致,差一个字母都会提示找不到模型。把这两点排掉,基本就通了。
3.3 会话记忆:它会记得你是谁
很多人对助手的期待是“上次聊的事这次接着聊”。这背后是记忆模块。OpenClaw 的记忆分两层:短期记忆靠会话上下文,长期记忆靠存储与召回。
短期记忆的机制很简单:把最近若干轮对话拼进上下文,一起发给模型。session_ttl: 1800 的意思就是,离上次对话超过 30 分钟,就开一个新会话,避免上下文无限膨胀。这个参数别设太大,否则对话多了以后,响应变慢而且容易被旧内容干扰。
长期记忆则是把对话内容分块,写进本地向量库。每次用户提问前,OpenClaw 会把问题向量化,在库里检索最相关的若干块(由 top_k 控制),插入上下文。这套设计的聪明之处在于,它不需要训练也能“记住”,只要你有历史数据,它就能在聊天时回忆起你一个多月前提到过的某本书、某个截止日期。让记忆检索跑起来后,我明显感觉助手从“陌生人”变成了“同事”。
4. 第二层核心:插件系统,让助手学会干活
4.1 插件协议:模型先描述“我会干什么”
插件是 OpenClaw 最值得投入的部分,也是它和普通聊天机器人拉开距离的地方。核心机制说穿了很简单:每个插件声明自己能干什么、需要哪些参数,OpenClaw 把这些声明交给模型,模型在对话过程中判断该调用哪个工具。
看看这个最小声明格式:
python复制# plugins/reminder.py
SCHEMA = {
"name": "reminder",
"description": "记录一条提醒,在指定时间触发",
"parameters": {
"type": "object",
"properties": {
"content": {"type": "string", "description": "提醒内容"},
"minutes": {"type": "integer", "description": "多少分钟后提醒"}
},
"required": ["content", "minutes"]
}
}
description 字段特别重要。模型不靠代码逻辑理解插件,它靠这段自然语言描述来判断“用户这句话是不是该调用这个工具”。描述写得越具体、越贴近真实场景,模型判断越准。我见过有人把描述写成“提醒”,结果模型在用户说“记住明天 10 点开会”时没认出来;改成“当用户需要定时提醒或闹钟时调用,参数 minutes 表示从现在开始多少分钟后”之后,命中率明显提高。
注册插件的步骤也简单:把包含 SCHEMA 和执行函数的目录放进 plugins/,然后在配置的 enabled 列表里加上它的名字。不用重启服务,OpenClaw 会在你保存配置后自动重新加载。插件做得多了以后,你会发现真正决定助手质感的就是这些描述词打磨。
4.2 第一个实用插件:定时提醒
我建议所有人的第一个插件都做“定时提醒”,因为它逻辑短、见效快,能完整走一遍插件协议的闭环。实现挂在 execute 函数里,把提醒内容写进一个 JSON 文件,由后台任务循环扫描时间戳触发。
python复制# 简化版实现
import json, time, os
def execute(content: str, minutes: int) -> str:
path = os.path.expanduser("~/openclaw/data/reminders.json")
reminders = []
if os.path.exists(path):
reminders = json.load(open(path, encoding="utf-8"))
reminders.append({
"content": content,
"at": time.time() + minutes * 60,
"done": False
})
json.dump(reminders, open(path, "w", encoding="utf-8"), ensure_ascii=False)
return f"已经记录提醒:{content},将在 {minutes} 分钟后触发。"
这个插件不值钱,值钱的是它验证了整条工具调用链:模型识别意图 → 生成参数 → OpenClaw 调用执行函数 → 返回结果给模型 → 模型组织最终回答。任何更复杂的技能(查日程、记账、拉取网页正文)都是同一条流水线,只是执行函数内部的逻辑越来越长。
写执行函数时要注意一个细节:返回给模型的字符串应当非常结构化。比如返回“已记录”,不要返回“我刚刚把提醒写进了文件,路径是 xxx,JSON 内容是 yyy”。模型会把你的返回读进上下文,废话越多,后续判断越容易被带偏。让返回值像接口返回,干净、明确、只包含事实。
4.3 循环调用:助手也能自己“多走几步”
插件系统跑通之后,你可能想再做一点更复杂的事:让助手查完日程,再根据日程起草一份待办清单。这里涉及 OpenClaw 的一个内部机制:模型会在一次对话中多次请求工具调用。
流程是这样的:收到“帮我看看明天的日程,重点标出冲突”——模型可能先调日程查询插件拿到原始数据,OpenClaw 把结果返回给模型;模型觉得信息不够,又调用记事本插件生成一份清单;两步都完成后,模型才写出最终给用户的那段话。整个过程中我不需要写任何流程代码,模型自己决定调用顺序,OpenClaw 只负责维持循环直到模型认为任务完成。
这个机制很强大,但也带来一个副作用:模型可能陷入死循环。OpenClaw 内部会给单次对话的工具调用次数设上限,我习惯设 8 次,超过就强制收尾。如果你发现模型来回调用同一个插件却不产出结果,多半是插件描述写得含混,或者返回给模型的数据缺少关键字段。这时优先改描述和返回格式,别急着调模型参数。
5. 从“能跑”到“好用”:调参和避坑手册
5.1 回答质量就藏在参数和提示词里
模型不是一装上就完美。我试过同一个模型在 temperature=0.7 时回答特别啰嗦,调低到 0.2 后明显简洁,但做头脑风暴时又显得死板。所以我的方案是分场景配参数:日常对话用一个配置文件,定时任务和数据处理用另一个配置文件,两个文件里写不同参数。OpenClaw 支持按插件指定模型参数,把“记备忘”的插件设成低温,把“闲聊”的默认会话设成中温,互不干扰。
调温度有个笨但有效的办法:固定一段测试文本,把同一个问题分别用 0.1、0.3、0.5、0.7、0.9 跑十遍,看重复率和稳定性。如果你发现回答内容经常重复同一句式,那就是温度太低;如果回答频繁跑题,那是温度偏高。注意,top_p 和 temperature 通常只调一个就够了,两个同时大改会让输出忽快忽慢,不好归因。
提示词是另一块被忽略的高杠杆点。OpenClaw 在发请求给模型时,会拼上一段系统提示词。我建议你在这段提示词里写清楚三件事:你是谁、你服务于谁、你的行为边界。比如“你是本地助手小爪,服务于使用这台设备的用户,除非调用插件,否则不主动捏造信息;涉及时间、金额、人名时如果不确定,要直接说明不确定。”这段短短的约束,比调半天参数更有用。
5.2 权限设计不能省:别让插件越权
插件越多,越要盯权限。我的原则是:插件默认没有网络权限,需要联网的技能单独声明;文件读写只允许发生在 data 目录;所有回调动作记录到日志。这不是故作严谨,而是有个血泪教训:我给助手加了一个网页摘要插件,不小心把本地文件路径写成了“可读任意位置”,结果它回答问题时把别的配置文件内容也摘出来了。幸好只出现在会话里,没有外发,但已经足够吓人。
另外,别把 OpenClaw 的入口直接暴露到公网。我见过有人为了方便手机访问,把 Web 接口映射到公网,没加任何认证,这就是在家里大门上挂了个锁不上的把手。如果需要远程使用,建议至少加一层反向代理和账号密码,或者干脆用内网穿透但带密钥登录取。安全这件事,没有“应该没事”的中间态。
5.3 常见问题速查表
把我实际踩过的、以及在社区里高频出现的坑整理成了一张表,方便你卡住时按图索骥。
| 现象 | 可能原因 | 处理步骤 |
|---|---|---|
| 启动后一直打不到模型 | 本地推理服务没启动,或模型没加载完 | 先访问接口地址确认服务状态,再查日志里模型加载是否耗时过长 |
| 模型回答极慢 | 模型尺寸太大 / CPU 推理无加速 | 换更小量化版模型,或接入局域网内更强大的推理节点 |
| 插件名称在列表里但不生效 | 插件加载失败,通常因为代码里有语法错误 | 看 logs/ 里插件加载日志,改完保存自动重载 |
| 模型频繁调用同一个插件 | 插件描述太宽泛,模型理解成“哪个任务都能用它” | 重写描述,限定触发场景和参数语义 |
| 记忆检索不到旧对话 | top_k 太小或向量索引没写入 |
确认第一次会话是否落库,调大 top_k,重建索引 |
| 一会儿还记得,过会儿全忘 | session_ttl 过短,新会话没有上下文 |
调大会话保持时间,检查长期记忆是否启用 |
| Web 入口访问慢 | 每次请求都重新初始化连接 | 检查推理服务连接池配置,避免每次新建会话 |
排查问题永远从日志开始。OpenClaw 的日志默认打在 logs/ 下,每次调用、每个工具返回、每次错误都有记录。我调试时习惯开一个窗口专注看日志,另一个窗口发指令,对照学习模型是怎么做判断的。这个过程浪费时间,但比瞎猜参数高效十倍。
6. 实战体会:什么值得做,什么不值得做
我把 OpenClaw 从零搭起来、又跑了几个月后,最深的感受是:助手的能力边界不是由框架决定的,而是由定位决定的。你想让它成为一个“什么都会一点的玩具箱”,它就会慢慢变成什么都干不好的负担;你想让它成为三个可靠习惯的延伸,它才会真的住进你的工作流。
对我来说,现在固定下来的技能只有四五个:定时提醒、网页正文摘要、本地笔记检索、会议纪要格式化,以及每天早上的日程简报。剩下的花哨技能我试过就撤,因为维护插件是有成本的,模型会记错描述、数据格式会变、依赖库会过期。一套长期稳定可用的系统,永远比功能清单长得好看的系统更值钱。
如果你也想动手,我的建议是分三天推进。第一天只跑通对话链路,别碰插件;第二天加两个最常用、最简单的插件,让它真正参与你的一项琐碎工作;第三天再想记忆和调参。每一步都确认“能跑、能看日志、能回滚”,再进入下一步。个人助手这事的乐趣,不在于一步到位,而在于你眼睁睁看着它从会接话,变成会办事。这种“亲手喂大一个靠谱同事”的成就感,用过的人才知道。
