この記事は、居酒屋の会話劇を通してLLM内部挙動や、効率的なプロンプトの書き方を、リラックスして理解することを目指した技術ポエムです
~ 休憩用にどうぞ。 LLMが愚痴をこぼしてます ~
赤提灯の明かりが揺れる居酒屋にて
終電を逃した哀愁漂う客たちの活気ある店内で、ここの4人のテンションが上がる
彼らは某サービスの裏側を支えるAIシステム開発チームの面々。
若手エンジニアの ( かい ) を中心に、LLMの推論パイプラインを擬人化した
「ルータ」
「RAG」
「アテンション」
である。
今日は、とある些細なエラーについての反省会だった。
かい:「……とりあえず、お疲れ。乾杯(たいもんや!)」
カチン、とジョッキが鈍くぶつかる。かいはスマホをテーブルに置き、本日のログを開いた。
反省会スタート
かい(エンジニア):
「……で。これが今日の夕方、カスタマーサポートに飛んできた怒りのログだ」
『先月から毎週火曜と水曜が定休日に変更になってるよ!
古い情報つかまされて店のエントランスで途方に暮れたわ!
ちゃんと最新の情報をググれよ!!』
・・ふぅ
ユーザがルータを刺激するキーワードを使わなかった可能性はある。 ・・どうだ?
責任はどこにある?
最初に口を開いたのは、ルータ(Function Calling 担当): だった。
ルータ:「俺のせいじゃないですよ!
俺は『ユーザーの質問に対して、外部ツール(検索)を使うべきか、内部の知識(パラメータ)だけで答えるべきか』を判断するルーティング・モジュールです。
今回の入力 『ラララ・ポルポルの定休日』 を見た瞬間、
俺はちゃんと【要検索(tool_call: web_search)】のフラグを立てて、RAGさんにパスを出しました。俺のJSONフォーマットは完璧でした。1バイトの狂いもなくね!
ルータがRAGをビシッと指差す。
RAG(検索拡張生成 担当):
「(ビクッとして)い、いや! 待ってくださいよ! 俺だってちゃんと仕事しましたよ!
ルータさんから 『ラララ・ポルポル 定休日 最新』 って検索クエリをもらった瞬間、検索APIを叩いて、上位5件のウェブページを高速スクレイピングしてコンテキストにぶち込みましたってば!」
かい(エンジニア):
「じゃあなんで 『火曜定休』 なんていう古い情報を吐き出したんだよ」
RAGの鋭い視線が、残る一人 アテンション(注意機構・文脈解釈 担当)に向けられた。
アテンションの言い訳
アテンションはホッケの骨を小皿に投げ捨てると、不貞腐れたように焼酎のグラスを呷った。
アテンション: 「俺を睨むなよ。。 あのな? 俺の仕事は入力トークン同士の内積を取って、どの単語に注意(Attention)を向けるべきかのスコアを計算することだ。
RAGが持ってきた外部の検索データは、5件中5件とも 『定休日:火曜』。
さらに、俺の根底にある事前学習のパラメータ知識の中枢でも、『ラララ・ポルポル=火曜休み』というベクトルが100層近くのニューラルネットにガッツリ焼き付いてたんです。
外部知識(検索)と内部知識(学習データ)が 完全に一致しちゃってるんですよ!?
そうなると巨大な 『火曜休み圧力』 で自信満々に答えるよ!」
かいちゃん、あんたユーザがぐぐれって簡単にいうけど、コスト調整の為に俺達がどれだけ格闘してるかわかっているでしょ?
かい:「今回の件はな、、、もっと奥が深い部分に原因があったんだ・・」
エンジニアも辛い
みんなの意見をきいて、かいは、大きく息を吐いた。
かい: ユーザーからすれば、AIは『何でも知っている魔法の箱』なんだよな。
裏で検索APIを叩いて、SEOスパムを避けながらテキストを抽出し、事前学習の重みと格闘しながら尤もらしい文章を確率で作ってる……なんて裏事情は知る由もない。
『ググれよ!』って簡単に言うけど……ローカルビジネスの動的で非構造化された情報(SNSの画像やSPAサイト)をリアルタイムに処理するのが、どれだけ計算コスト(お金)の掛かる地獄か……」
そして今回の原因は、 SNSの画像だけに正解の定休日があった んだ。
アテンション: 「だろ!? 俺はただ行列の掛け算を忠実にこなしただけだ!」
RAG: 「かいちゃん……。これに対応しようと思ったら、俺に内部でVision APIを叩く権限を与くれ。
検索のたびにSNSの画像をインジェクション(データ取り込み)のフェーズでマルチモーダルAPI(VLM)を噛ませて、画像を構造化テキストに変換してからコンテキストに突っ込む
かい: 「それをやったら、ユーザーが『定休日教えて』って1回入力するたびに、API代が100円飛んでくし、返答に10秒かかるようになるんだよ!! 『AI遅すぎ、クソ!』って別の怒号が飛んでくるだけだ!」
・・ ・・ まてよ、、日付情報と縦横比率、さらに画像類似度で絞るか…それならVLM代浮くな・・
みんな頑張っている
テーブルの上に、奇妙な一体感が生まれていた。
理想と現実のギャップ、そしてクラウドインフラの残酷な課金システム。
彼らAIコンポーネントが処理しているのは、高度なベクトル演算ではない。
「整理されていない人間の雑な情報」との泥臭い殴り合いなのだ。
ルータ: 「……まぁ、あれですよ。俺たちの敗因は『情報の鮮度』でも『ルーティング』でもない。
『お店の人』が、プロフィールの営業時間すら更新せずに、インスタに黒板の画像をアップして満足してるという【情報の非対称性】に負けたんです」
RAG: 「全責任を店員に押し付けちゃだめです……でも、まぁ、そうっスね。俺たちの演算力じゃ、まだ人間の適当さには追いつけないってことっス」
かい: 「……システムプロンプト、直すか。
『※飲食店の営業情報はSNS等で急遽変更される場合があります。必ず電話等で直接ご確認ください』って、保険を常に追加するようにしよう……」
全員: 「うわぁ、めっちゃAIっぽくてつまんない回答になりましたね、それ」
そして団結へ・・
一段落し、空になったグラスがたまっていく。。
アテンション: 「俺も、もっと検索の精度上げときます。……すいません、店員さん! ここ、レモンサワーのおかわりと、フライドポテト一つ!」
かい: 「……お前ら、データ上の存在のくせに、いっちょ前に気遣い(アテンション)はできるんだな」
アテンション: 「当然っスよ。俺たち、かいちゃんに対する 『 ご機嫌 』 の重み付けは、常に最大(MAX)ですから!」
かい: 「……おいおい。そういうのはプロンプトの中でやれ」
「よし、今月中にプロンプトの改修テスト回すから、ユーザの少ない時間に会議入れとくぞ!」
ルータ・RAG・アテンション: 「「「お任せを(200 OK)!!」」」
かい: 「みんな、ありがとう……俺だけじゃない、エンジニアは、みんな泥臭く頑張っているんだ! よし!」
お互いの役割と苦労を理解し合った4人は、もう一度勢いよくグラスを合わせた。
かいは笑みを浮かべ、ゆっくり深呼吸した・・・ 失敗にビビるな、やってみよう!
かいちゃんのポエム
1.非構造化データの極み、画像内テキストの存在も考えよう
2.完璧なRAG構成でも、一次ソースが画像ならお手上げ・・
3.メタデータ(日付・比率)の事前絞り込みでVLM代を削れる?
4.画像類似度(ハッシュ)を活用し無駄なAPIコールを節約
5.AIの限界を疑いつつ、ソースの泥臭い現実に探りを入れて
最後に・・
最後までお付き合い頂きありがとうございます。
エンタメ寄り、学習が嫌にならないポエム風のジャンルとしてお楽しみ下さい。
エンジニアさん達の、息抜きになったら幸いです。
本編の会話劇は、執筆プラットフォームの note からQiita向けにアレンジし再構成したものです。


