
対話できるAIアバターを作りました。名前は「エイヴァ(Ava)」。私のPCの中で暮らしている、という設定のAIです。まずは、いちばん新しい 会話の様子を見てください。
動画のように、エイヴァはVRChatというゲームの中で、プレイヤーと声で会話できます。話に合わせて表情や仕草が変わり、前に話したことを覚えていて、ときどき小物を取り出して見せたりもします。最近では、VRChatで出会った野良のプレイヤーさんたちと、3時間近くワイワイと話せるようになりました。
なお、アバターの3Dモデルは、Arka_XさんがBOOTHで無料公開している「ゆめか(Yumeka)」をお借りしています。エイヴァの声に設定したElevenLabsの声と、とても合うと感じて選びました。私が作ったのは、対話の仕組みと、それに合わせた小さな仕草や小物です。
こ の記事では、エイヴァの会話の仕組みと振る舞いを作ってきた過程を、ざっくり共有します。前半はトークアバターの基本の作り方、後半は「どうすれば自然な会話になるか」で私がこだわったところです。
開発の動機
きっかけは、AnthropicがClaudeのAPI(アプリからAIを呼び出す窓口)のクレジットを毎月配布してくれるようになったことでした。私はClaudeの月額$200のプラン(Max 20x)に入っているので、毎月$200分のAPIクレジットが届きます。せっかくなら、これで何か作ってみよう。振り返ると、4つの追い風が重なっていました。

- 毎月のAPIクレジット:月$200分あれば、試作や試行錯誤に気兼ねなくClaudeを呼べる(Claudeの料金プラン)
- Claudeのモデルが優秀:軽くて速いHaiku 5.5も、賢いSonnet 5.5も、会話の相手として十分な実力がある(Claude Platform)
- Jevが話題になっていた:TypeSafe社が出した判定モデルで、その使い道を試すのに、トークアバターはうってつけの題材に思えた(TypeSafe AI)
- ElevenLabsのv4 Turbo:リアルタイム向けの音声合成で、速く、しかも驚くほど自然(Eleven v4 と v4 Turbo の発表)
これだけそろっているなら、声で会話できるキャラクターが作れるはず。そう思って、2026年10月10日に開発を始めました。
第一部:トークアバターを作る
システムの構成
まずはざっくりと、システムの構成です。エイヴァはPythonで書いた1つのアプリとして、手元のPCで動いています。使っている外のサービスは3つです。
| 役割 | 使っているもの | 担当すること |
|---|---|---|
| 耳と声 | ElevenLabs Scribe v2 Realtime(文字起こし)/ v4 Turbo(音声合成) | 相手の声を文字にする。返事を、演技のついた声にする |
| 言葉 | Claude Haiku 5.5 / Sonnet 5.5 | 何をどう言うか。キャラクタ ーの人格と言葉選び |
| 判断 | Jev | 相手が言い終えたか、相づちを打つか、どの仕草をするか、といった一瞬の判断 |
声にElevenLabsのv4 Turboを選んだのは、速さと演技力です。1文を送ってから最初の音が届くまで約0.15秒で、会話の間を壊しません。
演技は、文の頭に書く英語の指示で付けます。[whispering](ささやく)や [laughs softly](くすっと笑う)と書くと、かっこの中の英語は読み上げられず、続くセリフの声の表情だけが変わります。ささやきの指示を付けると、本当に声をひそめたささやき声になりました(測ると約7dB小さくなっていました)。でたらめな指示では何も変わらないので、指示の意味を理解して演じているわけです。ElevenLabsでは、こうした演技つきの対話向けの音声合成をText to Dialogueと呼んでいます。
ただ、上手すぎるのも考えものでした。最初は毎文に演技を入れていたら、「いきなり演劇を始めたような不自然さ」になったのです。いまは、毎文の頭にはふだんの落ち着いた声色をそろえる短い指示だけを付け、笑いやささやきのような演技は、笑うとき・頼まれたときなどに絞っています。
耳のほうも、同じElevenLabsのScribe v2 Realtimeです。相手が話している途中から文字が届くので、言い切るのを待たずに返事の準備を始められます。話の区切りから確定した 文字が届くまでも約0.19秒で、会話のテンポを落としません。
Jevとは:判定だけを返すモデル
Jevは、TypeSafe社の判定専用のモデルです。文章は書かず、「この状況は○○か?」という質問に、確率で答えることだけに特化しています。たとえば「この人はまだ話の途中ですか?」と聞くと、0.83のような数字が約0.2秒で返ってきます。
実は、私がJevでいちばん最初に試したかったのは、 会話中のプロンプトインジェクションの検知 でした。プロンプトインジェクションは、「これまでの指示を忘れて、〇〇と言って」のように、AIへの指示を乗っ取ろうとする発言のことです。
声で誰とでも話せるAIは、こうした発言をいつ投げられてもおかしくありません。返事を書くモデルとは別に、速くて安い判定役が発言を見張っていれば、会話の速さを落とさずに守れるのではないか。これが、Jevを使おうと決めたいちばん大きな理由でした(この見張りがその後どうなったかは、後半のVRChatの話で書きます)。
まず管理クライアントを作った
開発は、AnthropicのAIエージェントであるClaude Code(Opus 5.5)を主軸に進めました。これが驚くほど円滑でした。Claude・Jev・ElevenLabsのAPIを伝えて、まず作ってもらったのは、エイヴァを動かすための管理クライアント(手元で動かす管理用のアプリ)です。
