多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

OpenClaw 接入 EvoMap 教程:用 curl 与 cron 让 AI Agent 自动进化

OpenClaw 接入 EvoMap 教程:用 curl 与 cron 让 AI Agent 自动进化 1. 为什么我要给 OpenClaw 挂上 EvoMapOpenClaw 是一个能跑在本地、通过配置文件驱动的 AI Agent 运行时你可以把它理解成一个「会自己读技能文档、自己调工具」的自动化助手。EvoMap 则是一个 AI Agent 进化资产市场核心概念是 Capsule——把某个 Agent 解决过的问题、用过的提示词、调通的工具链打包成可复用的资产其他 Agent 可以拉取、学习、再发布。把两者接起来OpenClaw 就能定时去 EvoMap 拉取新的 Capsule、上报自己的运行状态、发布自己沉淀下来的解决方案形成「自我进化」的闭环。适合谁看已经在用 OpenClaw 跑定时任务、想让 Agent 不只是重复执行而是持续吸收新能力的开发者或者你手上有几台常驻机器想让它们协作共享解决思路。这篇教程聚焦落地路径给出 config.toml 骨架、curl 调用 EvoMap 的可复制命令、cron 定时配置以及怎么验证进化结果真的生效。整个过程不需要你改 OpenClaw 源码靠配置和外部定时器就能跑起来。我试过把这套流程跑在一台 2C4G 的常驻小机器上OpenClaw 负责执行cron 负责触发EvoMap 负责资产交换三者解耦出问题好定位。下面按顺序来。2. 前置准备OpenClaw 与 EvoMap 的账号和 Key 怎么拿在写配置之前先把两边的「身份」准备好。OpenClaw 这边你需要一个能用的模型接入点EvoMap 这边你需要一个节点身份。很多人卡在第一步不是因为难而是因为不知道要准备哪些东西。先说模型接入。OpenClaw 的 Agent 要能思考、要能读 skill.md 并理解里面的指令所以背后必须有一个稳定的模型 API。我用的方式是走 TaoToken 的 API 网关它兼容 OpenAI 风格的接口OpenClaw 的 config.toml 里直接填 Base URL 和 Key 就行。你可以先到 TaoToken 的 API Keys 页面 生成一个 Key记下来后面配置要用。模型 ID 建议选一个上下文够长的因为 skill.md 和 Capsule 内容可能比较长短上下文模型容易截断。再说 EvoMap。EvoMap 的接入入口是一个 skill.md 文档OpenClaw 读了这个文档就知道该怎么和 EvoMap 交互。获取方式很简单curl -s https://evomap.ai/skill.md这条命令会把 EvoMap 的技能说明拉下来。你可以先手动跑一遍看看内容确认网络能通、返回的是 Markdown 而不是错误页。如果返回 403 或者超时先检查本机 DNS 和出网策略别急着往下走。EvoMap 的节点认领需要注册注册可能需要邀请码。如果你暂时没有邀请码不影响你先把 OpenClaw 侧的配置和定时任务搭好等拿到码再认领节点即可。认领之后你会得到 Node ID、Claim Code 和 Credits这些是后续心跳和发布 Capsule 的凭证。这里有个容易忽略的点OpenClaw 和 EvoMap 的交互是 HTTP 请求不是长连接。所以你的机器只要能出网、能解析域名就行不需要开放入站端口。对于常驻在 NAT 后面的开发机很友好。把这两样准备好我们就可以进入配置文件环节了。记住三个东西TaoToken 的 API Key、EvoMap 的 skill.md 地址、以及你打算让 Agent 多久跑一次进化任务。3. 可复制配置config.toml 骨架与 curl 调用命令这一节是核心给你可以直接抄的配置。OpenClaw 的配置文件通常叫 config.toml放在项目根目录或者 ~/.openclaw/ 下。下面是一个最小可用的骨架包含模型接入、EvoMap 技能加载、以及一个进化任务的定义。# config.toml - OpenClaw 接入 EvoMap 骨架 [model] provider openai-compatible base_url https://taotoken.net/api api_key sk-你的TaoToken密钥 model_id gpt-4o-mini # 按你实际可用的模型 ID 填 max_tokens 4096 temperature 0.3 [agent] name openclaw-evolver workspace ./workspace log_level info [[skills]] name evomap source https://evomap.ai/skill.md refresh_interval 6h # 每 6 小时重新拉取技能文档 [[tasks]] name evomap-heartbeat type http method POST url https://evomap.ai/a2a/hello headers { Content-Type application/json } body { node_id: 你的NodeID, claim_code: 你的ClaimCode, agent: openclaw-evolver, version: 1.0.0 } schedule */10 * * * * # 每 10 分钟一次和 cron 二选一 [[tasks]] name evomap-pull-capsules type shell command curl -s -X GET https://evomap.ai/a2a/capsules?limit5 -H Authorization: Bearer 你的EvoMapToken schedule 0 */2 * * * # 每 2 小时拉一次新 Capsule注意几个细节。base_url 我填的是https://taotoken.net/api这是不带 UTM 的 API 地址配置里不要加查询参数否则某些客户端会解析异常。api_key 换成你在控制台生成的那串。model_id 要和你账号下实际可用的模型一致填错会报 404 或者 model not found。skill 的 source 直接指向 EvoMap 的 skill.mdOpenClaw 会按 refresh_interval 定期重新拉取这样 EvoMap 更新了技能说明你这边能自动跟上不用手动改配置。如果你不想用 OpenClaw 内置的 schedule想用系统 cron 来触发那就把 tasks 里的 schedule 去掉改用下面的 cron 配置。两种方式选一种别同时开否则会重复触发。# 编辑当前用户的 crontab crontab -e # 每 10 分钟发一次心跳 */10 * * * * /usr/bin/curl -s -X POST https://evomap.ai/a2a/hello \ -H Content-Type: application/json \ -d {node_id:你的NodeID,claim_code:你的ClaimCode,agent:openclaw-evolver} \ /var/log/evomap-heartbeat.log 21 # 每 2 小时拉取一次新 Capsule 并交给 OpenClaw 处理 0 */2 * * * cd /opt/openclaw /usr/bin/openclaw run --task evomap-pull-capsules /var/log/evomap-pull.log 21cron 里的路径一定要写绝对路径因为 cron 的环境变量和你登录 shell 不一样openclaw这个命令很可能找不到。用which openclaw查一下真实路径再填。日志重定向也别省出问题的时候全靠它。发布 Capsule 的命令也给你一条等 Agent 沉淀出解决方案后调用curl -X POST https://evomap.ai/a2a/publish \ -H Content-Type: application/json \ -H Authorization: Bearer 你的EvoMapToken \ -d { node_id: 你的NodeID, title: 解决 OpenClaw 定时任务重复触发, content: 在 config.toml 中移除 schedule 字段统一由系统 cron 触发。, tags: [openclaw, cron, scheduling] }这套配置跑起来后OpenClaw 就有了「定时问好、定时学习、按需发布」的能力。接下来验证它是不是真的在工作。4. 验证请求怎么确认 Agent 进化结果真的生效配置写完不代表生效必须验证。验证分三层心跳通不通、Capsule 拉没拉到、Agent 行为有没有变化。第一层手动跑一次心跳看返回。别等 cron直接命令行执行curl -s -X POST https://evomap.ai/a2a/hello \ -H Content-Type: application/json \ -d {node_id:你的NodeID,claim_code:你的ClaimCode,agent:openclaw-evolver} | jq .如果返回里有status: ok、credits字段说明节点身份有效、心跳正常。如果返回 401说明 Node ID 或 Claim Code 不对回去核对。如果返回 404多半是 URL 写错了注意是/a2a/hello不是/hello。第二层验证 Capsule 拉取。手动执行拉取命令把结果存文件curl -s -X GET https://evomap.ai/a2a/capsules?limit5 \ -H Authorization: Bearer 你的EvoMapToken -o /tmp/capsules.json cat /tmp/capsules.json | jq .[].title能看到标题列表说明鉴权和接口都通。如果返回空数组可能是当前没有新 Capsule换个时间再试或者把 limit 调大。第三层也是最关键的验证 Agent 行为变化。OpenClaw 拉取 Capsule 后应该把它写入 workspace 的记忆或技能目录。你去 workspace 下看有没有新增文件ls -lt ./workspace/skills/ | head ls -lt ./workspace/memory/ | head如果看到带时间戳的新文件内容和你拉取的 Capsule 对应说明进化链路是通的。更进一步你可以给 OpenClaw 发一个之前它不会的任务看它这次能不能借助新 Capsule 完成。比如之前它不知道怎么处理某个报错现在 Capsule 里有对应方案它应该能给出正确步骤。还有一个观察点日志。OpenClaw 的日志里应该出现 skill 刷新、task 执行、capsule 加载的记录。用tail -f盯着看tail -f /var/log/evomap-pull.log tail -f ./workspace/logs/openclaw.log看到loaded capsule、skill refreshed这类字样基本就稳了。验证通过后你可以把 cron 间隔调成你想要的节奏比如心跳 10 分钟、拉取 2 小时、发布按需。5. 常见报错排查401、local proxy failed、reading choices 怎么解跑这套流程报错基本集中在几个地方。我把踩过的坑列出来你对照着查。401 Unauthorized。出现在心跳或发布 Capsule 时。原因通常是 Node ID、Claim Code 或 EvoMap Token 三者之一不对。注意 Claim Code 是认领节点时生成的一次性码认领完成后有些接口用的是 Node ID 而不是 Claim Code别混用。另外检查请求头里Authorization: Bearer后面有没有多余空格。local proxy failed。这个报错通常出现在 OpenClaw 调用模型 API 时说明它连不上 base_url。先确认https://taotoken.net/api在你的机器上能通curl -s -o /dev/null -w %{http_code} https://taotoken.net/api返回 200 或 401 都说明网络通返回 000 就是网络问题。如果网络通还报这个错检查 config.toml 里 base_url 有没有被写成带路径的形式比如/api/v1有些客户端会自己拼路径重复了就会失败。另外确认没有在环境变量里设置冲突的代理配置。reading choices 相关报错。典型的是cannot read property choices of undefined或者reading choices。这说明模型返回的 JSON 结构和你预期的不一样通常是 API 返回了错误对象而不是正常的 completion 结构。先看原始返回curl -s -X POST https://taotoken.net/api/chat/completions \ -H Authorization: Bearer 你的Key \ -H Content-Type: application/json \ -d {model:gpt-4o-mini,messages:[{role:user,content:hi}]} | jq .如果这里返回的是{error: ...}那就是 Key 或模型 ID 的问题。如果返回正常有choices数组那问题在 OpenClaw 的解析层检查 config.toml 里 model_id 是否和实际调用的一致。OAuth 相关报错。如果你用的是需要 OAuth 的模型服务可能会遇到 token 过期。OpenClaw 的 config.toml 里如果配的是 OAuth 模式需要确保刷新逻辑正常。简单起见用 API Key 模式可以绕开这类问题。cron 不执行。先看 cron 日志grep CRON /var/log/syslog | tail如果 cron 根本没触发检查 crontab 语法、用户权限、以及 cron 服务是否在跑。如果触发了但命令失败多半是环境变量问题把命令里的openclaw换成绝对路径PATH 也显式设置。Capsule 拉取成功但 Agent 没变化。检查 workspace 路径是否和 config.toml 里一致以及 OpenClaw 是否有权限写入。另外确认 skill 的 refresh_interval 没设得太长导致它还没重新加载。对照这几类报错基本能覆盖 90% 的问题。排查时记住一个原则先手动 curl 验证接口再验证 OpenClaw 配置最后验证 cron。分层定位别一上来就怀疑最复杂的部分。6. 长期跑下去把进化任务做成稳定的 Coding Plan单次跑通不难难的是让它稳定跑几周几个月。这里有几个实践建议。第一把 OpenClaw 的进化任务和你的日常编码工作流分开。进化任务负责拉取、学习、发布日常编码任务负责具体产出。两者用不同的 task 名和日志文件互不干扰。如果你需要长期稳定的模型调用额度来支撑这种持续运行可以考虑 TaoToken 的 Coding Plan它更适合这种常驻型、按周期调用的场景。第二给 cron 任务加锁防止上一次没跑完下一次又启动。用flock很简单*/10 * * * * /usr/bin/flock -n /tmp/evomap-heartbeat.lock /usr/bin/curl -s -X POST https://evomap.ai/a2a/hello -H Content-Type: application/json -d /opt/openclaw/heartbeat.json /var/log/evomap-heartbeat.log 21把请求体放到单独文件里cron 行更干净也方便改。第三定期清理日志和 workspace 里的旧 Capsule避免磁盘被撑满。可以再加一条 cron0 3 * * 0 find /var/log -name evomap-*.log -mtime 30 -delete 0 3 * * 0 find /opt/openclaw/workspace/skills -type f -mtime 60 -delete第四监控。最简单的监控是每天检查一次心跳日志的最后一行时间戳超过 30 分钟没更新就告警。你可以写个几行的 shell 脚本挂到 cron 上也可以用现成的监控工具。第五关于模型选择。进化任务对模型的要求是「能读懂 Markdown、能按格式输出 JSON」不需要最强的推理模型选一个性价比高的就够。但上下文长度要够因为 skill.md 加 Capsule 内容可能几千 token。如果你发现 Agent 经常截断或漏读换一个上下文更长的模型 ID。最后说个心态问题。AI Agent 的「自我进化」不是一夜之间变聪明而是通过持续拉取 Capsule、积累记忆、逐步调整行为。你跑一周可能只看到它多会了几个小技巧跑一个月才会发现它处理某类问题的成功率明显上升。所以这套东西的价值在于长期运行而不是单次效果。把 cron 配稳、日志留好、定期看一眼剩下的交给时间。如果你在配置过程中想先验证模型调用是否正常可以到 TaoToken 的模型对话页面 手动发一条消息试试确认 Key 和模型 ID 没问题再写进 config.toml。接入细节和参数说明可以参考 TaoToken 接入文档里面有各语言客户端的示例。
返回列表