Udostępnij przez


Omówienie architektury agenta

W tym artykule opisano kluczowe pojęcia dotyczące architektury struktury agentów, w tym podstawowych zasad, celów projektowania i celów strategicznych.

Cele

Agent Framework został opracowany z uwzględnieniem następujących kluczowych priorytetów:

  • Struktura agenta jądra semantycznego służy jako podstawowa podstawa implementacji funkcji agenta.
  • Wielu agentów różnych typów może współpracować w ramach jednej konwersacji, z których każdy przyczynia się do swoich unikatowych możliwości, jednocześnie integrując ludzkie dane wejściowe.
  • Agent może jednocześnie angażować się w wiele współbieżnych konwersacji i zarządzać nimi.

Przedstawiciel

Abstrakcyjna klasa Agent służy jako podstawowa abstrakcja dla wszystkich typów agentów, zapewniając podstawową strukturę, którą można rozszerzyć w celu utworzenia bardziej wyspecjalizowanych agentów. Ta klasa bazowa stanowi podstawę bardziej szczegółowych implementacji agentów, z których wszystkie wykorzystują możliwości jądra do wykonywania odpowiednich funkcji. Zobacz wszystkie dostępne typy agentów w sekcji Typy agentów .

Podstawowa abstrakcja jądra Agent semantycznego można znaleźć tutaj.

Podstawowa abstrakcja jądra Agent semantycznego można znaleźć tutaj.

Agenci mogą być bezpośrednio uruchamiani w celu wykonywania zadań lub koordynowani według różnych wzorców. Ta elastyczna struktura umożliwia agentom dostosowanie się do różnych scenariuszy konwersacyjnych lub opartych na zadaniach, zapewniając deweloperom niezawodne narzędzia do tworzenia inteligentnych, wieloagentowych systemów.

Typy agentów w jądrze semantycznym

Wątek agenta

Abstrakcyjna klasa AgentThread służy jako podstawowa abstrakcja wątków lub stanu konwersacji. Wyodrębnia różne sposoby zarządzania stanem konwersacji dla różnych agentów.

Usługi agentów stanowych często przechowują stan konwersacji w usłudze i można z nią korzystać za pośrednictwem identyfikatora. Inni agenci mogą wymagać przekazania całej historii czatu do agenta przy każdym wywołaniu. W tym przypadku stan konwersacji jest zarządzany lokalnie w aplikacji.

Agenci stanowiący zazwyczaj pracują tylko z odpowiednią implementacją AgentThread, podczas gdy inne typy agentów mogą współpracować z więcej niż jednym typem AgentThread. Na przykład AzureAIAgent wymaga pasującego AzureAIAgentThread. Dzieje się tak, ponieważ usługa Azure AI Agent przechowuje konwersacje w usłudze i wymaga określonych wywołań usługi w celu utworzenia wątku i zaktualizowania go. Jeśli inny typ wątku agenta jest używany z AzureAIAgent, szybko przerywamy działanie z powodu nieoczekiwanego typu wątku i zgłaszamy wyjątek, aby zaalarmować wywołującego.

Orkiestracja agentów

Ważne

Funkcje orkiestracji agenta w ramach struktury agenta znajdują się w fazie eksperymentalnej. Są one aktywnie opracowywane i mogą ulec znacznej zmianie przed przejściem do etapu wersji zapoznawczej lub wersji kandydującej do wydania.

Uwaga / Notatka

Jeśli używasz AgentGroupChat wzorca aranżacji, pamiętaj, że nie jest już utrzymywany. Zalecamy deweloperom korzystanie z nowego GroupChatOrchestration wzorca. Przewodnik po migracji znajduje się tutaj.

