이 자습서에서는 에이전트와 함께 이미지를 사용하여 에이전트가 이미지 콘텐츠를 분석하고 응답할 수 있도록 하는 방법을 보여 줍니다.
에이전트에 이미지 전달
텍스트 및 이미지 콘텐츠를 모두 포함하는 이미지를 만들어 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");
경고
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",
},
},
)
경고
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)
그러면 에이전트의 이미지 분석이 콘솔에 출력됩니다.