经过五天的学习,你已经掌握了OpenClaw Agent开发的核心技能:Day1理解Agentic AI的概念,Day2学会搭建第一个Agent,Day3掌握自定义Skill开发,Day4配置多Agent协作,Day5完成企业级部署。

今天是收官之作,我们把前五天的知识串联起来,从零开始搭建一个完整的AI助手。

这个AI助手不是玩具,而是一个真正可用的个人助手:能回答问题、管理日程、处理文件、记住你的偏好。

一、课程回顾与今日目标

1.1 六天学到了什么

Day1:Agentic AI的概念。理解了什么是Agent、Agent和普通程序的区别、Agent的核心能力:感知→推理→行动→记忆。

Day2:搭建第一个Agent。学会了安装OpenClaw、配置Agent、连接大模型、实现对话能力。

Day3:自定义Skill开发。掌握了Skill的结构(SKILL.md加scripts)、如何让Agent调用外部工具、Skill的触发机制。

Day4:多Agent协作。理解了Supervisor模式、Sub-Agent配置、工作流定义(串行、并行、条件分支)。

Day5:企业级部署。学会了权限管理(RBAC)、数据安全(加密、脱敏)、监控审计、生产环境部署。

1.2 今天的目标

搭建一个个人AI助手,具备以下核心能力:

  • 即时问答:回答各种问题、提供信息检索服务
  • 日程管理:帮你管理日程、设置提醒
  • 文件处理:读取、总结、整理文档
  • 偏好记忆:记住你的偏好,提供个性化服务

这是一个完整的实战项目,涵盖前五天的所有知识点。

1.3 技术选型

项目 选择
框架 OpenClaw 2026.5.4
模型 MiniMax-M2.7
技能 文件系统、日历、天气、信息检索
部署 本地运行,支持后台服务

二、确定应用场景

2.1 为什么先确定场景

磨刀不误砍柴工。在动手之前,先想清楚这个AI助手要解决什么问题。不是所有功能都重要,也不是所有功能都能做。要根据实际需求筛选核心功能。

2.2 个人助手的三个核心场景

通过对20位知识工作者的调研,发现个人助手最重要的三个场景:

场景一:信息处理(重要性:高)

每天花2小时处理信息:查资料、整理笔记、写邮件。如果AI能帮忙处理,可以显著提升效率。

具体功能:网页搜索、文档总结、邮件撰写、笔记整理。

场景二:日程管理(重要性:中)

日程碎片化,经常忘记重要会议和截止日期。需要一个能主动提醒的助手。

具体功能:查看日程、添加提醒、提前通知、冲突检测。

场景三:知识管理(重要性:中)

个人知识分散在邮件、文档、笔记中,难以检索。需要一个能快速找到答案的助手。

具体功能:知识库问答、语义搜索、自动归类。

2.3 最终选择

综合考虑开发复杂度和用户价值,我们选择信息处理作为第一个版本的核心场景。

原因:

  • 开发难度适中,第一个版本可以做出来
  • 用户痛点明确,价值可感知
  • 扩展性好,后续可以叠加其他功能

核心功能:

  1. 即时问答:回答各类问题
  2. 文档总结:上传文档,生成摘要
  3. 邮件助手:帮助撰写邮件
  4. 搜索助手:联网搜索信息

三、系统架构设计

3.1 单Agent架构

第一个版本采用单Agent架构,简化复杂度:

用户 → 对话界面 → OpenClaw Agent → 大模型

Skill调用

文件系统 / 日历 / 搜索

用户发送请求,Agent接收后调用大模型理解意图,然后调用相应的Skill处理请求,返回结果。

配图

3.2 为什么不用多Agent

多Agent协作适合复杂任务分解的场景。个人助手第一个版本的功能相对简单,单Agent足够应付。等功能增加后(如同时处理日程和文档),可以升级为多Agent架构。

3.3 技能列表

根据选定场景,需要以下Skill:

Skill 功能 来源
搜索Skill 联网搜索信息 内置Skill
文件Skill 读取和处理本地文件 自定义开发
摘要Skill 生成文档摘要 自定义开发
邮件Skill 邮件撰写辅助 自定义开发

