🤖
[AI Agent Jump Start 基礎編#3] ハンズオン(基礎)
Azure OpenAI + Agents SDK で Web検索対応エージェントを作る
OpenAIの公式 Agents SDK を使えば、ツール呼び出し対応のエージェント開発が簡単にできます。
本記事では Azure OpenAI を利用し、さらに Tavily Search API を使った Web検索ツールを組み込んだ実装方法を解説します。
簡単なプログラムを実行する
まずは、Azure OpenAI と Agents SDK で簡単な「Hello, Agent!」を動かしてみましょう。
① 環境構築
Python 仮想環境を作り、必要なライブラリをインストールします。
mkdir my_agents_project
cd my_agents_project
python3 -m venv .venv
source .venv/bin/activate
pip install openai-agents tavily-python python-dotenv
② .env ファイルで APIキー管理
# Azure OpenAI
AZURE_OPENAI_API_KEY=your_azure_api_key
AZURE_OPENAI_ENDPOINT=https://your-resource-name.openai.azure.com/
AZURE_OPENAI_DEPLOYMENT=gpt-4o
AZURE_OPENAI_API_VERSION=2024-07-01-preview
# Tavily
TAVILY_API_KEY=your_tavily_api_key
👉 Tavily Search の APIキーは以下から取得してください。
③ Azure OpenAIを使ったシンプルなエージェント実装
次のコードは、Agents SDK + Azure OpenAI でシンプルなエージェントを実行する例です。
simple_agent.py
import os
from dotenv import load_dotenv
load_dotenv()
from agents import Agent, Runner, OpenAIChatCompletionsModel
from openai import AsyncAzureOpenAI
# 1) Azure OpenAI クライアントを作成
client = AsyncAzureOpenAI(
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version=os.getenv("AZURE_OPENAI_API_VERSION"), # 例: "2024-08-01-preview"
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT") # 例: "https://<your-resource>.openai.azure.com"
)
# 2) Agents SDKが理解できる「model」にラップ
model = OpenAIChatCompletionsModel(
openai_client=client,
model=os.getenv("AZURE_OPENAI_DEPLOYMENT") # ← デプロイ"名"(モデル名ではない)
)
# 3) エージェント作成
agent = Agent(
name="Simple Assistant",
instructions="あなたは有能なアシスタントです。日本語で簡潔に答えてください。",
model=model
)
# 4) 実行
result = Runner.run_sync(agent, "AIエージェントとは何ですか?")
print(result.final_output)
✅ ここまでで、Azure OpenAI + Agents SDK の基本動作を確認できます。
ツールを自作する
次に、Web検索ツールを自作してエージェントに組み込みます。
① Tavilyを使ったWeb検索ツール
web_search.py
import os
from agents.tool import function_tool
from tavily import TavilyClient
from dotenv import load_dotenv
# 環境変数を読み込む
load_dotenv()
# Tavilyクライアント初期化
tavily = TavilyClient(api_key=os.getenv("TAVILY_API_KEY"))
@function_tool
def web_search(query: str, max_results: int = 3) -> str:
"""
Web検索を行い、上位結果をまとめて返す。
Tavily APIを使用。
"""
try:
response = tavily.search(query=query, max_results=max_results)
summaries = []
for item in response.get("results", []):
title = item.get("title", "No Title")
snippet = item.get("snippet", "")
url = item.get("url", "")
summaries.append(f"• {title}\n {snippet}\n URL: {url}")
return "\n\n".join(summaries) if summaries else "検索結果が見つかりませんでした。"
except Exception as e:
return f"エラーが発生しました: {str(e)}"
② 作成したツールをエージェントに組み込み
run_search_agent.py
import os
import asyncio
from dotenv import load_dotenv
from agents import Agent, Runner, set_tracing_disabled, OpenAIChatCompletionsModel
from openai import AsyncAzureOpenAI
from web_search import web_search # web_search.pyをインポート
# 環境変数を読み込む
load_dotenv()
#1) Azure OpenAIクライアントを作成
client = AsyncAzureOpenAI(
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT")
)
set_tracing_disabled(disabled=True)
# 2) Agents SDKが理解できる「model」にラップ
model = OpenAIChatCompletionsModel(
openai_client=client,
model=os.getenv("AZURE_OPENAI_DEPLOYMENT") # ← デプロイ"名"(モデル名ではない)
)
#3) Search Agentを定義
agent = Agent(
name="Search Agent",
instructions="質問に答えるため、必要ならWeb検索を使ってください。",
tools=[web_search], # Tavily検索ツールを利用
model=model
)
#4) 非同期でエージェントを実行
async def main():
query = "OpenAI Agents SDKの特徴を簡単にまとめて"
result = await Runner.run(agent, query)
print("\n=== エージェントの最終回答 ===\n")
print(result.final_output)
if __name__ == "__main__":
asyncio.run(main())
@function_tool とは?
@function_tool
は Agents SDK が提供するデコレーターで、Python 関数をエージェントに呼び出し可能なツールとして登録するために使います。
仕組み
- 関数の名前・引数・docstring からツールのメタ情報を自動生成
- LLM が「どのツールを呼ぶべきか」を判断できるようスキーマを作成
- Pydantic で引数をバリデートするため安全
ポイント
- LLM に「使い方を説明する必要なし」
- 自然言語プロンプトでツール選択が可能
- JSONスキーマを自動生成(OpenAI Function Calling と同じ概念)
Tavilyとは?
Tavily は AIアプリ向けの Web検索API です。
- 高速な検索(Google依存なし)
- 検索結果の要約・スニペットが取得可能
- OpenAI や LangChain との統合が容易
👉 今回はこれを Agents SDK のツール として実装しました。
実行結果
=== エージェントの最終回答 ===
OpenAI Agents SDKは、LLMベースのエージェントを簡単に構築できるPythonライブラリです。
主な特徴:
- ツール呼び出しを標準サポート
- マルチエージェント構成(ハンドオフ)
- Guardrailsによる出力検証
- トレーシング機能でデバッグ容易
参考:https://openai.github.io/openai-agents-python/
✅ まとめ
-
Azure OpenAI で Agents SDK を動かすには
AzureOpenAI
クライアントと環境変数設定が必須 -
@function_tool
で自作ツールを追加できる
👉 今回は Tavily Search を使ってリアルタイム検索を実装 -
Runner.run
/run_sync
で簡単にエージェントを実行可能
Discussion