GPTsアクションを最大限に活用!ファイル送受信の設定方法

GPTsのアクション機能を使う事でGPTsからAPIにファイルを送信したり、APIで作ったファイルをGPTsに返すこともできます。GPTsでファイルを扱う方法を解説します。

GPTsアクションのファイル送受信の仕組み

GPTsからファイルを送る

アクションから直接ファイルをAPIに送る事はできません。アクションはプロンプトから添付されたファイルを一度サーバーに格納し、5分間のみ有効なダウンロードリンクを作成します。APIではダウンロードリンクからファイルを取得して使用します。

GPTsにファイルを返す

アクションに返すファイルをbase64エンコーディングして所定のjsonにして返すことでGPTsにファイルのダウンロードリンクが作成されます。こちらも5分間のみ有効です。

仕様

いずれも名前が重要です。名前が間違っていると添付ファイルを認識しなかったり、ファイルをダウンロードできません。

GPTsからファイルを送る際のパラメータ

以下の4つの項目を持つobjectの配列をopenaiFileIdRefsという名前で定義します。

  • id: GPTsアクションが付ける識別子
  • name: ファイル名
  • mime_type: ファイルのMIMEタイプ
  • download_link: 5分間有効なダウンロードリンクのURL

GPTsにファイルを返す際のResponse

以下の3つの項目を持つobjectの配列をopenaiFileResponseという名前で定義します。

  • name: ファイル名
  • mime_type: ファイルのMIMEタイプ
  • content: base64エンコードされたファイルの内容

アクションのスキーマ設定

GPTsからファイルを送る際のスキーマ設定

"paths" : {
  "/send" : {
    "post" : {
      "operationId": "Send files.",
      "description" : "Uploads a file reference using its file id.",
      "requestBody" : {
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/openaiFileIdRefs"
            }
          }
        },
        "required" : true
      },
      "responses" : {
        "200" : {
          "description" : "200 response",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/Empty"
              }
            }
          }
        }
      }
    }
  }
},
"components" : {
  "schemas" : {
    "Empty" : {
      "title" : "Empty Schema",
      "type" : "object",
      "properties" : { }
    },
    "openaiFileIdRefs" : {
      "title" : "openaiFileIdRefs",
      "type" : "object",
      "properties" : {
        "openaiFileIdRefs" : {
          "type" : "array",
          "items" : {
            "required" : [ "download_link", "id", "mime_type", "name" ],
            "type" : "object",
            "properties" : {
              "name" : {
                "type" : "string",
                "description" : "The name of the file"
              },
              "id" : {
                "type" : "string",
                "description" : "The unique identifier of the file"
              },
              "mime_type" : {
                "type" : "string",
                "description" : "The MIME type of the file"
              },
              "download_link" : {
                "type" : "string",
                "description" : "The download link for the file"
              }
            }
          }
        }
      }
    }
  }
}

GPTsにファイルを返す際のスキーマ設定

"paths" : {
  "/download" : {
    "get" : {
      "operationId": "Download files",
      "description" : "Download files with the reception ID",
      "parameters" : [ {
        "name" : "id",
        "in" : "query",
        "required" : true,
        "schema" : {
          "type" : "string"
        }
      } ],
      "responses" : {
        "200" : {
          "description" : "200 response",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/openaiFileResponse"
              }
            }
          }
        }
      }
    }
  }
},
"components" : {
  "schemas" : {
    "openaiFileResponse" : {
      "title" : "openaiFileResponse",
      "type" : "object",
      "properties" : {
        "openaiFileResponse" : {
          "type" : "array",
          "items" : {
            "required" : [ "content", "mime_type", "name" ],
            "type" : "object",
            "properties" : {
              "name" : {
                "type" : "string",
                "description" : "The name of the file. This will be visible to the user."
              },
              "mime_type" : {
                "type" : "string",
                "description" : "The MIME type of the file. This is used to determine eligibility and which features have access to the file."
              },
              "content" : {
                "type" : "string",
                "description" : "The base64 encoded contents of the file.",
                "format" : "byte"
              }
            }
          }
        }
      }
    }
  }
}

APIの処理

GPTsアクションから送られたファイルを取得するコード

download_linkからファイルを取得するのにrequestsライブラリを使用しています。

import json
import requests

def lambda_handler(event, context):
    # パラメータを取得
    body = json.loads(event['body'])
    name = body["openaiFileIdRefs"][0].get('name')
    id = body["openaiFileIdRefs"][0].get('id')
    mime_type = body["openaiFileIdRefs"][0].get('mime_type')
    download_link = body["openaiFileIdRefs"][0].get('download_link')
    # download_linkからファイルをダウンロード
    response = requests.get(download_link)

GPTsアクションにファイルを返す処理

S3から取得したファイルをGPTsアクションに返すサンプルです。

import json
import boto3
import base64

def lambda_handler(event, context):
      # S3からファイルを取得する
      s3 = boto3.client('s3')
      response = s3.get_object(Bucket='bucket_name', Key='key')
      body = response['Body'].read().decode('utf-8')
      
      files = []
      files.append({
          'name': "formatted.txt",
          'mime_type': 'text/plain',
          'content': base64.b64encode(body.encode('utf-8')).decode('utf-8')
      })
      openaiFileResponse = {
          'openaiFileResponse': files
      }
  
      return {
          'statusCode': 200,
          'body': json.dumps(openaiFileResponse),
          'headers': {
              'Content-Type': 'application/json'
          }
      }

動作確認

GPTsアクションからのファイル送信

正しく動くと下記の画像のようにAPIに送信されたファイルを確認出来ます。

GPTsアクションへのファイルを返す

APIから正しくファイルを返すことができると下記の画像のようにファイルをダウンロードできます。

注意点

GPTsアクションのタイムアウト

GPTsアクションのタイムアウトは45秒です。私が作ったAPIではdownload_linkからファイルを取得して処理するには時間がかかりすぎてタイムアウトしてしまいました。サイズの大きいファイルを扱う場合はファイルを非同期で処理するような仕組みが必要かもしれません。私の場合はdownload_linkだけ受け取って、結果を受付IDで問い合わせられるようにしました。

まとめ

長くなってしまいましたが、GPTsアクションでファイルを送受信する方法を解説しました。GPTsでファイルを送受信できるとやれることの幅が広がります。この記事を参考にGPTsアクションでファイルの送受信に挑戦してみて下さい。

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

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

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

CTR IMG