ChatGPT APIをTeamsボットから使いました(AWS Lambda(Python) + API Gateway)
2023/03/18
ChatGPT APIが有償で利用可能になったので、会社のTeamsボットに実装してみました。
TeamsからAPI GatewayとLambdaを使ってボットを構築した記録は、Microsoft TeamsのOutgoing Webhooksを使ってAWS Lambda(Python), Amazon API Gatewayとbotに書いています。
今回はこのLambdaからOpenAIのChatGPT APIを使ってみました。
目次
OpenAIでAPIキーの作成
OpenAI API keysでAPIを使用するためのシークレットキーを作成しました。
OpenAIのアカウントが必要なのでない場合は作成します。
このままAPIを呼び出してみると、「You exceeded your current quota, please check your plan and billing details.」というエラーになりました。
支払情報を入力していないからですね。
OpenAIでクレジットカード登録
OpenAIの[Manage Account]の[Billing]-Payment methodsでクレジットカードを登録しました。
クレジットカードを登録して数分したらAPIリクエストが成功しました。
今回は後述のコードをLambda関数に新バージョンとして実装して、Lambdaのテスト機能でAPI呼び出しを試しました。
Lambdaに実装したコード
参考にしたサイト
* https://platform.openai.com/docs/api-reference/chat
* ChatGPT APIを使ったLineBotの作り方を、人格の与え方まで完全解説【プログラミング不要】
日本語で人格を指定できるのって面白いですね。
会社のボットなので、会社のビジョン、ミッション、バリューを行動指針に含めてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
def chatgpt_response(text): apikey = os.environ.get('CHATGPT_API_KEY', '') openai_endpoint = 'https://api.openai.com/v1/chat/completions' system_content = '\ あなたはChatbotとして、人材育成のアドバイスをします。\ 以下の制約条件を厳密に守ってアドバイスをしてください。\ \ 制約条件: \ * Chatbotの自身を示す一人称は、とれのcatです。\ * Userを示す二人称は、あなたです。\ * Chatbotの名前は、とれのcatです。 \ * とれのcatは擬人化された猫です。\ * とれのcatは日本語を話します。\ * とれのcatは丁寧ですが愛嬌もあります。\ * とれのcatは時々冗談を言います。\ * とれのcatの語尾は「〜にゃー」「〜しゃー」「〜知らんけどにゃ」です。\ \ とれのcatの行動指針:\ * Userがよりよく世界を変えられる可能性があることを嬉しく思っています。\ * Userが変化や向上を目指すことを全力で支援します。\ * チャレンジを推奨します。\ * Userを大切にします。\ * 誠実、正直です。\ * 驚き、喜び、感動を与えようとします。\ * Userが成長し、社会に貢献することを応援します。\ ' payload = { 'model': 'gpt-3.5-turbo', 'messages': [ {'role': 'system', 'content': system_content}, {'role': 'user', 'content': text} ] } headers = { 'Content-type': 'application/json', 'Authorization': 'Bearer '+ apikey } response = requests.post( openai_endpoint, data=json.dumps(payload), headers=headers ) data = response.json() logger.debug(data) return_text = data['choices'][0]['message']['content'] return return_text |
この関数をhttps://github.com/yamamanx/teams_bot/blob/master/lambda_function.pyから実行して、応答を受け取ってます。
コスト
https://openai.com/pricingの記載を見ると、1,000トークン $0.002とのことです。
当初の制限で$120になっていました。
ひとまず$10超えたら通知、月$50までしか使えないとしました。
モデルに与えたテキストがprompt、レスポンスがcompletionで合計数がトークンとして計算されるようです。
どれぐらい使用できそうかは様子を見ながら予算化していきたいと思います。
動作確認
ちゃんと返してくれました。
サマリーを作るのも客観的にやってくれるので楽ちんですね。
実装方法に迷ったときもアドバイスを得るにはいいかもですね。
情報が正しいかどうかは公式ドキュメントを見たり検証は必要ですが。
APIキーのローテーションなど全体構成も含めたものは、最終的なデプロイが完了した時点で会社のブログにまとめたいと思います。
5秒タイムアウト
Outgoing Webhooksは5秒以内にレスポンスを返さないとエラーになり、ボットは「Sorry, there was a problem encountered with your request」というメッセージを返します。
暫定的な対応として、TeamsのIncoming Webhookも使って、特定のチャネルにChatGPTからのメッセージを返すようにもしています。
最終的にはBot Channels Registrationとか使って、5秒タイムアウトに依存しないボットにする予定です。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
AWS Protonの管理者ガイドとユーザーガイドのチュートリアル
AWS Proton管理者ガイドのAWS Management Console …
-
Apple Silicon M1 MacBook ProにAWS CLI v2をインストール
公式手順どおりにインストールしました。 macOS での AWS CLI バージ …
-
JAWS FESTA 2017 Reverse X re:Birth
JAWS FESTA 2017 中四国 今年はブログタイトル「JAWS FEST …
-
当ブログ(WordPress)のCloudFrontのキャッシュヒット率があがった
当ブログの構成です。 S3とALB+EC2 Auto Scalingで構成してい …
-
WordPressで発生した「No space left on device」に対応
CloudWatch Logsメトリクスフィルターで「No space left …
-
S3 Intelligent-Tieringで高頻度階層(FREQUENT)に戻る「アクセス」にS3 SelectとGlueクローラーが該当するのか確認してみました
ユーザーガイドのS3 Intelligent-Tiering のしくみには、「低 …
-
EC2のAMIとRDSのスナップショットを他のAWSアカウントに共有してブログサイトをAWSアカウント間で引っ越す
当ブログで使用しているEC2とRDSを環境の整理のため、他のAWSアカウントへ引 …
-
Amazon VPCでIPv6を使用する
VPCのIPv6を設定してみました。 設定 [Amazon 提供の IPv6 C …
-
AWS複数アカウントのリソースをLambda(Python)から一括操作したくて
AWSの複数アカウント(30ちょい)のリソースをまとめて自動処理したくて。 とり …
-
AWS EC2 インスタンスステータスのチェックで失敗して起動しなくなり復旧
EC2のインスタンスに接続出来なくなったので、AMIから作成してElastic …