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