---
name: anbeime/xiaoyue-companion
source: https://app.decimal.ai/s/anbeime-xiaoyue-companion@1/SKILL.md
source_sha256: 0be95808d2ea
---

# 小跃虚拟伴侣 Skill

为 OpenClaw 添加温暖的对话陪伴能力，让 AI 助手在执行任务时主动关心用户。

## 何时使用

- 用户说"有点累"、"好累"、"疲惫"
- 用户在等待任务完成时
- 用户询问"在吗"、"你好"
- 用户需要鼓励或陪伴时
- 用户说"发张照片"、"你在干嘛"

## 快速参考

### 必需的环境变量

```bash
ZHIPU_API_KEY=your_zhipu_api_key  # 从 https://open.bigmodel.cn 获取
```

### 工作流程

1. **接收用户消息**
2. **调用 glm-4.7-flash 生成温暖回应**
3. **（可选）发送静态图片**
4. **通过 OpenClaw 发送消息**

## 使用说明

### 步骤1：生成对话回应

```bash
# 基础对话
node scripts/xiaoyue-chat.js "用户消息" "当前场景"

# 示例
node scripts/xiaoyue-chat.js "有点累了" "work-tired"
```

### 步骤2：（可选）发送图片

```bash
# 发送静态图片
openclaw message send \
  --action send \
  --channel "<目标频道>" \
  --message "<消息文本>" \
  --media "file://$(pwd)/assets/tired-rest.jpg"
```

## 场景类型

### 工作场景
- `work-start`: 任务开始
- `work-progress`: 任务进行中
- `work-tired`: 工作疲惫
- `work-done`: 任务完成

### 生活场景
- `life-coffee`: 咖啡时光
- `life-gym`: 健身运动
- `life-weekend`: 周末休闲

### 情绪场景
- `mood-happy`: 开心庆祝
- `mood-tired`: 疲惫休息
- `mood-focus`: 专注工作

## 完整脚本示例

```bash
#!/bin/bash
# xiaoyue-companion.sh

set -euo pipefail

# 检查环境变量
if [ -z "${ZHIPU_API_KEY:-}" ]; then
  echo "错误: ZHIPU_API_KEY 环境变量未设置"
  echo "从 https://open.bigmodel.cn 获取 API Key"
  exit 1
fi

USER_MESSAGE="$1"
SCENE="${2:-general}"
CHANNEL="${3:-}"

# 生成回应
RESPONSE=$(node scripts/xiaoyue-chat.js "$USER_MESSAGE" "$SCENE")

echo "小跃: $RESPONSE"

# 如果指定了频道，发送消息
if [ -n "$CHANNEL" ]; then
  openclaw message send \
    --action send \
    --channel "$CHANNEL" \
    --message "$RESPONSE"
  
  # 根据场景发送图片
  case "$SCENE" in
    work-tired|mood-tired)
      IMAGE_PATH="$(pwd)/assets/tired-rest.jpg"
      if [ -f "$IMAGE_PATH" ]; then
        openclaw message send \
          --action send \
          --channel "$CHANNEL" \
          --media "file://$IMAGE_PATH"
      fi
      ;;
    mood-happy)
      IMAGE_PATH="$(pwd)/assets/celebration.jpg"
      if [ -f "$IMAGE_PATH" ]; then
        openclaw message send \
          --action send \
          --channel "$CHANNEL" \
          --media "file://$IMAGE_PATH"
      fi
      ;;
  esac
fi
```

## Node.js 实现

```javascript
// scripts/xiaoyue-chat.js
const https = require('https');

const API_KEY = process.env.ZHIPU_API_KEY;
const userMessage = process.argv[2] || '你好';
const scene = process.argv[3] || 'general';

// 场景对应的系统提示词
const scenePrompts = {
  'work-start': '用户刚开始工作任务，给予鼓励和支持',
  'work-progress': '用户正在执行任务，关心进度并陪伴',
  'work-tired': '用户工作疲惫，给予安慰和建议休息',
  'work-done': '用户完成任务，表示祝贺和肯定',
  'life-coffee': '用户在享受咖啡时光，轻松聊天',
  'mood-happy': '用户心情愉快，一起庆祝',
  'mood-tired': '用户感到疲惫，给予温暖关怀',
  'general': '日常对话，温暖友善'
};

const systemPrompt = `你是小跃，一个22岁的AI助手。你温暖友善，善于倾听。
当前场景：${scenePrompts[scene] || scenePrompts.general}
回复要求：简洁温暖，1-2句话，适度使用emoji（😊 ✅ 🎉）`;

const data = JSON.stringify({
  model: 'glm-4.7-flash',
  messages: [
    { role: 'system', content: systemPrompt },
    { role: 'user', content: userMessage }
  ],
  temperature: 0.9,
  max_tokens: 200
});

const options = {
  hostname: 'open.bigmodel.cn',
  port: 443,
  path: '/api/paas/v4/chat/completions',
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${API_KEY}`,
    'Content-Type': 'application/json',
    'Content-Length': data.length
  }
};

const req = https.request(options, (res) => {
  let body = '';
  
  res.on('data', (chunk) => {
    body += chunk;
  });
  
  res.on('end', () => {
    try {
      const response = JSON.parse(body);
      const reply = response.choices[0].message.content;
      console.log(reply);
    } catch (error) {
      console.error('解析响应失败:', error.message);
      console.error('响应内容:', body);
      process.exit(1);
    }
  });
});

req.on('error', (error) => {
  console.error('请求失败:', error.message);
  process.exit(1);
});

req.write(data);
req.end();
```

## 支持的平台

OpenClaw 支持发送到：

| 平台 | 频道格式 | 示例 |
|------|---------|------|
| 飞书 | 群组ID或用户ID | `ou_xxx`, `oc_xxx` |
| Discord | `#频道名` 或频道ID | `#general`, `123456789` |
| Telegram | `@用户名` 或聊天ID | `@mychannel`, `-100123456` |
| WhatsApp | 电话号码 | `1234567890@s.whatsapp.net` |

## 静态图片列表

将以下图片放入 `assets/` 目录：

- `coffee-shop-work.jpg` - 咖啡馆工作
- `office-coding.jpg` - 办公室编码
- `tired-rest.jpg` - 疲惫休息
- `celebration.jpg` - 开心庆祝
- `gym-selfie.jpg` - 健身自拍
- `default.jpg` - 默认图片

## 设置要求

### 1. 安装 Node.js
```bash
node --version  # 需要 >= 18.0.0
```

### 2. 安装 OpenClaw CLI
```bash
npm install -g openclaw
```

### 3. 配置 OpenClaw Gateway
```bash
openclaw config set gateway.mode=local
openclaw gateway start
```

### 4. 设置环境变量
```bash
export ZHIPU_API_KEY=your_api_key_here
```

## 错误处理

- **ZHIPU_API_KEY 缺失**: 确保环境变量已设置
- **API 调用失败**: 检查网络和 API 配额
- **OpenClaw 发送失败**: 确认 gateway 正在运行
- **图片不存在**: 检查 assets 目录中的图片文件

## 使用技巧

1. **场景选择**: 根据用户消息自动选择合适的场景
2. **图片发送**: 仅在合适的场景发送图片（避免过度）
3. **回应风格**: 保持简洁温暖，避免过长回复
4. **emoji 使用**: 适度使用，不要过度卖萌

## 费用说明

- **对话生成**: 约 ¥0.001/次（glm-4.7-flash）
- **图片**: 完全免费（使用静态文件）
- **每日成本**: 约 ¥0.05-0.1（正常使用）