다음을 통해 공유


에이전트 아키텍처 개요

이 문서에서는 기본 원칙, 디자인 목표 및 전략적 목표를 포함하여 에이전트 프레임워크 아키텍처의 주요 개념을 다룹니다.

목표

다음 Agent Framework 주요 우선 순위를 염두에 두고 개발되었습니다.

  • 의미 체계 커널 에이전트 프레임워크는 에이전트 기능을 구현하기 위한 핵심 기반 역할을 합니다.
  • 서로 다른 유형의 여러 에이전트는 단일 대화 내에서 공동 작업할 수 있으며, 각 에이전트는 고유한 기능을 제공하는 동시에 사용자 입력을 통합할 수 있습니다.
  • 에이전트는 동시에 여러 동시 대화에 참여하고 관리할 수 있습니다.

에이전트

추상 Agent 클래스는 모든 유형의 에이전트에 대한 핵심 추상화 역할을 하며, 보다 특수화된 에이전트를 만들기 위해 확장할 수 있는 기본 구조를 제공합니다. 이 기본 클래스는 커널의 기능을 활용하여 해당 함수를 실행하는 보다 구체적인 에이전트 구현의 기초를 형성합니다. 에이전트 유형 섹션에서 사용 가능한 모든 에이전트 유형을 참조하세요.

기본 의미 체계 커널 Agent 추상화는 여기에서 찾을 수 있습니다.

기본 의미 체계 커널 Agent 추상화는 여기에서 찾을 수 있습니다.

에이전트를 직접 호출하여 작업을 수행하거나 다른 패턴으로 오케스트레이션할 수 있습니다. 이 유연한 구조를 통해 에이전트는 다양한 대화형 또는 작업 기반 시나리오에 적응할 수 있으므로 개발자는 지능형 다중 에이전트 시스템을 빌드하기 위한 강력한 도구를 제공합니다.

의미 체계 커널의 에이전트 형식

에이전트 스레드

추상 AgentThread 클래스는 스레드 또는 대화 상태에 대한 핵심 추상화 역할을 합니다. 서로 다른 에이전트에 대해 대화 상태를 관리할 수 있는 다양한 방법을 추상화합니다.

상태 저장 에이전트 서비스는 종종 서비스에 대화 상태를 저장하며 ID를 통해 상호 작용할 수 있습니다. 다른 에이전트는 각 호출 시 전체 채팅 기록을 에이전트에 전달해야 할 수 있습니다. 이 경우 대화 상태는 애플리케이션에서 로컬로 관리됩니다.

상태 저장 에이전트는 일반적으로 일치하는 AgentThread 구현에서만 작동하지만 다른 유형의 에이전트는 둘 AgentThread 이상의 형식으로 작동할 수 있습니다. 예를 들어 AzureAIAgent 일치하는 AzureAIAgentThread항목이 필요합니다. 이는 Azure AI 에이전트 서비스가 서비스에 대화를 저장하고 스레드를 만들고 업데이트하기 위해 특정 서비스 호출이 필요하기 때문입니다. 다른 에이전트 스레드 형식을 사용하는 AzureAIAgent경우 예기치 않은 스레드 유형으로 인해 빠르게 실패하고 호출자에게 경고하는 예외가 발생합니다.

에이전트 오케스트레이션

중요합니다

에이전트 프레임워크의 에이전트 오케스트레이션 기능은 실험적 단계에 있습니다. 현재 개발 중이며 미리 보기 또는 릴리스 후보 단계로 넘어가기 전에 크게 변경될 수 있습니다.

비고

오케스트레이션 패턴을 AgentGroupChat 사용해 오셨다면, 더 이상 관리되지 않는다는 점에 유의하시기 바랍니다. 개발자는 새 GroupChatOrchestration 패턴을 사용하는 것이 좋습니다. 여기에 마이그레이션 가이드가 제공됩니다.

의미 체계 커널의 에이전트 오케스트레이션 프레임워크를 사용하면 여러 에이전트의 조정을 통해 복잡한 작업을 공동으로 해결할 수 있습니다. 에이전트가 상호 작용하고, 정보를 공유하고, 책임을 위임하는 방법을 정의하기 위한 유연한 구조를 제공합니다. 핵심 구성 요소 및 개념은 다음과 같습니다.

  • 오케스트레이션 패턴: 동시, 순차적, 핸드오프, 그룹 채팅 및 Magentic과 같은 미리 빌드된 패턴을 통해 개발자는 시나리오에 가장 적합한 공동 작업 모델을 선택할 수 있습니다. 각 패턴은 에이전트가 작업을 통신하고 처리하는 다른 방법을 정의합니다(자세한 내용은 오케스트레이션 패턴 테이블 참조).
  • 데이터 변환 논리: 입력 및 출력 변환을 사용하면 오케스트레이션 흐름이 에이전트와 외부 시스템 간에 데이터를 조정하여 단순 데이터 형식과 복잡한 데이터 형식을 모두 지원할 수 있습니다.
  • 휴먼 인 더 루프: 일부 패턴은 휴먼 인 더 루프를 지원하여 사용자 에이전트가 오케스트레이션 프로세스에 참여할 수 있도록 합니다. 이는 인간의 판단이나 전문 지식이 필요한 시나리오에 특히 유용합니다.

이 아키텍처를 통해 개발자는 협업, 전문화 및 동적 조정을 통해 실제 문제를 해결할 수 있는 지능형 다중 에이전트 시스템을 빌드할 수 있습니다.

