ベルト CLI スキルのインストール:
npx skills add belt-sh/cli
AI 自動化ワークフロー
inference.sh CLI を使用して自動化された AI ワークフローを構築します。

クイックスタート
inference.sh CLI(
belt)が必要です。インストール手順
belt login
# シンプルな自動化: 日次画像生成
belt app run falai/flux-dev --input '{
"prompt": "インスピレーショナルな名言の背景、ミニマルデザイン、日付: '"$(date +%Y-%m-%d)""
}'
自動化パターン
パターン 1: バッチ処理
同じワークフローで複数のアイテムを処理します。
#!/bin/bash
# batch_images.sh - 複数のプロンプトから画像を生成
PROMPTS=(
"朝日の山の風景"
"夕日の海の波"
"秋の森の小道"
"夜の砂漠の砂丘"
)
for prompt in "${PROMPTS[@]}"; do
echo "生成中: $prompt"
belt app run falai/flux-dev --input "{
\"prompt\": \"$prompt, プロフェッショナルな写真、4K\"
}" > "output_${prompt// /_}.json"
sleep 2 # レート制限
done
パターン 2: 逐次パイプライン
複数の AI 操作をチェーンします。
#!/bin/bash
# content_pipeline.sh - 完全なコンテンツ作成パイプライン
TOPIC="医療におけるAI"
# ステップ 1: リサーチ
echo "リサーチ中..."
RESEARCH=$(belt app run tavily/search-assistant --input "{
\"query\": \"$TOPIC 最新の開発\"
}")
# ステップ 2: 記事執筆
echo "記事執筆中..."
ARTICLE=$(belt app run openrouter/claude-sonnet-45 --input "{
\"prompt\": \"$TOPIC に関する500語のブログ記事を執筆。元データ: $RESEARCH\"
}")
# ステップ 3: 画像生成
echo "画像生成中..."
IMAGE=$(belt app run falai/flux-dev --input "{
\"prompt\": \"$TOPIC に関する記事のヘッダー画像、モダンでプロフェッショナル\"
}")
# ステップ 4: ソーシャル投稿生成
echo "ソーシャル投稿作成中..."
SOCIAL=$(belt app run openrouter/claude-haiku-45 --input "{
\"prompt\": \"以下を要約するTwitterスレッド(5ツイート)を執筆: $ARTICLE\"
}")
echo "パイプライン完了!"
パターン 3: 並列処理
複数の操作を同時に実行します。
#!/bin/bash
# parallel_generation.sh - 複数のアセットを並列生成
# すべてのジョブをバックグラウンドで開始
belt app run falai/flux-dev --input '{"prompt": "ヒーロー画像..."}' > hero.json &
PID1=$!
belt app run falai/flux-dev --input '{"prompt": "機能画像 1..."}' > feature1.json &
PID2=$!
belt app run falai/flux-dev --input '{"prompt": "機能画像 2..."}' > feature2.json &
PID3=$!
# すべての完了を待機
wait $PID1 $PID2 $PID3
echo "すべての画像が生成されました!"
パターン 4: 条件分岐ワークフロー
結果に基づいて分岐します。
#!/bin/bash
# conditional_workflow.sh - コンテンツ分析に基づく処理
INPUT_TEXT="$1"
# コンテンツ分析
ANALYSIS=$(belt app run openrouter/claude-haiku-45 --input "{
\"prompt\": \"このテキストを positive、negative、neutral のいずれかに分類。分類のみを返してください。\n\n$INPUT_TEXT\"
}")
# 結果に基づいて分岐
case "$ANALYSIS" in
*positive*)
echo "お祝い画像を生成中..."
belt app run falai/flux-dev --input '{"prompt": "お祝い、成功、幸せ"}'
;;
*negative*)
echo "サポートメッセージを生成中..."
belt app run openrouter/claude-sonnet-45 --input "{
\"prompt\": \"以下へのサポート的で励ましの返答を執筆: $INPUT_TEXT\"
}"
;;
*)
echo "中立的な確認を生成中..."
;;
esac
パターン 5: フォールバック付きリトライ
障害を適切に処理します。
#!/bin/bash
# retry_workflow.sh - 失敗した操作のリトライ
generate_with_retry() {
local prompt="$1"
local max_attempts=3
local attempt=1
while [ $attempt -le $max_attempts ]; do
echo "試行 $attempt..."
result=$(belt app run falai/flux-dev --input "{\"prompt\": \"$prompt\"}" 2>&1)
if [ $? -eq 0 ]; then
echo "$result"
return 0
fi
echo "失敗、リトライ中..."
((attempt++))
sleep $((attempt * 2)) # 指数バックオフ
done
# 別のモデルにフォールバック
echo "代替モデルにフォールバック中..."
belt app run google/imagen-3 --input "{\"prompt\": \"$prompt\"}"
}
generate_with_retry "山々に沈む美しい夕日"
スケジュール自動化
Cron ジョブ設定
# crontab を編集
crontab -e
# 毎日9時に日次コンテンツ生成
0 9 * * * /path/to/daily_content.sh >> /var/log/ai-automation.log 2>&1
# 毎週月曜8時に週次レポート
0 8 * * 1 /path/to/weekly_report.sh >> /var/log/ai-automation.log 2>&1
# 6時間ごとにソーシャルメディアコンテンツ
0 */6 * * * /path/to/social_content.sh >> /var/log/ai-automation.log 2>&1
日次コンテンツスクリプト
#!/bin/bash
# daily_content.sh - 毎日9時に実行
DATE=$(date +%Y-%m-%d)
OUTPUT_DIR="/output/$DATE"
mkdir -p "$OUTPUT_DIR"
# 日次引用画像を生成
belt app run falai/flux-dev --input '{
"prompt": "やる気を引き出す名言背景、ミニマル、朝の雰囲気"
}' > "$OUTPUT_DIR/quote_image.json"
# 日次ヒントを生成
belt app run openrouter/claude-haiku-45 --input '{
"prompt": "今日のための実行可能な生産性向上のヒントを1つください。簡潔に。"
}' > "$OUTPUT_DIR/daily_tip.json"
# ソーシャルに投稿(任意)
# belt app run twitter/post-tweet --input "{...}"
echo "日次コンテンツを生成しました: $DATE"
監視とログ取得
ログラッパー
#!/bin/bash
# logged_workflow.sh - 包括的なログ付き
LOG_FILE="/var/log/ai-workflow-$(date +%Y%m%d).log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
log "ワークフローを開始"
# 実行時間を計測
START_TIME=$(date +%s)
# ワークフローを実行
log "画像生成中..."
RESULT=$(belt app run falai/flux-dev --input '{"prompt": "test"}' 2>&1)
STATUS=$?
if [ $STATUS -eq 0 ]; then
log "成功: 画像を生成しました"
else
log "エラー: $RESULT"
fi
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
log "${DURATION}秒で完了"
エラーアラート
#!/bin/bash
# monitored_workflow.sh - エラーアラート付き
run_with_alert() {
local result
result=$("$@" 2>&1)
local status=$?
if [ $status -ne 0 ]; then
# アラート送信(webhook、メールなど)
curl -X POST "https://your-webhook.com/alert" \
-H "Content-Type: application/json" \
-d "{\"error\": \"$result\", \"command\": \"$*\"}"
fi
echo "$result"
return $status
}
run_with_alert belt app run falai/flux-dev --input '{"prompt": "test"}'
Python SDK 自動化
#!/usr/bin/env python3
# automation.py - Python ベースのワークフロー
import subprocess
import json
from datetime import datetime
from pathlib import Path
def run_infsh(app_id: str, input_data: dict) -> dict:
"""inference.sh アプリを実行し結果を返す"""
result = subprocess.run(
["belt", "app", "run", app_id, "--input", json.dumps(input_data)],
capture_output=True,
text=True
)
return json.loads(result.stdout) if result.returncode == 0 else None
def daily_content_pipeline():
"""日次コンテンツを生成"""
date_str = datetime.now().strftime("%Y-%m-%d")
output_dir = Path(f"output/{date_str}")
output_dir.mkdir(parents=True, exist_ok=True)
# 画像を生成
image = run_infsh("falai/flux-dev", {
"prompt": f"{date_str} のための日次インスピレーション、美しく、感動的"
})
(output_dir / "image.json").write_text(json.dumps(image))
# キャプションを生成
caption = run_infsh("openrouter/claude-haiku-45", {
"prompt": "日々のモチベーション投稿のためのインスピレーションあふれるキャプションを書いてください。2~3文。"
})
(output_dir / "caption.json").write_text(json.dumps(caption))
print(f"{date_str} のコンテンツを生成しました")
if __name__ == "__main__":
daily_content_pipeline()
ワークフローテンプレート
コンテンツカレンダー自動化
#!/bin/bash
# content_calendar.sh - 1週間分のコンテンツを生成
TOPICS=("生産性" "ウェルネス" "テクノロジー" "創造性" "リーダーシップ")
DAYS=("月曜日" "火曜日" "水曜日" "木曜日" "金曜日")
for i in "${!DAYS[@]}"; do
DAY=${DAYS[$i]}
TOPIC=${TOPICS[$i]}
echo "$DAY の $TOPIC に関するコンテンツを生成中..."
# 画像
belt app run falai/flux-dev --input "{
\"prompt\": \"$TOPIC テーマ、$DAY のモチベーション、ソーシャルメディアスタイル\"
}" > "content/${DAY}_image.json"
# キャプション
belt app run openrouter/claude-haiku-45 --input "{
\"prompt\": \"$TOPIC に関する $DAY のモチベーション投稿を執筆。ハッシュタグを含めること。\"
}" > "content/${DAY}_caption.json"
done
データ処理パイプライン
#!/bin/bash
# data_processing.sh - データファイルを処理・分析
INPUT_DIR="./data/raw"
OUTPUT_DIR="./data/processed"
for file in "$INPUT_DIR"/*.txt; do
filename=$(basename "$file" .txt)
# コンテンツを分析
belt app run openrouter/claude-haiku-45 --input "{
\"prompt\": \"このデータを分析し、JSON 形式で主要なインサイトを提供: $(cat $file)\"
}" > "$OUTPUT_DIR/${filename}_analysis.json"
done
ベストプラクティス
- レート制限 - API 呼び出し間に遅延を入れる
- エラーハンドリング - 常に戻りコードをチェックする
- ログ取得 - すべての操作を記録する
- 冪等性 - 安全な再実行を設計する
- 監視 - 障害時にアラートを送る
- バックアップ - 中間結果を保存する
- タイムアウト - 適切な制限時間を設定する
関連スキル
# コンテンツパイプライン
npx skills add inference-sh/skills@ai-content-pipeline
# RAG パイプライン
npx skills add inference-sh/skills@ai-rag-pipeline
# ソーシャルメディア自動化
npx skills add inference-sh/skills@ai-social-media-content
# フルプラットフォームスキル
npx skills add inference-sh/skills@infsh-cli
すべてのアプリを閲覧: belt app list