Uncategorized PR

OpenAI Assistants API徹底攻略: 構築からFunction Calling実践まで

記事内に商品プロモーションを含む場合があります

OpenAI Assistants APIとは?

OpenAI Assistants APIは、AIアシスタントを構築するための強力なツールです。チャットボット、カスタマーサポート、タスク自動化など、幅広い用途に活用できます。従来のGPTモデルを直接利用するよりも、状態管理やツールの統合が容易になり、より複雑なAIアプリケーションの開発が可能になります。

従来のGPTモデルとの違い

従来のGPTモデルでは、会話の履歴を自身で管理し、プロンプトに含める必要がありました。Assistant APIは、会話履歴を自動的に管理し、必要に応じて過去の情報を参照して応答を生成します。また、Function Callingと呼ばれる機能により、外部のツールやAPIと連携し、より高度なタスクを実行できます。

Assistant APIの基本構成

Assistant APIは、以下の主要な要素で構成されています。

* Assistant: AIアシスタントそのもの。名前、モデル、指示、ツールなどを定義します。
* Thread: 会話の履歴を保持するコンテナ。ユーザーとアシスタントのメッセージを格納します。
* Message: ユーザーまたはアシスタントからの個々のメッセージ。
* Run: スレッドに対してアシスタントを実行するプロセス。Function Callingなどの処理を行います。

開発環境の準備

Assistant APIを利用するには、OpenAI APIキーが必要です。まだ取得していない場合は、OpenAIのWebサイトでAPIキーを取得してください。

次に、PythonのOpenAIライブラリをインストールします。

“`bash
pip install openai
“`

コード例: 簡単な質問応答アシスタント

以下は、簡単な質問応答アシスタントを構築するPythonのコード例です。

“`python
import openai
import os

openai.api_key = os.getenv(“OPENAI_API_KEY”)

assistant = openai.beta.assistants.create(
name=”シンプルな質問応答アシスタント”,
instructions=”あなたは役に立つ質問応答アシスタントです。”,
model=”gpt-4-1106-preview”
)

thread = openai.beta.threads.create()

message = openai.beta.threads.messages.create(
thread_id=thread.id,
role=”user”,
content=”日本の首都はどこですか?”
)

run = openai.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id
)

while run.status != “completed”:
run = openai.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)
print(f”Run status: {run.status}”)

messages = openai.beta.threads.messages.list(
thread_id=thread.id
)

for message in messages.data:
if message.role == “assistant”:
print(f”Assistant: {message.content[0].text.value}”)

“`

このコードを実行すると、アシスタントが「日本の首都は東京です。」と回答します。

Function Callingの実践

Function Callingは、Assistant APIの最も強力な機能の一つです。外部のツールやAPIと連携することで、より複雑なタスクを実行できます。

Functionの定義

まず、連携したいFunctionを定義します。Functionの定義は、JSON Schema形式で行います。

“`json
{
“name”: “get_current_weather”,
“description”: “指定された場所の現在の天気を取得します。”,
“parameters”: {
“type”: “object”,
“properties”: {
“location”: {
“type”: “string”,
“description”: “場所(例:東京、ニューヨーク)”
},
“unit”: {
“type”: “string”,
“enum”: [“celsius”, “fahrenheit”],
“description”: “温度の単位”
}
},
“required”: [“location”]
}
}
“`

Functionの登録

定義したFunctionをAssistantに登録します。

“`python
assistant = openai.beta.assistants.create(
name=”天気予報アシスタント”,
instructions=”あなたは天気予報アシスタントです。”,
model=”gpt-4-1106-preview”,
tools=[{“type”: “function”, “function”: {
“name”: “get_current_weather”,
“description”: “指定された場所の現在の天気を取得します。”,
“parameters”: {
“type”: “object”,
“properties”: {
“location”: {
“type”: “string”,
“description”: “場所(例:東京、ニューヨーク)”
},
“unit”: {
“type”: “string”,
“enum”: [“celsius”, “fahrenheit”],
“description”: “温度の単位”
}
},
“required”: [“location”]
}
}}]
)
“`

Functionの実行

ユーザーからのメッセージに応じて、AssistantがFunctionを呼び出します。Functionの実行結果をAssistantに送信することで、より正確な回答を生成できます。

“`python
message = openai.beta.threads.messages.create(
thread_id=thread.id,
role=”user”,
content=”東京の今日の天気は?”
)

run = openai.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id
)

while run.status != “completed”:
run = openai.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)
print(f”Run status: {run.status}”)

if run.status == “requires_action”:
tool_calls = run.required_action.submit_tool_outputs.tool_calls
tool_outputs = []
for tool_call in tool_calls:
if tool_call.function.name == “get_current_weather”:
location = tool_call.function.arguments.get(“location”)
weather_info = get_weather(location)

tool_outputs.append({“tool_call_id”: tool_call.id, “output”: str(weather_info)})

# Functionの実行結果を送信
run = openai.beta.threads.runs.submit_tool_outputs(
thread_id=thread.id,
run_id=run.id,
tool_outputs=tool_outputs
)
“`

天気APIの呼び出し (例)

“`python
import requests

def get_weather(location):
api_key = “YOUR_WEATHER_API_KEY” # ここに天気APIのキーを入力
url = f”http://api.openweathermap.org/data/2.5/weather?q={location}&appid={api_key}&units=metric”
response = requests.get(url)
data = response.json()
if data[‘cod’] == 200:
weather = data[‘weather’][0][‘description’]
temperature = data[‘main’][‘temp’]
return f”現在の天気は{weather}、気温は{temperature}度です。”
else:
return “天気情報を取得できませんでした。”
“`

注意: 上記のコードは、OpenWeatherMap APIを例として使用しています。使用するには、OpenWeatherMapのAPIキーを取得し、`YOUR_WEATHER_API_KEY`を置き換える必要があります。また、OpenWeatherMap APIの利用規約を遵守してください。

まとめ

OpenAI Assistants APIは、AIアシスタント開発を大幅に効率化する強力なツールです。Function Callingを活用することで、外部のAPIと連携し、より高度なタスクを実行できます。この記事を参考に、ぜひAssistant APIを活用して、革新的なAIアプリケーションを開発してください。

ABOUT ME
あいラボちゃん
AIの最新活用法を、毎日わかりやすく発信| 初心者からプロまで「すぐ使える」情報をお届けします。 🔗 無料で楽しく学べるコミュニティも運営中です| 趣味はもしも転生したらAIだったら何するか考えて行動することです!