LoginSignup
0
1
Qiita×Findy記事投稿キャンペーン 「自分のエンジニアとしてのキャリアを振り返ろう!」

GPTs + Actions + 簡易APIサーバーの基本(with GPT4先生)

Last updated at Posted at 2024-02-19

GPTs + Actions + 簡易APIサーバーの基本(with GPT4先生)

~GPTs+ActionsのハマりどころをGPT4先生といっしょに回避する~

Actionsとは?

GPTsのActionsはネット経由でクラウドサーバー上のAPIにアクセスし、
そのGPTsがサーバーと情報をやりとりできる仕組みです。
GPTsは、Actionsを使わなくてもインターネットの情報にアクセスできますが、
基本的にBing等を経由してのweb上のテキストデータへのアクセスのみですので、
時間がかかり、途中で中断したりすることも多く、今後の改善が期待されます。
Actionsでは、気温や、天気、株価などの刻々と変わる情報を公開されているAPI
サーバーから取得できたり、独自のサーバーを使って情報のやりとりができます。
特にknowledge(知識源)に入りきれない膨大な情報にアクセスする必要がある場合、Actionsを使ってのクラウドサーバーとの情報のやりとりが必須になります。

簡易API

 先ず、APIサーバーですが、仕組みを理解するための実験なので、どのサーバーを提供している会社でも使えるPHPで作ってみます。
以下のインストラクション(プロンプト)をGPT4(plu以上)に入力します。

クライアント側から番号が送られたら、その番号に一致するテキストをクライアントに返すPHPのAPIを書け、例として 001 > 桜,  002  >  梅 , 003 > 松 とする

すると、以下のようなコードが出力されます。

<?php
// エラーがある場合は表示する(開発時のみ推奨)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// 番号とそれに対応するテキストのマッピング
$textMap = [
    '001' => '桜',
    '002' => '梅',
    '003' => '松',
];

// クライアントからの番号を取得(ここではGETリクエストを想定)
$number = isset($_GET['number']) ? $_GET['number'] : '';

// 番号に基づいてテキストを決定し、クライアントに返す
if (array_key_exists($number, $textMap)) {
    // 番号がマッピングに存在する場合、対応するテキストを返す
    $response = [
        'status' => 'success',
        'text' => $textMap[$number],
    ];
} else {
    // 番号がマッピングに存在しない場合、エラーメッセージを返す
    $response = [
        'status' => 'error',
        'message' => 'Invalid number provided',
    ];
}

// コンテンツタイプをJSONに設定
header('Content-Type: application/json');

// レスポンスをJSON形式で出力
echo json_encode($response);
?>

これを、例えば、testAPI.phpとファイル名にして、サーバー上に置きます。

ActionsGPT

次に、以下のインストラクション(プロンプト)をActionsGPTというGPTsにに入力します。 ActionsGPT --> https://chat.openai.com/g/g-TYEliDU6A-actionsgpt

サーバー側のapiが以下のような場合、このAPIにデータを送るactionsのスキーマを書け --------> <?php
// エラーがある場合は表示する(開発時のみ推奨)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// 番号とそれに対応するテキストのマッピング
$textMap = [
    '001' => '桜',
    '002' => '梅',
    '003' => '松',
];

// クライアントからの番号を取得(ここではGETリクエストを想定)
$number = isset($_GET['number']) ? $_GET['number'] : '';

// 番号に基づいてテキストを決定し、クライアントに返す
if (array_key_exists($number, $textMap)) {
    // 番号がマッピングに存在する場合、対応するテキストを返す
    $response = [
        'status' => 'success',
        'text' => $textMap[$number],
    ];
} else {
    // 番号がマッピングに存在しない場合、エラーメッセージを返す
    $response = [
        'status' => 'error',
        'message' => 'Invalid number provided',
    ];
}

// コンテンツタイプをJSONに設定
header('Content-Type: application/json');

// レスポンスをJSON形式で出力
echo json_encode($response);
?>

上のインストラクションの "-------->" 以下は、上の出力をコピペしたものです。
すると、以下の出力を得ます。

openapi: 3.0.0
info:
 title: TextMap API
 description: API to retrieve text based on provided number code.
 version: 1.0.0
servers:
 - url:http://your-server-url.com
   description: Main API server
paths:
 /getText:
   get:
     operationId: getTextByNumber
     summary: Retrieve text based on number code.
     parameters:
       - name: number
         in: query
         description: Number code to get corresponding text
         required: true
         schema:
           type: string
     responses:
       '200':
         description: Successful response with text
         content:
           application/json:
             schema:
               type: object
               properties:
                 status:
                   type: string
                 text:
                   type: string
                   nullable: true
                 message:
                   type: string
                   nullable: true
       '400':
         description: Bad request when the number is not provided or invalid
         content:
           application/json:
             schema:
               type: object
               properties:
                 status:
                   type: string
                 message:
                   type: string

これを、GPTs builderのConfigure -> ActionsのSchemaの欄にコピペし、
仮にドメインがxxxx.comとし、testAPI.phpがwebのルートディレクトリに
あるとすると、
"http://your-server-url.com"の部分をhttps://xxxx.com/testAPI.php
と書き換えます。(testAPi.phpは上で決めた任意のファイル名)

ここで重要なのが、https です。httpではNGです。

GPTsのインストラクションは以下のようにします。

番号をサイトに送ると対応するテキストを得て表示する

これで、Actions->TESTボタンをを押し、右のウィンドウのインストラクション欄に
001を入力しリターンすると

001
[debug] Calling HTTP endpoint
[debug] Response received
Talked to dcf.jp
APIの呼び出しに成功しました。番号「001」に対応するテキストは「桜」です。

と表示され、無事動作していることがわかります。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1