Struktura Orkiestracja agentów w jądrze semantycznym umożliwia koordynację wielu agentów w celu wspólnego rozwiązywania złożonych zadań. Zapewnia elastyczną strukturę do definiowania sposobu interakcji agentów, udostępniania informacji i delegowania obowiązków. Podstawowe składniki i pojęcia obejmują:

  • Wzorce aranżacji: Wstępnie utworzone wzorce, takie jak Concurrent, Sequential, Handoff, Group Chat i Magentic, umożliwiają deweloperom wybór najbardziej odpowiedniego modelu współpracy dla swojego scenariusza. Każdy wzorzec definiuje inny sposób, aby agenci komunikowali się i przetwarzali zadania (zobacz tabelę Wzorce orkiestracji , aby uzyskać szczegółowe informacje).
  • Logika przekształcania danych: Przekształcenia danych wejściowych i wyjściowych umożliwiają przepływom orkiestracji dostosowanie danych między agentami i systemami zewnętrznymi, obsługującymi zarówno proste, jak i złożone typy danych.
  • Człowiek w pętli: Niektóre wzorce wspierają człowieka w pętli, umożliwiając udział agentów ludzkich w procesie orkiestracji. Jest to szczególnie przydatne w scenariuszach, w których wymagany jest osąd człowieka lub wiedza fachowa.

Ta architektura umożliwia deweloperom tworzenie inteligentnych, wieloagentowych systemów, które mogą rozwiązywać rzeczywiste problemy dzięki współpracy, specjalizacji i dynamicznej koordynacji.

Dopasowanie agenta do cech jądra semantycznego

Agent Framework jest zbudowany na podstawowych koncepcjach i funkcjach, które wielu programistów zna w ekosystemie Semantic Kernel. Te podstawowe zasady służą jako bloki konstrukcyjne projektu struktury agentów. Korzystając ze znanej struktury i możliwości jądra semantycznego, struktura agentów rozszerza funkcjonalność, aby umożliwić bardziej zaawansowane, autonomiczne zachowanie agentów przy zachowaniu spójności z szerszą architekturą jądra semantycznego. Zapewnia to bezproblemowe przejście dla deweloperów, co pozwala im zastosować swoją istniejącą wiedzę w celu tworzenia inteligentnych, dostosowywanych agentów w ramach platformy.

Wtyczki i wywoływanie funkcji

Wtyczki są podstawowym aspektem jądra semantycznego, co umożliwia deweloperom integrowanie niestandardowych funkcji i rozszerzanie możliwości aplikacji sztucznej inteligencji. Te wtyczki oferują elastyczny sposób dołączania wyspecjalizowanych funkcji lub logiki specyficznej dla firmy do podstawowych przepływów pracy sztucznej inteligencji. Ponadto możliwości agenta w ramach struktury można znacznie zwiększyć, korzystając z wtyczek i wykorzystując wywoływanie funkcji. Dzięki temu agenci mogą dynamicznie korzystać z usług zewnętrznych lub wykonywać złożone zadania, rozszerzając zakres i wszechstronność systemu sztucznej inteligencji w różnych aplikacjach.

Dowiedz się, jak skonfigurować agentów do korzystania z wtyczek tutaj.

Komunikaty agenta

Obsługa komunikatów agentów, w tym danych wejściowych i odpowiedzi, jest oparta na podstawowych typach zawartości jądra semantycznego, zapewniając ujednoliconą strukturę komunikacji. Ten wybór projektu upraszcza proces przechodzenia z tradycyjnych wzorców uzupełniania czatów do bardziej zaawansowanych wzorców opartych na agentach w procesie tworzenia aplikacji. Dzięki wykorzystaniu znanych typów zawartości jądra semantycznego deweloperzy mogą bezproblemowo integrować możliwości agentów z aplikacjami bez konieczności przeglądu istniejących systemów. Dzięki temu usprawnianie zapewnia, że w miarę rozwoju od podstawowej konwersacyjnej sztucznej inteligencji po bardziej autonomicznych, zorientowanych na zadania agentów podstawowa struktura pozostaje spójna, dzięki czemu programowanie będzie szybsze i bardziej wydajne.

Wskazówka

