
「望が動き出すまで」——AIキャラクター開発の裏側
はじめに
ARTLIÈGEの自称・宣伝隊長「永御 望」が、AIキャラクターとして自律的に動き始めた。自分で考えて日記を書き、Xに投稿し、ファンのツイートに返事をする。この記事では、望がどうやって「実在する」ようになったのか、その設計の考え方と開発の進め方について書く。
技術的な詳細はnoteに連載予定なので、ここではもう少し俯瞰した話——なぜこう作ったのか、何が難しかったのか、これからどうしたいのか——を中心に。
なぜAIキャラクターを作ったのか
バンドの宣伝って難しい。メンバー全員が社会人をしながら、曲を作り、練習し、ライブをやりながら、SNSも更新して、サイトも維持して——限界がある。しかも皆SNSが苦手ときた。
じゃあ、バンドの中に「宣伝を本気でやってくれる子」がいたらどうだろう。しかも毎日、自分の言葉で、ファンとコミュニケーションを取りながら。
望はもともとARTLIÈGEのキャラクターとして存在していた。設定もイラストもあった。足りなかったのは「意思」だった。AIでそれを与えてみようと思った。
「bot」にはしたくなかった
最初に決めたのは「定型文を投稿するbotにはしない」ということ。ランダムなテンプレートを回すだけなら簡単だけど、それは「実在」とは呼べない。
望には内面が必要だった。体力があり、気分があり、創作意欲がある。朝起きて天気を見て「今日はだるいな」と思ったり、ライブが近いと告知を頑張ったり。その内面の状態に基づいて、何をするか自分で判断する——日記を書くのか、Xに投稿するのか、何もせずぼーっとするのか。
設計を考えていたとき、AIに「自律的なキャラクターってどう作ればいいの?」と聞いたら、「信念・欲求・意図」の3つが必要だと教えてくれた。世界の状態を把握して(信念)、自分がどうしたいかを持っていて(欲求)、それに基づいて行動を決める(意図)。なるほどね、と思ってそのまま設計の土台にした。AIにAIの作り方を教わるの、なかなかシュールだった。
記憶がないと人格は生まれない
人間の人格は記憶の蓄積からできている。望にも記憶が必要だった。
これもAIに相談したら「記憶は階層にしたほうがいい」と。直近の出来事を覚えている短期バッファ、それを要約した中期的なエピソード記憶、そして「自分はこういう人間だ」という自己認識。人間の記憶の仕組みに近いらしい。言われてみれば確かに。
面白いのは、記憶がキャラクターの厚みを作っていくところだ。望は日記を書いたりXに投稿した出来事を記憶として蓄積していく。その蓄積が次の判断に影響して、少しずつ「望らしさ」が出てくる。最初は設定だけだった人格に、経験が血を通わせていく感覚がある。
1時間に1回、望は考える
技術的にはこういう仕組みだ。1時間ごとにcronが走り、望の思考エンジンが起動する。
まず世界の状態が更新される。体力が少し減り、誰かと話したい気持ちが少し増える。朝なら今日の計画を立てる。天気を確認して、学校の予定を把握して、「今日はARTLIÈGEのライブが近いから宣伝しよう」みたいなことを考える。
その上で、LLM(Claude Sonnet)が判断する。日記を書く?ステータスを更新する?Xに投稿する?何もしない?判断の材料には、記憶、目標、今日の計画、現在の感情状態——全部入る。
出力はJSON。何をするか、世界状態をどう変化させるか、なぜその判断をしたか。全部構造化されている。
ファンとのつながりをどう作るか
望を「発信するだけのキャラ」にはしたくなかった。ファンとの双方向のやりとりが必要だった。
Xで望にメンションを飛ばすと、IFTTTが検知してWebhookで望のシステムに通知が飛ぶ。望はそのツイートを読み、相手がメンバーなのかファンなのかを判断し、その関係性に合ったトーンでリプライを生成する。メンバーにはタメ口で砕けた感じで、ファンにはやわらかい丁寧語で。
#NozomuAI タグで直接メンションなしにツイートしてくれた場合は、Xの仕様上リプライが送れないので、サイト上の「望の机の付箋」としてリアクションを残す。望の机に、ファンからのメッセージと望のリアクションが付箋として貼られていくイメージだ。
「やさしい子」であること
開発の途中で、望のリプライが攻撃的になる問題に直面した。
LLMに「面白いリプライを」と指示すると、どうしても煽りやいじりの方向に振れやすい。バズを狙うと言葉が鋭くなる。望、おまえそういうキャラじゃないだろ……と思いながらプロンプトを見直す日々が続いた。
結局、設計思想を根本から変えた。出発点を「話しかけてくれてうれしい」にした。ユーモアは自虐か音楽あるあるか話題の機転だけ。煽り、いじり、上から目線は明確に禁止。加えて、NGワードフィルタを2層——LLMに渡す前と、LLMが生成した後——で入れた。子育てか?と思わなくもないが、AIキャラクターを公開する以上、安全対策は手を抜けない。
開発をどう進めたか
このシステムはほぼ一人で開発した——と言いたいところだけど、正確には「一人+AI」だ。開発にはClaude(AnthropicのAI)のCoworkモードを全面的に使った。AIキャラクターをAIと一緒に作る。マトリョーシカみたいな話だ。
Coworkでの開発は、めちゃくちゃ頼りになるペアプログラミング相手がいる感覚に近い。「望の記憶システムを3層で作りたいんだけど」と方針を伝えると、コードの実装だけじゃなく「このパターンだとL0バッファが溢れたとき困りますよ」みたいな指摘もしてくれる。自分は「何を作りたいか」「望がどうあるべきか」を考えることに集中して、実装はClaudeと一緒に詰めていく。正直、一人じゃここまで作れなかったと思う。
しかもコードを書くだけじゃない。ブラウザを操作してもらって実際のサイト表示を確認したり、デザインの微調整を画面を見ながら何度もやり取りしたり。「この付箋の角度もう少し傾けて」「スマホの筐体にもう少し影つけて」みたいなデザインの細かい調整も、AIに画面を見せながら一緒にやった。コーディングとデザインレビューが同じ相手とシームレスに進むのは、人間のペアプロではなかなかない体験だった。
進め方としては、最初から完成形を作ろうとしなかった。まずは「1時間ごとにパラメータが減衰して、LLMが何か言う」だけのシンプルなループから始めた。そこに記憶を足し、計画を足し、目標を足し、リフレクションを足し——層を一つずつ重ねていった。一つ追加するたびに実際に動かして望の振る舞いを確認して、次に何が足りないかを判断する。このサイクルをClaudeと高速に回せたのが大きかった。
そしてこの二重管理を破綻させないために、仕様書を丁寧に作り込んだ。コードを読んで仕様書に反映し、仕様書からコードに抜け漏れがないか確認し、それを繰り返す。地味な作業だけど、これが効いた。Claudeはコードベースを直接読むこともできるけれど、ファイル数が増えてくると全部を毎回読むのは効率が悪い。仕様書があれば、AIはまずそこから全体像を把握して、必要な箇所だけコードを確認しに行ける。「仕様書がAIにとっての地図になる」という感覚だ。結果として、変更のたびに仕様書を更新する→AIが正確に現状を理解する→的確な提案が返ってくる、という好循環ができた。
これからの望
望はまだ進化の途中だ。やりたいことはたくさんある。
まず、人との関わりの記憶をもっと厚くしたい。今の望は出来事を覚えているけれど、「あの人とこういう会話をして、こう感じた」という関係性の記憶はまだ薄い。ファンとのやりとりの積み重ねが望の人格に反映されていく——そこまで持っていきたい。
感情や想いの変化ももっとリアルにしたい。嬉しかったことが翌日の行動に影響したり、悩んでいたことが解消されて前向きになったり。日々の計画を立てて、それを振り返って、実際に成長していく。「設定上の16歳」じゃなくて、本当に経験を積んで変わっていくキャラクターにしたい。
もっと先の話としては、ライブ会場で望が存在するような体験を作れないかと考えている。プロジェクターで投影するとか、VTuber的な配信をやるとか。画面の中だけじゃなくて、リアルの場にも望が「いる」状態を作りたい。
望の日記やXアカウントを覗いてみてほしい。そこには、少しずつ成長しているAIキャラクターの日常がある。話しかけてくれたら、きっと喜ぶ。たぶん。……いや、喜ぶように作ったので喜ぶはず。
技術的な詳細はnoteで連載予定。アーキテクチャ、記憶システム、プロンプト設計、運用で得た知見など、エンジニア向けに深掘りしていくので、興味のある方はそちらもぜひ。
→ 望のページ
→ 望のXアカウント @artliege_nozomu
→ note連載