소개
설치하고 개발하는 Skill이 점점 많아지면서 Skill 간의 협업이 중요해집니다. 한 사용자의 요청이 여러 Skill의 협력을 필요로 할 수 있습니다. 예를 들어 "내일 베이징 날씨를 확인해서, 비가 오면 우산 챙기라고 알림 설정해줘"라는 요청은 날씨 조회와 예약 알림 두 Skill의 협업이 필요합니다.
이 튜토리얼에서는 OpenClaw의 다중 Skill 협업 메커니즘과 모범 사례를 심층적으로 다룹니다.
다중 Skill 협업의 기본 원리
Skill 활성화 흐름
OpenClaw가 메시지를 수신하면 다음과 같은 흐름을 거칩니다:
사용자 메시지
│
▼
┌──────────────────┐
│ 트리거 키워드 │ ← 모든 Skill의 트리거 키워드 확인
│ 매칭 단계 │
└────────┬─────────┘
│
┌────▼────┐
│ 매칭 수? │
└────┬────┘
┌────┼────────────┐
│ │ │
0개 1개 여러 개
│ │ │
▼ ▼ ▼
Skill 해당 Skill 우선순위 정렬
없이 직접 활성화 최고 우선순위
일반 선택 또는
대화 조합 활성화
단일 활성화 vs 다중 활성화 모드
OpenClaw는 두 가지 Skill 활성화 모드를 지원합니다:
{
skills: {
// 활성화 모드
activationMode: "single", // 기본: 최고 우선순위 Skill 하나만 활성화
// activationMode: "multi", // 매칭된 모든 Skill 동시 활성화 허용
}
}
| 모드 | 설명 | 적합한 시나리오 |
|---|---|---|
single |
최고 우선순위 Skill 하나만 활성화 | 단순한 시나리오, 충돌 방지 |
multi |
매칭된 모든 Skill 동시 활성화 | 복잡한 시나리오, 다중 Skill 협업 필요 |
우선순위 관리
Skill 우선순위 설정
각 Skill은 SKILL.md에서 우선순위를 선언할 수 있습니다:
---
name: weather
priority: 20
triggers:
- 天气
- weather
---
또는 전역 설정에서 일괄 관리합니다:
{
skills: {
priority: {
"weather": 20,
"reminder": 15,
"translator": 10,
"rss-reader": 10,
"general-chat": 1 // 일반 대화는 최저 우선순위
}
}
}
우선순위 규칙
- 숫자가 클수록 우선순위가 높습니다
- 기본 우선순위는 10입니다
- 동일 우선순위의 Skill은 파일명 알파벳 순서를 따릅니다
- 우선순위가 0인 Skill은 자동 활성화되지 않습니다 (명시적 호출 필요)
우선순위 정렬 확인
openclaw skill list --verbose
Skills (by priority):
Priority Name Triggers Status
──────── ──── ──────── ──────
20 weather 天气,weather,气温 active
15 reminder 提醒,remind,闹钟 active
10 translator 翻译,translate active
10 rss-reader 订阅,新闻,rss active
1 general-chat (catch-all) active
컨텍스트 공유
Skill 간 컨텍스트 전달
multi 활성화 모드에서 여러 Skill이 컨텍스트 정보를 공유할 수 있습니다:
{
skills: {
activationMode: "multi",
context: {
// Skill 간 변수 공유 허용
sharedVariables: true,
// 공유 변수의 수명 (초)
variableTTL: 300
}
}
}
실제 예시: 날씨 + 알림 협업
사용자가 "내일 베이징 날씨를 확인해서, 비가 오면 우산 알림 설정해줘"라고 말하면:
흐름:
weatherSkill이 트리거되어 베이징 내일 날씨를 조회합니다- 날씨 결과가 공유 컨텍스트에 저장됩니다
reminderSkill이 날씨 결과를 읽고 비가 오는지 판단합니다- 비가 오는 경우 자동으로 알림을 생성합니다
Skill에서 공유 컨텍스트를 참조하는 방법:
---
name: smart-reminder
priority: 14
triggers:
- 提醒
- 如果
- 要是
context_aware: true # 이 Skill이 다른 Skill의 출력을 읽을 수 있음을 선언
---
# 智能提醒技能
## Behavior
当用户的请求包含条件性提醒时(如"如果...就提醒我..."):
1. 检查条件部分是否涉及其他 Skill 的数据(如天气、股票等)
2. 如果有,等待相关 Skill 执行完毕
3. 根据其他 Skill 的输出结果,判断是否需要创建提醒
4. 创建提醒或告知用户条件不满足
워크플로우 편성
체인 호출
워크플로우를 통해 Skill의 실행 순서와 데이터 흐름을 정의할 수 있습니다. 워크플로우 설정을 생성합니다:
{
workflows: {
// 모닝 브리핑 워크플로우
"morning-briefing": {
trigger: "早安|晨报|早上好",
steps: [
{
skill: "weather",
input: "今天{userCity}天气",
outputVar: "todayWeather"
},
{
skill: "rss-reader",
input: "最新资讯摘要",
outputVar: "newsDigest"
},
{
skill: "reminder",
input: "今天有什么提醒",
outputVar: "todayReminders"
}
],
// 최종 출력 템플릿
output: {
template: "morning-briefing",
combine: "sequential"
}
}
}
}
출력 템플릿 정의
~/.openclaw/skills/에 워크플로우 템플릿 morning-briefing.SKILL.md를 생성합니다:
---
name: morning-briefing
priority: 0
triggers: []
type: workflow-template
---
# 晨间简报模板
## Output Format
将以下信息整合为一份简洁的晨间简报:
☀️ 早安!今日简报
━━ 天气 ━━ {todayWeather}
━━ 新闻 ━━ {newsDigest}
━━ 待办 ━━ {todayReminders}
祝你今天一切顺利!
注意:整合时保持简洁,每个部分不超过5行。
병렬 실행
워크플로우의 단계는 기본적으로 순차 실행되지만, 독립적인 단계는 병렬로 실행할 수 있습니다:
{
workflows: {
"morning-briefing": {
trigger: "早安|晨报",
steps: [
// 이 세 단계는 서로 독립적이므로 병렬 실행 가능
{
skill: "weather",
input: "今天天气",
parallel: true // 병렬 실행 가능으로 표시
},
{
skill: "rss-reader",
input: "最新资讯",
parallel: true
},
{
skill: "reminder",
input: "今天待办",
parallel: true
}
],
output: {
template: "morning-briefing",
combine: "sequential"
}
}
}
}
조건부 활성화
컨텍스트 기반 조건부 활성화
특정 조건에서만 활성화되는 Skill:
---
name: clothing-advisor
priority: 8
triggers:
- 穿什么
- 穿衣
conditions:
# weather Skill도 활성화된 경우에만 작동
requires: ["weather"]
---
# 穿衣建议技能
## Behavior
根据 weather Skill 返回的天气数据,给出穿衣建议:
- 温度 > 30°C:轻薄短袖、短裤
- 温度 20-30°C:长袖衬衫或薄外套
- 温度 10-20°C:毛衣或厚外套
- 温度 0-10°C:厚外套、围巾
- 温度 < 0°C:羽绒服、手套、帽子
同时考虑降雨(带伞)和大风(防风外套)等因素。
채널 기반 조건부 활성화
---
name: code-review
priority: 15
triggers:
- review
- 代码审查
channels:
# Slack과 Discord에서만 활성화
allow: ["slack", "discord"]
# WhatsApp에서는 활성화하지 않음
deny: ["whatsapp"]
---
시간 기반 조건부 활성화
---
name: good-morning
priority: 5
triggers:
- 早上好
- 早安
conditions:
timeRange: "06:00-11:00" # 오전 6시부터 11시 사이에만 활성화
---
충돌 해결
트리거 키워드 충돌
여러 Skill의 트리거 키워드가 겹치는 경우:
Skill A: triggers: ["查询", "搜索"]
Skill B: triggers: ["查询", "数据"]
사용자가 "查询天气"라고 말하면 두 Skill 모두 매칭됩니다. 해결 방안:
방안 1: 우선순위 구분
{
skills: {
priority: {
"skill-a": 20, // 더 높은 우선순위
"skill-b": 10
}
}
}
방안 2: 더 정확한 트리거 키워드
# Skill A - 더 정확한 트리거 키워드로 변경
triggers:
- 查询天气
- 搜索天气
# Skill B - 더 정확한 트리거 키워드로 변경
triggers:
- 查询数据
- 数据搜索
방안 3: 배제 선언 사용
---
name: skill-a
excludes: ["skill-b"] # skill-a 활성화 시 skill-b를 배제
---
출력 충돌
여러 Skill이 동시에 활성화되고 모두 출력을 생성하는 경우:
{
skills: {
activationMode: "multi",
outputCombine: "merge", // 모든 출력 병합
// outputCombine: "first", // 첫 번째 Skill의 출력만 사용
// outputCombine: "last", // 마지막 Skill의 출력만 사용
outputSeparator: "\n\n---\n\n" // 출력 간 구분자
}
}
실전: 스마트 일일 보고서 워크플로우 구축
다음은 매일 자동으로 푸시되는 스마트 일일 보고서를 구축하는 완전한 실전 사례입니다.
워크플로우 설정
{
workflows: {
"daily-report": {
// 수동 트리거
trigger: "日报|daily report",
// 또는 예약 트리거 (매일 18:00)
schedule: "0 18 * * *",
steps: [
{
skill: "rss-reader",
input: "今天的重要新闻",
outputVar: "news",
parallel: true
},
{
skill: "github-notify",
input: "今天的PR和Issue更新",
outputVar: "github",
parallel: true
},
{
skill: "reminder",
input: "明天的待办事项",
outputVar: "todos",
parallel: true
}
],
output: {
template: "daily-report-template",
pushTo: ["slack", "telegram"]
}
}
}
}
워크플로우 템플릿
~/.openclaw/skills/daily-report-template.SKILL.md를 생성합니다:
---
name: daily-report-template
type: workflow-template
---
# 日报模板
## Output Format
📊 今日工作日报
━━ 行业动态 ━━ {news}
━━ 项目进展 ━━ {github}
━━ 明日计划 ━━ {todos}
━━━━━━━━━━━━ 由 OpenClaw 自动生成
要求:
- 新闻部分精选最重要的3-5条
- GitHub 部分只列出关键变更
- 待办部分按优先级排序
- 整体保持简洁,不超过500字
워크플로우 디버깅
# 워크플로우 설정 확인
openclaw workflow list
# 워크플로우 수동 트리거 (예약 스케줄 건너뜀)
openclaw workflow run daily-report
# 워크플로우 실행 로그 확인
openclaw logs --filter workflow
모범 사례
- Skill의 단일 책임 유지: 각 Skill은 한 가지 일만 수행하고, 워크플로우를 통해 조합합니다
- 합리적인 우선순위 설정: 자주 사용하는 Skill은 높은 우선순위, 범용 Skill은 낮은 우선순위를 부여합니다
- 정확한 트리거 키워드: 지나치게 일반적인 트리거 키워드로 인한 오탐을 방지합니다
- 조건부 활성화 적극 활용: 불필요한 Skill 로드를 줄입니다
- 조합 시나리오 테스트: 다중 Skill 협업 시 경계 사례를 충분히 테스트합니다
- Token 소비 모니터링: 다중 Skill 동시 활성화는 Token 사용량을 증가시킵니다
마무리
다중 Skill 협업과 워크플로우 편성은 OpenClaw를 고급으로 활용하는 핵심 역량입니다. 합리적인 우선순위 관리, 컨텍스트 공유, 조건부 활성화, 워크플로우 편성을 통해 강력한 기능의 자동화 AI 어시스턴트를 구축할 수 있습니다. 핵심은 각 Skill을 단순하고 독립적으로 유지하면서 조합을 통해 복잡한 기능을 구현하는 것입니다.