見出し画像

ChatGPTがさらにパワーアップ!Function Callで安定したJSONを手に入れる旅へ

1. 導入

OpenAIのChatGPTの概要

OpenAIは、人工知能(AI)の可能性を最大限に引き出すために設立された非営利の研究機関で、その目標は、AIと人間が共存する未来をつくることです。その最も成功したプロジェクトの一つがChatGPTです。ChatGPTは、GPT(Generative Pretrained Transformer)モデルの一種で、大量のテキストデータから学習し、それに基づいて新たなテキストを生成します。

ChatGPTは、様々な応用が可能な自然言語処理のモデルで、人間が理解できるような自然な会話を生成する能力があります。そのため、顧客サポート、コンテンツ生成、対話型アプリケーションの開発など、様々な分野で活用されています。しかし、従来のChatGPTでは、特定のデータを返すための直接的な手段が欠けていました。そこでOpenAIは、この問題を解決する新機能を開発しました。

OpenAIの新機能"Function Call"の概要

OpenAIは、AIの可能性を広げ、より高度な機能をユーザーに提供するために、常に新しい技術を追求しています。その一環としてリリースされた新機能が、"Function Call"です。

Function Callは、外部からデータを送るための手段を提供し、ChatGPTにより具体的な反応を引き出すことができます。初めてFunction Callを見ると、単に関数にデータを送る形式と思われるかもしれません。しかし、その背後にはより深い意味があります。Function Callは、ChatGPTから一見ランダムに見えるテキストを生成する代わりに、規定された形式のデータ、具体的にはJSON形式のデータを返すことを可能にします。

JSON(JavaScript Object Notation)は、データ交換形式の一つで、人間にとって読み書きが容易で、機械にとって解析や生成が容易な形式です。Function Callを使うと、ChatGPTはこのJSON形式のデータを生成し、それを返すことができます。これにより、開発者はChatGPTから特定の形式のデータを安定的に取得することができ、それを自分のアプリケーションで利用することが可能になります。

この新しい機能は、ChatGPTの応用範囲を大幅に広げるもので、さまざまなデータを扱うシナリオで有用性を発揮します。次のセクションでは、このFunction Callの仕組みと利用方法について詳しく解説します。

Function Callの仕組み

Function Callの一般的な理解

Function Callは、ChatGPTに特定の命令を伝えた場合に、その命令に従った結果をJSON形式で取得するための機能です。この機能により、ChatGPTの出力をより具体的で予測可能な形に制御することが可能となります。

Function Callを用いると、APIとのコミュニケーションなど、特定の情報を提供し、それに基づく具体的な反応をAIから取得することができます。この関係は、プログラムとその関数の関係に類似していると考えることができます。つまり、ChatGPTはプログラムで、Function Callはそのプログラムの中で定義された関数の一つといえます。そして、この関数を呼び出すことで、特定の処理を実行し、その結果を返すことができます。

Function Callの技術的な解説

Function Callは、事前に提示したfunctionのリストの中から、文章と最適な機能を見つけて、それに対する応答をJSON形式で作成し、受け取る機能です。具体的には、"functions"というキーワードを使用して、関数の定義を行います。その後、その関数を"function_call"というキーワードを用いて呼び出します。最後に、ChatGPTからの応答をJSON形式で受け取ります。

一般的には、Function Callは一つの命令に対して一つの回答を返すとされています。これはOpenAIの具体例などでも明らかで、ある地域の天気情報をJSONで返す仕様を作成しています。しかし実は、同じJSON形式を工夫すれば、複数のデータを返すことも可能なのです。これにより、一つのFunction Callで複数の情報を得ることができ、より複雑な処理を実現することが可能となります。

このように、Function Callの構文を理解し、その仕組みを把握することで、ChatGPTをさらに強力なツールとして活用することが可能になります。

  1. Function Callの利用方法

3. Function Callの利用方法

実際のFunction Callの使用例

Function Callは、APIとの連携や情報整理など、多様な用途で活用できます。例えば、ある天気予報APIを呼び出し、その結果をChatGPTに渡すケースを考えてみましょう。天気予報APIからは通常、JSON形式のデータが返されます。これをそのままChatGPTに渡しても、ChatGPTはその構造を理解できません。しかしFunction Callを用いると、APIから得たJSON形式の結果をChatGPTが理解できる形に整形して渡すことが可能になります。

import openai
import json

def get_weather(city):
    # この関数はダミーです。実際にはAPIを呼び出して天気情報を取得します。
    return {"status": "sunny", "temperature": 30}
import openai
import json

def get_weather(city):
    # この関数はダミーです。実際にはAPIを呼び出して天気情報を取得します。
    return [
        {"date": "today", "status": "sunny", "temperature": 30},
        {"date": "tomorrow", "status": "rainy", "temperature": 20},
        {"date": "day_after_tomorrow", "status": "cloudy", "temperature": 25}
    ]

def run_conversation_with_function(new_message_text, past_messages=[]):
    system = {"role": "system", "content": f"Get weather information for {new_message_text} for the next three days."}
    past_messages.append(system)

    
    new_message = {"role": "user", "content": new_message_text}
    past_messages.append(new_message)

    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=past_messages,
        temperature = 0.8,
        functions=[
            {
                "name": "get_current_weather",
                "description": "Get the current weather in a given location",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "The city and state, e.g. San Francisco, CA",
                        },
                    },
                    "required": ["location"],
                },
                "output": weather_info,
            }
        ],
        function_call="auto"
    )
    
    message = response["choices"][0]["message"]
    past_messages.append(message)
    return message["content"], past_messages

