Aracılığıyla paylaş


AG-UI Kullanmaya Başlama

Bu kılavuz, .NET veya Python ve Agent Framework ile AG-UI protokolünü kullanarak hem sunucu hem de istemci uygulamalarının nasıl oluşturulacağını açıklar. Etkileşimli konuşmalar için bir yapay zeka aracısını ve ona bağlanan bir istemciyi barındıran bir AG-UI sunucusu oluşturmayı öğreneceksiniz.

Neler Oluşturacaksınız

Bu öğreticinin sonunda şunları elde etmiş olacaksınız:

  • HTTP üzerinden erişilebilen bir yapay zeka aracısı barındıran AG-UI sunucusu
  • Sunucuya bağlanan ve yanıtları akışla aktaran bir istemci uygulaması
  • AG-UI protokolünün Aracı Çerçevesi ile nasıl çalıştığını anlama

Önkoşullar

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

Uyarı

Bu örneklerde Azure OpenAI modelleri kullanılır. Daha fazla bilgi için bkz. Azure OpenAI modellerini Azure AI Foundry ile dağıtma.

Uyarı

Bu örnekler kimlik doğrulaması için kullanılır DefaultAzureCredential . Azure ile kimliğinizin doğrulanmış olduğundan emin olun (örneğin aracılığıyla az login). Daha fazla bilgi için Azure Identity belgelerine bakın.

Uyarı

AG-UI protokolü hala geliştirme aşamasındadır ve değiştirilebilir. Protokol geliştikçe bu örnekleri güncel tutacağız.

1. Adım: AG-UI Sunucusu Oluşturma

AG-UI sunucusu yapay zeka aracınızı barındırıyor ve ASP.NET Core kullanarak HTTP uç noktaları aracılığıyla kullanıma sunar.

Uyarı

Sunucu projesi SDK gerektirir Microsoft.NET.Sdk.Web . Sıfırdan yeni bir proje oluşturuyorsanız, dotnet new web yerine .csproj kullanın veya <Project Sdk="Microsoft.NET.Sdk.Web"> dosyanızın Microsoft.NET.Sdk kullandığından emin olun.

Gerekli Paketleri Yükleme

Sunucu için gerekli paketleri yükleyin:

dotnet add package Microsoft.Agents.AI.Hosting.AGUI.AspNetCore --prerelease
dotnet add package Azure.AI.OpenAI --prerelease
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease

Uyarı

OpenAI'nin Microsoft.Extensions.AI.OpenAI'yu, Agent Framework tarafından beklenen AsIChatClient() arabirimine dönüştüren ChatClient uzantı yöntemi için IChatClient paketi gereklidir.

Sunucu Kodu

adlı Program.csbir dosya oluşturun:

// Copyright (c) Microsoft. All rights reserved.

using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI.Hosting.AGUI.AspNetCore;
using Microsoft.Extensions.AI;
using OpenAI.Chat;

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpClient().AddLogging();
builder.Services.AddAGUI();

WebApplication app = builder.Build();

string endpoint = builder.Configuration["AZURE_OPENAI_ENDPOINT"]
    ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
string deploymentName = builder.Configuration["AZURE_OPENAI_DEPLOYMENT_NAME"]
    ?? throw new InvalidOperationException("AZURE_OPENAI_DEPLOYMENT_NAME is not set.");

// Create the AI agent
ChatClient chatClient = new AzureOpenAIClient(
        new Uri(endpoint),
        new DefaultAzureCredential())
    .GetChatClient(deploymentName);

AIAgent agent = chatClient.AsIChatClient().AsAIAgent(
    name: "AGUIAssistant",
    instructions: "You are a helpful assistant.");

// Map the AG-UI agent endpoint
app.MapAGUI("/", agent);

await app.RunAsync();

