AI 에이전트 아키텍처
AI 에이전트 시스템의 중심에는 Agent가 있으며, 이는 도구(Tools) 세트와 LLM(대규모 언어 모델)을 통해 환경 정보를 얻고, 추론하며, 결정을 내립니다. 모든 에이전트의 활동은 세션(Session)에 수집되며, 개별 작업은 스팬(Span)으로 저장됩니다. 내부 추론 메커니즘으로는 ReAct 패턴을 사용합니다.
ReAct 패턴
ReAct는 LLM 기반 AI 에이전트 초기에 도입된 강력한 접근 방식으로, 추론과 행동을 매끄럽게 연결합니다. 에이전트가 동적으로 사고(Thought)를 생성하고, 작업별 행동(Action)을 취하며, 외부 정보(Observation)를 활용하여 계획을 수정하고 예상치 못한 시나리오에 대처할 수 있게 합니다.
핵심 컴포넌트
- Agent 클래스: 프레임워크의 진입점으로, LLM과 도구 모음을 통합하고 세션 관리를 담당합니다. 무한 루프 방지를 위해 최대 반복 횟수를 설정합니다.
- Session 클래스: 단일 상호작용 주기를 나타내며, 작업 수신부터 최종 결과 도출까지의 모든 단계를 기록합니다. 스팬(
Span) 배열과 메시지(messages) 기록을 통해 컨텍스트 유지 및 디버깅을 돕습니다. - Span 클래스: 세션 내에서 에이전트가 수행하는 가장 작은 작업 단위입니다.
INPUT,LLM_CALL,TOOL_EXECUTION,MEMORY_ACCESS,ANSWER와 같은 유형을 가지며, 각 작업의 시작/종료 시간, 인자, 출력을 기록하여 상세한 분석을 가능하게 합니다. - Tool 및 Toolchain 클래스:
Tool은 에이전트가 핵심 로직 외의 전문화된 작업을 수행할 수 있도록 하는 외부 기능이며,Toolchain은 이 도구들의 컬렉션을 관리합니다. 이를 통해 유연성과 모듈성을 확보합니다. - Engine 클래스: 에이전트의 두뇌 역할을 하며, 추론, 행동, 관찰 간의 복잡한 상호작용을 조율합니다. 기본
Regent::Engine::React구현은 ReAct 패턴을 따르며,reason메서드를 통해 사용자 작업 처리 루프를 구동합니다.
시스템 프롬프트
ReAct 엔진은 LLM이 특정 방식으로 동작하도록 유도하는 시스템 프롬프트 템플릿을 사용합니다. 이는 LLM에 명확한 지침과 사용자, LLM, 도구 간의 상호작용 예시를 제공하여 일관된 응답을 보장합니다.
실제 구현 예시
PriceTool을 사용하여 CoinGecko API에서 암호화폐 가격을 조회하는 간단한 에이전트 구축 과정을 시연합니다. 비트코인, 이더리움, 대시 가격 조회 및 가장 비싼 코인 식별, 그리고 에이전트가 처리할 수 없는 날씨 질문에 대한 반응을 보여줍니다.