【Amazon Connect】ChatGPTと電話する【Lex, Lambda】

昨今耳目を集めるAI業界ですが、今回は特に今アツいAIチャットボットであるChatGPTと電話で話したいと思います。

正確には音声をテキスト化したメッセージを、ChatGPTで利用されているモデルであるgpt-3.5-turboにAPIで送って回答を取得し、Pollyで発話させることで電話でやり取りできるようにします。

音声の入力をAmazon Connect、音声のテキスト化をLex、OpenAIのAPIを叩く部分をLambdaで構築していきます。

昨今耳目を集めるAI業界ですが、今回は特に今アツいAIチャットボットであるChatGPTと電話で話したいと思います。

正確には音声をテキスト化したメッセージを、ChatGPTで利用されているモデルであるgpt-3.5-turboにAPIで送って回答を取得し、Pollyで発話させることで電話でやり取りできるようにします。

音声の入力をAmazon Connect、音声のテキスト化をLex、OpenAIのAPIを叩く部分をLambdaで構築していきます。

構成は下記のようなイメージとなります。

 

OpenAIのアカウント、APIキーの準備

まずはOpenAIのAPIを実行するために必要なAPIキーを準備します。

OpenAIにアカウントを登録してAPIキーの発行をします。参考→https://platform.openai.com/docs/api-reference/authentication

アカウントの作成は簡単で、私の場合はGoogleアカウントでサインアップ後、電話番号を登録するだけで完了しました。

アカウントの登録完了後、個人ページからAPIキーの取得が可能です。

Lambda

続いて、OpenAI APIにメッセージを送り返答を取得するLambdaを作成します。

ランタイムはPython3.9です。

コードの解説はインラインに記載しています。

その他、Lambdaに以下の設定をしておきます。

  • OpenAIからのレスポンスには数秒の時間がかかるため、タイムアウトは5秒以上を設定
  • 環境変数としてOpenAIのAPIキーを設定

Lex

次はLambdaとAmazon Connectを橋渡しするLexボットを作成します。

Lexでは入力した音声がサンプル発話にヒットした場合にそのインテントが実行されますが、

今回はどんな入力でも受け付けてLambdaに連携したいと思います。

まずは先ほど作成したLambda関数をLexから呼び出せるように設定します。

続いて適当な発話サンプルを持った基本のインテントを作成します

今回は「おはよう」という言葉をサンプル発話に持ったConnectToGPTというインテントを作成します。

また、このインテントのコードフックオプションにチェックを入れて、インテントがLambdaを呼び出すようにします。

さて、これだけでは「おはよう」以外の発話があった場合、FallbackIntentに振り分けられてLambdaに連携されません。

というわけでFallbackIntentのコードフックオプションにもチェックを入れて、どんなときでもLambdaを呼び出すようにしました。

上記のような実装はあまりよくないかもしれませんが、今回はChatGPTで遊ぶことが目的なのでこれで進めていきます。

Amazon Connect

最後にLexを統合したコンタクトフローを作成します。

内容はシンプルで、ログや音声の設定後、Lexの呼び出しを行うのみとなっています。

いざ、実演

準備ができました。

実際に電話してみましょう。(寝起きで録画したのでテンションがとても低いです)

録画の再生はこちら(別タブが開きます)

Amazon Connectなので電話はもちろん、フローをそのまま利用してGPTとのチャットも可能です

さて、それっぽく動作しているように見えますが、実は大きな穴があります

それはOpenAIのAPIを発話の都度呼び出しており、GPT側が発話の履歴を記憶していないため、コンテキストに沿った回答ができないという点です

このあたりについてはDynamoDBに履歴を保存しておき、APIを実行する際に直前の2, 3回分の履歴を合わせてリクエストを送る、などで対応可能そうです

とりあえずChatGPTと話すという目的は達成できたので今回はここまでとしたいと思います

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
yokomachi
yokomachi
エンジニア見習いです。 以前はC#erでしたが、現在はWebフロントエンド、AWSを勉強しています。 読書とゲームと映画鑑賞が趣味の完全インドア派です。

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