Önemli Kavramlar

  • AddAGUI: AG-UI hizmetlerini bağımlılık ekleme kapsayıcısına kaydeder
  • MapAGUI: otomatik istek/yanıt işleme ve SSE akışı ile AG-UI uç noktasını kaydeden uzantı yöntemi
  • ChatClient ve AsIChatClient(): AzureOpenAIClient.GetChatClient() OpenAI'nin ChatClient türünü döndürür. AsIChatClient() Uzantı yöntemi (kaynakMicrosoft.Extensions.AI.OpenAI), aracıyı Agent Framework'ün IChatClient gerektirdiği arabirime dönüştürür
  • AsAIAgent: Bir IChatClient'den bir Aracı Çerçevesi ajanı oluşturur.
  • ASP.NET Core Entegrasyonu: Akış yanıtları için ASP.NET Core'un yerel asenkron desteğini kullanır
  • Yönergeler: Aracı, istemci iletileri tarafından geçersiz kılınabilen varsayılan yönergelerle oluşturulur
  • Yapılandırma: AzureOpenAIClient ile DefaultAzureCredential güvenli kimlik doğrulaması sağlar

Sunucuyu Yapılandırma ve Çalıştırma

Gerekli ortam değişkenlerini ayarlayın:

export AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com/"
export AZURE_OPENAI_DEPLOYMENT_NAME="gpt-4o-mini"

Sunucuyu çalıştırın:

dotnet run --urls http://localhost:8888

Sunucu http://localhost:8888 üzerinde dinlemeye başlayacak.

Uyarı

2. Adımda istemciyi ayarlarken ve çalıştırırken bu sunucuyu çalışır durumda tutun. Tüm sistemin çalışması için hem sunucunun hem de istemcinin aynı anda çalışması gerekir.

2. Adım: AG-UI İstemcisi Oluşturma

AG-UI istemcisi uzak sunucuya bağlanır ve akış yanıtlarını görüntüler.

Önemli

İstemciyi çalıştırmadan önce, 1. adımdaki AG-UI sunucusunun konumunda http://localhost:8888çalıştığından emin olun.

Gerekli Paketleri Yükleme

AG-UI istemci kitaplığını yükleyin:

dotnet add package Microsoft.Agents.AI.AGUI --prerelease
dotnet add package Microsoft.Agents.AI --prerelease

Uyarı

Microsoft.Agents.AI paket, uzantı metoduAsAIAgent() sağlar.

İstemci Kodu

adlı Program.csbir dosya oluşturun:

// Copyright (c) Microsoft. All rights reserved.

using Microsoft.Agents.AI;
using Microsoft.Agents.AI.AGUI;
using Microsoft.Extensions.AI;

string serverUrl = Environment.GetEnvironmentVariable("AGUI_SERVER_URL") ?? "http://localhost:8888";

Console.WriteLine($"Connecting to AG-UI server at: {serverUrl}\n");

// Create the AG-UI client agent
using HttpClient httpClient = new()
{
    Timeout = TimeSpan.FromSeconds(60)
};

AGUIChatClient chatClient = new(httpClient, serverUrl);

AIAgent agent = chatClient.AsAIAgent(
    name: "agui-client",
    description: "AG-UI Client Agent");

AgentSession session = await agent.CreateSessionAsync();
List<ChatMessage> messages =
[
    new(ChatRole.System, "You are a helpful assistant.")
];

try
{
    while (true)
    {
        // Get user input
        Console.Write("\nUser (:q or quit to exit): ");
        string? message = Console.ReadLine();

        if (string.IsNullOrWhiteSpace(message))
        {
            Console.WriteLine("Request cannot be empty.");
            continue;
        }

        if (message is ":q" or "quit")
        {
            break;
        }

        messages.Add(new ChatMessage(ChatRole.User, message));

        // Stream the response
        bool isFirstUpdate = true;
        string? threadId = null;

        await foreach (AgentResponseUpdate update in agent.RunStreamingAsync(messages, session))
        {
            ChatResponseUpdate chatUpdate = update.AsChatResponseUpdate();

            // First update indicates run started
            if (isFirstUpdate)
            {
                threadId = chatUpdate.ConversationId;
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine($"\n[Run Started - Thread: {chatUpdate.ConversationId}, Run: {chatUpdate.ResponseId}]");
                Console.ResetColor();
                isFirstUpdate = false;
            }

            // Display streaming text content
            foreach (AIContent content in update.Contents)
            {
                if (content is TextContent textContent)
                {
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.Write(textContent.Text);
                    Console.ResetColor();
                }
                else if (content is ErrorContent errorContent)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine($"\n[Error: {errorContent.Message}]");
                    Console.ResetColor();
                }
            }
        }

        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine($"\n[Run Finished - Thread: {threadId}]");
        Console.ResetColor();
    }
}
catch (Exception ex)
{
    Console.WriteLine($"\nAn error occurred: {ex.Message}");
}

