2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
リンクをコピー
記事をブックマーク
大嶋勇樹氏:では続きで、プロンプトエンジニアリングに(ついて)入っていこうと思います。「そもそもプロンプトエンジニアリングって何?」と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.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.11.29
「明日までにお願いできますか?」ちょっとカチンとくる一言 頭がいい人に見える上品な言い方に変えるコツ
2024.12.04
いつも遅刻や自慢話…自分勝手な人にイラっとした時の切り返し 不平等な関係を打開する「相手の期待」を裏切る技
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.06
嫌いな相手の行動が気になって仕方ない… 臨床心理士が教える、人間関係のストレスを軽くする知恵
2024.12.03
職場の同僚にイライラ…ストレスを最小限に抑える方法 臨床心理士が語る、「いい人でいなきゃ」と自分を追い込むタイプへの処方箋
2024.12.05
「今日こそやろう」と決めたのに…自己嫌悪でイライラする日々を変えるには
PR | 2024.12.04
攻撃者はVPNを狙っている ゼロトラストならランサムウェア攻撃を防げる理由と仕組み