Files
knowledge-base/4 - Resources/OpenClaw/OpenClaw Agent 创建指南.md
Yaojia Wang 01e93719fb Sync
2026-03-23 09:18:51 +01:00

240 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
created: "2026-03-22"
updated: "2026-03-22"
type: resource
tags: [resource, openclaw, ai-agent, discord, howto, homelab]
source: "实际创建 xhs-creator agent 的过程总结 + skill review 后改进"
---
# OpenClaw Agent 创建指南
## 概述
基于创建小红书 agent (xhs-creator) 的实际经验,总结 OpenClaw agent 创建的完整流程。Claude Code 有对应的自动化 skill (`openclaw-create-agent`),说"创建一个 xxx agent"即可触发。
## 前置准备
### 1. 创建 Discord Bot
1. 访问 [Discord Developer Portal](https://discord.com/developers/applications)
2. New Application > 命名 > Create
3. Bot 页面 > Reset Token > 复制 token
4. 开启 **Message Content Intent**Privileged Gateway Intents 下)
5. 生成邀请链接OAuth2 > URL Generator > 勾选 `bot` > 权限选择 Send Messages, Read Message History, Add Reactions
6. 用链接把 bot 邀请到目标 Discord 服务器
### 2. 获取 Discord ID
需要开启开发者模式(用户设置 > 高级 > 开发者模式):
| 信息 | 获取方式 |
|------|---------|
| Guild ID | 右键服务器图标 > 复制服务器 ID |
| Channel ID | 右键文字频道 > 复制频道 ID |
| Bot User ID | Base64 解码 token 第一段(`.` 之前)|
| Owner User ID | `964122056163721286`(固定值) |
Bot User ID 解码方法:
```bash
echo "TOKEN第一段" | base64 -d
# 例如: echo "MTQ4NTMwNTQyOTcxMzA5NjkzNw" | base64 -d
# 输出: 1485305429713096937
```
## 创建步骤
### Step 1: Pre-flight 检查
验证 agent ID 是否已被占用:
```bash
ssh yiukai@192.168.68.108 'node -e "
const cfg = JSON.parse(require(\"fs\").readFileSync(\"/home/yiukai/.openclaw/openclaw.json\", \"utf8\"));
const exists = cfg.agents.list.some(a => a.id === \"AGENT_ID\");
console.log(exists ? \"CONFLICT\" : \"OK\");
"'
```
### Step 2: 创建目录
```bash
ssh yiukai@192.168.68.108 "mkdir -p ~/.openclaw/workspace-{agent-id} ~/.openclaw/agents/{agent-id}/agent"
```
### Step 3: 编写 Bootstrap 文件
**重要**: 所有 .md 文件放在 **workspace** 目录(`~/.openclaw/workspace-{agent-id}/`**不是** agentDir。agentDir 只放 JSON 配置文件auth-profiles.json, models.json由系统自动管理。
**AGENTS.md** -- 操作指令、能力定义、工作流程。必须包含:
1. 身份声明 -- 一句话说明 agent 是谁、专注什么
2. 核心能力 -- 3-5 个编号章节,具体描述
3. 工作流程/输出模板 -- agent 产出的结构化格式
4. 约束条件 -- 明确不做什么
**SOUL.md** -- 人格、语气、边界。保持简短20-30行
1. 身份 -- 一行角色描述
2. 语气 -- 3-4 条沟通风格
3. 语言 -- 主要使用的语言
4. 边界 -- 3-4 条拒绝做的事
可选文件:
- `TOOLS.md` -- 用户自定义工具说明
- `BOOTSTRAP.md` -- 一次性引导(运行后自动删除)
- `IDENTITY.md` -- 名称/风格
- `USER.md` -- 用户画像
### Step 4: 更新 openclaw.json三部分
使用 Node.js 脚本通过 SSH 原子更新,确保 JSON 有效性:
#### 4a. Agent 条目 (`agents.list`)
```json
{
"id": "agent-id",
"name": "agent-id",
"workspace": "/home/yiukai/.openclaw/workspace-agent-id",
"agentDir": "/home/yiukai/.openclaw/agents/agent-id/agent",
"model": "kimi-coding/k2p5",
"identity": { "name": "显示名称" },
"groupChat": {
"mentionPatterns": ["<@!?BOT_USER_ID>", "中文名称", "英文简称", "BOT_USER_ID"]
}
}
```
| 字段 | 必填 | 说明 |
|------|------|------|
| `id` | Yes | 唯一标识符,用于 binding 和命令引用 |
| `workspace` | Yes | agent 的工作目录,存放会话数据 |
| `agentDir` | Yes | AGENTS.md/SOUL.md 所在目录 |
| `model` | No | 覆盖 `agents.defaults.model.primary` |
| `identity.name` | Yes | 在消息中显示的名称 |
| `groupChat.mentionPatterns` | No | 群聊中触发 agent 的模式 |
| `subagents.allowAgents` | No | 允许调用的子 agent 列表 |
#### 4b. Discord 账户 (`channels.discord.accounts`)
```json
"account-id": {
"name": "显示名称",
"enabled": true,
"token": "DISCORD_BOT_TOKEN",
"groupPolicy": "open",
"streaming": "off",
"guilds": {
"GUILD_ID": {
"requireMention": false,
"users": ["964122056163721286", "BOT_USER_ID"],
"channels": { "CHANNEL_ID": { "allow": true } }
}
}
}
```
| 字段 | 说明 |
|------|------|
| `groupPolicy` | `open` = 允许所有,`allowlist` = 仅白名单,`disabled` = 禁用 |
| `requireMention` | `true` = 共享频道需 @mention`false` = 独占频道直接响应 |
| `users` | 白名单,必须包含 owner ID 和 bot 自身 ID |
| `streaming` | `off` / `partial` / `full` |
#### 4c. Binding (`bindings`)
```json
{ "agentId": "agent-id", "match": { "channel": "discord", "accountId": "account-id" } }
```
### Step 5: 验证
配置支持热重载,保存后自动生效。检查日志:
```bash
ssh yiukai@192.168.68.108 'journalctl --user -u openclaw-gateway --since "30 sec ago" --no-pager | grep -iE "agent-id|error|reload"'
```
三个成功指标(全部出现才算成功):
1. `[reload] config change detected` -- 热重载触发
2. `[discord] [agent-id] starting provider` -- bot 连接 Discord
3. `channels resolved: GUILD_ID/CHANNEL_ID` -- 频道解析成功
如果热重载未触发:
```bash
ssh yiukai@192.168.68.108 'systemctl --user restart openclaw-gateway'
```
## 可选扩展
### 添加 Skills
```bash
ssh yiukai@192.168.68.108 "mkdir -p ~/.openclaw/skills/skill-name"
# 然后写 SKILL.md含 frontmatter: name, description, requires, install
```
### 添加 Cron 定时任务
通过 Node.js 脚本添加到 `cron.entries`,或使用 CLI
```bash
openclaw cron add --agent agent-id --schedule "0 8 * * 1-5" \
--message "任务内容" --deliver discord:CHANNEL_ID
```
### 启用 Agent 间通信
1. 添加 agent ID 到 `tools.agentToAgent.allow` 列表
2. 在调用方 agent 设置 `subagents.allowAgents`
3. 共享频道中所有协作 agent 设置 `requireMention: true`
## 实际案例
### xhs-creator2026-03-22
| 项目 | 值 |
|------|-----|
| Agent ID | `xhs-creator` |
| 显示名称 | 小红薯 |
| Discord Bot | @小红书牛马 |
| Guild | 小红书 (`1485305839379021871`) |
| Channel | general (`1485305839828074620`) |
| Bot User ID | `1485305429713096937` |
| 模型 | kimi-coding/k2p5 |
| requireMention | false独占频道 |
| 用途 | 小红书内容创作、话题分析、笔记撰写 |
## 排障指南
### Bot 无响应
1. 检查 bot 是否已邀请到服务器
2. 检查 Message Content Intent 是否开启
3. 检查 `enabled: true`
4. 检查 users 白名单是否包含你的 ID (`964122056163721286`)
5. 查看日志:`journalctl --user -u openclaw-gateway -f`
6. 检查 token 是否有效(可能已过期需重新生成)
### 多 Agent 协作
- 在同一 Guild 的同一频道放多个 agent
- 所有 agent 设置 `requireMention: true` 避免同时响应
- 配置 `subagents.allowAgents` 允许 agent 间通信
- 配置 `tools.agentToAgent.allow` 列表
## Claude Code 自动化
对应 skill: `~/.claude/skills/openclaw-create-agent/SKILL.md`
触发方式:告诉 Claude "创建一个 xxx agent" / "add agent" / "new bot",提供 token、Guild ID、Channel ID 即可自动完成全部步骤。
## Related
- [[OpenClaw-Skill-Reference]]
- [[OpenClaw 部署配置分析]]
- [[OpenClaw Stock Agent 配置详情]]