最近ずっとAIプログラミングをしています。
だいぶ扱いに慣れてきたので、私なりの解釈とか使い方をご紹介したいと思います。
具体的なプログラミングコードの紹介ではなく、AIとはこういう接し方がいいよという基礎というか考え方について説明します。
生成AIとLLMの違い
生成AIは、画像や音声、テキストなどさまざまなデータを生成するAI技術の総称です。
その中でも、テキストの生成に特化したAIがLLM(大規模言語モデル)と呼ばれます。
Chat-GPTやCopilotに代表されるAIは、正確にはこのLLMを使ったAIとなります。
現在のAIプログラミングはOpenAI API(Chat-GPTのAPI)を使ったものがほとんどですので、本稿でもLLMを使う前提で説明します。
画像や音声を前提にしたプログラミングではたぶん役に立ちませんので、その場合はブラウザバックしてください。
プロンプトに多くの指示を書かない
どんなサイトや本を見ても、だいたい紹介されているコードはプロンプトを書く→invoke()→回答出力という流れになっています。
私も最初勘違いしたのですが、AIにはまとめて指示を出した方がうまくいくと思ってました。
例えばこんな感じです。
次のデータを以下の制約条件に注意し、月別かつ時系列にまとめなさい。
# データ
{data}
# 制約条件
(データをまとめる上での細かい条件をつらつらと書く)
その後3ヶ月ごとの移動平均と加重移動平均を求め、以下の制約条件に注意し、翌年1月~3月までの売上金額の予測値を求めなさい。
# 制約条件
(データを予測する上での細かい条件をつらつらと書く)
実際にこのプロンプトを実行してみると、結果が安定しません。
予測できないと言われたり、途中結果を返してきて「ここまでがんばりました」みたいな回答になったりします。(うまくいくときもあります)
基本的には、以下のように段階を追って単純な指示を繰り返した方が精度が上がります。
(1回目)
次のデータを以下の制約条件に注意し、月別かつ時系列にまとめなさい。
# データ
{data}
# 制約条件
(データをまとめる上での細かい条件をつらつらと書く)
(2回目)
次のデータは月別の売上金額データです。
このデータの移動平均と加重移動平均を求め、以下の制約条件に注意し、翌年1月~3月までの売上金額の予測値を求めなさい。
# データ
(1回目のプロンプトの回答結果を渡す)
# 制約条件
(データをまとめる上での細かい条件をつらつらと書く)
プロンプト1回で済ませるよりトークン数が増えてしまいますが、AIを意図通りに動かしやすくなります。
プロンプトの分け方ですが、私は関数(メソッド)を設計するのと同じ感覚でやっています。
つまり、1機能=1関数(この場合は1指示=1プロンプト)です。
計算でできることは計算でやる
先ほどのプロンプトのこの部分。
次のデータは月別の売上金額データです。
このデータの移動平均と加重移動平均を求め、以下の制約条件に注意し、翌年1月~3月までの売上金額の予測値を求めなさい。
AIに頼らなくても移動平均や加重移動平均は計算で求めることができますし、そういうものはAI任せにしない方がうまくいきます。
実際にAIにやらせてみると分かるのですが、結果が安定しません。
これを安定させるためにはさまざまな条件や計算方法をプロンプトで指示していく必要があり、やっていくうちに結局「自分で作った方が早い」という結論になりました。
AIプログラミングしていると何がなんでもAIを使いたくなりますが、正直、このやり方が確実で正確なデータを作ることができます。
以下のように、AIを使用する部分とプログラムで解決する部分をきっちり役割分担するのがコツです。
- プロンプト
「次のデータを以下の制約条件に注意し、月別かつ時系列にまとめなさい。(以下略)」 - プログラム
受け取った回答から移動平均、加重移動平均を計算する。 - プロンプト
「次のデータは月別の売上金額データ、およびその移動平均データと加重移動平均データです。
これらのデータを参考にし、以下の制約条件に注意し、翌年1月~3月までの売上金額の予測値を求めなさい。(以下略)」
新入社員にOJTする感覚
個人的な感想ですが、AIを使う感覚は先輩社員として新入社員にOJTする感じに近いと思います。
新入社員に仕事を丸投げしてもうまくいきませんよね。
かといって、最初にやることを一気にガーっと詰め込んだところで、やっぱり完成度の高い仕事はできない。
OJTは、まず簡単な仕事を与えてその内容をチェックして、ダメなところを指摘した上でさらに次の指示を出す、という感じだと思います。
AIもまさしくそんな感じで、指示(プロンプト)を出す→チェック(データ加工)→それを元に次の指示(プロンプト)を出す、という流れが重要です。
OJTと違うのは、人間なら仕事の繰り返しで成長しますが、AIは成長しないという点です。
成長しない新人相手に、毎回手取り足取り指示を出してあげるのが、AIを使いこなす一番のコツだと思います。
「いや、AIも成長するはずだ!」という人は、ぜひファインチューニング沼に手を出してください(笑。