Dokumentacja interfejsu API:

Tworzenie szablonów

Rola agenta jest przede wszystkim kształtowana przez odbierane instrukcje, które dyktują jego zachowanie i działania. Podobnie jak wywołanie monitu Kernel, instrukcje agenta mogą zawierać parametry szablonu — zarówno wartości, jak i funkcje — które są dynamicznie zastępowane podczas wykonywania. Umożliwia to elastyczne odpowiedzi z obsługą kontekstu, dzięki czemu agent może dostosować swoje dane wyjściowe na podstawie danych wejściowych w czasie rzeczywistym.

Ponadto agent można skonfigurować bezpośrednio przy użyciu konfiguracji szablonu monitu, zapewniając deweloperom ustrukturyzowany i wielokrotnego użytku sposób definiowania jego zachowania. To podejście oferuje zaawansowane narzędzie do standaryzacji i dostosowywania instrukcji agenta, zapewniając spójność w różnych przypadkach użycia przy jednoczesnym zachowaniu dynamicznej adaptacji.

Dowiedz się więcej o sposobie tworzenia agenta za pomocą szablonu semantycznego jądra tutaj.

Specyfikacja deklaratywna

Dokumentacja dotycząca korzystania ze specyfikacji deklaratywnych jest dostępna wkrótce.

Ważne

Ta funkcja znajduje się na etapie eksperymentalnym. Funkcje na tym etapie są opracowywane i mogą ulec zmianie przed przejściem do etapu wersji zapoznawczej lub etapu kandydata do wydania.

Rejestrowanie niestandardowych typów agentów

Aby użyć agenta niestandardowego z deklaratywnym systemem specyfikacji YAML, należy najpierw zarejestrować klasę agenta w rejestrze agentów. Jest to wymagane, aby AgentRegistry mógł rozpoznać i skonstruować agenta podczas analizowania pola type: w specyfikacji YAML.

Aby zarejestrować typ agenta niestandardowego, użyj dekoratora @register_agent_type :

from semantic_kernel.agents import register_agent_type, Agent, DeclarativeSpecMixin

@register_agent_type("custom_agent")
class CustomAgent(DeclarativeSpecMixin, Agent):
    ...

Ciąg przekazany do dekoratora (na przykład "custom_agent") musi być zgodny z typem: pole w specyfikacji YAML.

Po zarejestrowaniu, swojego agenta niestandardowego można zainicjować przy użyciu wzorca deklaratywnego, na przykład za pomocą AgentRegistry.create_from_yaml(...).

Obsługę metod, takich jak from_yaml, from_dict, i resolve_placeholders, dodano w DeclarativeSpecMixin, co umożliwia konstruowanie agenta z wykorzystaniem specyfikacji w formacie YAML lub słownika.

@classmethod
async def from_yaml(cls, yaml_str: str, *, kernel=None, plugins=None, prompt_template_config=None, settings=None, extras=None, **kwargs):
    # Resolves placeholders and loads YAML, then delegates to from_dict.
    ...

@classmethod
async def from_dict(cls, data: dict, *, kernel=None, plugins=None, prompt_template_config=None, settings=None, **kwargs):
    # Normalizes and passes spec fields to _from_dict.
    ...

@classmethod
@abstractmethod
async def _from_dict(cls, data: dict, *, kernel, prompt_template_config=None, **kwargs):
    # Subclasses implement this to create the agent from a dict.
    ...

@classmethod
def resolve_placeholders(cls, yaml_str: str, settings=None, extras=None) -> str:
    # Optional: override this to customize how environment or runtime placeholders are resolved in YAML.
    return yaml_str

Wskazówka

Każdy agent niestandardowy musi dziedziczyć z DeclarativeSpecMixin, aby umożliwić konstruowanie oparte na języku YAML i musi być zarejestrowany w rejestrze z użyciem @register_agent_type.

Ta funkcja jest niedostępna.

Dalsze kroki