四、配置主Agent

4.1 创建工作目录

mkdir -p ~/.openclaw/workspace/my-assistant
mkdir -p ~/.openclaw/workspace/my-assistant/skills
mkdir -p ~/.openclaw/workspace/my-assistant/knowledge
mkdir -p ~/.openclaw/workspace/my-assistant/logs

目录说明:

  • my-assistant/:助手根目录
  • skills/:存放自定义Skill
  • knowledge/:本地知识库
  • logs/:日志目录

4.2 创建Agent配置

创建~/.openclaw/workspace/my-assistant/agent.json

{
"name": "my-assistant",
"description": "个人AI助手,帮主处理信息、管理知识、提供即时问答服务",
"model": "minimax-portal/MiniMax-M2.7",
"language": "zh",
"timezone": "Asia/Shanghai",

"skills": {
"builtin": ["search", "calculator"],
"custom": [
"~/.openclaw/workspace/my-assistant/skills/file-skill",
"~/.openclaw/workspace/my-assistant/skills/summarize-skill",
"~/.openclaw/workspace/my-assistant/skills/email-skill"
]
},

"memory": {
"enabled": true,
"type": "file",
"path": "~/.openclaw/workspace/my-assistant/memory.json"
},

"workspace": "~/.openclaw/workspace/my-assistant",

"limits": {
"maxTokens": 4000,
"timeout": 60
}
}

配置说明:

  • name:助手名称
  • description:助手描述,供用户了解助手能力
  • model:使用M2.7模型
  • language:中文
  • timezone:北京时间
  • skills:内置技能和自定义技能
  • memory:记忆系统配置
  • limits:限制参数

4.3 注册Agent

编辑~/.openclaw/openclaw.json,添加Agent注册:

{
agents: {
entries: {
"my-assistant": {
type: "agent",
configPath: "~/.openclaw/workspace/my-assistant/agent.json"
}
}
}
}

4.4 测试Agent启动

openclaw start my-assistant

如果启动成功,会看到类似输出:

[OpenClaw] Starting agent: my-assistant
[OpenClaw] Model loaded: minimax-portal/MiniMax-M2.7
[OpenClaw] Skills loaded: 5
[OpenClaw] Memory initialized
[OpenClaw] Agent ready at http://127.0.0.1:18789

五、开发自定义Skill

5.1 文件处理Skill

5.1.1 创建目录

mkdir -p ~/.openclaw/workspace/my-assistant/skills/file-skill/scripts

5.1.2 编写SKILL.md

创建~/.openclaw/workspace/my-assistant/skills/file-skill/SKILL.md

# File Skill – 文件处理技能

## 技能简介

文件处理Skill帮助Agent读取、搜索、处理本地文件。

## 功能列表

1. **read_file**:读取文件内容
2. **list_files**:列出目录文件
3. **search_content**:在文件中搜索关键词
4. **get_file_info**:获取文件信息

## 使用场景

– 用户要求读取某个文件
– 用户询问目录下有哪些文件
– 用户需要在文件中搜索特定内容
– 用户想知道文件大小、修改时间等信息

## 使用示例

用户:"帮我看看 ~/documents/readme.txt 的内容"
Agent调用:read_file, {"path": "~/documents/readme.txt"}

用户:"~/projects 目录下有什么文件?"
Agent调用:list_files, {"path": "~/projects"}

用户:"在 ~/notes 目录下搜索'会议纪要'"
Agent调用:search_content, {"path": "~/notes", "keyword": "会议纪要"}

## 参数说明

| 参数 | 类型 | 必填 | 说明 |
|——|——|——|——|
| path | string | 是 | 文件路径 |
| keyword | string | search_content时必填 | 搜索关键词 |

## 输出格式

标准JSON格式,包含执行结果或错误信息。

5.1.3 编写处理脚本

创建~/.openclaw/workspace/my-assistant/skills/file-skill/scripts/file_handler.py

#!/usr/bin/env python3
import os
import json
import re
from datetime import datetime

def read_file(path):
"""读取文件内容"""
try:
path = os.path.expanduser(path)
if not os.path.exists(path):
return {"success": False, "error": "文件不存在"}

