AWS

【AWS】LambdaにChatGPT APIへのリクエスト処理を実装

この記事では、AWS Lambdaを使用してChatGPT APIへのリクエスト処理を実装する手順について解説します。

ChatGPT APIを利用することで、高度な自然言語処理を活用したチャットボットやテキスト生成アプリケーションを簡単に構築することができます。

APIキーをクライアントコードに書くわけにはいかないので、今回はLambdaにChatGPT APIへのアクセス処理を実装して、APIGatewayで公開するところまでを検証してみました。

前提条件

  • AWSアカウントが作成されていること
  • ChatGPT APIキーが取得されていること
  • AWS Lambda関数の基本的な知識があること

手順

1. AWS Lambda関数の作成

まず最初に、AWSコンソールにログインしてLambda関数を作成します。適切なランタイム(Python、Node.jsなど)を選択し、関数を作成します。

Lambda関数内で、ChatGPT APIへのリクエストを処理します。必要なヘッダーとデータを組み立て、APIエンドポイントに対してHTTPリクエストを送信します。

参考:OpenAI API Documents

リクエストボディの形式

リクエストボディは以下の形式で送ることにします。

{
    "messages": [
        {
            "role": "user",
            "content": "hello"
        }
    ]
}

eventからbodyを指定して、リクエストボディを受け取ります。

そこからmessageを指定して配列を取得します。

あとはChatGPT APIにリクエストを投げて、受け取ったレスポンスを返すだけです。

import os
import openai
import json

def lambda_handler(event, context):
    openai.api_key = os.environ["API_KEY"]
    body = event['body']
    if isinstance(body, str):
        body = json.loads(body)
        
    messages = body['messages']
        
    formatted_messages = []
    for message in messages:
        formatted_messages.append({"role": message['role'], "content": message['content']})
    
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=formatted_messages
    )
    
    return {
        'statusCode': 200,
        'body': {"message": response.choices[0].message['content']}
    }

2. ChatGPT APIキーの設定

Lambda関数内でChatGPT APIを呼び出すために、事前に取得したChatGPT APIキーをAWS Lambdaの環境変数に設定します。これにより、APIキーをコードにハードコーディングせずに安全に利用できます。

上記のコードでos.environ["API_KEY"]でLambdaの環境変数から値を取得しています。これは以下のように設定します。

3. APIGatewayでトリガー設定

Lambda関数を必要に応じてトリガーイベントに関連付けます。例えば、API Gatewayを使用してHTTPリクエストをトリガーにすることで、外部からのリクエストをLambda関数で処理できます。

今回はAPIGatewayで設定します。基本的な設定は割愛しますが、躓いたところを記載します。

統合リクエスト > マッピングテンプレート で以下のような設定が必要でした。

マッピングテンプレートで以下のような設定を行わないと、リクエストボディがうまく取得することができませんでした。

{
  "body" : $input.json('$')
}

$input.json('$'): この部分は、リクエストのJSON形式のボディ全体を表します。これによって、リクエストのボディが変数 body に格納されます。

したがって、上記のコードを使用することで、リクエストのボディを body という名前のプロパティに格納することができます。

Lambdaのコードでbodyを指定してリクエストボディの値を取得するために、この設定が必要でした。

4. テスト実行

関数をデプロイしたら、PostmanなどのAPIクライアントからテストしてみます。

レスポンスがうまく返ってきたことが確認できました。

まとめ

この記事では、AWS Lambdaを使用してChatGPT APIへのリクエスト処理を実装する方法について解説しました。

サーバーレスな環境でChatGPTの強力な自然言語処理能力を活用することで、さまざまなアプリケーションで革新的な機能を実現することができます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です