2024.12.03
企業の情報漏えいで最も多いのは「中途退職者」による持ち出し 内部不正が発生しやすい3つの要素
リンクをコピー
記事をブックマーク
大嶋勇樹氏:では続きで、プロンプトエンジニアリングに(ついて)入っていこうと思います。「そもそもプロンプトエンジニアリングって何?」と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.26
タスクの伝え方が部下のモチベーションを左右する マッキンゼー流、メンバーが動き出す仕事の振り方
2024.11.25
仕事はできるのに、なぜか尊敬されない人が使いがちな言葉5選 老害化を防ぐために大切な心構えとは
2024.11.27
何もせず月収1,000万円超…オンラインゲームにハマって起こした事業 大学中退し4社立ち上げ・2社売却した起業家人生
2024.11.29
「明日までにお願いできますか?」ちょっとカチンとくる一言 頭がいい人に見える上品な言い方に変えるコツ
2024.11.25
論理的に「詰める」マネジメントでは本質的な解決にならない マッキンゼー流、メンバーの理解と納得を得る接し方
2024.11.28
管理職の「疲弊感」がメンバーに伝わるリスク 部下の「働きがい」を育む6つのポイント
2024.11.27
部下に残業させられず、自分の負担ばかり増える管理職 組織成長のカギを握る「ミドル層」が抱える課題
2024.11.27
仕事中の「今ちょっといいですか」が苦痛… いしかわゆき氏が語る、ADHD気質にマッチした働き方のヒント
2024.11.26
仕事の質を左右する「ムダな習慣」トップ5 忙しくなる前に棚卸ししたい“やめたほうがいいこと”とは
2024.11.28
“新規事業が生まれない組織”に足りていないもの 「PoC貧乏」に陥らず、アイデアを形にするためのヒント
長期投資の衝撃の真実!20年投資しても年率1.9%しか増えない!?
2024.10.04 - 2024.10.04
第765回 トレンド経営学『顧客に謝る基準とは?』
2022.04.18 - 2022.04.18
不機嫌な自分をやめるために!認知行動療法の専門家 中島美鈴先生新刊『脱イライラ習慣! あなたの怒り取扱説明書』発売記念【無料オンラインイベント】
2024.10.25 - 2024.10.25
ログミーBusiness リニューアル記念イベント開催
2024.11.29 - 2024.11.29
品がある人、育ちがいい人の見える 人のセリフ 3選
2022.11.30 - 2022.11.30