🐕

OpenClawのAIエージェントだけでDiscordリアルタイム音声チャットBotを作った話

に公開

開発環境

開発のやり取りは、すべてDiscordのテキストチャンネルで行った。

OpenClawのAIエージェントがDiscordに常駐していて、そこにメッセージを送ると、エージェントがファイルを読み書きし、コマンドを実行し、コードを書く。IDEもターミナルも開いていない。Discordでチャットしているだけ。

つまり「Voice Botを作る」という開発作業自体が、AIとのチャットで完結した。

やったこと

Discordのボイスチャンネルで、人間と自然に会話できるBotを作った。

  • 人間が話す → 文字起こし → LLMが返答生成 → 音声合成 → Botが喋る

リアルタイム双方向の音声チャット。割り込みもできる。会話の記憶も保持される。

そして、このBotの設計・実装・デバッグ・デプロイは、すべてAIエージェントがやった。

人間がやったこと

指示を出しただけ。

  • 「Discordのボイスチャットで会話できるBot作りたい」
  • 「発話の頭が欠けてる、直して」
  • 「割り込みが効くようにして」
  • 「OpenClaw経由にして」
  • 「返答がチャットっぽい、もっと話し言葉で」
  • 「速度上げて」

コードは1行も書いていない。方向性を示して、動作を確認して、フィードバックを返す。それだけ。

AIエージェントがやったこと

全部。

  • 構成の設計(STT/LLM/TTSの選定と接続方法)
  • Node.jsでの実装(Discord.js、Deepgram、VOICEVOX連携)
  • 発話の頭欠け対策(プリロール機構の設計・実装)
  • 割り込み検出(barge-in対応)
  • OpenClaw Gateway統合(エージェントルーティング、セッション維持)
  • システムプロンプトの調整(音声向けの文体チューニング)
  • TTS速度パラメータの追加
  • systemdでの常駐化
  • ドキュメント作成

問題が起きたら原因を調査し、修正案を出し、実装し、テストする。このループを人間の指示なしで回せる。

なぜOpenClawを使ったか

Voice BotのLLM部分をOpenClaw Gateway経由にしたことで、いくつかの利点があった。

1. Botの実装が薄くなる

OpenClaw Gatewayは /v1/chat/completions をOpenAI互換で提供する。Bot側はOpenAI SDKの baseURL を差し替えるだけ。

const openai = new OpenAI({
  apiKey: gatewayToken,
  baseURL: 'http://127.0.0.1:18789/v1'
});

Bot自体は「音声の入出力」に専念できる。LLMの選定、プロンプト設計、会話の記憶管理はOpenClaw側に任せる。

2. 会話の記憶をOpenClawに寄せられる

OpenClaw Gatewayは user パラメータからセッションを導出してくれる。

await openai.chat.completions.create({
  model: 'agent:vc-agent',
  user: `discord:${userId}`,
  messages: [systemPrompt, { role: 'user', content: userMessage }]
});

Bot側で会話履歴を管理する必要がない。同じユーザーなら、前回の会話を覚えている。

3. エージェント単位でモデルを切り替えられる

model: "agent:vc-agent" のように指定すると、OpenClaw側で定義したエージェントにルーティングされる。

エージェントごとにモデル(Claude、GPT、Geminiなど)を設定できるので、Bot側のコードを変えずにモデルを切り替えられる。

4. テキストチャットと音声チャットで同じエージェントを共有できる

OpenClawエージェントは、Discordのテキストチャンネルでも使える。音声Botと同じエージェントを指定すれば、テキストで話した内容を音声側でも覚えている(逆も同様)。

「さっきテキストで送った件だけど」が通じる。

開発スタイルとしての気づき

AIエージェントによる開発は「プログラミングができなくても作れる」という話ではない。

「何を作りたいか」と「これで良いか」の判断に人間が集中し、実装はAIに任せるという分業。

今回の開発で人間がやったのは:

  • ゴールの設定(「ボイスチャットで会話したい」)
  • 品質の判断(「頭が欠けてる」「これくらいの速度でいい」)
  • 方針の決定(「OpenClawに寄せよう」「細かい制限は要らない」)

実装の詳細(どのAPIを叩くか、どうバッファリングするか、どこでエラーハンドリングするか)はAIエージェントが判断した。

結果として、リアルタイム音声処理という割と難しい領域のシステムが、数日の対話で動くところまで行った。

構成(参考)

最終的な構成はこうなった。

  • 音声入力: Discord VC → @discordjs/voice
  • STT: Deepgram Streaming API
  • LLM: OpenClaw Gateway → Claude Sonnet 4.5(エージェント経由)
  • TTS: VOICEVOX(ローカル)
  • 実行環境: EC2 (Ubuntu) + systemd user service

まとめ

  • Discordでリアルタイム双方向音声チャットBotを作った
  • 設計から実装まで、すべてAIエージェントが担当した
  • OpenClawを使うことで、Bot実装を薄くし、記憶やモデル管理をGateway側に寄せられた
  • 人間は「何を作りたいか」「これで良いか」に集中する開発スタイルが成立した

Discussion