ツール選び

OpenAI Assistants APIの使い方:エージェント開発実践ガイド

Media Lab

OpenAI Assistants APIの使い方:エージェント開発実践ガイド

OpenAIのAssistants APIは、AIエージェントをアプリケーションに組み込むための強力なプラットフォームです。スレッド管理、ツール統合、ファイル処理など、エージェント開発に必要な機能がすぐに使えます。本記事では、Assistants APIの主要機能と実装方法を解説します。

Assistants APIの特徴

Assistants APIは、従来のChat Completions APIと比べてエージェント向けに最適化された以下の機能を提供します。

スレッド管理: 会話履歴(スレッド)をOpenAI側で管理するため、アプリ側でのコンテキスト管理が不要になります。

組み込みツール: Code Interpreter(Pythonコード実行)、File Search(ドキュメント検索)、Function Calling(カスタム関数呼び出し)が標準搭載されています。

ファイルのアップロードと参照: PDFやCSVなどのファイルをAPIにアップロードし、アシスタントが参照できます。

非同期実行(Runs): タスクを非同期で実行でき、長時間かかるタスクでもポーリングで状況を確認できます。

基本的なセットアップ

AIエージェント開発環境構築で環境を整えてから、以下の手順で実装します。

まずOpenAI Pythonライブラリをインストールします。

pip install openai

次にAPIキーをAIエージェントAPIキー設定方法に従って設定した上で、アシスタントを作成します。

from openai import OpenAI
client = OpenAI()

assistant = client.beta.assistants.create(
    name="マーケティングアシスタント",
    instructions="あなたはマーケティングの専門家です。ビジネス戦略の分析と提案を行います。",
    model="gpt-4o",
    tools=[
        {"type": "code_interpreter"},
        {"type": "file_search"}
    ]
)

スレッドとランの基本操作

会話を行うにはスレッドを作成し、メッセージを追加してランを実行します。

# スレッド作成
thread = client.beta.threads.create()

# メッセージ追加
client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="競合他社の分析レポートを作成してください"
)

# ランの実行
run = client.beta.threads.runs.create(
    thread_id=thread.id,
    assistant_id=assistant.id
)

# 結果の取得(ポーリング)
import time
while run.status != "completed":
    time.sleep(1)
    run = client.beta.threads.runs.retrieve(
        thread_id=thread.id,
        run_id=run.id
    )

# メッセージの取得
messages = client.beta.threads.messages.list(thread_id=thread.id)

File Search(ドキュメント検索)の実装

社内ドキュメントや製品マニュアルを読み込ませてQ&Aシステムを構築できます。

# ファイルのアップロード
file = client.files.create(
    file=open("product_manual.pdf", "rb"),
    purpose="assistants"
)

# ベクトルストアの作成
vector_store = client.beta.vector_stores.create(name="製品マニュアル")
client.beta.vector_stores.files.create(
    vector_store_id=vector_store.id,
    file_id=file.id
)

# アシスタントにベクトルストアを紐付け
assistant = client.beta.assistants.update(
    assistant.id,
    tool_resources={"file_search": {"vector_store_ids": [vector_store.id]}}
)

Code Interpreter(コード実行)の活用

データ分析やグラフ生成をチャット内で完結させることができます。

# CSVファイルをアップロードしてコードインタープリタで分析
file = client.files.create(
    file=open("sales_data.csv", "rb"),
    purpose="assistants"
)

thread = client.beta.threads.create()
client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="このデータの月次トレンドを分析して、グラフを作成してください",
    attachments=[{"file_id": file.id, "tools": [{"type": "code_interpreter"}]}]
)

Function Calling(カスタム関数)の統合

外部API(天気情報、CRM、社内システム等)とAssistants APIを連携できます。

assistant = client.beta.assistants.create(
    tools=[{
        "type": "function",
        "function": {
            "name": "get_customer_info",
            "description": "顧客IDで顧客情報を取得します",
            "parameters": {
                "type": "object",
                "properties": {
                    "customer_id": {"type": "string"}
                }
            }
        }
    }]
)

費用とコスト最適化

Assistants APIは通常のAPIコスト(入力・出力トークン)に加え、ファイルストレージ料金が発生します。1GB・1日あたり約0.10ドルのストレージ費用がかかります。

コスト削減のために、不要になったファイルやスレッドは定期的に削除することをお勧めします。

まとめ

OpenAI Assistants APIは、スレッド管理・ファイル処理・ツール統合を提供するエージェント開発プラットフォームです。AIエージェントのツール使用の概念を実際のAPIで実現する強力な手段です。公式ドキュメントのサンプルコードから始め、徐々に複雑な機能を追加していくアプローチで学習を進めましょう。