この記事は、自社開発アプリ 「お喋りAIずんだもん」 の技術事例です。受託案件の情報は含みません。
LLM(ChatGPTなどの大規模言語モデル)を使ったアプリ開発で、私たちが最も重視しているのは、「AIに任せる処理」と「自前で実装する処理」を、機能ごとに切り分けることです。
「お喋りAIずんだもん」では、役割を次のように分けました。
- 会話の“中身”を考える:ChatGPT(LLM)に任せる
- キャラクターの“口調”を再現する:自社実装(形態素解析+ルール)で確実に処理する
この一手で、次の3つを同時に狙える設計にしています。
- キャラの口調ブレを、AIの揺らぎに任せない
- 口調変換ぶんのAPI料金をゼロにする
- 変換を端末内でミリ秒単位に処理し、待ち時間を増やさない
以下、設計の判断ポイントを技術的に解説します。
📝 この記事の要点
① LLMアプリでは、「AIに全部任せる」ほど品質とコストが不安定になります。
② お喋りAIずんだもんでは、ChatGPTは会話内容、自社エンジンは口調・音声・表情を担当します。
③ 確率的でよい処理と、決定論的であるべき処理を分けることが、LLMアプリ設計の肝です。
課題:「LLMにキャラを演じさせる」が、なぜ本番で破綻するのか
対話アプリを作るとき、最も安直な実装はシステムプロンプトでこう指示することです。
あなたはずんだもんです。
語尾は必ず「〜なのだ」にして、楽しく会話してください。
プロトタイプなら、これで十分動きます。しかし製品化を見据えると、3つの問題が出ました。
一貫性の欠如
出力が長くなる、会話が続く、話題が複雑になる。こうした条件が重なると、LLMは指示した語尾を“忘れ”ます。
「〜なのだ」が「〜だよ」「〜です」に揺れる。キャラクターアプリにとって、この口調ブレは致命傷です。
トークン(コスト)の常時上乗せ
「キャラを演じてね」というキャラ指定は、毎リクエストのシステムプロンプトに乗り続けます。
会話のたびに、本質ではない指示文へ課金し続けることになります。
品質がモデル任せになる
キャラの再現度が、モデルの状態やバージョンに依存します。
モデルを差し替えた瞬間に口調の癖が変わる、というのは運用上のリスクです。
つまり「口調の維持」は、LLMが構造的に苦手で、かつ毎回コストがかかる割に、仕様としては決定的であるべき処理です。
ここをAIに委ねるのは、設計判断として筋が悪いと考えました。
設計:処理を「考える」と「演じる」に分解する
そこで、対話のパイプラインを次のように分割しました。
[ユーザー入力]
│
▼
[ ① ChatGPT(LLM)]
│ 会話の“中身”だけを生成。口調はあえて普通のタメ口
│ 出力例:「それは楽しそうだね。ボクもやってみたいな」
▼
[ ② 口調変換エンジン(自社実装)]
│ 形態素解析+ルールで語尾を確実に変換
│ 変換例:「それは楽しそうなのだ。ボクもやってみたいのだ」
▼
[ ③ VOICEVOX ]
│ 一文ずつ音声合成
▼
[ ④ 表情制御 ]
│ 感情ワードを検出して笑顔/悲しい顔を切替
▼
[ ずんだもんが喋る ]
ポイントは、①の段階でLLMにキャラを演じさせないことです。
システムプロンプトでは「性格(楽観的)」「一人称(ボク)」「タメ口」「相手の呼び方」といった、会話の中身に関わる人格設定だけを渡します。
一方で、“なのだ”という語尾そのものはLLMに要求しません。語尾は、後段の自社エンジンが決定論的に付与します。
口調変換エンジンの中身
「ずんだもん語尾」への変換は、AIではなく 日本語の形態素解析+独自ルール で実装しています。
端末内に辞書(IPADIC)を同梱し、オフラインの解析エンジン(NMeCab)で処理するため、APIコストはかからず、通信待ちもありません。
処理の流れはこうです。
1. 文を区切る
返答テキストを句読点・感嘆符・疑問符・改行(、。!?」など)で分割します。
一文ずつ独立して変換し、後段の音声合成も文単位で行うことで、テンポよく読み上げられます。
2. 文末の種類で分岐する
文末の記号を見て、平叙・疑問・感嘆を判定します。
- 疑問(?)なら「疑問用の語尾辞書」を優先的に適用
- 感嘆(!)なら語尾に「なのだ」を付与
- 読点(、)止まりの節は変換せずそのまま
読点止まりを変換しないのは、途中の節を不自然にしないためです。
3. 特殊ケース辞書を優先マッチする
「機械的に変換すると不自然になる言い回し」は、あらかじめ手で対応表を作っています。
| LLMの出力(語尾) | 変換後 |
|---|---|
| 〜だね | 〜なのだ |
| 〜たいな | 〜たいのだ |
| 〜なんだよ | 〜なのだ |
| 〜じゃないかな | 〜だろうなのだ |
| 笑 | ふふふっ |
平叙用・疑問用でそれぞれ辞書を持ち、長い言い回しから順にマッチさせることで誤変換を防いでいます。
4. 辞書に無ければ品詞で判定する
特殊ケースに当たらない文は、形態素解析で文末の品詞を見ます。
- 文末が動詞・形容詞:文脈に合わせて「なのだ」系の語尾を付与
- 文末が名詞:平叙なら「のだ」、疑問なら「なのだ」を付与
この 「辞書(例外)+品詞ルール(一般)」 の二段構えにより、未知の文でも破綻しにくく、キャラクターの語尾に変換できます。
要するに、「どんな入力でも“ずんだもんらしい語尾に寄せる”という仕様を、確率的なAIではなく、決定論的なプログラムで担保している」わけです。
だから崩れにくい。ここが重要です。
コスト設計:LLMアプリを「運用し続ける」ための仕込み
LLMアプリは、作るより運用し続けるほうが難しいです。
ユーザーが使うほどAPI課金が発生するため、設計段階でコストを織り込みました。
出力トークンの上限設定(max_tokens)
返答が無限に長くならないよう上限を設定し、1リクエストあたりの最大コストを予測可能にしました。
会話履歴の圧縮
過去ログを全部送ると、プロンプトが肥大して課金がふくらみます。
直近の文脈だけを保持する設計にして、自然な会話を保ちながら入力トークンを抑制しました。
キャラ表現をLLMから外す
口調・声・表情は自社側で処理します。
LLMに払うのは「考える」ぶんだけにしています。
モデル選定
雑談用途では過剰に高価なモデルを使わず、コスト効率の良いモデルを選択します。
品質要件と単価のバランスを取ることが、継続運用では重要です。
使用量に応じたクレジット制
消費トークン量に重みをつけてアプリ内クレジットを消費する仕組みにし、コストとユーザー体験を連動させています。
私たちは見積もりの段階から、開発費だけでなくランニングコスト(API・サーバ)まで含めて設計します。
「作れる」と「続けられる」は別の問題だからです。
声と表情:“軽い仕組み”で“それっぽさ”を出す
LLMに任せるべきではない処理は、口調だけではありません。
声と表情も、体験としては重要ですが、すべてをAIに投げる必要はありません。
音声合成(VOICEVOX)
高品質な音声合成エンジンを活用し、文単位で逐次合成・再生しています。
長文を一括処理せず小分けにすることで、話し始めまでの待ち時間を短縮しています。
表情制御
返答テキストに「残念」「悲しい」「涙」などの感情ワードが含まれるかを判定し、含まれていれば悲しい顔、そうでなければ笑顔に切り替えます。
表情判断までLLMに投げず、軽量なルールで十分な体験を実現しています。
ここでも設計思想は一貫しています。
手間とコストをかける所と、軽い仕組みで足りる所を見極める。これが限られた予算で“ちゃんと動く”製品を作るコツです。
設計から得られた学び
| 性質 | 担当 | 理由 |
|---|---|---|
| 発想・対話・要約など、曖昧でよい処理 | LLM | 確率的でも価値が出る。AIの主戦場 |
| 一貫性・正確性・低コストなど、決定的であるべき処理 | 自前実装 | 揺らぎを許さない/毎回課金したくない |
LLM開発でいちばん大事なのは「最新モデルを使うこと」ではなく、「AIの得意・不得意を見極めて、処理を正しく分割すること」です。
この切り分けが、品質・コスト・スピードのバランスを決めます。
「お喋りAIずんだもん」は、この設計のおかげでユーザーから 「ちゃんとずんだもんだ」「キャラが崩れない」 という声をいただけました。
AIに全部任せていたら、まず安定しなかった部分です。
こんな開発のご相談に強いです
- AIチャットボット/対話アプリを、品質とコストを両立させて本番化したい
- 自社キャラクターやブランドにAIを組み込みたい
- キャラクター性を崩さず、AI会話を安定させたい
- すでにAIで試作したが、料金や安定性で製品化に踏み切れていない
- AIを使ったスマホアプリ(iOS / Android)を企画からリリースまで進めたい
「うちの場合、どこをAIに任せられる?」という初期の壁打ちだけでも歓迎です。
要件が固まる前の段階から、AIをどう使うのが一番おトクで確実かをご提案します。
開発のご相談・お見積もりはこちら
株式会社Code and DESIGNでは、AIチャット、LLMアプリ、音声合成、キャラクターアプリ、スマホアプリ開発のご相談を承っています。