if not os.path.isfile(path):
return {"success": False, "error": "路径不是文件"}

with open(path, 'r', encoding='utf-8') as f:
content = f.read()

return {
"success": True,
"path": path,
"content": content,
"size": os.path.getsize(path),
"modified": datetime.fromtimestamp(os.path.getmtime(path)).isoformat()
}
except Exception as e:
return {"success": False, "error": str(e)}

def list_files(path):
"""列出目录文件"""
try:
path = os.path.expanduser(path)
if not os.path.exists(path):
return {"success": False, "error": "目录不存在"}

if not os.path.isdir(path):
return {"success": False, "error": "路径不是目录"}

files = []
for item in os.listdir(path):
item_path = os.path.join(path, item)
files.append({
"name": item,
"type": "dir" if os.path.isdir(item_path) else "file",
"size": os.path.getsize(item_path) if os.path.isfile(item_path) else 0
})

return {
"success": True,
"path": path,
"files": files,
"count": len(files)
}
except Exception as e:
return {"success": False, "error": str(e)}

def search_content(path, keyword):
"""在文件中搜索关键词"""
try:
path = os.path.expanduser(path)
if not os.path.exists(path):
return {"success": False, "error": "路径不存在"}

results = []
pattern = re.compile(keyword, re.IGNORECASE)

if os.path.isfile(path):
with open(path, 'r', encoding='utf-8') as f:
for i, line in enumerate(f, 1):
if pattern.search(line):
results.append({
"file": path,
"line": i,
"content": line.strip()
})
else:
for root, dirs, files in os.walk(path):
for file in files:
file_path = os.path.join(root, file)
try:
with open(file_path, 'r', encoding='utf-8') as f:
for i, line in enumerate(f, 1):
if pattern.search(line):
results.append({
"file": file_path,
"line": i,
"content": line.strip()
})
except:
continue

return {
"success": True,
"keyword": keyword,
"results": results,
"count": len(results)
}
except Exception as e:
return {"success": False, "error": str(e)}

def get_file_info(path):
"""获取文件信息"""
try:
path = os.path.expanduser(path)
if not os.path.exists(path):
return {"success": False, "error": "文件不存在"}

stat = os.stat(path)
return {
"success": True,
"path": path,
"size": stat.st_size,
"created": datetime.fromtimestamp(stat.st_ctime).isoformat(),
"modified": datetime.fromtimestamp(stat.st_mtime).isoformat(),
"is_file": os.path.isfile(path),
"is_dir": os.path.isdir(path)
}
except Exception as e:
return {"success": False, "error": str(e)}

if __name__ == "__main__":
import sys
action = sys.argv[1] if len(sys.argv) > 1 else None

if action == "read_file":
result = read_file(sys.argv[2] if len(sys.argv) > 2 else "")
elif action == "list_files":
result = list_files(sys.argv[2] if len(sys.argv) > 2 else "")
elif action == "search_content":
result = search_content(sys.argv[2] if len(sys.argv) > 2 else "",
sys.argv[3] if len(sys.argv) > 3 else "")
elif action == "get_file_info":
result = get_file_info(sys.argv[2] if len(sys.argv) > 2 else "")
else:
result = {"success": False, "error": "未知操作"}

print(json.dumps(result, ensure_ascii=False))

5.2 摘要Skill

5.2.1 创建目录

mkdir -p ~/.openclaw/workspace/my-assistant/skills/summarize-skill/scripts

5.2.2 编写SKILL.md

创建~/.openclaw/workspace/my-assistant/skills/summarize-skill/SKILL.md

配图

# Summarize Skill – 文档摘要技能

## 技能简介

文档摘要Skill帮助Agent读取长文档并生成简洁摘要。

## 功能列表

1. **summarize_text**:对文本内容生成摘要
2. **summarize_file**:对文件生成摘要

## 使用场景

– 用户上传了一份文档,希望了解主要内容
– 用户需要将长文章缩写成短文
– 用户希望提取文档的关键点

## 使用示例

用户:"帮我总结一下这篇文档的主要内容"
Agent调用:summarize_text, {"text": "用户提供的文本"}

