はじめに
初めての投稿(プログラミングを初めて3日)から約半年が立ちました。
フォント煮?
そんな私は、新卒の同期と2人で生成AIを利用したチケット起票システムの実装に取り組んでおりました。
期限はなんとトータル2か月!!!
この期間で出力精度を上げる方法isプロンプトのブラッシュアップしかない!!!
ということで思考錯誤した結果がこちらです。
前提条件
目的
チケットの自動起票
生成AIで行うこと
slackにあるスレッドの文章をコピペで入力
チケットの該当欄のフォーマットに合わせて出力
これらに最適なプロンプトを生成すべく、我々はアマゾンの奥地へと向かった、、、
https://platform.openai.com/docs/guides/prompt-engineering
すると、圧倒的信頼度を誇るソースを発見。
今回はこの中にあった
・明確な指示を書く
・参照テキストを提供する
・モデルに「考える」時間を与える
・変更を体系的にテストする
これらの4項目を実践してみました。
今回はこの中で特に効果的であった2項目について書き残そうと思います。
1つ目
明確な指示を書く
当たり前みたいなことを忘れていました。生成AIは自発的には動きません。
普段私たちが文章をまとめるときに自然と行っている手順も、生成AIにとっては指示がなくては当たり前に実行できるものではないのです。
そこで、文章作成までの一連の流れを、私たちが作業を行うことのできる粒度まで分解してプロンプトに記載することで、生成AIの行う作業に手順を設けることを試みました。
今回は生成AIで行いたい入力から出力までの過程を明記しました。
(修正前)
入力を基に、フォーマットに従った出力を作成してください。
(修正後)
入力をチケットにふさわしい言葉に置き換えます。
つぎにフォーマットの7項目に沿って入力内容を整理し、
フォーマットに従った出力を作成してください。
この変更によって得られた変化が次の2つです。
・出力の体裁が保てるようになった!
スレッドの文章内にある過剰な敬語や砕けた表現が適切な表現に置き替えられることで、チケット起票後に語尾を修正する必要がなくなりました。
・内容の重複が減った!
入力内容を分類してから出力の作成を行うことで回答が論理的になり、出力された内容が正確に項目分けされるようになりました。
2つ目
モデルに「考える」時間を与える
生成AIは速やかな処理のため、文章の中にあるそれぞれの情報を逐次処理して回答を生成しています。
しかしながら、スレットの文章をすべて入力するという今回の条件では結論を文章の最後まで断定することができません。
そこで、生成AIに私たちが文章を読んでまとめる作業に伴うものと同様の「思考の連鎖」を要求することで、出力の精度を上げることを試みました。
今回はプロンプトの内部に、「必ず入力内容の結末を確認してから、出力の作成を行ってください。」という指示を追加しました。
この追加によって得られた変化が次の2つです。
・出力内容に一貫性が保てた!
「成功したと思ったら失敗していた」「間違えた対処をしていた」等の内容が入力に含まれていた場合でも、先に入力された情報に惑わされることなく出力が行われたことにより、内容の一貫性を担保できるようになりました。
・出力の量が少し増えた!
すべての入力が揃った状態で処理されることによって文脈情報や各情報との関連付けが可能になり、全体像を加味した出力が行われた結果、出力の量が微増しました。
さいごに
以上、どんなプロンプトにも入れることができそうな2つの項目を紹介しました。
・入力から出力までの過程を明記してみる
・「必ず入力内容の結末を確認してから、出力の作成を行ってください。」という指示を追加してみる
皆様のプロンプトのスパイスに。ぜひおためしあれ。