2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
リンクをコピー
記事をブックマーク
大嶋勇樹氏:では続きで、プロンプトエンジニアリングに(ついて)入っていこうと思います。「そもそもプロンプトエンジニアリングって何?」とGPT-4に聞いてみると、「プロンプトエンジニアリングとは、AIシステムに対する入力を設計・最適化するプロセス……」と、長い回答をしてくれます。
ChatGPTに触れたことがある人は見たことがあると思いますが、ChatGPTからの回答はやはり長くて、「一言で答えてほしい」みたいなことがあると思うんですね。
例えば、3行で答えてもらう時にはこんなことをします。「以下の質問に3行で答えてください。質問:"""プロンプトエンジニアリングとは"""」。(スライドを示して)行じゃなくて文というのが適切かもしれませんが、こんな言い方をすると、こんな感じで3文ぐらいで答えてくれます。「プロンプトエンジニアリングとは、AIモデルへの入力を最適化し、意図した出力を得る技術です」と。これがまさにプロンプトエンジニアリングの例です。プロンプトを工夫すると、こんなふうに意図した形式だったりなんだったりで応答を得やすいです。
プロンプトエンジニアリングについては、ナレッジ集みたいなものがいくつか公開されています。例えばOpenAIの公式でもプロンプトエンジニアリングについて書いたページもあれば、「Prompt Engineering Guide」というものも公開されていて。最近日本語に翻訳されたページもできて、わりと話題になっていたと思います。こういったナレッジ集の内外から、プロンプトエンジニアリングの手法をいくつか見ていこうと思います。
まずは、特にLangChainの入門に関係するものを見ていきます。まずは命令と入力データを分離するというやり方があります。
(スライドを示して)例えば「###」や「"""」で区切って、このように命令と入力データを分離するやり方があります。これが先ほどのプロンプトで使っていたような、ちょっとしたやり方ですね。
ほかには、文脈を入れるやり方があります。例えば外部の情報などを文脈として与えると、文脈に従った回答を得られます。「文脈を踏まえて質問に1文で回答してください」と。そして文脈をいろいろ入れて、「質問:"""LangChainとは?"""」みたいなことをします。
ここの文脈としてはLangChainのドキュメントのある1ページの内容をそのままコピペして貼っている感じなんですが、そうすると「LangChainは、言語モデルを活用したアプリケーション開発のためのフレームワークです」みたいな感じで適切に答えてくれます。
GPT-3.5やGPT-4は、2021年9月までの知識で学習していると公式で言われています。そして今日のテーマのLangChainは2022年に登場しているものなので、この文脈を与えないと「わかりません」と言ってくるか、ハルシネーションというやつで事実ではない嘘の回答をしてくるかということになるんですが、文脈を与えるとけっこうちゃんと答えてくれます。
ほかには出力形式を指定するプロンプトの使い方もあります。出力形式を指定することで、出力をプログラムで扱いやすくできます。(スライドを示して)「以下の料理のレシピを教えてください 料理名:カレー 形式は以下のようなJSONにしてください」とすると、こんな感じでJSON形式で出力を出してくれたりするようなやり方もあります。
プロンプトの要素をいろいろ見てきましたが、Prompt Engineering Guideというサイトで、「プロンプトには以下の要素が含まれる」みたいな整理がされてます。
ここまで見てきたものの整理のような感じですね。「命令」、モデルに実行してほしい特定のタスクまたは命令が含まれることもあれば、「文脈」、外部の情報や追加の文脈を含め、それによってモデルをより良い応答に導くようなこともあります。
「入力データ」を命令と分けて質問とかを書いてあげることもあれば、「出力の指示子」ということで、「出力はJSON形式でこういうふうにしてください」と書いてあげることもあります。
(スライドを示して)こんな要素が出てきます。このあたりのイメージをつけておくと、LangChainに後で入っていく時にもわかりやすくなっていくかなと思っています。
いろいろ要素を見てきましたが、LangChainとかを使ってLLMを使ったアプリケーションを作る時に、あれ全部をユーザーに入力させるわけにはいかないです。
実際にLLMを使ったアプリケーションを作る時はプロンプトの全体をユーザーに入力させるのではなくて、テンプレート化した一部を入力させることになると思います。
例えばレシピ生成アプリみたいなものを作ったとして、(ユーザーには)たぶん料理名だけ入力させるとか、そんなふうになると思うんですね。入力したものをLLMを使ったアプリケーションが(例えば)「カレー」と受け取って、プロンプトのテンプレートみたいなのを用意しておいて、プログラムで置き換えて、OpenAIのAPIを呼び出して回答を得るようなことをするわけですね。
このプロンプトのテンプレート化はポイントの1つです。このイメージは押さえておいてもらえると続きがわかりやすくなるかと思います。
プロンプトエンジニアリングの話を少ししてきましたが、最後に有名な手法を2つ紹介しようと思います。有名な手法といってもいろいろありますが、Zero-shot、Few-shotプロンプティングと、Zero-shot CoTプロンプティングを紹介しようと思います。
まずZero-shotやFew-shotといったものですが、例えば「バナナの色は?」みたいなことを「Q:バナナの色は? A:」という聞き方をすると、「バナナの色は成熟度によって変わります。未熟なバナナは緑色で……」とかなんとかかんとかと言ってくれて。(この情報も)正確かもしれないんですが、正直余計な説明が多かったりします。
「そうじゃなくて黄色と言ってほしいんだ」という時は、Few-shotプロンプティングという手法を使って、例えば「Q:リンゴの色は? A:赤 Q:メロンの色は? A:緑 Q:バナナの色は? A:」みたいなプロンプトを与えます。いくつかデモンストレーションを与えたりすると、黄色と求めるような形式で回答を得やすくなる。こんな手法があります。こういうのをFew-shotプロンプティングといいます。
ほかにはZero-shot CoT……。CoTはChain of Thoughtの略ですが、Zero-shot CoTプロンプティングという手法もあります。Zero-shotじゃないのもありますが、Zero-shotのほうがちょっとおもしろいので紹介します。
聞いたことがある方もけっこういるかもしれませんが、プロンプトに「ステップバイステップで考えてみましょう」みたいな言葉を追加すると、それだけで計算が正確になることがあります。
すみません、ちょっと(スライドの)字が小さめかもしれませんが……。「10個リンゴを買って、隣人に何個渡して……」みたいな問題があって、「答えだけ端的に答えてください」みたいなことを言うと間違った答えを言ったりするのに対して、「ステップバイステップで考えてみましょう」という一言を追加してステップバイステップで考えさせたりすると、正確な答えが返ってきたりします。こんな工夫もあったりするわけです。こういうものをZero-shot CoTプロンプティングといいます。
実際にはPrompt Engineering GuideやOpenAIのページにもっといろいろ手法が紹介されているし、そういったところに載っていないプロンプトエンジニアリングの手法もいろいろありますが、このあたりの紹介にとどめようかと思います。
ということで、ここまでプロンプトエンジニアリングの概要として、プロンプトの例をいくつか見てきました。LLMを使ったアプリケーションを作る時は、プロンプトに文脈、contextを含めたり、プロンプトをテンプレート化するのがポイントです。また、Few-shotやZero-shot CoTといった有名な手法も紹介しました。
プロンプトエンジニアリングに少し慣れてきたかと思うので、このあたりでLangChainに入門していこうと思います。プロンプトエンジニアリングのイメージがあるとLangChainに入門しやすいんじゃないかなと思っているので、なんとなくのイメージが少し持てたところで、LangChainに入っていこうと思います。
(その前に)いくつか質問をもらっているので回答したいと思います。
まず1つ質問いただいているのが、「text-davinci-003などのモデルは、ローカルで構築してローカルで動かすことはできないでしょうか? どうしてもOpenAIのAPIを叩く必要がありますか?」ということです。
私の認識では、OpenAIのtext-davinci-003はローカルでは動かせないと思っています。モデルをダウンロードできないと思うので、gpt-4もローカルでは動かせなくて、APIを叩くしかないと思っています。ただオープンソースで別で出ているモデルもいろいろあって、そういうのだったらローカルで動かせるというのが私の認識です。
もう1つ質問をもらっています。「LangChainと同等、競合サービスはなにがありますか?『LlamaIndex』がそうですかね?」ということです。
LangChainと近いポジションのサービスでいうと、ChatGPTのプラグインはわりと似ているかもしれないですね。LlamaIndexは後でちょっと出てきます。チャットのほうでもいろいろやり取りしてもらっていますが……。料金周りの補足とかもありがとうございます。
(次回につづく)
関連タグ:
プロンプトエンジニアリングから始めるLangChain入門講座 大嶋勇樹氏が教える、OpenAIのモデルとAPIの使い方
AIモデルへの入力を最適化し、意図した出力を得るために 例から学ぶ、プロンプトエンジニアリングの概要
そもそもLangChainは何に使えるのか 3つの基礎的なモジュール「Models」「Prompts」「Chains」から考える活用事例
保存した文章を利用する「Indexes」、過去のやりとりを記憶する「Memory」 LLMにできることを拡張する2つのLangChainモジュール
まるで“LLMがツールを使う”かのように動作する デモから見るLangChainのモジュール「Agents」の使い方
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略