本教程介绍如何将图像与代理配合使用,使代理能够分析和响应图像内容。
将映像传递到代理
可以通过创建包含文本和图像内容的 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)
这会将代理对图像的分析输出到控制台。