👨‍💻

Bing API を利用した Azure AI Agent Service の実装ログ

2025/02/02に公開

この記事では、Azure AI プロジェクトのクライアントを用いて、Bing API 接続を利用した AI エージェントの作成から実行、メッセージ取得、さらにはクリーンアップまでの一連の流れを Jupyter Notebook で実施したログを勉強用にまとめています。

0. エンドポイントとキーを用意

下記よりAzure AI Agentを動かすのに必要な環境をデプロイすること可能。
https://learn.microsoft.com/ja-jp/azure/ai-services/agents/quickstart?pivots=programming-language-python-azure

Bingの設定はこちら
https://learn.microsoft.com/ja-jp/azure/ai-services/agents/how-to/tools/bing-grounding?tabs=python&pivots=overview

env
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