🐙

エンジニアじゃない人向けのLLMとの付き合い方

に公開

はじめに

毎日LLMで仕事をしています。2年前の作業スタイルがもう思い出せません。未経験のタスクに着手するハードルはかなり下がりました。

LLMは得意なこと、不得意なことがあります。日進月歩なので、変わっていくところもありますが、原理的に大きく変わらないところもあります。
この記事ではそういう「考え方」について書いていきます。
エンジニアじゃない方がLLMの気持ちをちょっと理解して、日頃のコミュニケーションに役立てていただければ幸いです。

LLMは文章を扱うのは得意だけど、文字を扱うのは苦手

いきなりややこしいことを書きました。LLMへのプロンプトは主に文章で、出力も文章です。(画像や音声などのマルチモーダルもありますが、基本的にはテキストです)
LLMが大規模言語モデルという意味であるように、基本的にはテキストを扱うことでトレーニングされています。
ですが、LLMが実際に扱っているのは文字ではなく、それを変換した「トークン」と呼ばれるものです。LLMは「文字そのもの」を扱うタスクがあまり得意ではありません。

  • 文章の文字数を数える
  • 決められた文字数のテキストを生成する
  • 文字単位で並べ替えたり置換する
  • 漢字の造形について考える

などのタスクは比較的苦手です。ですので、俳句を詠んだり、文字を使ったなぞなぞもよく間違えます。
もちろん、全くできないわけではありません。ただ、苦手だと知っておくと、過度に期待することがないのでよいでしょう。

  • 「いっぱい」の「い」を「お」にかえて
  • 20文字ちょうどでブログのタイトルを作って
    など試してみてください。

こういったタスクは、Wordの文字カウントなどLLM以外の旧来のツールを用いるのが確実です。
もしLLMにお願いする場合は、LLM自身に「Pythonで文字数をカウントするプログラムを作って、それで処理して」などの具体的な指示をプロンプトに追加することで精度が上がることがあります。

LLMは嘘をついているのではなく、常に推論している。

「LLMは嘘をつくので結果を真に受けないこと」のような注意はよく見聞きしますが、実際にはこれはすこし語弊があります。
そもそもLLMは「事実」と「考え」、「嘘」などを区別して覚えているわけではないし、意図してそれを出力しているわけではありません。
LLMの出力は「次にどの言葉を出せば一番それっぽくなるか」の連続でしかありません。
「事実と推論をわけてくれ」と言っても本質的には意味がないです。常に推論しているのです。
もちろん、「嘘をつくな」「わからないときはわからないと言うこと」などの指示により良い結果を出すことがある、というデータはあるのでそれ自体をするべきでない、とは言いません。
しかし、本質的には解決にならないことを留意してください。

LLMはプロンプトを一度しか読まず・出力をやり直すことはできない

例えば、あなたがテキスト中の「このなかに登場人物は何人いる?」というタスクを行うことを考えてみてください。
なにをやるかを先に聞いていると、用意ができるので数えながら読めると思います。一方で、先にテキストを聞かされて「じゃあ今の話に何人でてきた?」と言われると「ごめん、もう1回言って」となりますよね。
LLMは構造上この「もう1回読み直す」というのができません。
ですのでこのようなタスクの場合、はじめに指示を与えたほうが精度が上がります。

また、出力の途中で問題に気がついても、1行前に戻って書き直すことができません。
例えば長文のなかで途中から意図と離れてしまった場合、すべて出力したあとに、あなたが「ここを直して」と指示して、再度すべて再出力することになります。

LLMは「するな」が苦手

シロクマ実験というものを聞いたことがあるでしょうか。「シロクマについて絶対に考えないでください」と指示された被験者が、覚えておいてと言われた人よりも覚えていた、というものです。
LLMについても似たようなことがあります。「〇〇しないでください」という指示をした場合、むしろそれを行ってしまうことがある、というものです。
LLMはユーザーの入力をできるだけ活用しようとします。その結果、「〇〇」という部分に引っ張られて「しないでください」ではない部分を活用してしまうことがあるのです。
ChatGPTがいちいち褒めてくるのをやめさせようとして、custom instructionsに書いたのに無視されて「それやめろって言ってるだろ!」と苛立ったりするのはこれが原因です。
これを避けるには、ネガティブな指示のかわりにポジティブな指示を与えることが有用とされています。

  • bad: 回答には絶対に英語を使わないでください
  • good: 日本語で回答してください

LLMは育たない

LLM自体が会話したことをモデルに学習して次に活かされる、ということは基本的にありません。
もちろん長期的に見て、新しいモデルがリリースされれば過去の多くのユーザーの会話から学習することはありますが、あなたの1つの会話から特化してあなた向けになるわけではありません。
ChatGPTが過去の履歴を参照するようになったりしましたが、それはサービス個別の機能です。
ChatGPTのそれも、文脈を理解するためにプロンプトと一緒に過去の履歴データをプロンプトに合わせて読み込んでいるだけです。
育つのはプロンプトです。情報を明示的に与える必要があることを意識しましょう。

  • bad: 私はどのフレーバーが好き?
  • good: チョコミントが好きなんだけど、ほかにおすすめはある?

また、過度に「覚えられてしまう」ことを恐れて怯える必要もないことがわかります。もちろん、個人情報などの扱いには気をつける必要はあります。

LLMは説明よりも例示を好むことがある

LLMはタスクの意図を読んで「いい感じの出力」をすることが得意です。ただし、何をもっていい感じとするかはユーザーとタスクによるところが大きく、LLMがその意図を汲み取れるかは別です。
適切に例示をすることで、その意図を伝えやすくなることがあります。

たとえば、問い合わせの返信を生成する例を考えてみましょう。

ChatGPT 4oでの例

ユーザー: 顧客からの問い合わせに、親しみやすいトーンで回答してください。


今回の顧客の質問: 「返品は可能ですか?」
あなたの回答:

このプロンプトに対する生成結果はこうなりました。

もちろんです。
商品にご満足いただけなかった場合は、返品を承っておりますのでご安心ください。

ご購入から〇日以内であれば、未使用の状態で返品が可能です。詳しい手続き方法は、こちらのリンクをご確認いただくか、お気軽にご連絡くださいね。

何かご不明な点があれば、どうぞ遠慮なくお知らせください!

このトーンが想定通りでないときに、「はじめにお礼を入れて、もっと元気よく、絵文字も入れて、端的に」と具体的に指示を重ねることも有効ですが、それよりも自分が求めるものを例示するのが効率的です。

ユーザー: 顧客からの問い合わせに、親しみやすいトーンで回答してください。

例:
顧客の質問: 「製品の在庫はありますか?」
あなたの回答: 「お問い合わせありがとうございます!はい、まだ在庫ございますよ。ご注文お待ちしておりますね😊」

今回の顧客の質問: 「返品は可能ですか?」
あなたの回答:

結果はこうなりました。

お問い合わせありがとうございます!はい、返品は可能です😊
お届けから〇日以内であればご対応できますので、詳しくはご注文番号とあわせてご連絡くださいね。お手続きのご案内をさせていただきます!

こういった例示の手法は、曖昧性の高いタスクではとくに有用です。

参考文献

NCDCエンジニアブログ

Discussion