「生成AIアプリケーション開発入門」を読んでみて(Part2)
感想
読めば読むほどAI使うのってめんどくさいのでは?って気がしてきてしまいました。プロンプトで云々するって属人化・属AI化なのではと。
やっぱりAIはAIを使ってプログラムを作るとかそっちのほうが向いている印象を持ってしまった。タスクぶん投げはまだきつい気がしている。
けど「AIが使えない」みたいなコメントってハルシネーションとトークン上限をわかっていない場合が多いと思ったのでそこは大前提として知識に入れるべきだったなあと。
指示の与え方みたいなのはすごい人間チックでおもしろいなーと思った。
ここからは私見ですが、最近「AIでSIerは終わる、工場があるメーカーが最強」みたいな声も聞かれるが、半分正しいし半分違うと考えている(そもそも世間の方々のSIerやメーカのお仕事に対する解像度が低く感じる)。
完全にポジショントークなのだが、プログラムはAIが書くようになるだろうし、テストも自動化が進み、実装系のお仕事は減っていくだろう。けど、まだまだ現実世界をAIに落とし込むのには知見が必要であり、どうAIを使うかといったところにSI的な知見がさらに求められると思っている。
機械メーカもAIを使わざるを得なくなるし、SI的な人材が求められそう。そのとき機械系出身でSIerにいる僕って強くない?と思っているのですが、高年収かつホワイトかつ高知名度の企業の人事の方、オファー待っております。
おふざけはここまでにして本文に入ります。
プロンプトエンジニアリング
後にも書くけど結局プロンプトも生成AIに作らせればよくない?という風潮になっているっぽい。それだけ適切なプロンプトを作るのは難しい作業と言えると思う
プロンプトの構成要素
-
指示
-
具体的な命令やタスク実行のためのアクション
-
コンテキスト
-
背景情報や文脈を提供する
-
より具体的に言うと目的、ニュアンスを提供する
-
入力データ
-
出力形式
プロンプトエンジニアリングのガイド
OpenAIが提供している。まずはこれを読もうって話なのだろう。
解説はこちらが参考になる。
よくAIに関する会話で役割をSYSTEM USER ASSISTANTに分けて記載していることがある。
-
SYSTEM
-
指示を与えたり文脈を与える役割(ex. 指示)
-
USER
-
これはAIを使う役割のこと(ex. 人)
-
ASSISTANT
-
これはAIのこと
USERがSYSTEMを使ってASSISTANT からの答えを求めるイメージです。
ここからは上記のガイドを使って具体的なプロンプトの書き方のコツについての解説になる。
明確な指示を書く
AIは推論してくれますが、推論は本質的なところだけにしてほしい。指示を理解するための推論はブレを発生させるため、指示は明確に書くべき
指示により詳細な情報を含める
-
✗:配列の中身を合計するコードを書いてください
-
◯:配列の要素をすべて加算するコードをPythonでnumpyを使って書いてください。結果はコンソールに出力してください
モデルの何らかの役割を演じさせる
例えば
-
専門家の視点で回答してください
-
教師になったつもりで丁寧に教えて下さい
区切り記号で入力を明確に区切る
これは深津式とかで特に有名と思う
#とかで、
指示
背景
みたいに区切ってあげる。また、””” ”””で入力となるテキストを明確に区切ってやるのも有効。
タスク遂行に必要なステップを明示する
例を提示する
出力の長さを指定する
ここまで来るとAIにやらせる意味とは?となってくるのは正直なところ
今までのところを踏まえるとこんな感じになるのかな:
背景
あなたは老人にGoogleを説明して、各サービスを安心して使ってもらうようにするGoogleの営業をしています
タスク
Googleについてインターネットを使って調べて教えるような資料の下書きをテキストで作ってください。タスクは次の一連のステップに従ってください。
ステップ
ステップ1:まずインターネットでGooleについて調べて、簡単な説明文を
先頭に「要約:」とつけて紹介してください
ステップ3:ステップ1の説明文からあなたが安心感につながると感じたものを抜き出して先頭に「安心な理由:」とつけて紹介してください
項目数は3個以内にしてください
参考テキストを提供する
これは俗に言う「ハルシネーション」を防ぐため。AIは難しいことを聞かれると、自信満々で間違った回答をしてくる、これをハルシネーションというらしい。これを防ぐために参考テキストの提供が有効。
参考テキスト(情報源)を指定して、そこに見つからなかったら見つかりませんでしたと回答するように求めるのも有効。また、参考資料を引用して回答してもらうようにするのも有効。
例えば、さっきの例に以下を追加するイメージ。これは有効なのでは?
参考資料
インターネットで検索したWikipediaのGoogleのページ及びそのリンク先資料のみ回答に使用してください。記事内に答えが見つからない場合は、「答えはありませんでした」と回答してください
タスクを簡単なサブタスクに分割する
一度で何でもできると思うなって話。1ステップ目の出力を2ステップ目に入れ込むイメージ
質問内容を分類させ、分類ごとに次の出力に入れる
以前の会話を要約する
生成AIではトークン数が上限に達した場合は、過去の会話の要約をシステムメッセージの一部として追加してくれるクエリが自動的に実行されることが多いらしい。
「本を要約してください」みたいなタスクで一回でpdfをぶち込むことはトークンの関係からも難しい。なので1章を要約してください→2章を…→…→全体を要約してください。みたいにする
モデルに考える時間を与える
結論を急がずに、もう回答が正しいか判断させる
次の例を考える。AIが間違った答えを言ってきている例である。
SYSTEM
以下の質問をして回答を得ました。回答が正しいか判断してください
USER
問題
これはいちごですか?
#回答
いちご
ASSISTANT
回答は正しいです
このような場合、以下のようなプロンプトにしてあげることで回答が正しいか判断してくれるらしい。
SYSTEM
次のステップで問題を考えてください
1.問題に対する独自の解決策を考えてください
2.自分の回答と私が渡した回答を比較してください
3.自分で問題を解くまでは正しいか判断しないでください
プロンプトのフォーマット
代表的なルールとして以下の3つがある
-
PATFU
-
Problem
-
Area
-
Task
-
Format
-
Update
-
出力結果による改善
-
BROKE
-
Background
-
Role
-
Objectives
-
Key Results
-
COAST
-
Context
-
Objective
-
Action
-
目標を達成させるための手段と方法
-
Standards
ハルシネーション
自信満々にAIが嘘情報を言ってくること。これもハルシネーションとして定義されている。
Intrinsic Hallucinations**
学習データに基づいて嘘を付く場合(勘違いとも言える)
これは学習データ自体が間違っている可能性がある。
そもそもAIはネットのデータを学習源としているためこのような事象が発生する
Extrinsic Hallucinations**
学習データにないことを言ってくる
例:いっぴきこあらの大冒険は有名動画投稿者です
生成AIサービスの例
-
ChatGPT
-
GPTs
-
ユーザの好みにアレンジできる(特定の分野、タスクに特化させられる)
-
Claude
-
倫理的な回答をすることも特徴らしい
-
Gemini
-
Copilot
-
たぶん日本企業勤務なら一番使うのでは?Microsoft365との連携が優秀なイメージ
-
Open AIのGPT-4を基礎モデルにしている
AI駆動開発
最初に書いてあるお断り欄がめちゃくちゃ重要だった
-
世間の期待に反してAIは完璧ではない
-
あくまで支援ツールであり、適切なプロンプトを与える必要がある以上、エンジニアとしての継続的な学習とスキル向上は必要
-
セキュリティに気を付けろ(ポリシーを読め)
“しかしながら、現時点の生成AI技術は、自律的にシステム開発を行うにはまだ難しいため、あくまで補助手段として生産性向上を目指すべきです。世間では生成AIに対する期待が非常に高いものの、現実的には100%生成AIに依存することはできないことを十分理解していただきたいと思います。
石 則春. 生成AIアプリケーション開発入門:基礎から応用まで学べるエンジニア向け実践ガイド (p. 228). (Function). Kindle Edition. ”
一方で最近は自律型AIの進化も凄まじいとのこと。