의미 커널 기능을 통한 에이전트 정렬

Agent Framework는 많은 개발자가 의미 커널 에코시스템에서 알게 된 기본 개념과 기능을 기반으로 구축되었습니다. 이러한 핵심 원칙은 에이전트 프레임워크 디자인의 구성 요소 역할을 합니다. 에이전트 프레임워크는 의미 체계 커널의 친숙한 구조와 기능을 활용하여 더 광범위한 의미 체계 커널 아키텍처와의 일관성을 유지하면서 고급 자율 에이전트 동작을 사용하도록 기능을 확장합니다. 이렇게 하면 개발자가 기존 지식을 적용하여 프레임워크 내에서 지능적이고 적응 가능한 에이전트를 만들 수 있도록 원활하게 전환할 수 있습니다.

플러그 인 및 함수 호출

플러그 인 은 개발자가 사용자 지정 기능을 통합하고 AI 애플리케이션의 기능을 확장할 수 있도록 하는 의미 체계 커널의 기본 측면입니다. 이러한 플러그 인은 전문화된 기능 또는 비즈니스별 논리를 핵심 AI 워크플로에 통합하는 유연한 방법을 제공합니다. 또한 플러그 인을 활용하고 함수 호출활용하여 프레임워크 내의 에이전트 기능을 크게 향상시킬 수 있습니다. 이를 통해 에이전트는 외부 서비스와 동적으로 상호 작용하거나 복잡한 작업을 실행하여 다양한 애플리케이션 내에서 AI 시스템의 범위와 다양성을 더욱 확장할 수 있습니다.

여기에서 플러그 인을 사용하도록 에이전트를 구성하는 방법을 알아봅니 .

에이전트 메시지

입력 및 응답을 포함한 에이전트 메시징은 의미 체계 커널의 핵심 콘텐츠 형식을 기반으로 구축되어 통신을 위한 통합 구조를 제공합니다. 이 디자인 선택은 기존 채팅 완성 패턴에서 애플리케이션 개발에서 고급 에이전트 기반 패턴으로 전환하는 프로세스를 간소화합니다. 개발자는 친숙한 의미 체계 커널 콘텐츠 형식을 활용하여 기존 시스템을 정비할 필요 없이 에이전트 기능을 애플리케이션에 원활하게 통합할 수 있습니다. 이 간소화를 통해 기본 대화형 AI에서 보다 자율적인 작업 지향 에이전트로 발전함에 따라 기본 프레임워크가 일관성을 유지하여 개발을 더 빠르고 효율적으로 만들 수 있습니다.

템플릿

에이전트의 역할은 주로 수신하는 지침에 따라 형성되며, 이는 해당 동작과 동작을 지시합니다. 프롬프트를 호출하는 Kernel것과 마찬가지로 에이전트의 지침에는 실행 중에 동적으로 대체되는 템플릿 매개 변수(값과 함수 모두)가 포함될 수 있습니다. 이를 통해 유연하고 컨텍스트 인식 응답이 가능하므로 에이전트가 실시간 입력에 따라 출력을 조정할 수 있습니다.

또한 프롬프트 템플릿 구성을 사용하여 에이전트를 직접 구성하여 개발자에게 동작을 정의할 수 있는 구조화되고 재사용 가능한 방법을 제공할 수 있습니다. 이 방법은 에이전트 지침을 표준화하고 사용자 지정하는 강력한 도구를 제공하여 동적 적응성을 유지하면서 다양한 사용 사례 간에 일관성을 유지합니다.

여기서 의미 체계 커널 템플릿을 사용하여 에이전트를 만드는 방법에 대해 자세히 알아봅니 .

선언적 사양

선언적 사양 사용에 대한 설명서는 곧 제공될 예정입니다.

중요합니다

이 기능은 실험 단계에 있습니다. 이 단계의 기능은 개발 중이며 미리 보기 또는 릴리스 후보 단계로 넘어가기 전에 변경될 수 있습니다.

사용자 지정 에이전트 형식 등록

선언적 YAML 사양 시스템에서 사용자 지정 에이전트를 사용하려면 먼저 에이전트 클래스를 에이전트 레지스트리에 등록해야 합니다. AgentRegistry가 YAML 사양에서 type: 필드를 구문 분석할 때 에이전트를 인식하고 생성할 수 있도록 이 작업이 필요합니다.

사용자 지정 에이전트 유형을 등록하려면 데코레이터를 @register_agent_type 사용합니다.

from semantic_kernel.agents import register_agent_type, Agent, DeclarativeSpecMixin

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

데코레이터에 제공된 문자열(예 "custom_agent": YAML 사양의 필드) 형식과 일치해야 합니다.

등록되면 선언적 패턴을 사용하여 사용자 지정 에이전트를 인스턴스화할 수 있습니다(예: 을 통해 AgentRegistry.create_from_yaml(...)).

DeclarativeSpecMixin는 에이전트를 YAML 또는 사전 사양에서 생성할 수 있도록 하는 메서드(from_yaml, from_dict, resolve_placeholders와 같은)에 대한 지원을 추가합니다.

@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

팁 (조언)

모든 사용자 지정 에이전트는 YAML 기반 구성을 가능하게 하기 위해 DeclarativeSpecMixin로부터 상속해야 하며, @register_agent_type을 사용하여 레지스트리에 등록되어야 합니다.

이 기능을 사용할 수 없습니다.

다음 단계