1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenAI AgentSDKとfunction_toolの機能がすごかった話

Posted at

はじめに

自分全然知らなかったんですけど
3月に追加されたOpenAI AgentSDKのドキュメントを見ていたら
ChatGPTって自作関数の実行ができたんですね。

gitへのプルリクや自分のPC操作など必要に応じてPythonの関数を作成することで結構な自動化ができるんじゃないのかなとということで
OpenAIのAgentSDKとfunction_toolを使って、ためしにファイルを自動で作成するシステムを作成しました。

構成

このシステムは、以下の主要な構成要素で成り立っています。

  • AgentSDK: AIエージェントを作成し、インタラクティブなやり取りを実現
  • function_tool: 実行可能なツールとして、ファイル生成の処理を自動化

必要な準備

まず、環境を整えるために、必要なライブラリをインストールします。

pip install openai
pip install python-dotenv

次に、.envファイルを作成して、必要なAPIキーや設定を行います。

OPENAI_API_KEY=your_openai_api_key

コード解説

dotenvによる環境変数の読み込み

最初に、.envファイルからAPIキーを読み込むために、dotenvライブラリを使用します。

from dotenv import load_dotenv

load_dotenv()

function_toolによるファイル作成ツールの定義

次に、ファイルを作成するためのツールを定義します。このツールは、指定されたテキストをもとに、現在の日付と時刻を使ってファイルを作成します。
今回はファイル作成関数を作りましたが必要に応じて実行したい関数を作ります。
このデコレータ機能自体は昔からあった?(笑)

import pathlib
import datetime

@function_tool
def create_file(text: str):
    """ファイルを作成するツール
    このツールは、現在の日付と時刻を使用して、指定されたディレクトリにファイルを作成します。
    ディレクトリ名はYYYYMMDD形式、ファイル名はHHMMSS.py形式です。
    例: 20231001/120000.py
    """
    now = datetime.datetime.now()
    dir_name = now.strftime("%Y%m%d")
    file_name = now.strftime("%H%M%S") + ".py"

    dir_path = pathlib.Path(dir_name)
    dir_path.mkdir(exist_ok=True)

    file_path = dir_path / file_name
    file_path.touch(exist_ok=True)

    with file_path.open("w", encoding="utf-8") as f:
        f.write(text)

    return file_path

エージェントの作成

AIエージェントを作成し、ファイル生成の依頼を受け付ける指示を設定します。
このAIエージェントを複数作ることでユーザーからの入力を適切なエージェントに受け渡すことができるのだけれども今回はエージェントではなく関数を実行するようとして使用。

from agents import Agent

agent = Agent(
    name="Assistant",
    instructions=(
        "あなたは有能なアシスタントです。ファイルを作成する依頼がある場合はtoolsを使ってファイルを作成します"
    ),
    tools=[create_file],
)

エージェントとのインタラクション

ユーザーからの入力を受け取り、エージェントに処理を依頼します。結果として、作成されたファイルのパスを表示します。


import asyncio
from agents import Runner

async def main():
    text = input("何を手伝いましょうか?")
    result = await Runner.run(agent, input=text)
    print(result.final_output)

asyncio.run(main())


実行結果

作成したコードを実行して実際にpyファイルができているか確認してみましょう。

コードを実行

mainファイルを実行したら依頼内容を入力します。
語尾にファイルを作成してって付け加えると目的の関数を実行する精度が上がるのかな?

Pythonの基本的な四則演算を行う関数についてのコードをファイルに作成して

image.png

実行するとディレクトリとファイルが作成されます。

基本的な四則演算を行う関数を含むコードをファイルに作成しました。ファイル名は`20250405/161735.py`です。

以下はそのコードです:
---省略----

必要に応じてこのファイルを使用してください。

image.png

作成されたファイルの中身には正しく四則演算の関数ができたpyファイルが出来上がりました。
image.png

すごい。

まとめ

完成コードはこちらです。

import datetime
import pathlib

import asyncio
from agents import Agent, Runner, function_tool

from dotenv import load_dotenv
load_dotenv()

@function_tool
def create_file(text: str):
    """ファイルを作成するツール
    このツールは、現在の日付と時刻を使用して、指定されたディレクトリにファイルを作成します。
    ディレクトリ名はYYYYMMDD形式、ファイル名はHHMMSS.py形式です。
    例: 20231001/120000.py
    """
    now = datetime.datetime.now()
    dir_name = now.strftime("%Y%m%d")
    file_name = now.strftime("%H%M%S") + ".py"

    dir_path = pathlib.Path(dir_name)
    dir_path.mkdir(exist_ok=True)

    file_path = dir_path / file_name
    file_path.touch(exist_ok=True)

    with file_path.open("w", encoding="utf-8") as f:
        f.write(text)

    return file_path


agent = Agent(
    name="Assistant",
    instructions=(
        "あなたは有能なアシスタントです。ファイルを作成する依頼がある場合はtoolsを使ってファイルを作成します"
    ),
    tools=[create_file],
)


async def main():
    text = input("何を手伝いましょうか?")
    result = await Runner.run(agent, input=text)
    print(result.final_output)


asyncio.run(main())

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?