技術資料

GPTのfunction callingを活用した関数呼び出し入門

2023.11.23

error この記事は最終更新日から1年以上が経過しています。

GPTに関数呼び出しをさせる function calling の使い方。

function の指定

まず、APIを叩く際に、使える関数を指定する。

function putCompletions($prompts,$temperature = 0.8)
{
    $functions = array();
    // ここでGPTが呼び出せる関数の仕様を指定
    $functions[0] = array(
        'type' => 'function',
        'function' => array(
            'name' => 'create_diary',
            'description' => '日記を作成します',
            'parameters' => array(
                'type' => 'object',
                'properties' => array(
                    'body' => array(
                        'type' => 'string',
                        'description' => '日記の本文',
                    ),
                    'title' => array(
                        'type' => 'string',
                        'description' => '日記のタイトル',
                    ),
                ),
                'required' => array('body','title'),
            ),
        ),
    );
    // APIを叩く
    $data = array(
        'model' => 'gpt-3.5-turbo-1106',
        'messages' => $prompts,
        'tools' => $functions,
        'temperature' => $temperature,
        'tool_choice' => 'auto', // autoでなく関数名create_diaryを指定すると必ず関数を呼び出す
    );
    $json_data = json_encode($data);
    $url = 'https://api.openai.com/v1/chat/completions';
    $headers = array(
        'Content-Type: application/json',
        "Authorization: Bearer ".OPENAI_API_KEY
    );
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    $apiresult = json_decode($response);
    return $apiresult;
}

上記の例では、GPTに自分の判断で日記を投稿する関数 create_diary を指定。

関数に渡す値として、 body と title をGPTが生成できるようにする。

tool_choice の値を auto にすることで、GPTが必要に応じて関数を呼び出してくれる。特定の関数を指定して、必ず関数を実行してもらうようにもできる。

※参考 OpenAI API Reference

GPTのレスポンスを取得

GPTがレスポンスを返した際の処理。

function sendGPT($prompts)
{
    // 前述のコード putCompletions を呼び出して結果を取得
    $result = $this->putCompletions($prompts);
    // finish_reasonがtool_callsの場合以下の処理を行なう
    if($result->choices[0]->finish_reason == 'tool_calls'){
        foreach($result->choices[0]->message->tool_calls as $function){
            $called_function = $function->function->name;
            $arguments = json_decode($function->function->arguments);
            if($called_function == 'create_diary'){
                // create_diary関数を呼び出して処理
                $message = $this->create_diary($arguments);
            }else{
                continue;
            }
            // 処理結果をログに保存するあれこれの処理
            $row = array(
                'message'      => $message,
                'role'         => 'tool',
                'tool_call_id' => $function->id,
            );
            $prompts = $this->saveLogs($message);
        }
        // 関数の結果を元に再度送信
        $this->sendGPT($prompts);
    }
}

レスポンス内の finish_reasontool_calls だった場合、関数呼び出しとなる。

呼び出された関数の中身は以下のサンプルみたいな感じ。

function create_diary($arg)
{
    // $arg に title と bodyが含まれているかチェックする処理
    $err = $this->errorCheckDiary($arg);
    if($err){
        return "{'success':'false','error':'{$err->message}'}";
    }
    // 日記をDBに保存する処理
    $result = $this->saveDiary($arg->title,$arg->body);
    if($result->object == 'error'){
        return "{'success':'false','error':'{$result->message}'}";
    }
    return "{'success':'true','diary_url':'{$result->url}'}";
}

レスポンスをJSON形式の配列として渡して、

  • role = 'tool'
  • tool_call_id = GPTが指定したid

をつけて、 messages の中に含んで再度GPTを呼び出すことで、GPTは関数の結果を取得してさらにテキストを生成したりとかの処理を行なう。

関数A の処理結果を受けて、関数Bの処理を投げる、みたいな挙動も行なってくれる。

OpenAI画像生成APIをPHPで試してみる

2023.04.14

OpenAIの画像生成APIをPHPで利用する方法を解説します。基本的なリクエスト方法から、APIレスポンスの扱いまでをシンプルなサンプルコードとともに紹介。

OpenAI API PHP

PHPとOpenAI APIで簡単なチャットシステムのコードを書いてみた

2023.04.13

PHPとOpenAI APIを使ってチャットボットを作成し、ユーザーとAIが対話できる基本的なプログラムを紹介します。サーバーに保存したチャット履歴を基に、APIから取得したレスポンスをデータベースに記録し、チャット形式で対話を進めていくサンプルコードを用意しました。

MySQL OpenAI API PHP

PHPからOpenAI APIを使ってみる—cURLでチャット機能を試す

2023.04.02

PHPを使ってOpenAIのAPIにリクエストを送信し、GPT-3.5を使った簡単なチャット機能を実装する方法を紹介します。cURLを使用してAPIリクエストを作成し、レスポンスとして得られるデータの構造や意味についても解説。

OpenAI API PHP

OGP画像作成を効率化:PHPを使った自動生成方法を解説

2024.11.21

SNSシェアに欠かせないOGP画像、毎回手作業で作成するのは手間がかかりますよね。本記事では、PHPを使って記事タイトルを含むOGP画像を自動生成する方法を解説します。テンプレート画像を活用した簡単な手順をぜひお試しください。

PHP

阿部辰也へのお仕事の依頼・お問い合わせ

お名前 *必須
会社名
メールアドレス *必須
電話番号
URL
お問い合わせのきっかけ
お問い合わせの内容 *必須
個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP