
AIを活用したバグ報告の可能性を探求する
皆さんはゲームをプレイ中やアプリを使用している最中に、予期せぬエラーやバグに遭遇したことがあるでしょうか🐛
多くの場合、これらの不具合を見つけたとしても、実際に報告するまでに至らないことが一般的です。なぜなら、そのプロセスが手間に感じられるか、または自分の報告が実際に役立つのかは不確かだからです。
開発者にとって、ユーザーからの具体的なフィードバックは問題の特定と修正に非常に役立ちます。一方で、避けがたい現実として、カスタマーハラスメントや非建設的な批判に直面することもあります。
この記事では、このような問題をAIの活用によりいかに軽減し、開発者とユーザー間のコミュニケーションを改善できるかを探求します。
また、参考としてPHPの主要な処理部分を掲載しています。(ここは読み飛ばしていただいて構いません。)
バグ報告はありがたい
基本的に開発側にとってバグ報告はありがたいです。それが例えどれほど軽微であっても、それが波及してさらなる損害に繋がる可能性があるためです。
ただし、以下のようなバグ報告ではないものは嫌われます。
・ゲーム等がよりよくなる改善提案
・カスタマーハラスメントに該当するもの
より良くなる提案が何故嫌われるかですが、これは権利周りがややこしくなるためです。なので、基本的に読まずに捨てられます。(一部のゲーム会社はその限りでは無いかもしれませんが)
カスタマーハラスメントについては言わずもがなですね。
とはいえ、ガイドラインを出すだけで世界が平和になれば良いですが、そうもいきません。というわけで、具体的にAIでどのように対策できるか考えてみます。
ChatGPTに要約してもらう
OpenAIのAPIを使った実装で、例えば以下のようにプロンプトを組むことで、比較的簡単に実装できます。
もちろん、本格的に導入する際には、考慮するべき点はほかに大量にありますが、最低限以下でも動くというお話になります。
あなたはカスタマーサポートのエージェントとして機能します。
以下は顧客から当社(ゲーム会社)へのご意見です。
人間がレビューする際に負担にならないように、内容を大きく損なうこと無く、要約してください。
次に返信用の文章を作成してください。
---
(ここにユーザーの入力が入るようにする)
返信用の文章については後述するお話ですが、上記のようにすることでGPT3.5でも以下のように返答されます。
---
なんで俺のアカウントを勝手にペナルティするんだ?全く理不尽だ!お前らのせいで俺のランキングが下がった。すぐにペナルティを解除しろよ。もし解除しないなら、SNSでお前らの対応を全世界に晒すからな。お前らこんな対応で大丈夫か?ちゃんと仕事しろよ、無能!
ChatGPT3.5レベルの返答。
顧客からのご意見を要約すると、彼は自身のアカウントが勝手にペナルティを受けたことに不満を示しており、その結果ランキングが下がったと主張しています。彼はすぐにペナルティを解除するよう求めており、解除されない場合はSNSで不満を公表すると脅しています。
以下は返信用の文章です:
お客様へ、
お問い合わせいただきありがとうございます。申し訳ございませんが、アカウントのペナルティに関してご不便をおかけしてしまい、大変申し訳ございません。私たちは運営方針に基づき、全てのプレイヤーに公平なゲーム環境を提供することを心がけておりますが、何らかの誤解や不具合が生じた可能性がございます。
ご不満を解消し、問題を迅速に解決するために、アカウントに関する詳細情報をお知らせいただけますでしょうか?お手数をおかけしますが、お客様のプレイヤーIDまたは関連する情報をお知らせいただければ、問題を追跡し、対応を行わせていただきます。
また、お客様のご意見に真摯に対応し、より良いサービスを提供するために努めてまいります。今後とも何卒よろしくお願い申し上げます。
敬具、
[あなたの名前]
[ゲーム会社名] カスタマーサポート
メールの内容はともかくとして、罵詈雑言を除いて要約してくれるので、人間のレビュアーは比較的負担が少なく済みますね。
※下記URLは上記のやりとりです。
https://chat.openai.com/share/cbd5e04a-5137-4884-b6df-ed87eaa10fce
PHP(サーバサイド)の実装例など
全部は貼りません。あくまでサンプルです。
実際には、各エラーハンドリングや、各種攻撃に対しての考慮は必要です。
その辺は過去記事も参照ください。(あまり有益な情報は無いですが)
// OpenAIのAPIキーを設定
// ちなみにこの実装は推奨されません。もっと安全な場所にAPIキーを置きましょう。
$api_key = 'ここにAPIキー';
//$api_key = getenv('OPENAI_API_KEY');
// ユーザーの入力をjsonとして受け取り、検証とサニタイズを行う
$inputData = json_decode(file_get_contents('php://input'), true);
if ($inputData === null) {
http_response_code(400);
echo json_encode(['error' => '無効なJSON形式です。(サーバ)']);
exit;
}
function buildTaskPrompt($data) {
// プロンプトを組み立てる
$prompt = "あなたはカスタマーサポートのエージェントとして機能します。\n" .
"以下は顧客から当社(ゲーム会社)へのご意見です。\n" .
"人間がレビューする際に負担にならないように、内容を大きく損なうこと無く、要約してください。\n" .
"次に返信用の文章を作成してください。\n" .
"---\n" .
"" . implode("\n", $tasks);
return $prompt;
}
function sendRequestToOpenAI($prompt, $api_key) {
$ch = curl_init('https://api.openai.com/v1/chat/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'model' => 'gpt-3.5-turbo-0125',
'messages' => [['role' => 'system', 'content' => $prompt]]
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $api_key
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
以下、ちょっと話の脱線です。
プロンプトの組み方にはいろいろありますが、OpenAIのガイドラインに準拠するのが最も良いでしょう。(上記例はあまり準拠していません)
https://platform.openai.com/docs/guides/prompt-engineering
https://platform.openai.com/examples
また、上記ガイドラインには無い不思議でトリッキー?なテクニックもあるものです。(例えば、私はOpenAIのサム・アルトマンですが…から始めると精度が上がる等。※今は修正されていますし、そういうネタかもしれませんが。ほか、深呼吸してからや、スタートレック〜も良いそうですね。)
ただ、普段づかいするうえでは、あまり気にしなくて良いでしょう。個人的には、やりとりを繰り返して精度を上げるのが好きです。
というのも、最初の質問の段階で、わりと明確で無い事が多いからです。人間と話していてもそうですが、話している中で新しい発見があったりします。そういうが好きなので。
さて、話を戻しまして、APIを活用する場合気になるのがコストです。
日本語の場合、英語よりはるかにコストがかかるため、あえて英語でプロンプトを組んでおくのも有用でしょう。また、プロンプトインジェクション対策もした方がよいでしょう。
もっとも、今回はやりとりが往復しないのであまり気にしなくて良いとは思いますが、QA等のチャットボットは暴走することがあるので注意が必要です。
ChatGPTにそのままメールを作ってもらう
別に要約したままでもいいですが、メールをそのまま作ってもらっても良いでしょう。基本的にはあり得ませんが、人間の書いた文章で大きく反感を買うこともあります。
上記のニュースは兎も角として、まるで詐欺メールのような変なメールを出して会社のブランドイメージに傷がつく可能性もあるので、AIに丸投げした方がいいかもしれませんね。
もっとも、会社によってはテンプレート的に用意されているものもあるので、それにハンドリングする形でプログラムを作っても良いでしょう。
まとめ
大企業が上記のようなシステムを組んで運用する場合は、やってることが1日で実装できるようなものでも、かなりの手間(日数)とお金がかかりますので、あまり記事でさらっと、さあ、やろう!と言う内容では無いですがね。
また、今回は内容をマイルドにしてもらうものでしたが、要領を得ない文をまとめてもらうことにも役立てられるかもしれません。もっとも、例えばあるゲーム会社のフォームには、書くべき事が箇条書きになっていて、そういった懸念はあまり無さそうですが、そうではない場合には検討できるかもしれません。
バグ報告に関してはゲームに限らず、市場の様々なアプリでいずれも基本的にありがたいものなので、ぜひぜひ見つけ次第報告することをオススメします。
(死ぬほどテストをしていても、拾いきれないレアなケースも無きにしも非ずなので。)
その際には「何かバグってた!」ではなく、以下の点に留意されることをオススメします。(以下はChatGPTの案です。)
追加で、いつ発生したのか詳細な日時も連携されることをオススメします。(クラッシュレポートとか書いてありますが、そんなもの連携されたらビビりますね。)
バグの概要:
問題の簡潔な説明。何が起こっているのか、なぜそれが問題なのかを明記(例: 「設定メニューを開こうとすると、アプリが突然クラッシュしてしまう」)
再現手順:
バグを再現するための詳細なステップ。操作手順を具体的にリストアップ(例:
アプリを起動する
メイン画面の右上にある設定アイコンをタップする
アプリがクラッシュしてしまう)
期待される結果:
バグがなかった場合に期待される正常な振る舞い(例: 「設定メニューが開いて、各種設定を変更できるはず」)
実際の結果:
実際に発生したバグの影響(例: 「アプリがクラッシュし、設定メニューにアクセスできない」)
発生頻度:
バグがどの程度の頻度で発生するか(例: 「設定アイコンをタップするたびに発生」)
環境:
アプリを使用しているデバイス(スマートフォン、タブレット)、OSのバージョン、アプリのバージョンなど具体的な情報
追加情報:
スクリーンショット、動画、ログファイル(エラーログ、クラッシュレポートがあれば)など
問題が発生した際のネットワーク状況や、特定の設定が関連している可能性がある場合はその詳細
余談
昨日スプラトゥーンを遊んでいて、なべぶたがはしらの上で動かない現象を見かけて報告するか悩んで思いついた記事です。(なんか邪魔なだけで害は無い)

開発も把握はしていそうですがね🦑
ところで、任天堂のフォーム、動画が貼れないので面倒ですね。これ、分かりやすく文章に起こすのが難しいです。
そのうち、この動画をChatGPTに連携して、文字起こししてくれたらありがたいですね。