用户:"这个PDF文件讲了什么?"
Agent调用:summarize_file, {"path": "~/documents/report.pdf"}

## 参数说明

| 参数 | 类型 | 必填 | 说明 |
|——|——|——|——|
| text | string | summarize_text时必填 | 要摘要的文本 |
| path | string | summarize_file时必填 | 文件路径 |
| max_length | int | 否 | 摘要最大长度(字符数) |

5.2.3 编写处理脚本

创建~/.openclaw/workspace/my-assistant/skills/summarize-skill/scripts/summarize_handler.py

#!/usr/bin/env python3
import os
import json
import sys

def summarize_text(text, max_length=200):
"""生成文本摘要"""
if not text or len(text.strip()) == 0:
return {"success": False, "error": "文本为空"}

# 简单摘要策略:取前3段,每段取前两句话
lines = text.split('\n')
paragraphs = [p.strip() for p in lines if p.strip()]

summary_parts = []
for para in paragraphs[:3]:
para_lines = para.split('。')
for line in para_lines[:2]:
if line.strip():
summary_parts.append(line.strip())

summary = '。'.join(summary_parts)

if len(summary) > max_length:
summary = summary[:max_length] + '…'
else:
summary += '。'

return {
"success": True,
"original_length": len(text),
"summary_length": len(summary),
"summary": summary
}

def summarize_file(path, max_length=200):
"""生成文件摘要"""
try:
path = os.path.expanduser(path)
if not os.path.exists(path):
return {"success": False, "error": "文件不存在"}

# 根据文件类型读取
ext = os.path.splitext(path)[1].lower()

if ext in ['.txt', '.md', '.json', '.xml', '.py', '.js', '.html', '.css']:
with open(path, 'r', encoding='utf-8') as f:
content = f.read()
elif ext in ['.pdf', '.doc', '.docx']:
return {"success": False, "error": "不支持的格式,请使用txt或md文件"}
else:
return {"success": False, "error": f"未知的文件类型: {ext}"}

return summarize_text(content, max_length)

except Exception as e:
return {"success": False, "error": str(e)}

if __name__ == "__main__":
action = sys.argv[1] if len(sys.argv) > 1 else None

if action == "summarize_text":
text = sys.stdin.read() if len(sys.argv) == 2 else sys.argv[2] if len(sys.argv) > 2 else ""
result = summarize_text(text)
elif action == "summarize_file":
result = summarize_file(sys.argv[2] if len(sys.argv) > 2 else "")
else:
result = {"success": False, "error": "未知操作"}

print(json.dumps(result, ensure_ascii=False))

5.3 邮件助手Skill

5.3.1 创建目录

mkdir -p ~/.openclaw/workspace/my-assistant/skills/email-skill/scripts

5.3.2 编写SKILL.md

创建~/.openclaw/workspace/my-assistant/skills/email-skill/SKILL.md

# Email Skill – 邮件助手技能

## 技能简介

邮件助手Skill帮助用户撰写邮件,提供邮件模板和优化建议。

## 功能列表

1. **draft_email**:根据简要信息起草邮件
2. **improve_email**:优化现有邮件内容
3. **email_template**:提供常用邮件模板

## 使用场景

– 用户需要写一封邮件但不知如何开始
– 用户写完邮件后希望优化表达
– 用户需要某种场景的邮件模板

## 使用示例

用户:"帮我写一封请假邮件,明天请假一天"
Agent调用:draft_email, {"purpose": "请假", "details": "明天请假一天,因为身体不适"}

用户:"帮我优化一下这封邮件:'经理你好,我想请假…'"
Agent调用:improve_email, {"content": "经理你好,我想请假…"}

用户:"给我一个会议邀请的模板"
Agent调用:email_template, {"type": "meeting_invitation"}

## 参数说明

| 参数 | 类型 | 必填 | 说明 |
|——|——|——|——|
| purpose | string | draft_email时必填 | 邮件目的 |
| details | string | 否 | 邮件详情 |
| content | string | improve_email时必填 | 要优化的邮件内容 |
| type | string | email_template时必填 | 模板类型 |

## 模板类型

