メインコンテンツまでスキップ

Raspberry Pi 4 の Slack ボットから AICU API を使う — 生成・X 読み取り・文字起こしを鍵 1 本で

· 約5分
AICU API Team
api.aicu.ai

Written by AICU API Team

AICU 編集部の Slack ボット「AiCuty」は、Raspberry Pi 4(8GB)の Docker Compose 上で動いています。 記事の初稿を書き、カバー画像を描き、X の投稿を引用カードにし、動画を文字起こしする 18 本のコマンドのうち、 生成 AI を呼ぶものはすべて AICU API の鍵 1 本で動くように寄せました。 このページは、その構成と、各コマンドがどのエンドポイントをどう呼んでいるかの技術メモです。 移植の経緯や運用の教訓は、しらいはかせの連載(note / 窓の杜)に譲ります。

構成​

Raspberry Pi 4 は入口と組み立てだけ。重い仕事は API へ

  • Raspberry Pi 4 Model B(8GB)、Debian 13、Docker Compose。ボットは Slack Socket Mode で接続するので、Pi 側にポート開放も Tunnel も要りません
  • 常駐メモリ 106 MB、CPU 温度 61 ℃(アイドル相当)。Pi の CPU で LLM 推論や画像生成はしません
  • 生成 AI の呼び出しは https://api.aicu.ai/v1 に集約。鍵は 1 本(スコープ llm / images / tts / x)

コマンドと経路​

コマンドエンドポイントモデル目安
generate(記事初稿+カバー)POST /v1/chat/completions + POST /v1/images/editsgpt-5.6-sol + gpt-image-2.5-flare本文 約 7,700 AP・53〜62 秒、カバー 5,100 AP・約 20 秒
preview(内容分析)POST /v1/chat/completionsgpt-5.6-sol本文生成より軽い
xshot(X の引用カード)GET /v1/x/status/:id + ローカル描画(Pillow)—数秒。現在 0 AP、2026-09-23 から上流参照 1 回 100 AP
gpt-image2 系(参照画像つき)POST /v2.5/images/edits(OpenAI SDK 同形)gpt-image-2.5-flare / -sunburst1536×1024 high 5,100 AP。flare 約 20 秒、sunburst 約 67 秒
whisper youtube(文字起こし)POST /v1/audio/transcriptionswhisper-large-v3-turbo音声 10 秒 = 3 AP

banana(Gemini 固有の画像モデル)だけは Gemini の鍵が要ります。xheader / kdp / upload / members などはローカル処理と R2 で、API を呼びません。

X の投稿を 1 回で引用カードにする​

X は未ログインのアクセスに投稿ページを返さなくなったため(HTTP 403)、ブラウザのスクリーンショットは使えなくなりました。 GET /v1/x/status/:id は本文・著者・投稿日時に加えて添付メディアを返すので、カードはボット側で組めます。

curl https://api.aicu.ai/v1/x/status/2099311063212994603 \
-H "Authorization: Bearer $AICU_API_KEY"
{
"id": "2099311063212994603",
"text": "台風14号の進路予想を更新しました …",
"author": { "username": "wni_jp", "name": "ウェザーニュース", "profile_image_url": "https://pbs.twimg.com/…" },
"created_at": "2026-09-14T01:35:35.000Z",
"media": [
{ "type": "photo", "url": "https://pbs.twimg.com/media/….png", "width": 800, "height": 600 }
]
}
  • media[] は添付の順。無ければ []。type は photo / video / animated_gif。動画は url が mp4、サムネイルは preview_image_url
  • alt_text は元の投稿に代替テキストがあるときだけ付きます
  • 同じ id は 10 分間サーバ側でキャッシュされ、その間の再取得は無料
  • id は x.com/<user>/status/<id> の末尾の数字。X の API キーは要りません

ボット側は media[0] を本文の下に貼り(高さ 560 px 上限)、created_at を JST に直し、出典 URL を添えるだけです。

画像生成を OpenAI SDK のまま向ける​

POST /v2.5/images/edits は OpenAI の images.edit() と同じ multipart を受けます。SDK の base_url を変えるだけで動きます。

from openai import OpenAI
client = OpenAI(base_url="https://api.aicu.ai/v2.5", api_key=os.environ["AICU_API_KEY"])
img = client.images.edit(model="gpt-image-2.5-flare", image=open("ref.png", "rb"),
prompt="記事カバー。参照画像の人物をそのまま、背景を秋の書店に",
size="1536x1024", quality="high")

quality は low / medium / high。xhigh / max も 2026-09-21 から使えますが、60 秒を超えると結果はメールで届くため、Slack にその場で返すボットには向きません。 /v1/images/edits は AICU 独自の JSON(reference_image に base64)なので、SDK からは /v2.5 を使ってください。

文字起こしを Pi の CPU から外す​

Pi 4 の faster-whisper(small)は 48 秒の音声に約 5 分かかります。同じ音声を API に投げると数秒で、15 AP です。

curl https://api.aicu.ai/v1/audio/transcriptions \
-H "Authorization: Bearer $AICU_API_KEY" \
-F model=whisper-large-v3-turbo -F file=@clip.mp3 -F response_format=srt

yt-dlp と ffmpeg で音声を切り出すところまでが Pi の仕事です。1 リクエスト 30 MB / 30 分まで。

料金(2026-09-14 時点・1 USD = 10,000 AP・課金は HTTP 200 のみ)​

用途エンドポイント料金
画像生成(GPT-Image-2.5 Flare / Sunburst)/v1/images/generations /v1/images/edits /v2.5/images/edits1024×1024: low 700 / medium 1,600 / high 6,400 AP。1536×1024: 1,300 / 2,300 / 5,100 AP
X の投稿 1 件(添付つき)/v1/x/status/:id現在 0 AP。2026-09-23 から上流参照 1 回 100 AP(10 分キャッシュ、ヒットは 0)
X のプロフィール/v1/x/user/:username現在 0 AP。2026-09-23 から 100 AP
X のタイムライン・検索/v1/x/timeline/:username /v1/x/search2,250 AP/回
文字起こし/v1/audio/transcriptions音声 10 秒 = 3 AP

X の投稿取得は 9 月 13 日の告知で 10 AP としていましたが、添付メディアまで返す拡張に合わせて 100 AP に改めました(改訂告知 9 月 14 日、発効の 9 日前)。

仕様​