Önemli Kavramlar

  • Server-Sent Olayları (SSE): Protokol, akışlı yanıtlar için SSE kullanır
  • AGUIChatClient: AG-UI sunuculara bağlanan ve uygulayan istemci sınıfı IChatClient
  • AsAIAgent: İstemciden bir aracı oluşturmak için AGUIChatClient üzerinde uzantı yöntemi
  • RunStreamingAsync: Yanıtları nesne olarak AgentResponseUpdate akışla aktarıyor
  • AsChatResponseUpdate: Sohbete özgü ConversationId ve ResponseId gibi özelliklere erişmek için uzantı yöntemi
  • Oturum Yönetimi: İstekler AgentSession arasında konuşma bağlamını korur
  • İçerik Türleri: Yanıtlar TextContent iletilere ve ErrorContent hatalara yöneliktir

İstemciyi Yapılandırma ve Çalıştırma

İsteğe bağlı olarak özel bir sunucu URL'si ayarlayın:

export AGUI_SERVER_URL="http://localhost:8888"

İstemciyi ayrı bir terminalde çalıştırın (1. Adımdaki sunucunun çalıştığından emin olun):

dotnet run

3. Adım: Tam Sistemi Test Etme

Hem sunucu hem de istemci çalışırken, artık sistemin tamamını test edebilirsiniz.

Beklenen Çıkış

$ dotnet run
Connecting to AG-UI server at: http://localhost:8888

User (:q or quit to exit): What is 2 + 2?

[Run Started - Thread: thread_abc123, Run: run_xyz789]
2 + 2 equals 4.
[Run Finished - Thread: thread_abc123]

User (:q or quit to exit): Tell me a fun fact about space

[Run Started - Thread: thread_abc123, Run: run_def456]
Here's a fun fact: A day on Venus is longer than its year! Venus takes
about 243 Earth days to rotate once on its axis, but only about 225 Earth
days to orbit the Sun.
[Run Finished - Thread: thread_abc123]

User (:q or quit to exit): :q

Renk Kodlu Çıktı

İstemci, farklı renklerde farklı içerik türleri görüntüler:

  • Sarı: Başlatılan bildirimleri çalıştırma
  • Cyan: Ajan metin yanıtları (gerçek zamanlı yayın akışı)
  • Yeşil: Tamamlama bildirimlerini çalıştırma
  • Kırmızı: Hata iletileri

Nasıl Çalışır?

Server-Side Süreci

  1. İstemci, iletilerle HTTP POST isteği gönderir
  2. ASP.NET Core uç noktası isteği şu aracılığıyla alır: MapAGUI
  3. Aracı, Agent Framework kullanarak iletileri işler
  4. Yanıtlar AG-UI olaylara dönüştürülür
  5. Olaylar Sunucu Gönderimli Olaylar (SSE) olarak geri gönderilir
  6. Çalıştırma tamamlandığında bağlantı kapatılır

İstemci Tarafı Süreci

  1. AGUIChatClient sunucu uç noktasına HTTP POST isteği gönderir
  2. Sunucu, SSE akışıyla yanıt verir
  3. İstemci gelen olayları nesnelere ayrıştırıyor AgentResponseUpdate
  4. Her güncelleştirme içerik türüne göre görüntülenir
  5. ConversationId konuşma sürekliliği için kaydedilir
  6. Çalıştırma tamamlandığında akış tamamlar

Protokol Ayrıntıları

AG-UI protokolü aşağıdakileri kullanır:

  • İstek göndermek için HTTP POST
  • Sunucu Tarafından Gönderilen Olaylar (SSE) ile akış yanıtları
  • Olay serileştirme için JSON
  • Konuşma bağlamını korumak için iş parçacığı kimlikleri (olarak ConversationId)
  • Bireysel yürütmeleri izlemek için kimlikler (örneğin ResponseId) çalıştırılır

Sonraki Adımlar

AG-UI'nin temellerini anladığınıza göre şunları yapabilirsiniz:

Ek Kaynaklar

Önkoşullar

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

Uyarı

