👍
【サンプルコードあり】OpenAI Agents SDKをAzure OpenAI Serviceで動かす
OpenAI Agents SDKが発表されました。せっかくなのでAzure OpenAI Serviceでも使いたいですよね。
本記事のサンプルコードで動作確認ができました。
この記事の最下部のコードを、使いやすく改変したものです。
コード
import os
from agents import Agent, Runner, AsyncOpenAI, OpenAIChatCompletionsModel, set_default_openai_client, set_tracing_disabled, set_tracing_export_api_key
from pydantic import BaseModel
# .envファイルの読み込み
from dotenv import load_dotenv
load_dotenv()
AZURE_OPENAI_API_KEY = os.getenv("AZURE_OPENAI_API_KEY")
AZURE_OPENAI_DEPLOYMENT_NAME = os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME")
AZURE_OPENAI_API_VERSION = os.getenv("AZURE_OPENAI_API_VERSION")
AZURE_OPENAI_ENDPOINT = os.getenv("AZURE_OPENAI_ENDPOINT")
## .envの参考
# OPENAI_API_KEY=sk-proj- ←トレースをしない場合はなくても良い
# AZURE_OPENAI_API_KEY=your_api_key
# AZURE_OPENAI_API_VERSION=2024-08-01-preview
# AZURE_OPENAI_ENDPOINT=https://your-resource-name.openai.azure.com/
# AZURE_OPENAI_DEPLOYMENT=your-deployment-name
# カスタムのOpenAIクライアントを作成
custom_client = AsyncOpenAI(
api_key=AZURE_OPENAI_API_KEY,
base_url=f"{AZURE_OPENAI_ENDPOINT}/openai/deployments/{AZURE_OPENAI_DEPLOYMENT_NAME}",
default_headers={"api-key": AZURE_OPENAI_API_KEY},
default_query={"api-version": AZURE_OPENAI_API_VERSION},
)
# カスタムのOpenAIクライアントをデフォルトに設定
set_default_openai_client(custom_client)
# 選択肢①:トレース機能を無効にする(オフにしないと401エラーが出る。)
set_tracing_disabled(disabled=True)
# 選択肢②:OpenAIのDashboardに送る
# set_tracing_export_api_key(os.getenv("OPENAI_API_KEY")) # 「OpenAIのAPIキー」が必要
# 出力の型を定義
class HomeworkOutput(BaseModel):
is_homework: bool
reasoning: str
# エージェントの定義
guardrail_agent = Agent(
name="Guardrail check",
instructions="宿題に関連する質問かどうかを判断します",
output_type=HomeworkOutput,
model=OpenAIChatCompletionsModel(
model=AZURE_OPENAI_DEPLOYMENT_NAME,
openai_client=custom_client,
) # ChatCompletions APIを使っているのでResponses APIの機能である、tools=[WebSearchTool()]は使えない。
)
# テストケース1
# 宿題に関連する質問ではない
result = Runner.run_sync(guardrail_agent, "おすすめのご飯は?")
print(result.final_output)
# テストケース2
# 宿題に関連する質問
result = Runner.run_sync(guardrail_agent, "2+2は?")
print(result.final_output)
注意点
2点引っかかったポイントがあったため、ご紹介します。
①トレース機能をオフにしないとエラーになる
トレース機能をオフにするか、別途OpenAIのAPIキーを設定することで、AOAI(Azure OpenAI Service)のモデルを使いながら、トレース結果の確認だけはOpenAIのDashboardを使うことができます。
# 選択肢①:トレース機能を無効にする(オフにしないと401エラーが出る。)
set_tracing_disabled(disabled=True)
# 選択肢②:OpenAIのDashboardに送る
# set_tracing_export_api_key(os.getenv("OPENAI_API_KEY")) # 「OpenAIのAPIキー」が必要
選択肢②を選んだ場合、モデル自体はAOAIを使っていますが、トレース結果はOpenAIのDashboardに保存されているのが確認できます。
②Responses APIの機能であるbuild-in-toolsが使えない
# エージェントの定義
guardrail_agent = Agent(
name="Guardrail check",
instructions="宿題に関連する質問かどうかを判断します",
output_type=HomeworkOutput,
model=OpenAIChatCompletionsModel(
model=AZURE_OPENAI_DEPLOYMENT_NAME,
openai_client=custom_client,
) # ChatCompletions APIを使っているのでResponses APIの機能である、tools=[WebSearchTool()]は使えない。
)
Agents SDKでは、Responses APIでの利用が主に想定されています。Responses APIは3/17時点ではOpenAI公式しか対応していないと思われます。今後、AOAIでも対応するかもしれません。
今回はAOAIを使いたいので、旧型APIであるChatCompletions APIを使ってAgents SDKを動かします。
そのため、Responses APIの機能であるbuild-in-toolsは使えません。
出力結果
このコードではガードレールのAgentsを例にして質問の内容が宿題に関係あるか、真偽地とその判定基準のみを出力させています。
その後の実際に回答する部分は含まれていません。
is_homework=False reasoning='この質問は、食事の選択や料理の提案に関するものであり、宿題や学業に関するものではありません。'
is_homework=True reasoning='この質問は基本的な算数の計算問題であり、宿題の一部として出される可能性があります。'
参考にした記事
↓この記事はそのままだと動きませんでした。
私の関連記事
Discussion