実体: templates/line-bot/(このキットのLINE公式アカウントAI社員bot金型)
実証: line-harness-oss(ai-shain.link で実運用中の「りんく」)
りんく
りんくは、ふだんは1番手のAI(Groq)が答えています。とても速くて、無料で、たいていの会話はこれで十分です。
でも、AIサービスにも「混んでいて返事が遅い」「一時的に調子が悪い」という日があります。
もし1番手が答えられなかったら、りんくは黙り込むのではなく、
こっそり2番手(Gemini)、それでもダメなら3番手(Cloudflare Workers AI)に聞きに行きます。
ユーザーからは「誰が答えたか」は見えません。見えるのは「ちゃんと返事が来た」ということだけです。
bot.config.json の llm.chain に定義された順に試し、最初に成功した段の応答を採用する。全滅時のみ定型お詫び文言まで落ちる。
| 段 | 役割 | 特徴 |
|---|---|---|
| 1番手Groq | ふだんの主力 | 最速。既存キャラプロンプトの調律先 |
| 2番手Gemini | 安定担当 | 無料枠が寛大・可用性が高い。未設定でも自動スキップ |
| 3番手Workers AI | 最終防波堤 | Worker内バインディング経由=外部ネットワーク障害の影響を受けない |
LINEの返信トークンは発行から約60秒で失効する。各段には個別のタイムアウトがあり、 「残り時間が足りない段は丸ごとスキップして次へ」という残り時間駆動で動く。 前段の処理(友だち情報の取得・DB検索等)が想定外に遅延しても、必ずどこかの段か 定型文の床まで到達する。
送信側にも保険があり、replyMessage(返信トークン方式)が失敗した場合は、
自動でpushMessage(トークン不要、いつでも送れる)に切り替える。
これが効くのは、従来なら「例外を握りつぶして完全に無言化」していたはずの経路。
既定¥0/月。Gemini・Workers AIはGroq障害時にしか呼ばれないため、 通常運用では無料枠の範囲に収まる。全プロバイダが同時に不調な月でも、 従量課金化した場合の見積りは数百円規模にとどまる。
templates/line-bot/worker/src/services/llm-providers.ts — Groq/Gemini/Workers AIの共通呼び出し層templates/line-bot/worker/src/services/llm-chain.ts — 3段を順に試すフォールバックチェーンtemplates/line-bot/worker/src/routes/webhook.ts — safeSendText(送信保険)の実装箇所templates/line-bot/bot.config.json — llm.chain でチェーン構成を編集LINE公式アカウント「りんく」で、ユーザーが際どい話題を含むメッセージを送った直後から、 そのユーザー宛の返信が一切来なくなった。ログを見ると、受信は記録されているのに送信ログが1件も無い状態だった。
ai_reply_mode(担当者引き継ぎフラグ)がhumanのまま固定されていないか → 確認したがbotのまま。原因ではないその上で今回の無応答ゼロ化チェーンを実装。今後同種の問題(1社のAPI障害・タイムアウト・ コンテンツフィルタの不可解な挙動)が起きても、自動で次のAIに切り替わるため、 「気づいたら数日間ずっと無言だった」という事態を構造的に防げる。
出典: _docs/LINE-BOT-EXTRACTION-NOTES.md(移植判断の記録)/
line-harness-oss 実運用ログ(2026-07-16〜17)。
app.config.json の lineBot セクションを埋めて enabled: true にtemplates/line-bot/ をアプリの line-bot/ にコピーし、{{...}} を置換LINE_CHANNEL_ACCESS_TOKEN / LINE_CHANNEL_SECRET / GROQ_API_KEYGEMINI_API_KEY も投入する。Google AI Studioで無料発行できる。未設定でもGroq→Workers AIの2段構成として動くwrangler.toml の [ai] バインディングはテンプレートに同梱済み。追加設定は不要くわしい手順は templates/line-bot/README.md を参照。