Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft Agent Framework'teki aracılar, istekleri işlemek için katmanlı bir işlem hattı mimarisi kullanır. Bu mimariyi anlamak, uygun katmana ara yazılım, bağlam sağlayıcıları veya istemci düzeyinde değişiklikler ekleyerek aracı davranışını özelleştirmenize yardımcı olur.
ChatClientAgent İşlem Hattı
ChatClientAgent üç ana katmandan oluşan bir işlem hattı oluşturur.
-
Aracı orta katman yazılımı - Günlüğe kaydetme, doğrulama veya dönüştürme amacıyla
.Use()aracılığı ile aracıyı saran isteğe bağlı süsleyiciler. -
Bağlam katmanı - Sohbet geçmişini (
ChatHistoryProvider) yönetir ve ek bağlam ekler (AIContextProviders) -
Sohbet istemci katmanı - LLM iletişimini
IChatClientişleyen isteğe bağlı ara yazılım dekoratörleri ile
çağrısı RunAsync()yaptığınızda isteğiniz her katmanda sırayla akar.
Ajan Pipeline
Agent sınıfı, sınıf kompozisyonu ile iki ana bileşen aracılığıyla bir işlem hattı oluşturur.
Aracı (dış bileşen):
-
Aracı Yazılım + Telemetri -
AgentMiddlewareLayerveAgentTelemetryLayersınıfları, aracı yazılım çağrısını ve OpenTelemetry araç kullanımını işler - RawAgent - Bağlam sağlayıcılarını çağıran temel aracı mantığı
-
Bağlam Sağlayıcıları - Birleşik
context_providersliste geçmişi ve ek bağlamı yönetir
ChatClient (ayrı ve değiştirilebilir bileşen):
- FunctionInvocation - Araç çağrısı döngüsünü işler ve her araç çağrısı için İşlev Ara Yazılımı + Telemetri çağrısını çağırır
- Sohbet Ara Yazılımı + Telemetri - Model çağrısı başına çalışan isteğe bağlı ara yazılım zinciri ve izleme katmanları
- RawChatClient - LLM ile iletişim kuran sağlayıcıya özgü uygulama (Azure OpenAI, OpenAI, Antropik vb.)
run() çağrısını yaptığınızda, isteğiniz Aracı katmanları üzerinden geçerek LLM iletişimi için ChatClient işlem hattına akar.
Aracı ara yazılım katmanı
Aracı ara yazılımı, aracının çalıştırma yöntemine yapılan her çağrıyı keserek girişleri ve çıkışları incelemenize veya değiştirmenize olanak sağlar.
Aracı oluşturucu desenini kullanarak ara yazılım ekleyin:
var middlewareAgent = originalAgent
.AsBuilder()
.Use(runFunc: MyAgentMiddleware, runStreamingFunc: MyStreamingMiddleware)
.Build();
Ayrıca, isteğe ek iletiler eklemek için aracı ara yazılımı olarak da kullanabilirsiniz MessageAIContextProvider . Bu, yalnızca ChatClientAgent ile değil, herhangi bir aracı türüyle çalışır.
var contextAgent = originalAgent
.AsBuilder()
.UseAIContextProviders(new MyMessageContextProvider())
.Build();
Bu katman, bağlam çözümlemesi ve sohbet istemci çağrıları dahil olmak üzere, aracın bütün yürütülmesini kapsar.
Bunun avantajları vardır, çünkü bu dekoratörler yalnızca A2AAgent ile değil, herhangi bir aracı türüyle kullanılabilir, örneğin GitHubCopilotAgent veya ChatClientAgent.
Bu aynı zamanda bu düzeydeki dekoratörlerin, süslediği ajan hakkında varsayımlarda bulunamayacağı anlamına gelir; bu da, sadece ortak işlevleri özelleştirme veya etkilemeyle sınırlı olduğu anlamına gelir.
Aracıyı oluştururken ara yazılım ekleyin:
from agent_framework import Agent
agent = Agent(
client=my_client,
instructions="You are helpful.",
middleware=[my_middleware_func],
)
Agent sınıfı, çekirdek ajan mantığına delegasyondan önce ara yazılım çağrılarını yönetmek için AgentMiddlewareLayer öğesinden devralır.
Ayrıca, aralıkları, olayları ve ölçümleri yapılandırılmış bir OpenTelemetry arka ucuna yaymayı işleyen AgentTelemetryLayer 'den devralır.
Bu katmanların her ikisi de yapılandırılmadığında hiçbir şey yapmaz.
Ayrıntılı ara yazılım ve gözlemlenebilirlik desenleri için bkz. Aracı Ara Yazılımı ve Gözlemlenebilirlik.
Bağlam katmanı
Bağlam katmanı, tüm ileti geçmişini oluşturmak ve ek bağlam eklemek için her LLM çağrısından önce çalışır.
ChatClientAgent iki ayrı sağlayıcı türü vardır:
-
ChatHistoryProvider(tek) - Konuşma geçmişini depolama ve geri alma işlemlerini yönetir -
AIContextProviders(liste) - Bellekler, alınan belgeler veya dinamik yönergeler gibi ek bağlam ekler
var agent = new ChatClientAgent(chatClient, new ChatClientAgentOptions
{
ChatHistoryProvider = new InMemoryChatHistoryProvider(),
AIContextProviders = [new MyMemoryProvider(), new MyRagProvider()],
});
Aracı, her sağlayıcının çıkışını InvokingAsync() bir sonraki sağlayıcıya giriş olarak geçirerek sohbet istemcisine ileti göndermeden önce her sağlayıcının yöntemini çağırır.
sınıfı, Agent hem geçmiş sağlayıcılarını hem de bağlam sağlayıcılarını içerebilen birleşik context_providers bir liste kullanır:
from agent_framework import Agent, InMemoryHistoryProvider
agent = Agent(
client=my_client,
context_providers=[
InMemoryHistoryProvider(),
MyMemoryProvider(),
MyRagProvider(),
],
)
Ayrıntılı bağlam sağlayıcısı desenleri için bkz. Bağlam Sağlayıcıları.
Sohbet istemci katmanı
Sohbet istemci katmanı, LLM hizmetiyle gerçek iletişimi işler.
ChatClientAgent ek ara yazılımla süslenebilen bir IChatClient örnek kullanır:
var chatClient = new AzureOpenAIClient(endpoint, credential)
.GetChatClient(deploymentName)
.AsIChatClient()
.AsBuilder()
.Use(CustomChatClientMiddleware)
.Build();
var agent = new ChatClientAgent(chatClient, instructions: "You are helpful.");
İletileri, araçları ve yönergeleri istemci düzeyinde zenginleştirmek için sohbet istemcisi ara yazılımı olarak da kullanabilirsiniz AIContextProvider . Bu, çalışan AIAgentbir bağlamında kullanılmalıdır:
var chatClient = new AzureOpenAIClient(endpoint, credential)
.GetChatClient(deploymentName)
.AsIChatClient()
.AsBuilder()
.UseAIContextProviders(new MyContextProvider())
.Build();
var agent = new ChatClientAgent(chatClient, instructions: "You are helpful.");
Varsayılan olarak, ChatClientAgent sağlanan sohbet istemcisini işlev çağırma desteğiyle sarmalar. Bu varsayılan kaydırmayı atlamak için UseProvidedChatClientAsIs = true'i seçeneklerde ayarlayın.
Agent sınıfı, SupportsChatGetResponse uygulayan herhangi bir istemciyi kabul eder. ChatClient işlem hattı ara yazılımı, telemetriyi, işlev çağırmayı ve sağlayıcıya özgü iletişimi işler:
from agent_framework import Agent
from agent_framework.azure import AzureOpenAIResponsesClient
client = AzureOpenAIResponsesClient(
credential=credential,
project_endpoint=endpoint,
deployment_name=model,
)
agent = Agent(client=client, instructions="You are helpful.")
ChatClient RawChatClient içinde, farklı LLM hizmetleriyle iletişim kurmak için sağlayıcıya özgü mantığı uygular.
Yürütme akışı
Bir aracı çağırdığınızda, istek işlem hattı üzerinden akar:
- Aracı yazılım yürütür (yapılandırıldıysa)
- ChatHistoryProvider , konuşma geçmişini istek iletisi listesine yükler
- AIContextProviders isteğe ileti, araç veya yönergeler ekler
- IChatClient ara yazılımı yürütülür (dekore edilmişse)
- IChatClient , isteği LLM'ye gönderir
- Yanıt aynı katmanlardan geri akar
- ChatHistoryProvider ve AIContextProvider'a yeni iletiler bildirilir
Aracı işlem hattı:
- Aracı Ara Katman + Telemetri middleware'i çalıştırır (eğer yapılandırılmışsa) ve aralıkları kaydeder
- RawAgent , geçmiş yüklemek ve bağlam eklemek için bağlam sağlayıcılarını çağırır
- İstek ChatClient'a geçirildi
ChatClient işlem hattı:
-
FunctionInvocation araç çağırma döngüsünü yönetir
- Her araç çağrısı için İşlev Ara Yazılımı + Telemetri yürütülür
- Sohbet Ara Katman Yazılımı + Telemetri, model çağrısı başına yürütülür (konfigüre edildiğinde)
- RawChatClient sağlayıcıya özgü LLM iletişimlerini işler
- Yanıt aynı katmanlardan geri akar
- Bağlam sağlayıcılarına depolama için yeni iletiler bildirilir
Uyarı
Özelleştirilmiş aracılar burada açıklanan işlem hattından farklı çalışabilir.
Diğer ajan türleri
Tüm aracılar tam ChatClientAgent işlem hattını kullanmaz.
A2AAgent, GitHubCopilotAgent veya CopilotStudioAgent gibi aracılar, yerel bir IChatClient kullanmak yerine uzak hizmetlerle iletişim kurar. Ancak, aracı düzeyinde ara yazılımları desteklemeye devam ederler.
Bu ajanlar AIAgent'dan türetildiğinden, aynı aracı yazılım desenlerini kullanabilirsiniz.
// Agent middleware works with any AIAgent
var a2aAgent = originalA2AAgent
.AsBuilder()
.Use(runFunc: LoggingMiddleware)
.UseAIContextProviders(new MyMessageContextProvider())
.Build();
// Same pattern works for GitHubCopilotAgent
var copilotAgent = originalCopilotAgent
.AsBuilder()
.Use(runFunc: AuditMiddleware)
.Build();
Uyarı
kullanmadıkları için bu aracılara sohbet istemcisi ara yazılımı ekleyemezsiniz IChatClient.
Sonraki Adımlar
İlgili içerik
- Middleware - Aracılarınıza genel işleve sahip davranışlar ekleme
- Bağlam Sağlayıcıları - Geçmiş ve bağlam ekleme için ayrıntılı desenler
- Aracı Çalıştırma - Aracıları Çalıştırma