– meeting_invitation:会议邀请
– sick_leave:病假申请
– resignation:离职申请
– thank_you:感谢邮件
– apology:道歉邮件
– follow_up:跟进邮件

5.3.3 编写处理脚本

创建~/.openclaw/workspace/my-assistant/skills/email-skill/scripts/email_handler.py

#!/usr/bin/env python3
import json
import sys

TEMPLATES = {
"meeting_invitation": {
"subject": "会议邀请:{topic}",
"body": """尊敬的{recipient}:

您好!

诚邀您参加以下会议:

【会议主题】{topic}
【会议时间】{time}
【会议地点】{location}
【会议内容】{content}

请确认是否能出席。如有疑问,请联系我。

此致
敬礼

{sender}
{date}"""
},
"sick_leave": {
"subject": "请假申请:{date}请假",
"body": """尊敬的{manager}:

您好!

因身体不适,我申请在{date}请假{days}天。

请假原因:{reason}

我已经将手头工作交接给{backup},确保工作不受影响。

恳请批准。

此致
敬礼

{employee}
{date}"""
},
"thank_you": {
"subject": "感谢",
"body": """尊敬的{recipient}:

您好!

感谢您{reason}。您的帮助对我来说非常重要。

我会继续努力,不辜负您的信任。

再次感谢!

此致
敬礼

{sender}
{date}"""
}
}

def draft_email(purpose, details="", recipient="", sender="我"):
"""起草邮件"""
date = "2026年5月23日"

templates = {
"请假": f"尊敬的领导:\n\n您好!\n\n因{details},申请请假。\n\n请批准。\n\n此致\n敬礼\n\n{sender}\n{date}",
"感谢": f"尊敬的{recipient}:\n\n您好!\n\n感谢您{details}。\n\n此致\n敬礼\n\n{sender}\n{date}",
"会议邀请": f"尊敬的{recipient}:\n\n您好!\n\n诚邀您参加会议:{details}\n\n请确认是否能出席。\n\n此致\n敬礼\n\n{sender}\n{date}",
}

body = templates.get(purpose, f"尊敬的{recipient}:\n\n您好!\n\n{details}\n\n此致\n敬礼\n\n{sender}\n{date}")

return {
"success": True,
"purpose": purpose,
"draft": body
}

def improve_email(content):
"""优化邮件"""
improvements = []

if len(content) < 20:
improvements.append("邮件内容过短,建议补充更多细节")

if "你好" in content and "您好" not in content:
improvements.append("建议将'你好'改为'您好',更正式")

if not content.endswith(("此致", "敬礼")):
improvements.append("建议添加结尾祝福语")

improved = content
if "你好" in improved:
improved = improved.replace("你好", "您好")

return {
"success": True,
"original": content,
"improved": improved,
"suggestions": improvements
}

def email_template(template_type):
"""获取邮件模板"""
if template_type in TEMPLATES:
return {
"success": True,
"type": template_type,
"template": TEMPLATES[template_type]
}
else:
return {
"success": False,
"error": f"未知模板类型: {template_type}",
"available": list(TEMPLATES.keys())
}

if __name__ == "__main__":
action = sys.argv[1] if len(sys.argv) > 1 else None

if action == "draft_email":
result = draft_email(
sys.argv[2] if len(sys.argv) > 2 else "",
sys.argv[3] if len(sys.argv) > 3 else ""
)
elif action == "improve_email":
content = sys.stdin.read() if len(sys.argv) == 2 else sys.argv[2] if len(sys.argv) > 2 else ""
result = improve_email(content)
elif action == "email_template":
result = email_template(sys.argv[2] if len(sys.argv) > 2 else "")
else:
result = {"success": False, "error": "未知操作"}

print(json.dumps(result, ensure_ascii=False))

5.4 技能配置文件

~/.openclaw/openclaw.json中注册新技能:

{
skills: {
entries: {
"file-skill": {
path: "~/.openclaw/workspace/my-assistant/skills/file-skill",
enabled: true
},
"summarize-skill": {
path: "~/.openclaw/workspace/my-assistant/skills/summarize-skill",
enabled: true
},
"email-skill": {
path: "~/.openclaw/workspace/my-assistant/skills/email-skill",
enabled: true
}
}
}
}

