こんにちは!
データサイエンティストのウマたん(@statistics1012)です!
昨今生成系AIの進化がスゴイですが、そんな生成系AIを上手く扱うためにプロンプトという指示文が大事になってきます。
この記事ではそんなプロンプトを操るプロンプトエンジニアリングについてまとめていきたいと思います!
目次
プロンプトエンジニアリングの需要爆発!?
生成系AIの登場により、プロンプトエンジニアリングという言葉が生まれ、プロンプトエンジニアという職種が生まれました。
これは、今までプログラミング言語という名の「機械に人間の意図を伝える言語」を扱っていたものが自然言語で操れるようになったことによる変化です。
つまりプロンプトを上手く操れる人というのは従来の熟練プログラマーと同じような価値を持つと考えて良いんです!
プロンプトエンジニアの需要は増えてきており、現にプロンプトエンジニアの年収が場合によっては5000万円を超えるなんて話もあります!
が、、、注意が必要です。
現在は過渡期なのでプロンプトを上手く扱える人の価値が高まっていますが、これはここ数年で誰もが扱えるレベルまで標準化するかもしれません。
また高年収のジョブは、プロンプトだけを扱えるのではなく、後述するLangChainなどのライブラリを使って複雑なプロンプトの処理を制御したりそれをソフトウェアに組み込んだり一気通貫で出来る人である可能性が高いです。
とはいえ、今プロンプトエンジニアリングを学んでおくことは先行者利益を得る意味でも大いに意味があります!
ということで、プロンプトエンジニアリングをしっかり学んでいきましょう!
プロンプトエンジニアリング:テキスト生成編
さて、生成系AIにはいくつかのタイプがありますがここではメジャーなテキスト生成系と画像生成系AIについて見ていきたいと思います。
まずはテキスト生成系AI!
テキスト生成系AIにはOpenAIの開発するGPTモデルやGoogleのPaLM、MetaのLLaMAなどのたくさんのモデルがあり、それらを総称して大規模言語モデル(LLM)と呼びますが、どのモデルに対してもプロンプトエンジニアリングのテクニックは効果的です。
それではどんなことに注意してプロンプトを作成していけばよいのか簡単に見ていきましょう!
役割を与える
これはChatGPTをある程度使ったことのある人にとっては当たり前のテクニックかもしれませんが、かなり有効です。
プロンプトの前に「あなたは〇〇です」と付け加えるだけで出力の精度が大きく変わる可能性があります。
小学生が書いたようなアウトプットがほしければ小学生という役割を与えればよいですし、専門性のある文章がほしければ専門家の役割を与えてあげましょう!
サンプルを与える
適切な解答を導きたいときにプロンプトに対して欲しいアウトプットの組み合わせをこちらでいくつか用意してプロンプトの中に含ませるテクニックがあります。
これをfew-shot learningと言いますが、タスクによってはかなり効果的です。
実際に僕自身がサンプルを与えてfew-shot learningをした上でChatGPTを使った事例を取り上げてみましょう。
あるサービス開発しているときに、あるデータを特定のカテゴリに分類したいタスクがありました。
バナナ:果物
なす:野菜
ほうれんそう:野菜
というように※実際とは違うデータ・カテゴリです
このとき、サンプルを与えないで
「バナナ、なす、ほうれんそう」を野菜か果物に分類してください
と指示出しをするよりも
以下のサンプルを参考にして分類対象を果物か野菜に分類してください
【サンプル】
りんご:果物
みかん:果物
きゅうり:野菜
【分類対象】
バナナ:
なす:
ほうれんそう:
というようにサンプルを与えてあげることで適切な分類回答が得やすくなります。
他にもたくさんあるのですが、もっと色々知りたい方は以下のスタアカのプロンプトエンジニアリングコースをチェックしてみてください!
以下のコースではどんなプロンプトにも使える汎用的なプロンプトをいくつか取り上げています。
ちなみに海外のpromptbaseというサービスでプロンプトが売り買いされているのでそちらから人気なプロンプトを購入してみるというのも筋の良いプロンプトを手に入れる一つの手です。
LangChainを使ったプロンプトエンジニアリング
ここまでどんなプロンプトを使えば筋の良いアウトプットを出力してくれるか簡単に見てきましたが、ここからさらに踏み込んでテキスト生成系AIのAPIを利用してプログラムを組む際はまたひと手間必要です。
複雑なプロンプトの流れをプログラムで組む際に役立つのがLangChainというライブラリなのです!
LangChainの特徴
LangChainの公式サイトには以下のように記述があります。
LangChain は、言語モデルを利用してアプリケーションを開発するためのフレームワークです。私たちは、最も強力で差別化されたアプリケーションは、API を介して言語モデルを呼び出すだけでなく、次のことも行うと信じています。
- データを意識する: 言語モデルを他のデータ ソースに接続する
- エージェント的である: 言語モデルがその環境と対話できるようにする
そのため、LangChain フレームワークは、そのようなタイプのアプリケーションを可能にするという目的を念頭に置いて設計されています。
(出典:LangChain公式サイト)
そうなんです。LangChainは言語モデルを利用してアプリケーションを作る際に効果を発揮します。
その上で2つの特徴を取り上げている通り、他のデータソースに接続したり対話できるように過去のやり取りを参照したりなどできるようになります。
現状ChatGPTのAPIをそのまま利用すると、インターネット上のデータソースを参照して答えを返したり過去のやり取りを保持して参照しながら答えを返すみたいなことをするにはかなり手間がかかります。
そこら辺の処理をLangChainでは簡易的によしなにやってくれるので、アプリを構築する際に非常に便利なのです!
LangChainをPythonで使ってみよう!
それでは、簡単にLangChainをPythonで実装していきましょう!
まずは、ライブラリ「langchain」をインストールしていきましょう!
pip install langchain
続いて必要なメソッドをインポートしていきます。
from langchain.llms import OpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
import os
続いてOpenAIのAPIキーを取得して環境変数にセットしましょう!
os.environ["OPENAI_API_KEY"] = "<OpenAIのAPIキー>"
そしたら早速LangChainの出番です。
以下のように記載してあげてください。
llm = OpenAI(model_name="text-davinci-003")
conversation = ConversationChain(
llm=llm,
verbose=True,
memory=ConversationBufferMemory()
)
conversation("データサイエンスを勉強するための方法を3つ教えて下さい。")
conversationの中身は何でも大丈夫ですので好きなプロンプトを入れてみてください。
以下のような回答が返ってくることが分かると思います。
※回答のパターンは必ずしも完全一致しません
これではシンプルな一問一答のやり取りですが、続いて以下のように問いかけてみましょう。
conversation("1つ目についてもっと詳しく")
こちらを見てみるとちゃんとHistoryという箇所に今までの過去のやり取りが格納されており、それをふまえてちゃんとAIが1つ目について詳しく教えてくれています。
LangChainに関しては以下の記事で詳しく解説しているのであわせてチェックしてみてください!
以下のスタアカのプロンプトエンジニアリングコースでもLangChainの使い方について詳しく取り上げています!
プロンプトエンジニアリング:画像生成編
続いて、画像生成系AIのプロンプトエンジニアリングについて見ていきましょう!
画像生成系AIにも、Stable diffusionやMidjourneyやDALL-Eなど様々なモデルが存在しますが、基本的にどのモデルでも同じようなプロンプトが効果的なことが多いです。
プロンプトを探す際はMidjourneyを利用することをオススメします(※現在は無料版が存在せず利用するとなると有料版になってしまいます)。
Midjourneyでは他人の出力した画像とプロンプトを確認することができますので、気に入った画像があればそれを参考にしてプロンプトを組み立てることで理想の画像を生成できる可能性が高くなります。
以下のように特定の画像のプロンプトも確認できます。
画像生成AIについては以下の記事で詳しく解説しているので、参考にしてみてください。
Midjourneyの始め方を知りたい方は以下の記事をチェックしてみて下さい。
本物の人が写っている写真のような画像を生成するためには
おそらく最も需要のあるリアルな写真を生成する方法はどうすればよいのでしょう?
「real photography」や「professional photography」などというプロンプトを入れてあげると割とそれっぽい人物写真が出来上がります。
以下はこんなに短文でリアルな画像ができあがるのか!?と感激した例です。
Extremely closeup of dust girl, professional photography
たったこれだけの短文でこんなにリアルな画像が出来上がるんです!!
ちなみに以下のようにカメラのタイプやクオリティを入れることも効果的なようです。
handsome korean pop-star 20 years old, watching right to the camera, portrait, photograph, shot on fujifilm pro 400H, magazine, editorial, photorealism
画像生成AIを上手く扱うためには、自分の好きな画像をMidjourneyやプロンプトベースなどのプロンプト売買プラットフォームで見つけて、それを参考にしながら試行錯誤していくことです。
他にもたくさんあるのですが、もっと色々知りたい方は以下のスタアカのプロンプトエンジニアリングコースをチェックしてみてください!
プロンプトエンジニアリング まとめ
ここまでで、生成系AIを自在に操る上で非常に重要なプロンプトエンジニアリングについて見てきました!
プロンプトエンジニアリングについてより詳しくは当メディアが運営するスタアカの以下のコースを是非チェックしてみてください!
スタアカは業界最安級のAIデータサイエンススクールです。
【価格】 | ライトプラン:1280円/月 プレミアムプラン:149,800円 |
---|---|
【オススメ度】 | |
【サポート体制】 | |
【受講形式】 | オンライン形式 |
【学習範囲】 | データサイエンスを網羅的に学ぶ 実践的なビジネスフレームワークを学ぶ SQLとPythonを組みあわせて実データを使った様々なワークを行う マーケティングの実行プラン策定 マーケティングとデータ分析の掛け合わせで集客マネタイズ |
・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ
AIデータサイエンスを学んで市場価値の高い人材になりましょう!
データサイエンスやAIの勉強方法は以下の記事でまとめています。
プロンプトエンジニアリングを学ぶ上で以下のサイトも参考になるので是非参考にしてみてください!
・LEARN GENERATIVE AI – Short Courses
・Prompt Engineering Guide
・Level up your GPT game with prompt engineering
・Generative AI learning path : Introduction to Generative AI