Bing API を利用した Azure AI Agent Service の実装ログ
この記事では、Azure AI プロジェクトのクライアントを用いて、Bing API 接続を利用した AI エージェントの作成から実行、メッセージ取得、さらにはクリーンアップまでの一連の流れを Jupyter Notebook で実施したログを勉強用にまとめています。
0. エンドポイントとキーを用意
下記よりAzure AI Agentを動かすのに必要な環境をデプロイすること可能。
Bingの設定はこちら
PROJECT_CONNECTION_STRING = "<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<HubName>"
1. 初期設定とライブラリのインポート
まずは必要なライブラリをインポートし、環境変数から Azure AI プロジェクトへの接続情報(接続文字列)を取得して、プロジェクトクライアントを作成します。
※接続文字列は以下の形式である必要があります:
<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<HubName>
また、Azure CLI によりログインし、環境変数 PROJECT_CONNECTION_STRING
がセットされていることを確認してください。
import os
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from azure.ai.projects.models import BingGroundingTool
from dotenv import load_dotenv
# .env ファイルから環境変数をロード(必要に応じて)
load_dotenv()
# Azure AI クライアントを接続文字列から作成
project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(),
conn_str=os.environ["PROJECT_CONNECTION_STRING"],
)
2. Bing API 接続情報の取得
プロジェクトクライアントを通じて、Bing API の接続情報を取得し、その接続 ID を確認します。
bing_connection = project_client.connections.get(
connection_name="<Connection name>" #AI foundryにbingを接続する際に設定した値
)
conn_id = bing_connection.id
print(conn_id)
3. AI エージェントとスレッドの作成
Bing API を利用する AI エージェントを作成し、AI との対話を管理するためのスレッドを生成します。
# AI エージェントを作成
agent = project_client.agents.create_agent(
model="gpt-4o", #gpt-4o-0806 versionで実施。またTPMを一定上げておくことを推奨
name="bing-assistant",
instructions="You are a helpful assistant",
tools=bing.definitions,
headers={"x-ms-enable-preview": "true"}
)
print(f"Created agent, ID: {agent.id}") # 作成したエージェントの ID を表示
# AI との対話を管理するためのスレッドを作成
thread = project_client.agents.create_thread()
print(f"Created thread, ID: {thread.id}") # 作成したスレッドの ID を表示
4. ユーザーメッセージの送信と Bing ツールの初期化
スレッドにユーザーからのメッセージを作成し送信します。
その後、BingGroundingTool をインスタンス化し、先ほど取得した接続 ID を渡します。
# ユーザーのリクエストをメッセージとして送信
message = project_client.agents.create_message(
thread_id=thread.id,
role="user",
content="このマイクロソフトのFY-2025-Q2の決算発表から各サービスごとに詳細に分析して日本語でレポートして。"
) # ユーザーから送信されたメッセージとして作成
print(f"Created message, ID: {message.id}")
# Bing ツールの初期化(接続 ID を指定)
bing = BingGroundingTool(connection_id=conn_id)
5. エージェントの実行開始
作成したエージェントによる処理(実行)を開始し、その実行状況を出力します。
run = project_client.agents.create_and_process_run(
thread_id=thread.id,
assistant_id=agent.id
)
print(f"Run finished with status: {run.status}")
6. 実行の詳細取得とエラーハンドリング
実行の各ステップの詳細情報を取得し、実行が失敗している場合はエラー内容を表示します。
また、スレッド内の全メッセージも取得して出力しています。
run_steps = project_client.agents.list_run_steps(run_id=run.id, thread_id=thread.id)
run_steps_data = run_steps['data']
print(f"Last run step detail: {run_steps_data}")
# 実行が失敗した場合のエラーハンドリング
if run.status == "failed":
print(f"Run failed: {run.last_error}")
# スレッド内のメッセージ一覧を取得
messages = project_client.agents.list_messages(thread_id=thread.id)
print(f"Messages: {messages}")
print(messages.data)
7. メッセージ内容の表示
取得したメッセージのうち、最初のメッセージの内容を抽出して表示します。
print(messages.data[0].content[0].text.value)
8. エージェントの削除
不要になったエージェントは削除して、リソースのクリーンアップを行います。
※削除する際は、エージェント ID を正しく指定してください。
project_client.agents.delete_agent("<agent ID>")
print("Deleted agent")
9. 現在のエージェント一覧の確認
現在プロジェクト内に存在する全エージェントの一覧を表示して、削除などの状態を確認します。
print(project_client.agents.list_agents())
10. プロジェクトクライアントのクローズ
最後に、プロジェクトクライアントをクローズして、接続を終了します。
project_client.close()
以上が、Azure AI プロジェクトを活用した Bing API 統合の一連の流れとなります。
Discussion