エージェントでのイメージの使用

このチュートリアルでは、エージェントでイメージを使用し、エージェントが画像コンテンツを分析して応答できるようにする方法について説明します。

エージェントへの画像の受け渡し

テキストとイメージの両方のコンテンツを含む ChatMessage を作成することで、エージェントにイメージを送信できます。 エージェントはその後、画像を分析し、それに応じて応答できます。

まず、画像を分析できる AIAgent を作成します。

AIAgent agent = new AIProjectClient(
    new Uri("<your-foundry-project-endpoint>"),
    new DefaultAzureCredential())
    .AsAIAgent(
        model: "gpt-4o",
        name: "VisionAgent",
        instructions: "You are a helpful agent that can analyze images");

Warnung

DefaultAzureCredential は開発には便利ですが、運用環境では慎重に考慮する必要があります。 運用環境では、待機時間の問題、意図しない資格情報のプローブ、フォールバック メカニズムによる潜在的なセキュリティ リスクを回避するために、特定の資格情報 ( ManagedIdentityCredential など) を使用することを検討してください。

次に、テキスト プロンプトと画像 URL の両方を含む ChatMessage を作成します。 テキストには TextContent を使用し、画像には UriContent を使用します。

ChatMessage message = new(ChatRole.User, [
    new TextContent("What do you see in this image?"),
    new UriContent("https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg", "image/jpeg")
]);

メッセージを含むエージェントを実行します。 ストリーミングを使用して、生成された応答を受信できます。

Console.WriteLine(await agent.RunAsync(message));

これにより、エージェントによるイメージの分析がコンソールに出力されます。

エージェントへの画像の受け渡し

テキストとイメージの両方のコンテンツを含む Message を作成することで、エージェントにイメージを送信できます。 エージェントはその後、画像を分析し、それに応じて応答できます。

まず、画像を分析できるエージェントを作成します。

import asyncio
import os
from agent_framework.openai import OpenAIChatCompletionClient
from azure.identity import AzureCliCredential

agent = OpenAIChatCompletionClient(
    model=os.environ["AZURE_OPENAI_CHAT_COMPLETION_MODEL"],
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    credential=AzureCliCredential(),
).as_agent(
    name="VisionAgent",
    instructions="You are a helpful agent that can analyze images"
)

次に、テキスト プロンプトと画像 URL の両方を含む Message を作成します。 テキストには Content.from_text() を使用し、画像には Content.from_uri() を使用します。

from agent_framework import Message, Content

message = Message(
    role="user",
    contents=[
        Content.from_text(text="What do you see in this image?"),
        Content.from_uri(
            uri="https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
            media_type="image/jpeg"
        )
    ]
)

次の Content.from_data()を使用して、ローカル ファイル システムからイメージを読み込むこともできます。

from agent_framework import Message, Content

# Load image from local file
with open("path/to/your/image.jpg", "rb") as f:
    image_bytes = f.read()

message = Message(
    role="user",
    contents=[
        Content.from_text(text="What do you see in this image?"),
        Content.from_data(
            data=image_bytes,
            media_type="image/jpeg"
        )
    ]
)

メッセージを含むエージェントを実行します。 ストリーミングを使用して、生成された応答を受信できます。

async def main():
    result = await agent.run(message)
    print(result.text)

asyncio.run(main())

これにより、エージェントによるイメージの分析がコンソールに出力されます。

エージェントへの画像の受け渡し

テキストとイメージの両方のコンテンツを含む message を作成することで、エージェントにイメージを送信できます。 エージェントはその後、画像を分析し、それに応じて応答できます。

まず、画像を分析できるエージェントを作成します。

import (
    "context"
    "fmt"
    "os"

    "github.com/microsoft/agent-framework-go/agent"
    "github.com/microsoft/agent-framework-go/provider/foundryprovider"
    "github.com/microsoft/agent-framework-go/message"

    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
)

token, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
    panic(err)
}

a := foundryprovider.NewAgent(
    os.Getenv("FOUNDRY_PROJECT_ENDPOINT"),
    token,
    foundryprovider.ModelDeployment(os.Getenv("FOUNDRY_MODEL")),
    foundryprovider.AgentConfig{
        Instructions: "You are a helpful agent that can analyze images",
        Config: agent.Config{
            Name: "VisionAgent",
        },
    },
)

Warnung

azidentity.NewDefaultAzureCredential は開発には便利ですが、運用環境では慎重に考慮する必要があります。 運用環境では、待機時間の問題、意図しない資格情報のプローブ、フォールバック メカニズムによる潜在的なセキュリティ リスクを回避するために、 azidentity.NewManagedIdentityCredentialなどの特定の資格情報を使用することを検討してください。

次に、テキスト プロンプトと画像 URL の両方を含むメッセージを作成します。 テキストには message.TextContent を使用し、画像には message.URIContent を使用します。

msg := message.New(
    &message.TextContent{Text: "What do you see in this image?"},
    &message.URIContent{
        URI:       "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
        MediaType: "image/jpeg",
    },
)

次の message.DataContentを使用して、ローカル ファイル システムからイメージを読み込むこともできます。

import "encoding/base64"

imageBytes, err := os.ReadFile("path/to/your/image.jpg")
if err != nil {
    panic(err)
}

msg := message.New(
    &message.TextContent{Text: "What do you see in this image?"},
    &message.DataContent{
        Data:      base64.StdEncoding.EncodeToString(imageBytes),
        MediaType: "image/jpeg",
    },
)

メッセージを含むエージェントを実行します。 ストリーミングを使用して、生成された応答を受信できます。

ctx := context.Background()
resp, err := a.RunMessage(ctx, msg).Collect()
fmt.Println(resp.Text(), err)

これにより、エージェントによるイメージの分析がコンソールに出力されます。

次のステップ