7. Adım: Aracınızı barındırma

Microsoft tarafından yönetilen Foundry Hosted Agents, kendi kendine barındırma ve Durable Extension ile dayanıklı yürütmenin karşılaştırması için Hosting Agent Framework uygulamalarına bakın.

ASP.NET Core'da barındırma

Agent Framework, yapay zeka aracılarını ASP.NET Core uygulamalarıyla tümleştirmenizi sağlayan barındırma kitaplıkları sağlar. Bu kitaplıklar çeşitli protokoller aracılığıyla aracıları kaydetmeyi, yapılandırmayı ve ortaya çıkarmayı basitleştirir.

Aracılar'da açıklandığı gibi, AIAgent Aracı Çerçevesi'ndeki temel aracı soyutlamasıdır. Kullanıcı girişlerini işleyen, kararlar alan, araçları çağıran ve eylemleri yürütmek ve yanıtlar oluşturmak için ek iş gerçekleştiren bir "LLM sarmalayıcı" tanımlar. ASP.NET Core uygulamanızdan yapay zeka aracılarını kullanıma çıkarmak önemsiz değildir. Barındırma kitaplıkları, yapay zeka aracılarını bir bağımlılık ekleme kapsayıcısına kaydederek bu sorunu çözer ve bunları uygulama hizmetlerinizde çözmenize ve kullanmanıza olanak sağlar. Ayrıca araçlar ve oturum depolama gibi aracı bağımlılıklarını aynı kapsayıcıdan yönetmenize de olanak tanır. Aracılar, kullandıkları protokollerden bağımsız olarak uygulama altyapınızla birlikte barındırılabilir. Benzer şekilde, iş akışları barındırılabilir ve uygulamanızın ortak altyapısını kullanabilir.

Çekirdek Barındırma Kitaplığı

Kitaplık Microsoft.Agents.AI.Hosting , ASP.NET Core'da yapay zeka aracılarını barındırmanın temelini oluşturur. Yapay zeka aracılarını ve iş akışlarını kaydetmek ve yapılandırmak için IHostApplicationBuilder için uzantılar sağlar. ASP.NET Core'da, IHostApplicationBuilder yapılandırmayı, günlüğe kaydetmeyi, yaşam süresini ve daha fazlasını yöneten, barındırılan uygulamalar ve hizmetler için oluşturucuyu temsil eden temel türdür.

Aracıları veya iş akışlarını yapılandırmadan önce bağımlılık ekleme kapsayıcısında bir IChatClient kaydedin. Aşağıdaki örneklerde adı chat-modelaltında anahtarlı tekil olarak kaydedilir:

// endpoint is your Microsoft Foundry project endpoint
// deploymentName is 'gpt-4o-mini' for example

IChatClient chatClient = new AIProjectClient(
        new Uri(endpoint),
        new DefaultAzureCredential())
    .GetProjectOpenAIClient()
    .GetProjectResponsesClient()
    .AsIChatClient(deploymentName);
builder.Services.AddSingleton(chatClient);

Warning

DefaultAzureCredential geliştirme için uygundur ancak üretimde dikkatli bir şekilde dikkate alınması gerekir. Üretimde gecikme sorunları, istenmeyen kimlik bilgisi yoklama ve geri dönüş mekanizmalarından kaynaklanan olası güvenlik risklerini önlemek için belirli bir kimlik bilgisi (ör ManagedIdentityCredential. ) kullanmayı göz önünde bulundurun.

YapayZekaAjanıEkle

Bağımlılık ekleme ile yapay zeka aracısının kaydını yapın:

var pirateAgent = builder.AddAIAgent(
    "pirate",
    instructions: "You are a pirate. Speak like a pirate",
    description: "An agent that speaks like a pirate.",
    chatClientServiceKey: "chat-model");

AddAIAgent() yöntemi, aracıyı yapılandırmak için uzantı yöntemleri sağlayan bir IHostedAgentBuilder döndürür. Örneğin aracıya araçlar ekleyebilirsiniz:

var pirateAgent = builder.AddAIAgent("pirate", instructions: "You are a pirate. Speak like a pirate")
    .WithAITool(new MyTool()); // MyTool is a custom type derived from AITool

Oturum depoyu da yapılandırabilirsiniz (konuşma verileri için depolama):

var pirateAgent = builder.AddAIAgent("pirate", instructions: "You are a pirate. Speak like a pirate")
    .WithInMemorySessionStore();

AddWorkflow

Birden çok aracıyı koordine eden iş akışlarını kaydedin. İş akışı temelde her düğümün bir olduğu ve aracıların birbiriyle iletişim kurduğu bir AIAgent"grafiktir".

Bu örnekte, iki ajan sırayla çalışmaktadır. Önce kullanıcı girişi agent-1 öğesine gönderilir; bu da bir yanıt üretir ve yanıt agent-2 öğesine gönderilir. Ardından iş akışı son yanıtı döndürür. Eşzamanlı aracı iş akışı oluşturan bir yöntem de BuildConcurrent vardır.

builder.AddAIAgent("agent-1", instructions: "you are agent 1!");
builder.AddAIAgent("agent-2", instructions: "you are agent 2!");

var workflow = builder.AddWorkflow("my-workflow", (sp, key) =>
{
    var agent1 = sp.GetRequiredKeyedService<AIAgent>("agent-1");
    var agent2 = sp.GetRequiredKeyedService<AIAgent>("agent-2");
    return AgentWorkflowBuilder.BuildSequential(key, [agent1, agent2]);
});

İş Akışını AI Agent Olarak Sunma

