0
0

More than 1 year has passed since last update.

OpenAIのGPTでFunction callingを使ってJSONをつくってもらう

Last updated at Posted at 2023-06-26

まえがき

GPTにjsonを作ってもらいたい時とかあるよね。俺はある。
でもGPTにJSONを出力させようとこんな感じになるよね
たとえば天気予報:

以下は天気予報のデモデータを書き込んだJSONデータです。私の知識データは2021年9月でが最後ですので、
最新の天気予報を取得するには、検索エンジンなどを用いてお調べください。
{
    "temperature" : 22
    "rainy": 0
    "location": "Chiyoda, Tokyo, JP"
}

そう。JSONだけを出力してくれる保証がないわけです。
そこでFunction calling。どうやらJSONだけを出力させる保証があるらしい。試してみようじゃないか

Code

※プロンプトの動作は未検証

const requests = [
    {
      role: 'system',
      content: 'you are a helpful assistant.',
    },
    {
      role: 'user',
      content: `generate math test questions. `,
    },
  ];

  const math_test_generate_schema = {
    type: 'object',
    properties: {
      question: { type: 'string' },
      answer: { type: 'float' },
    },
    required: ['question', 'answer'],
  };

  const response = await openai.createChatCompletion({
    model: 'gpt-3.5-turbo-0613',
    messages: requests,
    functions: [{ name: 'set_definition', parameters: math_test_generate_schema }],
    function_call: { name: 'set_definition' },
  });

  const result = response.data.choices[0].message;
  console.log(JSON.parse(result.function_call.arguments));

解説

math_test_generate_schemaでは、function callingの概要を設定している。返答がObject(JavaScript Object)であることを指定し、帰ってくるべきなプロパティを設定している。questionではstringで数式を張ってもらい、answerはfloatで正解をセットしてもらおうとしている。(この辺りはstring,整数だけならintでも良いと思う)
requiredの部分で必須のプロパティを設定している。requiredに入っていないものは返答は保証されないが、基本的に試した限りではrequiredに入っているものは無理矢理にでも代入されている。

つまったところ

関数名がGPTの動作に関係する、というところ、今回はmath_test_generate_schemaだが、たとえば英語の問題を出してもらおうとした時、english_test_generate_schemaなどと、内容に関係する名前にしないと、function_callの部分で必ず関数を呼び出すように設定しているところから、変な返答が返ってきてしまう事象が発生する。

おわり

結構GPTからjsonを生成させたいときはあるので、自分のためのメモとしても残しておこうと思います。
ご覧いただきありがとうございました。

参考文献

GPT-4, GPT-3.5 の API を利用して JSON だけ生成する (Function calling)
[OpenAI] Function callingで遊んでみたら本質が見えてきたのでまとめてみた
Native JSON Output From GPT-4

0
0
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
0