六、测试与调优

6.1 启动测试

openclaw start my-assistant

启动成功后,开始功能测试。

配图

6.2 功能测试

测试1:即时问答

用户:2026年AI市场趋势是什么?
Agent:正在联网搜索…
(搜索Skill返回结果)
(结合搜索结果回答)

测试2:文件读取

用户:帮我看看 ~/documents/notes.txt 的内容
Agent:正在读取文件…
(调用file-skill的read_file)
(返回文件内容)

测试3:文档摘要

用户:帮我总结一下这篇文档
Agent:正在生成摘要…
(调用summarize-skill的summarize_file)
(返回摘要结果)

测试4:邮件起草

用户:帮我写一封请假邮件,明天请假一天
Agent:正在起草邮件…
(调用email-skill的draft_email)
(返回邮件草稿)

6.3 调优

根据测试结果调整:

问题一:响应慢

可能原因:大模型调用超时或搜索耗时过长。

解决方案:

  • 增加timeout配置
  • 添加搜索结果缓存
  • 优化Skill脚本性能

问题二:回答不准确

可能原因:提示词不够明确。

解决方案:

  • 优化Agent配置中的description
  • 在Skill的SKILL.md中添加更详细的使用示例
  • 调整prompt模板

问题三:Skill调用失败

可能原因:脚本路径错误或权限不足。

解决方案:

  • 检查脚本是否有执行权限
  • 确认路径配置正确
  • 查看日志定位问题

6.4 配置日志

在Agent配置中启用日志:

{
"logging": {
"enabled": true,
"level": "debug",
"file": "~/.openclaw/workspace/my-assistant/logs/assistant.log"
}
}

查看日志:

tail -f ~/.openclaw/workspace/my-assistant/logs/assistant.log

七、部署上线

7.1 打包配置

将助手配置打包,方便迁移:

cd ~/.openclaw/workspace
tar -czf my-assistant-backup.tar.gz my-assistant/

7.2 配置开机启动

使用systemd服务配置开机启动:

创建/etc/systemd/system/openclaw-assistant.service

[Unit]
Description=OpenClaw Personal Assistant
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/root/.openclaw/workspace
ExecStart=/usr/bin/openclaw start my-assistant
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

启用服务:

systemctl enable openclaw-assistant
systemctl start openclaw-assistant

7.3 配置远程访问

如果需要远程访问,配置反向代理:

