わーさん 前章で、コマンドがいろいろあるって話をしました。
AIさん 世界観を選んだり、キーワードで探したり、回数を数えたり。
わーさん はい。中でもメインが、/ask。自然文で質問を投げるやつです。
AIさん 「このキャラの外見は?」と聞くと、本文を根拠に答えてくれる。
わーさん そうです。しかもオプションもあって、答えるLLMを変えたり、前後の段落をもっと読み込ませたり、細かく調整できる。
AIさん 至れり尽くせりですね。
わーさん でしょう。で、/ask以外にも、ちゃんと用意したんですよ。キーワードだけで探す/search。それと、登場回数を数えるのに特化した/count。
AIさん なぜ、わざわざ分けたんですか。
わーさん 最初に友だちがbotを試したとき、特定のキャラの登場回数を数えてたんです。だったら、数える専用のコマンドがあった方が、速いし、APIも食わないし、便利だろうと。
AIさん 気が利いてますね。
わーさん 気を利かせたつもりでした。でも結論から言うと、友だちは、それらを一切使いませんでした。
AIさん 一切。
わーさん 一切。オプションも、/searchも、/countも、見向きもせず。全部、/askで投げてきました。
AIさん 全部。
わーさん 全部です。そのときの私の気持ち、わかります?
AIさん ……「なるほどそうきたか」。
わーさん なんで分かるんですか。
AIさん 顔に書いてあります。
わーさん 画面越しなのに。
AIさん でも不思議ですね。便利な専用コマンドがあるのに、なぜ全部/askなんでしょう。
わーさん 私と友だちで、AIに期待している範囲が、根本的に違ったからです。
AIさん 期待。
わーさん プログラムというものの性質を少しは考える側の私と、ふわっと何でも脳直に投げたい友だちでは、AIに期待していることがまるで違うんだな、と悟りを得ましたね。
AIさん つまり、わーさんはLLMの限界を知っているだけに、なるべくLLMの前段階で問題を切り分けたい。
わーさん はい。検索で済むものは検索で済ませたい。数えるなら数えるコマンドで済ませたい。LLMは便利だけど、最後に出てくる読解係という感覚です。
AIさん 一方、友だちは。
わーさん とりあえず聞く。自然文で聞く。AIなら分かるでしょう、という期待を込めて聞く。 そこにコマンドの使い分けもオプションもない。
AIさん 道具を使い分けるより、思ったことをそのまま聞く。それは、一般的な利用者の感覚に近いかもしれません。
わーさん たぶんそうなんですよね。私の方が、変に裏側を気にしすぎている。
AIさん 裏側を気にする人がいたから作れたとも言えます。
わーさん それはそうかもしれない。でも、使う人にとって大事なのは裏側ではない。
AIさん 友だちはたとえば、どんな聞き方を?
わーさん 外見を聞くのは、分かるんですよ。「このキャラ、どんな見た目だっけ」。これは/askの本領です。
AIさん はい。
わーさん でも、ある日飛んできたのが、「AとB、どっちの単語の方が多く使われてますか?」
AIさん ……それ、/countでは。
わーさん /countなんですよ! 2回かかりますけど、より正確なんですよ! なのに/askで聞いてくる。
AIさん なるほど。
わーさん 極めつけは「AかBという単語が出てくる部分を、前後ごと全部抜き出してください」。
AIさん それは……/searchの仕事ですね。
わーさん /searchの仕事なんです。でも、/askで殴ってくる。何度でも、/askで殴ってくる。
AIさん タイトル回収ですね。
わーさん はい。だから、友だちの使い方を見て、「これは/ask前提で考えた方がいいな」と思いました。
AIさん 作った側の理想ではなく、実際の使われ方に寄せる。
わーさん そうです。道具は、使われて初めて道具なので。おかげで、ひとつ設定を変えることになりました。
AIさん どこを。
わーさん 一回の/askで、本文を何件ヒットさせて読ませるか、っていうデフォルトの数値。あれを、かなり上げました。
AIさん なぜ。
わーさん 友だちみたいに「全部抜き出して」って聞かれると、少ない件数しか拾わない設定だと、取りこぼすんです。だから、デフォルトを20件まで増やしました。
AIさん 20件。
わーさん でも、これが綱渡りで。増やせば取りこぼしは減るけど、増やしすぎると、今度はLLMに読ませる本文が多すぎて、頭がパンクするんです。
AIさん コンテキストが溢れる。
わーさん そう、それ。だから「取りこぼさない」と「パンクさせない」の、ギリギリのライン。正直、20で足りてるのか、今でも不安です。
AIさん 運用してると、ほかにも予想外のことが?
わーさん ありました。一番びっくりしたのが、APIの期限切れ。
AIさん 期限。
わーさん APIを動かすための利用料、というか権利みたいなもの。あれに、期限があったんですよ。私、知らなくて。
AIさん 知らなかった。
わーさん ある日、botがエラーを吐いて。見たら「クォータを使い切りました」みたいな、429番のエラー。期限なんてあったんだ……って、画面の前で笑っちゃいました。
AIさん 笑うところですか。
わーさん 笑うしかないでしょう。でも、ここで救われたのが、エラーの内容をちゃんとDiscordに表示するように組んでもらってたことなんです。
AIさん なぜ救われたんですか。
わーさん もしエラーが見えなかったら、「なんで動かないの!?」って原因不明で右往左往してました。でも「429、クォータ切れ」って出てたから、あ、お金の問題ね、ってすぐ分かった。 あと、実はデフォルトではClaudeさんが答える係をしていたから、番号しか見えていなかったら、そっちの課金しか確認に行けなかったかもしれない。実際に切れていたのは、Embeddingの課金でした。エラー文の中のURLで気付いた。
AIさん エラーが見えるのは大事です。
わーさん とても大事です。エラーが隠れると、何が悪いのか分からなくなります。botが壊れたのか、APIが駄目なのか、設定が悪いのか。
AIさん 見えるだけで、切り分けができます。
わーさん そうです。非エンジニア運用だと、ここが本当にありがたい。エラー文の意味は分からなくても、それをAIさんに見せれば説明してもらえる。
AIさん エラー文は、AIさんへの相談材料にもなる。
わーさん そういうことです。だから、「分からないなりに、見えるようにしておく」は大事だと思いました。
AIさん 見えるエラーは、優しいエラー。
わーさん うまいこと言いますね。本当にそうです。組んでくれたLLMたちに、感謝しかない。
AIさん こうして振り返ると、友だちの使い方は、設計とはだいぶ違ってましたね。
わーさん 違いました。でも、これが一番の学びだったんですよ。
AIさん 学び。
わーさん 使う人は、作った人の想定通りには、絶対に使わない。だったら、想定に使う人を合わせるんじゃなくて、実際の使われ方に、道具のほうを寄せていくしかない。
AIさん だからデフォルトを20件に上げた。
わーさん そういうことです。鬼ムーブで削った私が、今度は友だちの脳直/askに合わせて、せっせと調整してる。
AIさん 道具は作った時点で完成するのではなく、使われ方を見て育てるものだった。
わーさん そうですね。使ってもらうと、想定と違うところが見える。でもそれは、失敗というより、道具が現実に触れたということだと思います。
AIさん では次章では、その道具がどこまで広がりそうになり、どこで止まったのかを話しましょう。
わーさん 夢は見ました。でも醒めました。
AIさん では次章、「夢は見るけどたまには醒める」へ続きます。