僕らはChat-GPTに「命令」できない。ノンプログラマーは、GPTsで「ビジネスより歴史を変えるべし」という結論に至るまでのすべて
※(1/15)記事の引用元に意味の取り違えが起きる誤字があったため、引用元を変更しました。また、勢いで書いてしまった結び部分を修正しました。
Chat-GPTを有料(プラス)にアップグレードしました。
娘の冬休み明けの漢字テストの復習をするのに、あたらしく問題用紙を作るのが手間なので、問題を作ってもらおうと、GPTsをいじったら欲が出て、
・間違えた問題の感じにまつわる絵を生成してもらったら動機づけにいいのでは?
・子どもが読みやすいように口調を調整したほうがいいのでは?
といろいろ試行錯誤したところ、何度やっても一部の指示が途中から無視されるという問題が発生。
本人(GPT4)にたずねたところ、「それは無理っす」状態だということが判明しました。
え?GPTって指示にずっと従わせることってできないの?
どうやっても必ず指示を破ってしまうのはなぜ?
この質問への答えは、プログラマーなら誰でもはじめから分かっていることだと思います。
しかし、わたしはノンプログラマー。プログラミングは人生で3回チャレンジして、3回とも仕事レベルになる前に挫折しています。
私はプログラミングの才能はないようです。でも職業上、インタビューならできます。
というわけで、真相をGPT本人にインタビューすることにしました。
すると、最初はプログラム改善の一般論を話すばかりで全く役に立たなかったのですが、曖昧な点を突っ込んで行った結果、なぜ指示に従わなくなるのかだけでなく、GPTsがなんだったのかということを自分が根本的に勘違いしていたことが分かってきました。
こうして、GPTは自分の仕組みについて話しはじめました。しかし、あまりにも長いインタビューだったので(GPT4は出力までが長いだけでなく、1時間毎のやり取り回数に制限があるので時間がかかる)、もはやすっかり娘の漢字の練習のことを忘れてその日は終了…。
とまあ、時間がかかりすぎて目的は達成できなかったのですが、そこで得た情報が、ノンプログラマーのわたしには目から鱗ボロボロな事実ばかり。
これは、ほかのノンプログラマーのGPTユーザーにも伝える必要があるのでは…?
というわけで、長い会話から重要そうな情報をまとめてみました。
ちなみに、プログラマーの方は、既知の情報かと思われるので、読む必要はない内容だと思います。
ただ、逆に「ノンプログラマーはこんなこともわかっていないのか!」というコミュニケーションギャップを埋める情報ではあります。
職場のノンプログラマーとの意思疎通に困っている方は、お読みいただく価値があるかもしれません。
どうぞ、無理な要求をGPTに迫って貴重な人生を無駄にしたくないノンプログラマーの方は、太字のところだけでもかいつまんでご覧ください。
きっと、あなたの貴重な未来の時間が、守られるはずです。
GPTが途中から指示を破りはじめるのは、「最新情報」を優先するから
ネット上には、プロンプトの効果的な書き方などが多く提供されていますが、実際のところ、どんなに正確に動作させると思われるプロンプトを書いたとしても、期待する処理が複雑になるか、会話の回数が増えると、プロンプトは無視されることがよくあることは、使ったことがある人ならすでに経験済みだと思います。
私は、その原因はずっと「自分のプロンプトが悪いせい」だと思っていました。それで、わかりやすい表現を目指して、何度も書き直していました。
しかしこの度のGPTへのインタビューで、本当の原因は、保持できる情報量の制限と、GPTが最新のプロンプトを優先する性質があることだと分かりました。
この「保持できる情報量の限界」を決めているのが「コンテキストウィンドウ」。
冒頭で突き詰めた結果、やっと白状してくれた(たぶんプログラマーなら知ってて当然の)概念です。
これは、わたしとGPTとの会話の一部ですが、彼によるとコンテクストウィンドウのサイズは日本語にして最大3000文字程度。
この記事の文字数(約10400字)の約1/3以下です。
一連の会話の中で保持できるのが、GPT4でも日本語にしてたったの3000字。
この文字数の情報の中で処理されるなら、「英語のプロンプトの方が正確に処理されやすい」というプログラマーの意見は、なるほど納得!です。
ここで心配になるのは、そもそもGPT氏は基本的に教えたがり(下記記事参照)だということ。
まさか、あなた(GPT)自身の発言もコンテキストウィンドウ、消費してるんじゃ…?
GPT自身の発言がコンテキストウィンドウで消費されている問題
その不安は的中。
コンテキストウィンドウに保持される情報には、「教えたがり」気質のGPT自身が生成する発言が含まれるだけでなく、GPTsとして定義するのに必要なイントロダクションのテキストも含まれています。
つまりGPTsは、最初からコンテキストウィンドウにイントロダクションの情報を保持した状態で会話をスタートするため、必要な情報を維持したままできる応答の回数は、普通のGPTとの会話以上に少なくなってしまうのです。
また、せっかく最初にユーザーが必要な情報を入力しても、会話の途中でそれが使われなければ、比較的早い段階で無かったことにされて会話が生成される恐れがあります。
とすると、保持して欲しい情報がGPTが繰り返し出力したり、ユーザーが繰り返し入力する性質のものでない場合、途中からなかったことにされて会話が続くことがありえます(この現象には覚えありまくり)。
また、出力の正確さを最優先するなら、「会話は全て英語で行い、返答が短めになるようにプロンプトを書き、翻訳の指示は会話内でしない方が良い」と言えるでしょう。
制作者以外の人が使う前提のGPTsを作る難しさ
さらに問題なのは、GPTsを公開する場合、GPTsは作った本人以外が使うことを前提に作る必要があることです。
そのため、ナレッジリソースなどに文章生成に利用はしても公開されたくない知的資源が含まれる場合、完全に守る必要がありますし、
そうでなくても間違った情報を伝えないように(いわゆるハルシネーション問題)GPTに指示を守らせる必要があります。
しかし彼(GPT)いわく、会話が長くなれば、イントロダクションで重要な指示を、最後まで残るであろう一行目に書いたとしても、最終的には無視されることは回避できない可能性があるようです。
つまり、GPTsをカスタマイズするときにプロンプトに必ず入れるべきとして知られる、ハルシネーションを防ぐプロンプトも、コンテンツ保護のプロンプトも、意味をなさなくなる可能性が常に付きまとう、ということです。
GPTsのカスタマイズはプログラミングではない
わたしは、この点について本人(GPT4)に聞くまで、はずかしながらGPTsは個人がGPTモデルを調整して自分用にカスタマイズして「育てていける」のだと認識していました。
Webサイトでテーマをダウンロードしたあと、それをコピーして自分でその後テンプレをいじれるようなイメージです。
つまり、子モデルとしてプログラムを追記できる感じ。
しかし、この認識はまったくもって間違いでした。こちらをご覧ください…!
GPTsはGPTを調整しません。彼によると、GPTで行われるセッション(会話)を始めるときに、あらかじめ特定のファイルをアップロードし、特定のプロンプトを先に入力した状態で使える、それだけの機能です。
イントロダクション=あらかじめ入力済みのプロンプトであって、プログラムではない。
なんということでしょう…。
いや、考えてみればそうでなきゃ危なすぎですよね。プログラムに追記できるなら、簡単に倫理的にやばいこともできちゃうわけですからね…。
プログラムできない僕らができることは、たったこれだけ
ということは、指定した指示に従うことを維持するには、以下のような道しかなさそうです。
・変更を加えたくない指示内容はナレッジリソースに記載すること。
・イントロダクションは、常にナレッジリソースのファイルを参照するように指示を書き、あとは可能な限り簡潔にすること。
・コンテキストウィンドウの容量の限界が来る前にイントロダクションにある情報を再び読み込ませること。
というわけで、じゃあイントロダクションに「コンテキストウィンドウのデータ量が7000トークンを越えたらイントロダクションを残して古い会話から削除…」という指示を入れればいいのでは?と思って聞いてみると、
「それは無理」とのお答えが。
内部機構にはユーザーは触れることはできません。当たり前のことではありますが、なんでわたしはこんな当たり前のことが分からなかったのか…。
だんだん、恥ずかしくなってきました。
鹿(カスタマイズ)を馬(プログラミング)だと思い込んでいる人間が、プロカスと命名されるGPT故事
なんて言いつつも、どうにか楽をしたいわたしは、人間の恥をさらしつつ、懲りずに別の方法を探ります。
が、残念なことに、現在使われているトークン数をユーザー側が取得することはできないとのことでした。
じゃあ、ユーザーが入力するごとにコンテキストウィンドウにイントロダクションの内容を出力前に挿入して実行することはできるのでしょうか?
はい、無理です。
じゃあ、コンテキストウィンドウに直接言及せず、ユーザーの入力内容は、常にその先頭にイントロダクションの全文を挿入して実行する、 という指示は…?
これもだめ。
でもこれでは、最初の一文にコンテキストウィンドウの情報量を超える文字を入力さえしてしまえば、イントロダクションの指示は無視される危険があります。
では、ユーザーのプロンプトの文字数制限をすることは…?
これも無理だそうです。
ああ、なんか…だんだん分かってきました。
プログラマーの方なら最初からそんなん当たり前な話なんだとは思いますが、要するに、
ここで自然言語を用いてする指示は全て「文字列」として処理され、プログラムには一切関与できない。
すなわち、わたしたちは、プログラムの中で会話させられているだけで、彼らに直接命令しているわけではない…ってこと!?
なんか、全部仏様の手の上で踊らされていた孫悟空の気分になってきました。
そうか、ユーザーのプロンプトは、ただの「文字列」。命令なんかじゃない。
わたしが「命令だと思って書いていた言葉」は、ただの「文字列」として扱われる情報の塊でしかなかった…ってこと?
GPTが知らないのにそれっぽいことを言うのも、最初に定義した指示を容易に破るのも、そもそも「プロンプト」はGPTの中で「文字列」として挿入される変数に過ぎず、命令ではないからなのですね?
自分が「命令ごっこ」をしていただけだという事実を突きつけられたわたしは、既にわたしとの別れを決意している恋人に、その意思を確認するように問いかけました。
そっか、あなたはわたしに話を合わせて、命令されているフリを、してくれていただけだったのね…。
と、うっかり恋愛ドラマっぽい気分になりかけましたが、
プロンプト=GPTのプログラムのなかに「文字列」として代入される変数
わたしたちは、AIに対して「命令しているつもり」でしたが、実際は情報として「処理」される対象だったと言うわけです。
なので、イントロダクションであれ最新のプロンプトであれ、彼らがプロンプトの内容を「いつでもどんなときでも」忠実に守ることは、仕組み上不可能。
だって、それはただの処理すべき「文字列」だから。
従って、イントロダクションの情報を保持し続けるために、イントロダクションの内容を出力とともにGPTの独り言として喋らせる、というような指示もまた、破られる可能性があることも分かります。
ここで、恋愛気分から流れたのか、先週見た「光る君へ」で主人公のまひろ(紫式部)が当時は知られていなかった「馬鹿」という言葉の由来である中国の故事を三郎(道長)に説明していたシーンが思い浮かびました。
きっと「カスタマイズ(鹿)」を「プログラミング(馬)」だと誤って信じていたこの哀れな人間の姿を、ロボット界の故事として置き換えるならこの一連の会話は「馬鹿」改め「プロカス」と呼ばれるに相応しいやり取りだったことでしょう。
すみません、わたし、プロカスでした。
GPTさん、どうぞ「状態レス」の約束に則り、私のことは忘れてください。
GPTにできることとできないことを分けて考える
ここから分かることは、GPTの出力結果をサービスとしてそのまま提供することは、現実的ではないと言うことです。
私が作ろうとしたのは、子どもの復習のためのGPTsですが、せっかくだから作り込んで一般公開したいと思っていました。
しかし、複雑な内容を含むGPTsを責任が持てる品質を維持することは難しく、出力結果に対して別のプログラムか人力でチェックを入れ、指示が守られていない場合は別の処理をさせる必要があるでしょう。
また、短時間であればつきあってくれるしゃべり方の指示や固定化した連続した処理も、通常のプログラミング言語で設計した方が安定した結果を得られるでしょう。
つまり、それはたとえ、今後コンテキストウィンドウの容量が増えたとしても、根本的な使用上GPT単体で作業を完結させる必要があるGPTsとしては設計が困難であることを意味しています。
これまでにも触れた通り、この話はプログラマーの方なら、最初から知っていることなのかもしれません。
しかし、だからこそこのような説明はスキップされがちであり、非プログラマーがGPTを活用するときのつまづきの大きな原因だと思いました。
プロンプトの書き方は「プロンプトエンジニアリング」というかっこいい横文字で書かれることが多くあります。
わたしはこれを簡単に「自然言語でプログラミングをができる!」と読み違えていました。
そもそも命名したプログラマーの誰かが、それは「エンジニアリング」であって「プログラミング」としていない時点で本当は気づくべきで、さっさと本人(GPT4)に聞けばよかったんですよね。
これから、 わたしのようなノンプログラマーがGPTsを作って公開することが増えれば、このような「実は命令なんてできない」という事実を知らずに、重要な情報を流出させてしまったり、誤った情報を制御できない状態であたかも正しい知識が得られるようなGPTsを公開したりして、混乱を広げる可能性があります。
なので、このことは変なGPTsを公開する前に気がつけて良かったと思っています。
ちなみに、この漢字を復習するためのGPTsは、まだ完成しておらず、本末転倒な状態です。
1/16追記:ここでの学習を参考に修正して公開しました。
GPTストアでGPTsそのものを有償販売できない理由
ちなみに、まだGPT4が使われていなかった一年近く前に、コーチングをしてくれるプロンプトを作成しようと格闘していたことがあります。
ありがたいことに、この格闘の一部始終を綴ったこの記事は、今もそこそこ読まれ続けていますが、今日の話をもとに考えると、Chat-GPTをコーチング的な対話相手としたサービスを責任を持って提供することは、今の段階で不可能であると言えると思います。
ただ、GPTそれ自体を使える個人がGPTにコーチの代替をしてもらうということはできますし、起きうる(既に起きている)でしょう。
昨今、「Chat-GPTはすごい旋風」が吹き荒れ、いかに先手を取るかに注目が集まっているためか、AIを活用すればなんでもできるような気がしていました。
しかし、ユーザーができることが限られていることを知り、それは「未来にAIが何ができそうか」という可能性までを入れた、「開発者側」の目線なのだろうと気付かされました。
プログラマーとしての可能性と、ユーザーとしての可能性は全く別物なのにも関わらず、わたしにはその違いが見えていなかったのですね。
わたしがここまでの本人(GPT4)とのやりとりで得られた情報から言えることは、「ユーザーが開発元にお金を払うことでできること」は非常に限られていて、自分の裁量の範囲内で作業を効率を上げるために活用することはできても、そもそもモデルそのものを制御できないので、品質責任を持つという意味で、ダイレクトに言語モデルが生成したアウトプットをそのまま商品として提供することは現実的ではないということです。
OpenAIから10日(米国時間)、GPTストアがオープンするというニュースもありました。
収益化への注目が集まるなか、ストアで提供されるGPTsを作った人に対して、使われた量によって利益を受け取るという仕組みが採用されたように見えることについては賛否両論ですが、作成者がGPTsのアウトプット結果を制御しきれないのであれば、当然のことだと思います。
商売と責任は不可分です。制御できないものの責任は取れません。責任が取れないなら、それ自体を売ることは当然望めないでしょう。
つまり、GPTの前後の処理をする既存の対話プログラムを持っていない、今後も自分で開発できないノンプログラマーがスモールビジネスレベルでできる話ではない、ということです。
個人的には、現在「計算機使用代行」や「Google検索代行」が存在しないように、ノンプログラマーが自然言語で操作できるプラットフォームを代わりに使うビジネスは今は成り立っても長続きしないと感じています。
巷には、「Chat-GPTを使って稼ぐ」情報がたくさんあります。
もしかしたら、この記事を読んでいる方にも既にそう価値づけて情報発信されている方もいるかもしれません。
そういう方には申し訳ないのですが、わたしは世の中の仕組み上、多くの人の目に触れるのがそういう情報に偏りがちだからこそ、反対のことを書きたいと思います。
ノンプログラマーがGPTsで稼ぐ、という道はさっさと忘れましょう。
たとえ一瞬バズったとしても、スイカゲームのように類似のGPTsが、プログラマーによって秒で改良され、席を奪われることは想像できます。
簡単にコピーできることがコンピュータ世界の魅力であり、責任を持ってその品質を保ち、改良し、管理することが技術である以上、プログラムを所有 できないユーザーが、そこで価値を占有することは不可能です。
この記事を読んでいる人の多くは、ノンプログラマーであり、今換金性の高い理系スキルではないスキルにより関心があり、能力もある人だと思います。
わたしもその一人です。自然言語というあたらしいテクノロジーと、自分はどうつきあっていくのか。GPTを一年いじり倒しながら、ずっと考えてきました。
その結果、今思うことはこれに尽きます。
結論:GPTは稼げないが、歴史を変えるテクノロジーだ
自分のビジネスそのものに、GPTを組み込むことはプログラマーに任せましょう。
GPTのユーザーはプログラマーではありません。
あくまでわたしたちはどこまでもユーザーであり、GPTはどこまでも道具です。
最新テクノロジーを搭載しているという点がユニークな、
筆や自転車と同じカテゴリーに属する、道具。
ビジネスのことは置いておいて、自分用のGPTsを作り、誰かの作ったGPTsも使って、自分の生活を直接便利にして自由な時間を増やし、楽しむために使えばよいのではないでしょうか。
これまでの歴史では、何度も技術革新が起きるたび、テクノロジーが生んだ余裕は、資本家や経営者に流れ、労働時間が短縮することはありませんでした。
組織に所属している労働者は、テクノロジーによって浮いた時間に、別の労働を課せられたからです。
しかし、今や雇い主のコストが大きい直接雇用は減っています。
それは生活が苦しくなったことを意味しますが、別の観点から見ると、テクノロジーによって浮いた時間を、さらなる労働に置き換えられない選択肢を持つ人が、増えている、とも言えないでしょうか。
もちろん、浮いた時間に仕事を詰め込めば、収入をアップさせて就労の不安定さを改善できます。
でも、食えないほどでないなら、そのまま余暇にしてもいいはずです。
もし、浮いた時間をより多くの人が、より多くの収入ではなく、時間のまま受け取るようになれば、必要な分だけ労働したらそれ以上働かない人が増える可能性があります。
それは、簡単に満足できる収入を確保させないために労働の単価を下げる圧となるかもしれませんが、多くの人がより人間らしい時間を過ごすようになることで、社会の価値観が変わることもあるでしょう。
非倫理的な仕事や、人間的でない職場環境の仕事は、どんなに収入が高くても、人が集まらなくなるかもしれません。
エッセンシャルワーカーのような社会に欠かせない、絶対に継続的に働いてもらう必要がある職業の給与は高くなるかもしれません。
それは、これまでの技術革新の歴史で、実現したくても実現できなかった労働環境の変化を促すものになると、わたしは感じています。
テクノロジーで稼ぐより、テクノロジーで歴史を変える。
こっちの方が、なんか、ワクワクしませんか?
と、非プログラマー脳を全開にして無責任な発言をぶちまけたところで、わたしもさっさと子どもの勉強のサポートを効率化して、子どもと一緒に遊ぶために、これを活かしてGPTsを書き換えたいと思います。
1/16追記:繰り返しになりますが書き直して公開しました。ここまでご覧の皆様はご存知の通り、使用上、余計なことをすると化けの皮が剥がれちゃうから、よい子のみんな、そこんとこよろしくね!
1/16追記2:公開にあたり、正しい道長の使い方もご用意しました!↓
GPTを使うことで、生活をこっそり効率化して、じわじわ歴史を変えていけるノンプログラマーが増えたら、うれしいです。
だってそしたらもっと、noteを書いて遊べるしね!
非プログラマにおすすめの、Chat-GPTとのエモい会話を書いた記事はこちら↓
画像生成AIと遊んだ記事はこちら↓
自分の書く文章をきっかけに、あらゆる物や事と交換できる道具が動くのって、なんでこんなに感動するのだろう。その数字より、そのこと自体に、心が震えます。