Bu örneklerde Azure OpenAI modelleri kullanılır. Daha fazla bilgi için bkz. Azure OpenAI modellerini Azure AI Foundry ile dağıtma.

Uyarı

Bu örnekler kimlik doğrulaması için kullanılır DefaultAzureCredential . Azure ile kimliğinizin doğrulanmış olduğundan emin olun (örneğin aracılığıyla az login). Daha fazla bilgi için Azure Identity belgelerine bakın.

Uyarı

AG-UI protokolü hala geliştirme aşamasındadır ve değiştirilebilir. Protokol geliştikçe bu örnekleri güncel tutacağız.

1. Adım: AG-UI Sunucusu Oluşturma

AG-UI sunucusu yapay zeka aracınızı barındırıyor ve FastAPI kullanarak HTTP uç noktaları aracılığıyla kullanıma sunar.

Gerekli Paketleri Yükleme

Sunucu için gerekli paketleri yükleyin:

pip install agent-framework-ag-ui --pre

Veya uv kullanarak:

uv pip install agent-framework-ag-ui --prerelease=allow

Bu, agent-framework-core, fastapi ve uvicorn'yi bağımlılık olarak otomatik yükler.

Sunucu Kodu

adlı server.pybir dosya oluşturun:

"""AG-UI server example."""

import os

from agent_framework import Agent
from agent_framework.azure import AzureOpenAIChatClient
from agent_framework_ag_ui import add_agent_framework_fastapi_endpoint
from azure.identity import AzureCliCredential
from fastapi import FastAPI

# Read required configuration
endpoint = os.environ.get("AZURE_OPENAI_ENDPOINT")
deployment_name = os.environ.get("AZURE_OPENAI_DEPLOYMENT_NAME")

if not endpoint:
    raise ValueError("AZURE_OPENAI_ENDPOINT environment variable is required")
if not deployment_name:
    raise ValueError("AZURE_OPENAI_DEPLOYMENT_NAME environment variable is required")

chat_client = AzureOpenAIChatClient(
    credential=AzureCliCredential(),
    endpoint=endpoint,
    deployment_name=deployment_name,
)

# Create the AI agent
agent = Agent(
    name="AGUIAssistant",
    instructions="You are a helpful assistant.",
    chat_client=chat_client,
)

# Create FastAPI app
app = FastAPI(title="AG-UI Server")

# Register the AG-UI endpoint
add_agent_framework_fastapi_endpoint(app, agent, "/")

if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="127.0.0.1", port=8888)

Önemli Kavramlar

  • add_agent_framework_fastapi_endpoint: otomatik istek/yanıt işleme ve SSE akışı ile AG-UI uç noktasını kaydeder
  • Agent: Gelen istekleri işleyecek Agent Framework aracısı
  • FastAPI Tümleştirmesi: Akış yanıtları için FastAPI'nin yerel zaman uyumsuz desteğini kullanır
  • Yönergeler: Aracı, istemci iletileri tarafından geçersiz kılınabilen varsayılan yönergelerle oluşturulur
  • Yapılandırma: AzureOpenAIChatClient Ortam değişkenlerinden okur veya parametreleri doğrudan kabul eder

Sunucuyu Yapılandırma ve Çalıştırma

Gerekli ortam değişkenlerini ayarlayın:

export AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com/"
export AZURE_OPENAI_DEPLOYMENT_NAME="gpt-4o-mini"

Sunucuyu çalıştırın:

python server.py

Veya doğrudan uvicorn kullanarak:

uvicorn server:app --host 127.0.0.1 --port 8888

Sunucu http://127.0.0.1:8888 üzerinde dinlemeye başlayacak.

2. Adım: AG-UI İstemcisi Oluşturma

AG-UI istemcisi uzak sunucuya bağlanır ve akış yanıtlarını görüntüler.

Gerekli Paketleri Yükleme

AG-UI paketi, AGUIChatClient öğesini içeren, zaten yüklüdür.

# Already installed with agent-framework-ag-ui
pip install agent-framework-ag-ui --pre

İstemci Kodu

adlı client.pybir dosya oluşturun:

"""AG-UI client example."""

import asyncio
import os

from agent_framework import Agent
from agent_framework_ag_ui import AGUIChatClient


