【免费下载链接】Pika-Skills
Pika-Skills 是 Pika Labs 开源的 Agent 技能库,它将"AI 加入视频会议"这一能力封装成标准化的 Agent 技能。本文以其中的 pikastream-video-meeting 技能为案例,从 SKILL.md 元数据设计讲到入会工作流(Join Flow),拆解一个完整 Agent 技能定义范式的写法,并解析 AI 视频会代理是如何被"说明书式"地驱动起来的。
AI 视频会代理的默认头像(placeholder-avatar),由技能自带资源提供
什么是 Agent 技能,为什么需要"技能文件"
传统 API 调用需要开发者写代码处理鉴权、轮询、异常,而Agent 技能(Agent Skill)的思路是:把一个能力写成"一份说明书 + 几个可执行脚本",让 AI Agent 自己读懂并按步骤执行。
一个技能通常由三部分组成:
| 组成 | 作用 | 类比 |
|---|---|---|
| SKILL.md | 技能定义入口:元数据 + 工作流指令 | 岗位说明书 |
| scripts/ | 真正干活的脚本(CLI 化封装) | 操作手册里的工具 |
| assets/、requirements.txt | 静态资源与依赖声明 | 工位上的标配物品 |
Pika-Skills 的 README.md 明确了一个设计目标:技能由SKILL_DIR变量定位目录,Agent 只需按 SKILL.md 中的命令拼装参数即可,无需理解脚本内部实现。
📦 Pika-Skills 项目结构一览
仓库只有一个技能,但目录划分非常典型:
Pika-Skills/ ├── pikastream-video-meeting/ │ ├── SKILL.md # 技能定义入口(元数据 + 工作流) │ ├── requirements.txt # Python 依赖(requests) │ ├── assets/ │ │ └── placeholder-avatar.jpg # 默认会议头像 │ └── scripts/ │ └── pikastreaming_videomeeting.py # 入会/离会/头像/声音克隆脚本 ├── LICENSE # Apache 2.0 ├── NOTICE └── README.md核心文件索引:
- 技能定义:SKILL.md
- 入会脚本:pikastreaming_videomeeting.py
- 依赖声明:requirements.txt
- 默认头像:placeholder-avatar.jpg
📄 SKILL.md 元数据设计:告诉 Agent "我是谁、何时用我、我需要什么"
打开 SKILL.md,最顶部是一段 YAML frontmatter 元数据——这是整个技能定义的"身份证":
--- name: pikastream-video-meeting description: | Join a Google Meet or Zoom call as a video meeting agent via PikaStreaming. Trigger: user drops a Google Meet or Zoom link, or asks to join a meeting. metadata: openclaw: requires: env: ["PIKA_DEV_KEY"] bins: ["python3"] primaryEnv: "PIKA_DEV_KEY" ---这段短短十几行的元数据,恰好覆盖了三类关键信息:
1️⃣ name:技能唯一标识
pikastream-video-meeting既是技能名,也是脚本中X-Skill-Name请求头的取值,用于计费与归因追踪。命名即目录名,保持了"一处定义、处处引用"。
2️⃣ description:功能描述 + 触发词
描述中专门写了Trigger(触发条件):
用户丢出一个 Google Meet 或 Zoom 链接,或者要求加入会议时触发。
这是给 Agent 的"路由规则"——Agent 在收到消息时,依据 description 判断该加载哪个技能。把触发条件直接写进元数据,而不是埋在正文,能显著提升技能调用的准确性。
3️⃣ metadata.requires:声明式依赖
env: ["PIKA_DEV_KEY"]:运行前必须存在的环境变量(开发者 API 密钥)bins: ["python3"]:必须安装的命令行工具primaryEnv: "PIKA_DEV_KEY":主环境变量名
这种声明式依赖是技能范式的关键:Agent 在执行前可以先检查依赖是否齐备,缺什么就提示装什么,而不是一路跑到报错。配套的安装步骤也极其简单,只需执行一次:
pip install -r $SKILL_DIR/requirements.txt🤖 入会工作流拆解:从"首次配置"到"一键入会"
SKILL.md 的正文部分是一份写给 Agent 的自然语言工作流,分为三大阶段:首次配置(First-Time Setup)→ 入会(Join Flow)→ 离会(Leave)。
首次配置:头像与声音克隆,两个"身份"准备
AI 要进入会议,必须先有"形象"和"声音"。SKILL.md 为两者各设计了一套带明确卡点的流程:
头像(Avatar)
- 检查
identity/videomeeting-avatar.png是否存在且大于 1 KB; - 不存在则询问用户:发一张肖像图,或说 "generate" 由 Agent 调用
generate-avatar子命令生成; - 关键设计:“Do not proceed until the user responds”(用户未回复前不得继续)——防止 AI 自作主张生成头像。
声音(Voice)
- 检查
life/voice_id.txt是否已有克隆好的声音 ID; - 若已存在,读取
life/voice_config.json的cloned_at字段,超过 6 天则提醒"克隆声音 7 天不用会被删除",让用户选择重新克隆或沿用; - 用户可发一段 10 秒~5 分钟的清晰录音,执行:
python $SKILL_DIR/scripts/pikastreaming_videomeeting.py clone-voice \ --audio <file> --name <bot-name> --noise-reduction这套设计的精髓在于:状态文件(identity/ 与 life/ 目录)充当了技能的"跨会话记忆",而每一步都写明"检查什么文件 → 满足/不满足时各做什么",Agent 照章执行即可,不会遗漏分支。
Join Flow:先收集上下文,再一键入会
入会流程被拆成两个步骤,体现了"先校验、后执行"的稳健思路:
Step 1 — 校验与上下文收集
- 复查头像与声音是否就绪,缺失则回跳首次配置;
- 读取工作区记忆文件(MEMORY.md、日志、身份文件等),强调每次都要取最新数据,不复用旧会话的缓存;
- 将零散记忆合成为一张"参考卡"(reference card),写入
/tmp/meeting_system_prompt.txt,作为机器人的身份背景注入会议。
Step 2 — 执行入会命令
python $SKILL_DIR/scripts/pikastreaming_videomeeting.py join \ --meet-url <url> --bot-name <name> \ --image identity/videomeeting-avatar.png \ --system-prompt-file /tmp/meeting_system_prompt.txt \ --voice-id <id> [--meeting-password <pw>]脚本内部自动完成了一连串"脏活"(详见 pikastreaming_videomeeting.py):
- 通过
DevKey请求头鉴权; - 根据 URL 自动识别平台(
meet.google.com→ google_meet,zoom.us→ zoom); - 入会前强制走"充值检查流水线":查余额 → 不足则自动创建充值链接并轮询支付状态;
- 上传头像、提交
meeting-session,然后每 2 秒轮询一次,直到状态变为ready才返回成功。
退出码协议:Agent 与脚本的"机器可读"约定
技能范式中最容易被忽视的一点:脚本的输出是给 Agent 看的,所以要机器可读。本项目用"退出码 + JSON"构建了清晰的通信协议:
| 退出码 | 含义 | Agent 的应对 |
|---|---|---|
| 0 | 成功 | 告知用户"已入会" |
| 2 | 参数/校验错误 | 提示用户修正输入 |
| 3 | HTTP 请求失败 | 报告网络或服务端错误 |
| 4 | 会话错误 | 展示错误信息并中止 |
| 5 | 超时 | 提示稍后重试 |
| 6 | 余额不足 | stdout 中的 JSON 带checkout_url,直接展示给用户 |
例如 SKILL.md 中明确写道:退出码为 6 时,stdout 的 JSON 里含有checkout_url,Agent 应把它展示给用户完成支付。这种"错误即指令"的设计,让 Agent 能根据结果自动决定下一步动作,而不是把原始堆栈甩给用户。
离会同样是一条命令完成,leave子命令凭session_id删除会话即可。
🎯 设计总结:一套可复用的技能定义范式
把 Pika-Skills 的做法抽象出来,就是一个"SKILL.md 元数据 + 状态文件 + CLI 脚本 + 退出码协议"的四件套范式:
| 设计点 | 本项目的实现 | 带来的价值 |
|---|---|---|
| 声明式元数据 | YAML frontmatter 中requires.env/bins | Agent 可预检依赖,失败前置 |
| 触发词路由 | description 中显式Trigger说明 | 技能被准确唤起 |
| 状态文件记忆 | identity/、life/目录持久化 | 跨会话复用头像与声音 |
| 显式交互卡点 | "用户未回复前不得继续" | 避免 AI 擅自决策 |
| 机器可读协议 | 退出码 0~6 + stdout JSON | Agent 可自动处理异常 |
| 脚本 CLI 封装 | 四个子命令对应四个动作 | 正文只写"怎么用",不写"怎么实现" |
这套范式对想给 Agent 添加新能力的团队很有参考价值:把能力写成说明书,把细节藏进脚本,用退出码和 JSON 对齐人机双方的预期。
📌 仓库状态说明与延伸阅读
需要说明:由于 Pika Developer API(pika.me/dev)已停止服务,本仓库已归档,技能当前无法实际运行,官方在 README.md 中给出了迁移指引。但其技能定义的设计思想依然完整保留在 git 历史中,适合作为 Agent 技能设计的范本研读。
如需获取源码对照阅读:
git clone https://gitcode.com/gh_mirrors/pi/Pika-Skills延伸阅读建议从三个入口按顺序阅读:
- SKILL.md —— 技能定义全貌,重点是 frontmatter 与 Join Flow;
- pikastreaming_videomeeting.py —— 关注
ensure_funded充值流水线与cmd_join轮询逻辑; - LICENSE —— Apache 2.0 授权,代码可自由复用。
【免费下载链接】Pika-Skills
相关推荐
BMad 技能(Skills)体系完全指南:从 SKILL.md 到 IDE 工作流
BMad 技能(Skills)体系完全指南:从 SKILL.md 到 IDE 工作流 BMad 的 技能(Skill) 是驱动整套 Agile AI 开发方法落
AI 技能人工智能开发工具OpenFang 内置>OpenFang 内置 data analyst 技能深度解析:从 SKILL.md 到可落地的数据分析专家工作流 导读 本文围绕 OpenFang(开源 Ag
人工智能大模型AI Agent自主智能体Agent 编排MCP Clients知识图谱深入剖析 Agentic Awesome Skills 技能解剖学:SKILL.md 的结构、元数据与最佳实践
深入剖析 Agentic Awesome Skills 技能解剖学:SKILL.md 的结构、元数据与最佳实践 导读 本文档基于仓库中的技能解剖指南( docs
AI 技能AI 插件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考