ChatGPTには独自のGPTを作る事ができるGPTsというサービスがあります。GPTsではアクションという機能があります。このアクションとアクションから呼び出せるAPIをAWSで作る方法をご紹介します。
GPTsのアクションとは
GPTの回答を生成する過程でRESTful APIsを呼び出す機能の事です。例えばある会社では職級と号俸で給料が決まるとして、以下のようなプロンプトが入力されたとします。
1級2号の給料は?この会社の給与テーブルをGPT-4oは学習していないので回答することはできません。しかし、GPT-4oはプロンプトを解析して職級が1、号俸は2の給料を質問されているということは理解できます。その情報で給与計算APIを呼び出すことで正確に給料を回答することができます。このAPIを呼び出す機能がアクションです。この例はRAGでも対応可能ですが給与テーブルが表形式の場合、まだ正確に読み取る事ができないのでAPIの出番となります。
API構築
Lambda関数作成
GPTsのアクションではpathパラメータでもクエリ文字列でもパラメータを渡すことができます。APIの仕様に合わせてLambda関数を作成します。
import json
# 給与テーブル
salary_matrix = [
    [30000, 35000, 40000],  # grade 1
    [40000, 45000, 50000],  # grade 2
    [50000, 55000, 60000],  # grade 3
    [60000, 65000, 70000],  # grade 4
    [70000, 75000, 80000]   # grade 5
]
def lambda_handler(event, context):
    # pathパラメータからパラメータを取得
    # grade = event['pathParameters']['grade']
    # rank = event['pathParameters']['rank']
    # クエリ文字列からパラメータを取得
    grade = event['queryStringParameters']['grade']
    rank = event['queryStringParameters']['rank']
    
    # 給与テーブルから給与取得
    salary = salary_matrix[int(grade) - 1][int(rank) - 1]
    return {
        'statusCode': 200,
        'body': json.dumps(f'{salary}')
    }API Gateway作成
GPTsのアクションではpathパラメータでもクエリ文字列でもパラメータを渡すことができます。データや処理内容に合わせた形でAPIを定義して下さい。GPTsのアクションではHTTP リクエストヘッダーやリクエスト本文ではパラメータを渡せないので注意して下さい。
APIエクスポート
1.API Gatewayのステージアクションからエクスポートを選択します。

2.API仕様タイプでOpen API 3を選択して、APIをエクスポートをクリックします。

GPTsの設定
スキーマ設定
1.GPTsの画面で新しいアクションを設定するをクリックします。

2.エクスポートしたAPI情報をスキーマに入力します。

スキーマ修正
API GatewayからエクスポートしたAPI定義をGPTsのアクションに入力します。エクスポートしたまま入力すると3つのエラーが発生します。Emptyスキーマにpropertiesが無い、各メソッドにoperationIdが無い、バージョンが3.1.0ではないの3点です。エラーにはなりませんがAPI Gatewayのステージの置き換えが機能しないためURLの修正が必要です。
In context=('components', 'schemas', 'Empty'), object schema missing properties
In path /salary, method get is missing operationId; skipping
In path /salary/{grade}/{rank}, method get is missing operationId; skipping
('openapi',): Input should be '3.1.0'それぞれ以下のように修正します。
Emptyスキーマにpropertiesが無い
修正前
  "components" : {
    "schemas" : {
      "Empty" : {
        "title" : "Empty Schema",
        "type" : "object"
      }
    }
  }修正後
  "components" : {
    "schemas" : {
      "Empty" : {
        "title" : "Empty Schema",
        "type" : "object",
        "properties": {}
      }
    }
  }各メソッドにoperationIdが無い
修正前
  "paths" : {
    "/salary" : {
      "get" : {
        "parameters" : [ {修正後
  "paths" : {
    "/salary/{grade}/{rank}" : {
      "get" : {
        "operationId" : "calc-salary-pathparameter",
        "parameters" : [ {バージョンが3.1.0ではない
修正前
  "openapi" : "3.0.1",修正後
  "openapi" : "3.1.0",URLの修正
修正前
  "servers" : [ {
    "url" : "https://itknllsvyg.execute-api.ap-northeast-1.amazonaws.com/{basePath}",
    "variables" : {
      "basePath" : {
        "default" : "dev"
      }
    }修正後
  "servers" : [ {
    "url" : "https://itknllsvyg.execute-api.ap-northeast-1.amazonaws.com/dev",
    "variables" : {
      "basePath" : {
        "default" : "dev"
      }
    }認証設定
APIキーを入力することで認証が必要なAPIも呼び出すことができます。
1.API Gatewayの使用量プランからAPIキーをコピーします。

2.GPTsの画面で認証の設定ボタンをクリックします。

3.認証タイプでAPIキーを選択し、APIキーを入力して保存するをクリックします。

動作確認
プレビューから動かすことで動作確認できます。
1.給料を確認するプロンプトを入力します。アクションが動く際には接続の確認をされるので許可する or 常に許可するをクリックします。

2.[debug] Calling HTTP endpoint をクリックするとAPIの呼び出しを確認できます。

まとめ
生成AIを業務活用するにはRAGと今回紹介したアクションのようなFunction CallingやAgentsと呼ばれる機能が必要となります。アクションを活用してChatGPTを業務で活用できるようにしましょう。
この記事を書いた人

 
					         
                     
                          