async def main():
    """Main client loop."""
    # Get server URL from environment or use default
    server_url = os.environ.get("AGUI_SERVER_URL", "http://127.0.0.1:8888/")
    print(f"Connecting to AG-UI server at: {server_url}\n")

    # Create AG-UI chat client
    chat_client = AGUIChatClient(server_url=server_url)

    # Create agent with the chat client
    agent = Agent(
        name="ClientAgent",
        chat_client=chat_client,
        instructions="You are a helpful assistant.",
    )

    # Get a thread for conversation continuity
    thread = agent.create_session()

    try:
        while True:
            # Get user input
            message = input("\nUser (:q or quit to exit): ")
            if not message.strip():
                print("Request cannot be empty.")
                continue

            if message.lower() in (":q", "quit"):
                break

            # Stream the agent response
            print("\nAssistant: ", end="", flush=True)
            async for update in agent.run(message, session=thread, stream=True):
                # Print text content as it streams
                if update.text:
                    print(f"\033[96m{update.text}\033[0m", end="", flush=True)

            print("\n")

    except KeyboardInterrupt:
        print("\n\nExiting...")
    except Exception as e:
        print(f"\n\033[91mAn error occurred: {e}\033[0m")


if __name__ == "__main__":
    asyncio.run(main())

Önemli Kavramlar

  • Server-Sent Olayları (SSE): Protokol SSE biçimini (data: {json}\n\n) kullanır
  • Olay Türleri: Çeşitli olaylar meta veri ve içerik sağlar (ALT ÇİZGİLİ BÜYÜK HARF).
    • RUN_STARTED: Aracı işlemeye başladı
    • TEXT_MESSAGE_START: Aracının gönderdiği kısa mesajın başlangıcı
    • TEXT_MESSAGE_CONTENT: Aracıdan, delta alanıyla akışa alınan artımlı metin
    • TEXT_MESSAGE_END: Kısa mesaj sonu
    • RUN_FINISHED: Başarılı tamamlama
    • RUN_ERROR: Hata bilgileri
  • Alan Adlandırma: Olay alanları camelCase kullanır (örneğin, threadId, runId, messageId)
  • İş Parçacığı Yönetimi: İstekler threadId arasında konuşma bağlamını korur
  • Client-Side Yönergeleri: Sistem iletileri istemciden gönderilir

İstemciyi Yapılandırma ve Çalıştırma

İsteğe bağlı olarak özel bir sunucu URL'si ayarlayın:

export AGUI_SERVER_URL="http://127.0.0.1:8888/"

İstemciyi çalıştırın (ayrı bir terminalde):

python client.py

3. Adım: Tam Sistemi Test Etme

Hem sunucu hem de istemci çalışırken, artık sistemin tamamını test edebilirsiniz.

Beklenen Çıkış

$ python client.py
Connecting to AG-UI server at: http://127.0.0.1:8888/

User (:q or quit to exit): What is 2 + 2?

[Run Started - Thread: abc123, Run: xyz789]
2 + 2 equals 4.
[Run Finished - Thread: abc123, Run: xyz789]

User (:q or quit to exit): Tell me a fun fact about space

[Run Started - Thread: abc123, Run: def456]
Here's a fun fact: A day on Venus is longer than its year! Venus takes
about 243 Earth days to rotate once on its axis, but only about 225 Earth
days to orbit the Sun.
[Run Finished - Thread: abc123, Run: def456]

User (:q or quit to exit): :q

Renk Kodlu Çıktı

İstemci, farklı renklerde farklı içerik türleri görüntüler:

  • Sarı: Başlatılan bildirimleri çalıştırma
  • Cyan: Ajan metin yanıtları (gerçek zamanlı yayın akışı)
  • Yeşil: Tamamlama bildirimlerini çalıştırma
  • Kırmızı: Hata iletileri

Curl ile test etme (İsteğe bağlı)

İstemciyi çalıştırmadan önce curl kullanarak sunucuyu el ile test edebilirsiniz:

curl -N http://127.0.0.1:8888/ \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -d '{
    "messages": [
      {"role": "user", "content": "What is 2 + 2?"}
    ]
  }'

Server-Sent Events akışının geri döndüğünü görmeniz gerekir.

data: {"type":"RUN_STARTED","threadId":"...","runId":"..."}

