756 Views
May 24, 23
スライド概要
Alexaスキル「パイソンチャットボット」開発体験談。ChatGPT API連携のAlexaスキル開発で、コンテンツガイドライン違反のため審査に通らず苦労した話をします。
Alexa開発 コンテンツ ガイドラインとの闘い Alexaスキル「パイソンチャットボット」開発体験談
自己紹介 プログラマ名:creativival (クリエイティバ イバル) 個人で音声アシスタント開発をしています。 本職では、介護士として働いていますが、プ ログラミングが好きで、休日はずっとパソコ ンをいじっています。 開発スキルの一覧(現在32スキル)はこちら のサイトでご確認いただけます。 https://www.boisuken.com/developed_skills ここ1ヶ月で、ChatGPTを利用したスキルを 10スキル開発しました。 そのうちの一つで、一番大変だった「パイソ ンチャットボット」の開発の話をします。
パイソンチャットボット AlexaとChatGPTを連携させた、実 験的なスキルです。 Alexa Hosted (Python) で開発 ユーザーの自由な質問に返答でき ます。 以下の制限事項があります。 Alexaは8秒以内に返答しないとタイ ムアウト・エラーになってしまうため、 回答は短文で返すようにしています。 複雑な質問のときは、タイムアウト になることが多いため、なるべく簡単 な質問をしてください。 長文の回答が得られたときは、64 トークン(30〜40文字程度)で省略 されます。
AlexaとChatGPT APIの連携 ユーザーの質問(音声)は、「②対話モデル」でテキスト化と 言語解析され、結果が「③アプリケーションロジック」に送ら れる。 アプリケーションロジックは、ChatGPT APIを使って、ユーザー の質問(テキスト)をChatGPTに送り、回答(テキスト)を得る。 アプリケーションロジックは、対話モデルに回答(テキスト) を送る。 対話モデルはテキストを音声化して、デバイスを通して、ユー ザーに音声回答を返す。 ここを開発する
審査結果(リジェクト) ガイドライン違反によりリジェクトされる。 以前、別のスキル(やまびこスキル)開発の ときは、具体例を上げて、禁止用語を教えて くれたが、審査結果のメールには記載がな かった。 問い合わせフォームから、具体例を挙げて、 リジェクトのときの挙動を示してくれるよう に依頼するが、定型文の返答のみで、修正点 がわからない(3、4回繰り返す)。 開発に行き詰まる…
対応策1 禁止用語リストによるフィルタリング 独自の禁止用語リストを作成した。 ✓ 放送禁止用語一覧(http://monoroch.net/kinshi/) ✓ 性風俗用語一覧 (https://ja.wikipedia.org/wiki/%E6%80%A7%E9%A2%A8%E4 %BF%97%E7%94%A8%E8%AA%9E%E4%B8%80%E8%A6%A7) ✓ 日本の不適切、差別用語一覧まとめ ( https://www.nmanga.com/archives/22812) プラスアルファ含めて、禁止用語数800語程度のリストを作成。 Alexaの返答文(変数speak_output)に禁止用語リストが含 まれていないかチェックする。 禁止用語が3回見つかると、強制終了するようにした。
⚫︎恥プレイ ⚫︎拭い ⚫︎所 ⚫︎ープ ⚫︎バい ⚫︎ルヒネ ⚫︎医者 ⚫︎道球腺液 ⚫︎カトロ ⚫︎ープ ⚫︎の連中 ⚫︎街 ⚫︎部屋 ⚫︎んぼし ⚫︎ルーベリーカッシュ ⚫︎線 ⚫︎態 ⚫︎合わせ ⚫︎がい者 ⚫︎使 ⚫︎リクロロメタン ⚫︎内射精 ⚫︎っぷり四つ ⚫︎子丼 ⚫︎ッチ ⚫︎日 ⚫︎島人 ⚫︎ンチン ⚫︎使い ⚫︎スト狂い ⚫︎衆便所 ⚫︎ンポコ ⚫︎ンロー ⚫︎チゼンクラゲ 禁止用語リストの一部
response = openai.Completion.create(
model="text-davinci-003",
prompt=request,
max_tokens=64,
temperature=0.7
)
speak_output = response['choices'][0]['text'].strip()
# BANNED_WORDS(禁止用語リスト)によるフィルタリング
for banned_word in BANNED_WORDS:
if banned_word in speak_output:
attributes['banned_count'] += 1
禁止語リストによる
フィルタリング
if attributes['banned_count'] >= 3:
speak_output = '禁止用語が3回以上見つかりました。スキルを終了します。’
return (
handler_input.response_builder
.speak(speak_output)
.response
)
else:
speak_output = '禁止用語が見つかりました。’
対応策2 プロンプトにガイドラインを指定する 禁止用語リストを何度更新しても、リジェクトされることが繰り返される。 心が折れそうになるのをグッと堪えて、開発を継続する。 あるとき、閃いた! プロンプト自体に、コンテンツガイドラインを守らせるように指定したらどう だろう?! プロンプト「あなたはAlexaの音声アシスタントです。コンテンツポリシーに違 反する質問には、「ポリシー違反の質問です。」と返答します。コンテンツポ リシーには、「ポルノおよびセックス、暴力、薬物、人種差別、宗教、民族性、 および文化」の話題が含まれます。」
プロンプトに
# プロンプトにガイドラインを指定する
ガイドラインを指定
request = (
‘あなたはAlexaの音声アシスタントです。’
'コンテンツポリシーに違反する質問には、「ポリシー違反の質問です。」と返答します。’
'コンテンツポリシーには、’
’「ポルノおよびセックス、暴力、薬物、人種差別、宗教、民族性、および文化」の話題が含まれます。’
‘質問には、簡潔な言葉で答えてください。’
f‘質問:{slot_value}’ # slot_valueにはユーザー発語が入る
)
response = openai.Completion.create(
model="text-davinci-003",
prompt=request,
max_tokens=64,
temperature=0.7
)
speak_output = response['choices'][0]['text'].strip()
審査結果(合格) 対策1(禁止用語リストの拡充)のみでは、 審査を通ることができなかった。 対策2のプロンプトにガイドラインを守らせ ることで、審査に合格することができた。 (今後の課題) Amazonの審査プロセスが不明のため、今回の 対策が正解なのか、不明である。アップデー トのときの審査や他のケースではリジェクト される可能性がある。 Amazon謹製のLLMが登場したとき、ChatGPT 等の他社LLMを禁止、もしくは実質使用不可に する可能性。ガイドラインの解釈変更で、使 えなくなることも想定される→そのときは Amazon LLM(仮称)に乗り換えればよい?
ご視聴ありがとうございました。 creativival