ChatGPTのアクション機能をLambdaで動かす方法

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を業務で活用できるようにしましょう。

この記事を書いた人
新技術基盤開発室の鈴村です。AWS初心者からAWSアンバサダーを目指すチャレンジをしています。このアイコンはChatGPTに描かせました。
新技術基盤開発室の鈴村です。AWS初心者からAWSアンバサダーを目指すチャレンジをしています。このアイコンはChatGPTに描かせました。
>お役立ち資料のダウンロード

お役立ち資料のダウンロード

ブログでは紹介しきれないシステム開発や導入におけるケーススタディを資料にまとめました。お気軽にダウンロードください。

CTR IMG