data: {"type":"TEXT_MESSAGE_START","messageId":"...","role":"assistant"}

data: {"type":"TEXT_MESSAGE_CONTENT","messageId":"...","delta":"The"}

data: {"type":"TEXT_MESSAGE_CONTENT","messageId":"...","delta":" answer"}

...

data: {"type":"TEXT_MESSAGE_END","messageId":"..."}

data: {"type":"RUN_FINISHED","threadId":"...","runId":"..."}

Nasıl Çalışır?

Server-Side Süreci

  1. İstemci, iletilerle HTTP POST isteği gönderir
  2. FastAPI uç noktası isteği alır
  3. AgentFrameworkAgent sarmalayıcı yürütmeyi koordine eder
  4. Aracı, Agent Framework kullanarak iletileri işler
  5. AgentFrameworkEventBridge aracı güncelleştirmelerini AG-UI olaylara dönüştürür
  6. Yanıtlar Server-Sent Olayları (SSE) olarak geri akışa alınır
  7. Çalıştırma tamamlandığında bağlantı kapatılır

İstemci Tarafı Süreci

  1. İstemci, sunucu uç noktasına HTTP POST isteği gönderir
  2. Sunucu, SSE akışıyla yanıt verir
  3. İstemci gelen data: satırları JSON olayları olarak ayrıştırıyor
  4. Her olay türüne göre görüntülenir
  5. threadId konuşma sürekliliği için kaydedilir
  6. Olay RUN_FINISHED geldiğinde akış tamamlanır

Protokol Ayrıntıları

AG-UI protokolü aşağıdakileri kullanır:

  • İstek göndermek için HTTP POST
  • Sunucu Tarafından Gönderilen Olaylar (SSE) ile akış yanıtları
  • Olay serileştirme için JSON
  • Konuşma bağlamını korumak için iş parçacığı kimliği
  • Tek tek yürütmeleri izlemek için kimlikleri çalıştırma
  • Olay türü adlandırma: Alt çizgili BÜYÜK HARF (ör. , RUN_STARTEDTEXT_MESSAGE_CONTENT)
  • Alan adlandırma: camelCase (örn. , threadIdrunId, messageId)

Ortak Desenler

Özel Sunucu Yapılandırması

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

# Add CORS for web clients
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

add_agent_framework_fastapi_endpoint(app, agent, "/agent")

Çoklu Temsilciler

app = FastAPI()

weather_agent = Agent(name="weather", ...)
finance_agent = Agent(name="finance", ...)

add_agent_framework_fastapi_endpoint(app, weather_agent, "/weather")
add_agent_framework_fastapi_endpoint(app, finance_agent, "/finance")

Hata İşleme

try:
    async for event in client.send_message(message):
        if event.get("type") == "RUN_ERROR":
            error_msg = event.get("message", "Unknown error")
            print(f"Error: {error_msg}")
            # Handle error appropriately
except httpx.HTTPError as e:
    print(f"HTTP error: {e}")
except Exception as e:
    print(f"Unexpected error: {e}")

Sorun giderme

Bağlantı Reddedildi

İstemciyi başlatmadan önce sunucunun çalıştığından emin olun:

# Terminal 1
python server.py

# Terminal 2 (after server starts)
python client.py

Kimlik Doğrulama Hataları

Azure ile kimliğinizin doğrulanmış olduğundan emin olun:

az login

Azure OpenAI kaynağında doğru rol atamasının olduğunu doğrulayın.

Akış Çalışmıyor

İstemci zaman aşımınızın yeterli olup olmadığını denetleyin:

httpx.AsyncClient(timeout=60.0)  # 60 seconds should be enough

Uzun süre çalışan aracılar için buna göre zaman aşımını artırın.

İş Parçacığı Bağlamı Kayboldu

İstemci, iş parçacığı sürekliliğini otomatik olarak yönetir. Bağlam kaybolursa:

  1. threadId olaylarından RUN_STARTED'nin yakalanıp yakalanmadığını kontrol edin.
  2. İletiler arasında aynı istemci örneğinin kullanıldığından emin olun
  3. Sunucunun sonraki isteklerde thread_id aldığını doğrulayın.

Sonraki Adımlar

AG-UI'nin temellerini anladığınıza göre şunları yapabilirsiniz:

Ek Kaynaklar