Function Callの拡張的な使い方

Function Callの応用として、一定の決まった形のダミーデータを安定的に返すことも可能です。これにより、予め定義された様々なパターンの応答をChatGPTから得ることができます。天気予報の例で考えてみましょう。天気予報は一般的に1つの都市に対して1つの予報しか出ませんが、Function Callを用いれば、複数の都市の天気パターンや複数日数のデータをChatGPTに作成させることができます。

この場合、JSON形式のデータは、"output"フィールドに記述され、配列形式(array)を使用して複数の可能な結果を格納します。これにより、ChatGPTはそれぞれの結果を考慮した上で、最も適切な反応を生成します。

import openai
import json

def get_weather(city):
    # この関数はダミーです。実際にはAPIを呼び出して天気情報を取得します。
    return [
        {"date": "today", "status": "sunny", "temperature": 30},
        {"date": "tomorrow", "status": "rainy", "temperature": 20},
        {"date": "day_after_tomorrow", "status": "cloudy", "temperature": 25}
    ]

def run_conversation_with_function(new_message_text, past_messages=[]):
    system = {"role": "system", "content": f"Get weather information for {new_message_text} for the next three days."}
    past_messages.append(system)

    
    new_message = {"role": "user", "content": new_message_text}
    past_messages.append(new_message)

    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=past_messages,
        temperature = 0.8,
        functions=[
            {
                "name": "get_weather_forecast",
                "description": "Get list of weather forecast information",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "forecast": {
                            "type": "array",
                            "description": "List of weather forecast",
                            "items": {
                                "type": "object",
                                "properties": {
                                    "date": {
                                        "type": "string",
                                        "description": "The date for the weather information",
                                    },
                                    "status": {
                                        "type": "string",
                                        "description": "The weather status of the day",
                                    },
                                    "temperature": {
                                        "type": "integer",
                                        "description": "The temperature of the day",
                                    },
                                },
                                "required": ["date", "status", "temperature"],
                            },
                        },
                    },
                    "required": ["forecast"],
                },
                "output": weather_info,
            }
        ],
        function_call="auto"
    )
    
    message = response["choices"][0]["message"]
    past_messages.append(message)
    return message["content"], past_messages

ここでは、"get_weather"という関数が日付情報を持つことで複数の日付の天気を返すように仕様を変更しています。
重要なのはArrayという構造を入れることで要素を複数持つことができるようにしたことにあります
これによって、Function Callの応用範囲が大きく広がる事がわかるでしょうか。

4. Function Callを用いたChatGPTの可能性

Function Callを使用することで、ChatGPTの能力は大幅に拡大します。様々なシナリオに対応する能力が向上するだけでなく、より具体的なタスクを処理する能力も得ることができます。具体的な例として、ウェブサイトのモックアップの作成や、特定の情報を整理して表示するアプリケーションの開発などが考えられます。

まず、仮データの安定的な作成について考えてみましょう。ChatGPTを利用すれば、ユーザーの要求に基づいたウェブページの内容を生成することができます。例えば、ユーザーが「私は新しいレストランを開業する予定です。そのレストランの仮のメニューの一覧を作成してください」という要求を出した場合、ChatGPTはその要求に応じてメニューを生成します。これにはレストランの種類や立地、どのような材料が用意可能なのかを追加で渡すことでその都度に異なるメニュー一覧と、その材料の一覧までも適切に作成することができることを意味しています。これは、ChatGPTがユーザーのニーズに合わせて具体的なテキストを生成する能力を活用したものです。

次に、特定の情報を整理して表示するウェブアプリケーションの開発について考えてみましょう。この例では、私が作成した架空の本の一覧を表示するアプリケーションを例とします。このアプリケーションでは、ウェブサイトはChatGPTのFunction Callを使用して、ユーザーが依頼したテーマに沿った架空の本の一覧を作成します。

ChatGPTと協力して作ったアプリ

そして帰ってきたJSONデータをそのままHTMLに挿入することで、ほんの一覧を安定的に提示することができるのです

回答例


これらの例は、ChatGPTとFunction Callがどのように連携して、より具体的で有用なタスクを実現することができるかを示しています。このような可能性を追求することで、AIは私たちの日常生活の一部となり、さまざまな作業を支援するツールとなるでしょう。

5. Function Call以前の同機能

以前から、ChatGPTの新機能のリリースは話題になっていました。そレに先立って公開されたChatGPTの動画コースでは、JSON形式を使ったコミュニケーションが主要なテーマとなっていました。これまでのChatGPTは素晴らしい会話AIながら、JSON形式を使ったデータのやりとりが一部でうまく機能していない、という課題がありました。そこで出てきたのが、今回ご紹介しているFunction Callの機能になります。この新機能のリリースにより、より安定したデータのやりとりが可能になったというわけです。

6. Function Callの未来

新しい機能については、まだ詳しく説明されている資料が少なく、全体像を掴むのは少し難しいかもしれません。それでも、今回の内容が皆さんの理解を少しでも深め、新しい応用への一歩になればと思い、このブログを書いています。

7. まとめ

まとめますと、Function CallはJSON形式のデータを扱う新しい方法を提供してくれる、ChatGPTの応用範囲を広げるためのすごいツールとなっています。でも、この機能の真の可能性を最大限に活かすには、我々ユーザーがどう活用するか、どう問題解決に使うかが重要になってきます。これが、AIが私たちの生活をより豊かにするための新しいステップになることでしょう。今後も新たな応用例を見つける旅は続きますね!

ここから先は

0字

¥ 300

期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?