İş akışıyla protokol tümleştirmelerini (A2A veya OpenAI gibi) kullanmak için bunu tek başına bir aracıya dönüştürün. Şu anda iş akışları kendi başına benzer tümleştirme özellikleri sağlamadığından bu dönüştürme adımı gereklidir:

var workflowAsAgent = builder
    .AddWorkflow("science-workflow", (sp, key) => { ... })
    .AddAsAIAgent();  // Now the workflow can be used as an agent

Uygulama Ayrıntıları

Barındırma kitaplıkları, dış iletişim protokollerine ve Aracı Çerçevesi'nin iç AIAgent uygulamasına köprü oluşturan protokol bağdaştırıcıları olarak hareket eder. Barındırma tümleştirme kitaplığını kullandığınızda, kitaplık bağımlılık enjeksiyonundan kaydedilmiş olan AIAgent öğesini alır, gelen istekleri ve giden yanıtları çevirmek için protokole özgü bir ara yazılımla sarar ve istekleri işlemek üzere AIAgent öğesini çağırır. Bu mimari, aracı uygulamanızın protokolden bağımsız kalmasını sağlar.

Örneğin, A2A protokol bağdaştırıcısı ile ASP.NET Core barındırma kitaplığını kullanma:

// Register the agent
var pirateAgent = builder.AddAIAgent("pirate",
    instructions: "You are a pirate. Speak like a pirate",
    description: "An agent that speaks like a pirate.");

// Expose via a protocol (e.g. A2A)
builder.Services.AddA2AServer();
var app = builder.Build();
app.MapA2AServer();
app.Run();

Microsoft Foundry Hosted Agents birincil yönetilen barındırma seçeneğidir. Azure Geliştirici CLI AI aracısı uzantısı ve Azure CLI oturum açma dahil olmak üzere Foundry Barındırılan Aracılar önkoşullarını tamamlayın.

Başlarken örneği, sunucu tarafı model depolaması devre dışı bırakılmış bir aracı oluşturur ve bir örneği ResponsesHostServer başlatır:

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient, ResponsesHostServer
from azure.identity import DefaultAzureCredential


def main() -> None:
    agent = Agent(
        client=FoundryChatClient(
            project_endpoint="https://your-account.services.ai.azure.com/api/projects/your-project",
            model="gpt-6-luna",
            credential=DefaultAzureCredential(),
        ),
        instructions="You are a friendly assistant. Keep your answers brief.",
        default_options={"store": False},
    )
    ResponsesHostServer(agent=agent, history_source="agent_server").run()


if __name__ == "__main__":
    main()

Sabit kodlanmış proje uç noktasını ve model dağıtım adını değiştirin, ardından Pep 723 örneğini Agent Framework depo kökünden yerel olarak çalıştırın:

uv run python/samples/01-get-started/07_hosting.py

Eksiksiz bir barındırılan aracı projesini dağıtmak için, bunu bakımı yapılan örneğin azure.yaml öğesinden oluşturun:

mkdir my-hosted-agent && cd my-hosted-agent
azd ai agent init -t https://github.com/microsoft-foundry/foundry-samples/blob/main/samples/python/hosted-agents/agent-framework/responses/01-basic/azure.yaml --src .

agent host'u çalıştırın:

azd ai agent run

Başka bir terminalde yerel aracıyı çağırın:

azd ai agent invoke --local "Hello!"

Tip

Tam başlangıç örneğine ve tam dağıtım örneğine bakın. Dağıtım kılavuzu için bkz. Foundry Hosted Agents.

A2A Protokolü ile Barındırma

Go sürümü, bir aracıyı Agent-to-Agent protokolüyle uyumlu bir HTTP işleyicisi içinde saran a2aprovider aracılığıyla A2A barındırma sağlar.

Uyarı

Dayanıklı Uzantı barındırma şu anda Go için kullanılamıyor. En son Go SDK'sı durumu için bkz. Agent Framework Go deposu.

Ajan oluşturma:

import (
    "log"
    "net/http"

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

    "github.com/a2aproject/a2a-go/v2/a2a"
    "github.com/a2aproject/a2a-go/v2/a2asrv"
)

a := foundryprovider.NewAgent(endpoint, token, foundryprovider.ModelDeployment(model), foundryprovider.AgentConfig{
    Instructions: "You are a helpful assistant.",
    Config: agent.Config{
    },
})

Ajanı A2A üzerinden yayımlayın:

url := "http://localhost:5000"
card := &a2a.AgentCard{
    Name:               "MyAgent",
    Description:        "A helpful assistant.",
    Version:            "1.0.0",
    DefaultInputModes:  []string{"text"},
    DefaultOutputModes: []string{"text"},
    Capabilities:       a2a.AgentCapabilities{Streaming: false},
    SupportedInterfaces: []*a2a.AgentInterface{
        a2a.NewAgentInterface(url, a2a.TransportProtocolJSONRPC),
    },
}

mux := http.NewServeMux()
requestHandler := a2asrv.NewHandler(
    a2aprovider.NewExecutor(a, a2aprovider.ExecutorConfig{}),
    a2asrv.WithExtendedAgentCard(card),
)
mux.Handle("/", a2asrv.NewJSONRPCHandler(requestHandler))
mux.Handle(a2asrv.WellKnownAgentCardPath, a2asrv.NewStaticAgentCardHandler(card))

log.Println("A2A server listening on :5000")
if err := http.ListenAndServe(":5000", mux); err != nil {
    log.Fatal(err)
}

Tip

Tam bir çalıştırılabilir örnek için tam A2A istemci-sunucu örneğine bakın.

Sonraki Adımlar

Daha derine gidin:

Ayrıca bakınız