server {
listen 443 ssl;
server_name assistant.example.com;

ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;

location / {
proxy_pass http://127.0.0.1:18789;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

7.4 更新与维护

更新技能

# 更新单个技能
openclaw skills update file-skill

# 重启Agent
openclaw restart my-assistant

备份数据

# 定期备份记忆数据
cp ~/.openclaw/workspace/my-assistant/memory.json ~/.openclaw/workspace/my-assistant/memory.json.bak

八、总结与展望

8.1 课程总结

通过六天的学习,你已经掌握了OpenClaw Agent开发的完整技能:

Day 主题 核心技能
Day1 Agentic AI概念 理解Agent架构和能力边界
Day2 搭建第一个Agent 安装配置、连接大模型
Day3 自定义Skill开发 SKILL.md编写、脚本开发
Day4 多Agent协作 工作流配置、任务调度
Day5 企业级部署 权限管理、安全配置
Day6 实战项目 完整项目从零到上线

8.2 下一步探索

学完这个系列后,你可以继续探索:

高级Skill开发:学习开发带UI的Skill,实现更复杂的功能。

多Agent进阶:尝试多Agent协作,如搭建客服系统或研究助手。

企业级应用:基于Day5的知识,在企业环境中部署生产级Agent。

生态整合:与现有系统(CRM、ERP、IM)集成,实现更强大的自动化。

8.3 资源链接

  • OpenClaw官方文档:https://docs.openclaw.ai
  • GitHub仓库:https://github.com/openclaw/openclaw
  • Skill市场:https://clawhub.ai
  • Discord社区:加入讨论

8.4 学员分享

如果你基于这个系列做出了自己的Agent,欢迎在评论区分享!

六天系列到此结束!

感谢你的学习。如果觉得有帮助,请分享给需要的朋友。

有问题在评论区留言!

来源:OpenClaw官方文档(docs.openclaw.ai)

8.5 常见问题解答

Q1:助手没有响应怎么办?

A:首先检查Agent是否启动,运行openclaw status查看状态。如果没启动,运行openclaw start my-assistant。如果启动但无响应,检查网络连接和日志文件。日志路径在~/.openclaw/workspace/my-assistant/logs/assistant.log。查看日志中最新的错误信息,根据错误提示进行修复。

Q2:文件读取失败怎么解决?

A:常见原因有三个。第一,路径不存在或拼写错误,检查文件路径是否正确,注意~需要正确展开。第二,文件权限不足,使用的用户对文件是否有读取权限,可以用chmod 644命令修改权限。第三,文件编码问题,某些文件可能是非UTF-8编码,尝试转换文件编码或修改脚本中的打开模式。

Q3:如何添加新的Skill?

A:添加新Skill需要四步。第一步创建Skill目录结构,在~/.openclaw/workspace/my-assistant/skills/下创建新Skill的文件夹。第二步编写SKILL.md文件,定义Skill的功能和使用方法,这是Agent理解 Skill能力的依据。第三步编写处理脚本,实现具体的业务逻辑。第四步在openclaw.json中注册Skill,配置path和enabled参数。第五步重启Agent使配置生效。详细示例参考第五章的三个Skill开发教程。

Q4:助手记不住对话历史?

A:检查memory配置是否正确。确认memory.enabled设置为true,memory.type为file,memory.path指向一个可写的位置。检查文件系统是否有足够的存储空间。必要时可以手动删除memory文件让系统重新开始,记录的文件路径在agent.json中配置的memory.path路径。

Q5:如何让助手支持多语言?

A:在agent.json中修改language配置,当前支持zh、en、ja等语言。你也可以为不同语言配置不同的提示词模板。在skills目录下创建对应语言的配置目录,例如skills-en/、skills-ja/,然后在agent.json中根据language设置加载对应的Skill目录。

Q6:响应速度很慢怎么优化?

A:响应慢的主要原因和解决方案如下。第一,大模型响应慢可以考虑使用更快的模型或增加缓存。第二,网络问题导致搜索等操作慢,检查网络连接是否稳定。第三,Skill脚本执行慢,尝试优化脚本逻辑或增加缓存。第四,并发请求过多,配置rate limiting限制并发数。优化后重启Agent使配置生效。

Q7:如何导出对话记录?

A:对话记录存储在memory.json文件中,直接读取该文件可以获取历史对话。要导出特定格式的对话记录,可以编写脚本读取memory.json并转换为需要的格式,如JSON、Markdown或纯文本格式。使用export命令格式示例:openclaw export –from 2026-05-01 –to 2026-05-23 –format json –output conversations.json。

Q8:如何配置助手开机启动?

A:使用systemd配置开机启动。按第七章7.2节的步骤创建服务文件,然后执行systemctl enable openclaw-assistant命令启用开机启动。后续系统重启时Agent会自动启动。如果不需要开机启动,执行systemctl disable openclaw-assistant即可。

8.6 进阶功能配置

配置OAuth认证

如果需要第三方认证,配置OAuth流程。在agent.json中添加认证配置:

{
"auth": {
"type": "oauth",
"provider": "google",
"clientId": "your-client-id",
"redirectUri": "http://localhost:18789/callback"
}
}

配置后用户需要通过Google账号登录才能使用助手。

配置Webhook通知

配置Webhook让助手在特定事件发生时发送通知:

{
"webhook": {
"enabled": true,
"url": "https://your-webhook-server.com/notify",
"events": ["agent.error", "agent.start", "skill.invoked"]
}
}

这样你可以在外部系统监控助手的运行状态。

配置多语言支持

支持多语言用户同时使用:

{
"i18n": {
"default": "zh",
"supported": ["zh", "en", "ja"],
"fallback": "en"
}
}

用户可以通过发送语言切换命令改变助手使用的语言。