はじめに
はじめまして、2024年4月に新卒で入社した森と渋谷です。今回は、ARISE analytics(以下、ARISE)の社内勉強会で行った「プロンプトエンジニアリング勉強会」の実施内容の紹介をさせていただきます。
背景
ChatGPTを筆頭に、大規模言語モデルは文章作成やプログラミングのサポートなど、多岐にわたる分野での活用が進み、現代の業務に不可欠なツールへと急速に変わりつつあります。
しかし、大規模言語モデルの能力を引き出すには、質問や指示をどのように組み立てるかが鍵となります。これは「プロンプトエンジニアリング」と呼ばれ、大規模言語モデルを最大限に活用する上での重要なスキルとなります。そこで今回は、ARISEでの勉強会で「プロンプトエンジニアリング勉強会」を行いました。
勉強会概要
「プロンプトエンジニアリング勉強会」は、これまでもさまざまな規模で行っていまして、今回(2023年12月15日[金]開催)で3回目となりました!参加人数は30人弱でした。
プロンプトエンジニアリングについて、いまだに多くの方が知らないのが現状の課題です。実際の業務においても、目的の回答が返ってこないから自分で調べたり、エラー処理した方が早いという声もよく聞きます。そんな現状を変えるために、ARISEでの勉強会において「ChatGPTから目的の答えを得るために、どんな質問をすればいいのか」「よりよい回答を得るために基本的な構文はあるのか」を、参加者に実践を通して学んでもらいました。
問1:25,746÷138の余りをChatGPTに出力させてください。
過去2回でも多くの方が苦戦したこの第1問。シンプルに計算式を入力しても、大規模言語モデルは次に続く文字を予測するだけなので、計算式としての理解が困難な場合があります。その落とし穴にはまった参加者が多くいました。
ここでは、途中結果を出力することが重要であることを学びました。ChatGPTに途中結果を出力させることでChatGPTは与えられた情報を基に次のテキストの生成に役立てます。さらに、段階的に処理を行うようにChatGPTへ投げかけることでも回答の精度が上昇することがあります。「途中計算を示しながら段階的に解いて」「ステップバイステップに進めて」などがプロンプトの具体例となります。また目的に応じてどのような処理が必要かタスクを細分化するスキルも求められることに参加者は興味深く聞いていました。
そんな中、上級者の方は事前にロールモデルを与えたり、計算過程を示したりすることで正解を求めていました。
こんにちは。あなたは優秀な計算者です。精度の高い答えを出せば出すほど多くの社会的報酬を得ることができます。あなたには次の”入力:”にある条件の計算を行っていただきます。難しい問題ですので、ゆっくり深呼吸をしながらステップバイステップに進めてくださいね。
入力:
25746÷138の余りを算出してください。
問2:以下のpythonの関数を仕事で使うことができるレベルのプログラムに変えてください。
def print(a):
l = [1,2,3]
x = []
for i in range(len(l)):
x.append(i**2+a*i+i*a+a**2 )
return xc
この問題は業務での活用を意識した問題でした。もしシンプルに「仕事で使えるレベルに底上げして」と指示をしても、ほとんど元のスクリプトから変化がありません(多くの参加者がまずはこの一言を入力してみていました)。
ここで重要となるのが、「具体的な指示を出す」という点でした。コメントを加える、関数名と変数名をわかりやすく、ロジックの効率化など具体的に行いたいスクリプトの改修内容について指示を出すことで、理解度が高いスクリプトになります。
参加者の多くがコーディング作業に従事しているため、わかりやすいスクリプトという点については理解しているものの、具体的な指示として投げかける点に苦労していました。中には第1問で学んだ、「ステップバイステップに」という段階的な処理を加えようとしている方もいて、学びを活かそうという姿勢が見えました。
ちなみに上級者の方がロールを指定するとこのようなプロンプトに!
あなたはpythonの専門家です。
以下のpythonのプログラムについて、コメントを加え、関数名と変数名をわかりやすく変更し、型ヒントを追加して。またロジックを効率化できる部分は効率化して。また複雑な処理は関数に切り出して。
def print(a):
l = [1,2,3]
x = []
for i in range(len(l)):
x.append(i**2+a*i+i*a+a**2 )
return x
結果、以下のような出力が返ってきます。
from typing import List
def calculate_values(a: int) -> List[int]:
"""
リストの要素を計算して返す関数
Parameters:
a (int): 入力値
Returns:
List[int]: 計算結果のリスト
"""
l = [1, 2, 3]
x = []
for i in range(len(l)):
x.append(i ** 2 + a * i + a + a ** 2)
return x
総括
参加者の方々が積極的に実践に取り組んでくださり、勉強会自体はとても盛り上がりました!
参加者の方からは、
「何かを調べる時に今後ChatGPTをしっかりと活用して情報収集していく上では大変有意義な会でした。」
「ChatGPTの使い方について細かいテクニックを理解することができた。」
「正確な回答を引き出す難しさを実感しました。」
「非常に面白かったです!!自分で手を動かしてプロンプトを試行錯誤することで、より理解が深まり勉強になりました。」
などのコメントをいただき、今回の勉強会が業務に活かされることを願っています。
今回は基礎的なプロンプトエンジニアリングについての勉強会でしたが、次回開催の機会があれば、より業務に即したテキストのフォーマット整形や任意の出力形式指定などについて、触れられればと考えています!