过了个周末回来,发现好几个技术群里都在聊“OpenClaw人人养虾”。第一反应我以为是哪个智慧渔业项目——开个虾塘远程投料、水质监测那种。点进去才明白,这里的“虾”是Claw的谐音梗,OpenClaw是一个开源的自托管智能体运行框架,它会主动拆解任务、执行命令、读写文件、调用网页内容和各种外部工具。而标题里的“Claude Max API Proxy”,指的是把Claude Max这一档高性能模型的能力,以标准API接入点的方式统一交给OpenClaw调用的模型网关层。这套组合跑起来之后,你就像在云上养了一缸可以随时使唤的“电子虾”,每天喂任务、看日志、调权限,时间长了它甚至越来越懂你的工作习惯。
这篇文章我会结合自己从零开始搭建、配置、调优的完整过程,把这套“养虾”体系讲清楚:OpenClaw到底解决什么问题、为什么需要API Proxy这一层、怎么部署、怎么正确接入Claude Max、多模型路由怎么配、长期记忆和技能包怎么养成,以及真正跑起来之后会遇到哪些坑。不管你是刚听说OpenClaw的小白,还是已经在别的Agent框架里折腾过的老手,这篇都可以当一份参考手册来用。
1 “人人养虾”到底在养什么:OpenClaw、Max算力与API Proxy的三角关系
1.1 这个梗是怎么火的
我第一次看到“人人养虾”这个词,是在某个开源社区转载的标题里。配图就是一只拟人化的机械虾,背后的概念很简单:把过去只属于少数技术玩家的Agent能力,做成了普通人也能托管、也能每天操作的个人助理。
社区里管OpenClaw叫“虾”,是因为这个词读起来像一只张牙舞爪的爪子,又带点自来水养殖的烟火气。养虾这个比喻确实挺传神:你给Agent一个工作目录,它在这个目录里接任务、跑命令、存笔记。你给它换了更好的模型接口,它就变得更聪明,就像换了更优质的饲料。你自己负责投喂、清理、观察状态,慢慢摸清它的脾气和边界。
“人人”这两个字是重点。过去我玩Agent,印象最深的是什么东西都要自己写、自己调,接口不通、工具链不兼容、上下文一长就乱。OpenClaw把这类组件尽量做了收敛,让一台普通云服务器就能撑起一个属于自己的“虾池”,不用依赖某个SaaS平台,数据也好、历史记录也好,都在自己的目录里。
1.2 OpenClaw在这套系统里到底承担什么
如果只把OpenClaw理解成“另一个聊天机器人外壳”,那就太小看它了。它更像一个在服务器上常驻的任务执行体,或者说是一个有执行权限的“数字员工”。
我自己的理解里,OpenClaw的核心是几件事的合体:任务调度、工具调用、权限审批、记忆存储。平时你可以通过命令行、Web面板或者IM机器人给它下达一个自然语言目标,比如“帮我查一下这周服务器所有失败的任务日志,找到共同点,给出修复建议”。OpenClaw不会只回答你一段分析,它会真的去读日志、跑命令、调用工具,然后把过程和结果整理出来。
这个能力边界非常关键。使用OpenClaw相当于你在给一个AI开放了本机工作区的部分控制权,它可以执行shell命令、读写文件、访问网络。如果审批机制没有做好,它就像一个不太熟悉规矩但能力很强的实习生,什么活都敢接,但也可能因为命令范围太大而失控。所以我在后面会专门讲exec-approvals.json和权限规则,这是养虾之前必须先围好的栅栏。
1.3 为什么还需要一个API Proxy层
先说清楚概念,避免误会:这里的API Proxy是模型网关/请求转发层的意思,属于API架构里的常规做法,并不涉及任何网络上额外的“穿透”或“加速”功能。
为什么不直接在OpenClaw配置里写一个模型API地址?因为实际使用中,模型接入往往没有这么简单。Claude Max作为一个更高规格的模型档位,它的模型标识、上下文长度、调用频次都和我之前在普通模型上习惯的配置不一样。项目多了以后,你可能还会有多个服务商、多把API Key、多个模型标识要管理。如果每个配置文件里都散落着不同的密钥和地址,后面排查问题会非常痛苦。
API Proxy层解决的就是入口统一。它上面挂着真实的模型服务商连接,对外只暴露一个或少数几个Base URL。OpenClaw只跟这个Proxy通信,Proxy再把请求按规则转发到对应的模型服务。这样密钥可以集中管理、调用日志可以统一记录、模型路由可以在Proxy层切换,上层Agent配置不需要频繁改。我实际跑下来,最大的感受是:模型出问题的时候,你在Proxy日志里扫一眼就能定位,比去Agent日志里挖半天要高效得多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2 从一台空服务器到OpenClaw跑起来:安装路径与权限策略
2.1 部署方式选型:Docker、源码还是便携包
第一次上手OpenClaw,建议先明确使用场景,再选部署方式。我列一张实际对比表,方便直接判断:
| 部署方式 | 适合场景 | 维护成本 | 我最担心的一点 |
|---|---|---|---|
| Docker容器 | 长期稳定运行、云服务器托管 | 低 | 忘了挂载.openclaw目录,升级就丢配置 |
| 源码/包管理器运行 | 想改内部逻辑、二次开发 | 较高 | 依赖环境冲突,模型连接库版本需固定 |
| Windows便携包 | 本地体验、快速验证 | 中 | 和Linux环境下部分命令行为不一致 |
我自己最后选的是Docker。原因不复杂:OpenClaw这种常驻Agent,最需要的是进程管理和环境一致性。Docker可以让它跟宿主机隔离,不会因为服务器上其他Python服务把依赖搞乱,也不会因为一个误操作把系统组件弄坏。
如果你是第一次部署,优先用官方推荐的Docker镜像。安装完成之后,先别急着创建Agent,先确认数据目录已经挂载好。无论用哪种方式,OpenClaw运行时的核心状态基本都集中在~/.openclaw,有什么问题先备份这个目录,基本不会错。
2.2 初始化之后,先看懂目录里有什么
第一次启动完成后,可以进到~/.openclaw里看看生成的结构。正常工作区会包含配置文件、workspace工作目录、审批记录文件、以及后续会逐步长出来的记忆和技能目录。
下面是我服务器上的一个典型结构:
bash复制~/.openclaw/
├── config.yaml
├── workspace/
├── skills/
├── logs/
└── exec-approvals.json
很多新手会把所有注意力放在config.yaml上,这没错,但请一定分点注意力给workspace和exec-approvals.json。workspace是Agent干活的活动范围,它读文件、写笔记、运行项目脚本,默认都发生在这一亩三分地里。exec-approvals.json则记录了Agent执行命令的审批策略。
刚安装完时,我先用一句话任务做冒烟测试,比如“请查看当前工作目录,并列出所有文件名”。这个操作会触发执行权限确认,也是在测试审批链路是否正常。如果连这样的基础操作都无法确认,那后续千万不要急着给它配置IM入口和自动化任务。
2.3 看到“legacy exec approvals exist”千万别慌
网上一搜OpenClaw的报错,很多人卡在启动时提示legacy exec approvals exist at /root/.openclaw/exec-approvals.json。这个提示我第一次看到也懵了,以为哪里配置坏了。
实际上这条信息的意思是:当前.openclaw目录里已经有一份旧版本的命令审批记录文件,当前版本的OpenClaw检测到了它,会继续沿用。这不是错误,更像是一次兼容性提醒。出现的原因通常是你之前用过旧版本,或者安装包在初始化时往目录里写了一份默认模板。它不会影响启动,也不代表有安全风险。
如果确实想清理旧的审批策略,重新开始一轮“从零授权”,操作也不复杂:
bash复制# 先备份
cp ~/.openclaw/exec-approvals.json ~/.openclaw/exec-approvals.json.bak
# 删除后重启OpenClaw
rm ~/.openclaw/exec-approvals.json
重启后OpenClaw会生成一份新的审批文件,你之前手工批准过的每一条命令都将重新询问。我自己实验过一次:以前有一条规则允许Agent对指定目录执行curl下载,后来觉得太宽,就删除了记录,让Agent再碰到类似任务时先停下来请示我。记住一点:审批文件不是摆设,它是你跟Agent之间最重要的安全边界。
3 Claude Max接入细节:模型名、上下文路由和“unknown model”这类报错的真实原因
3.1 先看一眼配置文件的骨架
OpenClaw的模型配置不像传统软件那样只要填一个API Key就行。它里面有一个很重要的概念叫Provider,也就是模型供应商。每个Provider有自己的Base URL、API Key和可供选择的模型列表。Claude Max接入,本质就是新增一个Provider,并把它设成默认。
我当前简化后的配置结构大概是这样的:
yaml复制agent:
default_provider: max_gateway
default_model: claude-max
temperature: 0.2
providers:
max_gateway:
type: openai_compatible
base_url: ${MAX_GATEWAY_BASE_URL}
api_key: ${MAX_GATEWAY_API_KEY}
models:
- name: claude-max
max_context: 200000
- name: claude-sonnet-latest
max_context: 100000
这里的关键是base_url,它指向你自己搭建的模型网关地址。你可以在网关层配置Claude Max平台侧的接入信息,并完成模型名映射。OpenClaw本身不需要知道上游有哪些复杂的细节,它只需要知道“我该找谁、用什么密钥、允许调用哪些模型”。
有一些社区教程会把OpenClaw的模型配置简化成一句话“把model改成claude-max就好”,这是害人的。实际上你改了模型名,但当前Provider并不认识这个模型,报错马上就会来。
3.2 Claude Max的路由技巧
一旦OpenClaw能正常调用Claude Max模型,建议在网关层做两个策略:一个是按任务性质分配,另一个是按上下文长度分配。
日常的对话、任务拆分、简单文本处理,不需要每次都用Claude Max。这类请求可以路由到更轻的模型上,响应速度和成本都更好。而遇到长文档分析、复杂多步规划、代码重构这类“硬骨头”,再把请求路由到Claude Max。
我见过有人配置的是把OpenClaw的所有请求都默认扔给Claude Max,结果开了一个自动巡检任务,每个小时把一个几百行的日志文件丢进去做一次总结,费用曲线直接起飞。正确做法是在Proxy层做规则:关键Agent任务用Max,批量轻量任务用普通模型。这样既享受了高性能模型的质量,也不至于因为一个低价值定时任务把预算烧光。
3.3 “unknown model: deepseek”到底哪里错了
网上关于OpenClaw报错里,出现频率很高的一条是:agent failed before reply: unknown model: deepseek。很多人不知道为什么明明配置了DeepSeek,OpenClaw却说不知道这个模型。
我第一次遇到类似报错时,第一反应是去翻Agent日志,结果日志只显示它尝试创建一个模型实例失败。根本原因往往出在三个地方:
| 现象 | 常见原因 | 处理方式 |
|---|---|---|
| unknown model: deepseek | Provider模型列表里没加这个模型,或类型写错 | 检查providers配置里的models列表,确认模型名和网关一致 |
| Auth失败/401 | API Key环境变量没加载或写错 | 确认.env文件或系统环境变量正在生效 |
| 连接超时/502 | Base URL配置到错误服务或未放行 | 先用curl单独测一下当前模型的API连通性 |
排查unknown model问题,不要一上来改配置。先确定“模型到底是谁提供的”:如果DeepSeek是走一个OpenAI兼容网关接入的,那Provider类型要用openai_compatible,并在base_url对应的服务里确认该模型已启用。如果OpenClaw根本不走这个网关,而你又把模型写成了deepseek,它当然不认识。
更直接的方法是用命令行手工请求一次模型服务,确认模型名和接口都正常之后,再回OpenClaw配置里查模型标识是否完全一致。很多时候就是大小写、下划线、后缀差一点,导致“查无此模型”。
3.4 用模型网关集中管理密钥与日志
我不会把所有密钥都塞进OpenClaw的配置文件,原因很现实:Agent经常要读自己的配置,万一它读配置后不小心把密钥写进某份任务日志,就泄露了。我在前面加一层模型网关后,OpenClaw只认网关分发的这把API Key,即使泄露了,也可以在网关上立即吊销,不需要重新申请上游真实密钥。
网关同时还能做请求日志。这个价值在调试时极其明显:某个任务“模型没反应”,你去看Agent端的日志,只能看到“等待模型返回”然后超时。但去网关日志里,你立刻能看到请求是几秒钟发出去、发了多少token、返回了什么错误代码。养虾不能只看虾池表面,要学会看进水管道的水压和流量。
4 多模型编排:Max当壮劳力,DeepSeek/NIM当流水线工人的配置思路
4.1 把任务按成本分级才是正确玩法
OpenClaw这类Agent有一个特点:同一个任务拆解过程中,不同步骤的难度和对模型能力的要求完全不同。比如让Agent做一个“研究某开源项目并写周报”的任务,它需要搜网页、读README、看issue、总结。这中间真正需要顶级模型推理的地方,可能就是最后整合和周报结构设计那一两个步骤。
如果所有步骤都走Claude Max,质量是稳了,但成本不划算。我更倾向于在网关层做路由:默认用小而快的模型处理检索和初筛,遇到复杂推理再升级到Claude Max。这里需要澄清一点:“小模型做初筛”不等于“最终质量差”,因为真正决定产出的往往是你如何组织任务链路,而不只是每步用了什么模型。
4.2 本地模型怎么接进来
有朋友在热词里提到OpenClaw配置NVIDIA NIM,这其实就是把OpenClaw从“只依赖云端模型”扩展成“本地模型也能用”的路径。NIM提供的是OpenAI兼容接口,意味着OpenClaw端只需要把它配置成一个新的openai_compatible Provider,再指定模型名和本地端点地址。
我给一个通用思路:
yaml复制providers:
local_nim:
type: openai_compatible
base_url: http://127.0.0.1:8000/v1
api_key: local-dev-key
models:
- name: nemotron
max_context: 32000
接入本地模型的优势有两个:一是内部数据不出服务器,适合处理比较敏感的文档;二是在网络不稳定或云端API限流时,本地模型可以当备份角色。我实测下来,本地模型做文本分类、关键词提取这些机械工作很稳定,但让它做复杂规划还是不如云端大模型。
真正的多模型编排,不是把所有模型堆在OpenClaw里让它随机选,而是你作为“养虾人”,先想清楚每条流水线负责什么。
4.3 失败时自动降级的兜底方案
模型服务没有100%可用这一说。我遇到过两次网关侧维护,导致OpenClaw任务失败的情况。第一次我还在手工重跑,后来我按官方文档思路给Provider配了fallback逻辑。
思路很简单:当Max路由的请求失败,自动降级到备用的同类型模型。这个配置保证了Agent不会因为某一次模型接口超时,就中断整个任务流程。写tasks脚本时也一样:让OpenClaw做有外部依赖的任务,一定要在提示词里写清楚“如果第一步失败,重试一次;如果仍然失败,返回错误摘要,不要伪造结果”。多模型编排和备用策略叠加起来,整个Agent的稳定性会明显上一个台阶。
5 把Agent放进真实工作流:微信入口、长期记忆与技能包
5.1 IM入口怎么接才稳妥
很多人看到OpenClaw第一反应就是:能不能直接接到微信里,让它变成我的24小时助理。这个需求很真实,但我必须把话撂在前面:个人微信并没有向第三方Agent开放正式自动化接口,网上一堆“接入微信”的方案,基本都依赖非官方客户端协议,本质上是在模拟人工操作,这会有账号风控和封号风险。
我不建议把工作号或个人常用号拿来做这种实验。如果只是想要“随时随地给Agent下达任务”的体验,优先考虑有官方机器人接口的办公IM,比如企业微信群机器人。你拉一个只有自己在的群,把Webhook地址配给OpenClaw,之后直接在群里给Agent发指令、收通知,体验非常接近“给自己养一只远程虾”。
我看到不少OpenClaw交流群里,有人晒出通过个人号串起来的一整套自动化流程,看起来很酷,但他们不会告诉你,这种方案随时可能因为官方策略变动而失效,甚至牵连账号安全。养虾图的是长期稳定,不是赌一个没法持续的外挂方案。
5.2 Active Memory不是聊天记录,是主动回写的工作记忆
用OpenClaw一段时间后,你会发现一个核心瓶颈:模型本身没有记忆,它每次对话都是全新的。OpenClaw解决这个问题的思路是Active Memory,也就是在工作区里维护一份可检索、可回写的长期记忆。
你可以把它理解为给Agent准备了一个工作笔记:每次任务开始前,它会先翻看笔记,快速恢复“我是谁、正在做什么、上次做到哪一步”。任务结束后,再把值得记住的结论、偏好、项目状态回写到笔记里。它不是简单把聊天记录堆在一个地方,而是每一轮都做筛选性提炼。
我在workspace下建了一个memory目录,里面按内容分了几个文件:
- identity.md:记录Agent在团队里的岗位定位、风格偏好;
- project_status.md:记录每个长期任务的最新状态和下一步待办;
- lessons_learned.md:记录踩过的坑,避免同一类错误反复犯。
每次跟Agent说“这个环境变量不要再改”这类带有长期效力的指令时,我会追加一句“请把这个约定更新到你的长期记忆里”。多轮下来,它的行为模式会越来越贴合我的习惯。
5.3 Skills技能包:把职责写成清单
如果你让Agent每次接任务都靠“临场发挥”,结果会很不稳定。它可能今天表现得像个有经验的人,明天就忘了改错总结的规范。OpenClaw的Skills机制就是为了解决这个问题。
一个技能包,本质上是一个标准操作流程文档。我会在技能里写清楚:这个技能什么时候触发、需要调用什么工具、执行步骤是什么、常见问题怎么处理。当Agent遇到匹配的任务时,它会先读取这段流程,然后照着执行。
我举一个实战例子:我给它写了一个“巡检服务器日志”技能。触发条件是用户提到“日志巡检”“检查失败任务”等关键词。执行步骤是:先读取日志目录下最近24小时的文件,按ERROR级别过滤,统计出现频率最高的前十个错误,再逐个查询错误码含义,最后输出一份包含影响范围和建议修复动作的简报表。
有了这个技能包,我不需要每天重复告诉它怎么巡检,只需要说一句“跑一遍巡检”,剩下的事情它会按文档来。技能包最大的价值,是把你平时积累的隐性经验固化成Agent可调用的流程资产。
6 运营一周后沉淀下来的配置与避坑清单
6.1 权限开太大或太小,都会让主人头疼
先说权限开太大的反面案例。我刚开始把OpenClaw的exec审批设得比较宽松,觉得它能自动做事挺好的。后来它有一次在整理临时文件时,试图执行一条删除整个临时目录下所有文件的命令。那一刻我才意识到,如果审批策略太宽,一个无心操作就可能造成损失。
后来我把审批策略改为白名单式管理:只允许Agent自动执行明确安全的命令,比如ls、cat、grep这类只读操作;涉及写文件、安装依赖、删除文件、下载内容,一律先请求确认。虽然运行起来会多一些“门槛”,但每一次人工确认都在帮Agent校准行为边界。
审批粒度也不能弄得太细,否则Agent每一步操作都要弹窗问一句,你会被烦到不想碰。我建议把审批规则按场景分类,固定一组常用命令使用allow,涉及更新和删除的统一使用ask,这大致是一个比较平衡的状态。
6.2 别把家目录和容器卷弄丢
这是我踩得最痛的一个坑。有次我升级OpenClaw容器版本,操作时忘记挂载~/.openclaw目录,启动后发现一切配置都是默认状态。Agent不记得任何授权记录,之前调好的技能包也不见了。那一刻我真实体会到了“虾塘断电”的感觉。
正确做法是在启动Docker容器时,把.openclaw整个目录作为持久化卷挂载进去。不同系统下路径写法有差异,但思路一致:所有需要长期保留的状态都放到这个目录里。升级之前,我会先备份一下关键文件,尤其是config.yaml和exec-approvals.json,确保万一出问题还能手动恢复。
以后无论怎么清理容器、重装镜像,只要.openclaw目录还在,Agent的身份、记忆、授权都还在。目录就是这缸虾的“水”,水在,虾就不会死。
6.3 系统性自检清单
我连续跑了一周之后,整理了一份自检清单,每次调整完配置或升级完版本都会过一遍:
| 检查项 | 检查方法 | 我设定的基准 |
|---|---|---|
| 配置文件能否正确解析 | 启动时有无YAML报错 | 无任何waring级错误 |
| 模型网关连通性 | curl一次模型列表接口 | 2秒内返回200 |
| 执行审批策略是否仍符合预期 | 查看exec-approvals.json规则数量 | 允许类规则控制在15条内 |
| 长期记忆是否有明显膨胀 | 看memory目录各文件大小 | 每个文件保持在30KB以下,过大就手工精简 |
| 技能包是否会影响通用任务 | 故意用一句无关聊天测试 | Agent不应主动触发某个特定技能 |
| 日志是否在正常写入 | 看logs目录最近修改时间 | 每天都有新日志生成 |
这里最容易被忽略的是长期记忆膨胀。Active Memory的价值在于精炼,如果Agent每个任务结束都把大段原文写进记忆文件,时间长了文件会变得又臭又长。我自己的办法是不定期和Agent做一次“记忆整理”对话,让它把过时结论合并、删除重复内容,保持记忆文件的精炼。
6.4 关于“人人养虾”我的最终体会
跑了两周下来,我觉得“养虾”这个说法最贴切的地方在于:这套系统不是买了就能立刻自动产出价值的东西。OpenClaw刚跑起来的那几天,就像一只刚从虾苗场运回来的虾,适应能力还不强。
我自己最大的体会是,不要一上来就追求复杂。先挑一个频率不高但有真实价值的任务,比如每天夜里自动整理一篇技术动态摘要。让它稳定运行一周,观察它的行为模式、触发记录、模型调用情况,再逐步加技能、加IM入口。虾是要一天天喂大的,Agent也是在一次次小任务里积累经验的。
如果你正准备开始养自己的第一只电子虾,我的建议是:先确保目录挂载、再讨论模型路由,把权限边界划清楚之后,再给它开放更多能力。这套顺序反过来,往往会让你在第一周就体验到“虾跑了”。希望这篇笔记能帮你少走几步弯路,养出一只真正顺手又稳定的OpenClaw。
