Nanobot Agent Skills 实践
最近在使用 nanobot 这个 AI agent 框架,记录一下 skill 系统的实践,包括创建翻译工具和本地网页服务。
0 Overview
- Nanobot 是一个轻量级 AI agent 框架
- Skill 系统让 agent 能力可扩展
- 每个 skill 是一个
SKILL.md文件,定义工具的使用方法 - 可以调用外部 API 和本地命令
1 Skill 文件结构
Skill 文件位于 workspace/skills/{skill-name}/SKILL.md,包含:
---
name: skill-name
description: What this skill does
metadata: {"nanobot":{"emoji":"🌐","requires":{"bins":["curl"]}}}
---
后面是 markdown 格式的使用说明,agent 会根据这些说明来调用工具。
2 Translate Skill
创建了一个翻译 skill,使用免费的 MyMemory API:
curl -s "https://api.mymemory.translated.net/get?q=Hello&langpair=en|zh"
回译验证
翻译成非英语时,自动回译验证翻译质量:
- 中文 → 日语:「你真的太厉害了」→「あなたは本当に素晴らしいです」
- 日语 → 中文:「あなたは本当に素晴らしいです」→「您果然是厉害!」
TTS 语音朗读
使用 macOS 内置的 say 命令生成语音:
# 生成日语语音
say -v Kyoko "あなたは本当に素晴らしいです" -o output.aiff
# 转换为 m4a 格式
afconvert -f m4af -d aac output.aiff output.m4a
支持的语音: | 语言 | 语音名称 | |——|———-| | 日语 | Kyoko | | 中文 | Tingting | | 韩语 | Yuna | | 英语 | Samantha |
3 本地网页服务
用 Python 创建了一个翻译网页服务,运行在 localhost:8080:
from http.server import HTTPServer, BaseHTTPRequestHandler
class TranslateHandler(BaseHTTPRequestHandler):
def do_GET(self):
# 返回 HTML 页面
def do_POST(self):
# 处理翻译请求,调用 MyMemory API
# 处理语音请求,调用 say 命令
功能:
- 多语言翻译(中/英/日/韩/法/德/西)
- 自动回译验证
- 🔊 语音朗读按钮
踩坑记录
JavaScript 函数名不能用 translate,这是浏览器保留词(CSS transform 相关),会报错:
Uncaught TypeError: translate is not a function
改成 doTranslate() 就好了。
4 文件组织
workspace/
├── output/
│ ├── audio/translate/ # TTS 音频文件
│ └── web/ # 网页服务
├── skills/
│ ├── translate/SKILL.md
│ └── blog/SKILL.md
└── memory/
├── MEMORY.md # 长期记忆
└── HISTORY.md # 对话历史
Key Takeaways
- Skill 系统让 agent 能力模块化、可扩展
- 免费 API(MyMemory)足够个人使用
- macOS 内置 TTS 质量不错,支持多语言
- 简单的 Python HTTP server 就能做本地工具网页