에이전트 가이드 문서 소개
인간은 복잡하고 비정형적인 패턴을 인식하는 데 뛰어난 능력을 가지고 있습니다. 하지만, 우리는 종종 도구에 의존하여 지식을 보완하거나 결론에 도달하곤 합니다. 예를 들어, 책, Google 검색, 계산기 등을 사용하여 필요한 정보를 찾거나 계산을 수행합니다. 이러한 인간의 접근 방식은 생성형 인공지능(GenAI; Generative AI) 모델이 작동하는 원리를 설명하는 데 좋은 비유가 됩니다.
이 문서에서는 에이전트의 다양한 구성 요소와 작동 원리에 대해 자세히 탐구합니다. 이를 통해 에이전트는 어떻게 설계되고 작동하는지, 핵심 구성 요소가 무엇인지, 어떻게 실질적인 비즈니스 문제를 해결할 수 있는지 등을 알아보겠습니다.
아래는 일부 내용만 발췌하여 정리한 것으로, 전체 내용은 원문을 참고해주세요.
에이전트란 무엇인가요?
에이전트(Agent)는 특정 목표를 달성하기 위해 주어진 환경에서 관찰하고 행동하는 자율적 소프트웨어 시스템을 의미합니다. 이 개념은 전통적인 언어 모델(Language Model, LLM)의 한계를 넘어서기 위해 발전했습니다. 에이전트는 단순히 주어진 질문에 답하거나 데이터를 처리하는 것을 넘어서, 외부 세계와 상호작용하고 다양한 도구를 활용하여 복잡한 작업을 수행할 수 있는 기능을 갖추고 있습니다. 이러한 에이전트는 API 호출, 데이터 검색, 계산 수행 등 여러 작업을 실행하며, 종종 사용자의 명시적인 세부 지침 없이도 스스로 계획을 세우고 목표를 달성할 수 있습니다.
에이전트는 **"인지 아키텍처(Cognitive Architecture)"**라는 개념을 중심으로 설계됩니다. 이 아키텍처는 에이전트의 행동, 의사결정, 작업 실행 과정을 구조화하는 방식으로, 인간이 환경과 상호작용하며 문제를 해결하는 방식을 모방합니다. 특히, LLM 기반의 에이전트는 문제 해결 및 계획 수립 과정에서 체인 오브 쏘트(Chain-of-Thought, CoT), 리액트(ReAct) 등의 고급 프레임워크를 활용하여 논리적이고 체계적인 결정을 내립니다.
에이전트의 주요 구성요소 개요
위 그림에서 볼 수 있듯이, 모델(model) / 도구(tools) / 에이전트 설정(agent configuration)이 함께 동작하여 사용자의 질의를 기반으로 근거에 기반한 답변을 제공합니다. 모델은 사전 지식을 바탕으로 답을 추측하는 대신, 실시간 외부 정보를 검색하는 도구(flights)를 사용하였습니다. 이를 통해 실제 사실에 기반한 데이터를 바탕으로 정확한 결정을 내리고, 이를 요약하여 사용자에게 다시 정보를 제공합니다.
에이전트의 주요 구성요소: 모델 (Model)
모델은 에이전트의 중심적인 구성 요소로서, 에이전트의 의사결정과 행동 계획에 핵심적인 역할을 합니다. 에이전트의 맥락에서 모델이란 주로 **대형 언어 모델(Large Language Model, LLM)**을 지칭합니다. LLM은 자연어 처리(Natural Language Processing, NLP) 작업을 수행하기 위해 설계되었으며, 대규모 데이터를 학습하여 텍스트 이해와 생성 능력을 갖추고 있습니다.
에이전트는 특정 작업을 수행하기 위해 일반적인 언어 모델을 활용하거나, 필요에 따라 특정 도메인에 맞게 튜닝된 모델을 사용할 수 있습니다. 모델의 종류는 다음과 같습니다:
- 범용 모델(General Purpose Model): 다양한 작업을 수행할 수 있는 다목적 언어 모델.
- 다중모달 모델(Multimodal Model): 텍스트뿐만 아니라 이미지, 음성 등 다양한 데이터를 이해할 수 있는 모델.
- 미세 조정 모델(Fine-Tuned Model): 특정 작업에 최적화된 데이터로 추가 학습된 모델.
에이전트가 효과적으로 작동하려면 모델이 논리적 추론 및 계획을 가능하게 하는 프레임워크를 지원해야 합니다. 예를 들어, **체인 오브 쏘트(Chain of Thought, CoT)**는 복잡한 문제를 해결하기 위해 중간 단계 추론을 수행하며, **리액트(ReAct)**는 추론과 행동을 결합하여 에이전트가 더 정교한 결정을 내릴 수 있도록 합니다.
하지만, 모델 자체는 에이전트 전체 시스템의 일부일 뿐이며, 주어진 데이터를 바탕으로만 작업을 수행하므로 외부 데이터를 실시간으로 활용하거나 행동을 실행하려면 추가적인 구성 요소가 필요합니다. 이를 해결하기 위해 에이전트는 도구(Tools) 및 오케스트레이션 계층과 결합됩니다.
에이전트의 주요 구성요소: 도구 (Tools)
도구의 정의 및 역할
도구는 에이전트가 외부 세계와 상호작용하고 데이터를 처리할 수 있도록 하는 구성 요소입니다. LLM은 기본적으로 훈련된 데이터에 기반한 작업만 수행할 수 있기 때문에 실시간 정보 접근이나 구체적인 작업 실행이 불가능합니다. 이를 해결하기 위해 에이전트는 다양한 도구를 활용하여 다음과 같은 작업을 수행합니다:
- API 호출
- 데이터베이스 접근
- 코드 실행
- 데이터 변환
도구는 에이전트와 외부 시스템 간의 연결을 제공하며, 이를 통해 에이전트는 더욱 다양하고 복잡한 작업을 처리할 수 있습니다.
도구 유형
에이전트가 활용할 수 있는 주요 도구 유형은 다음과 같습니다:
- 확장(Extensions)
확장은 에이전트가 API를 쉽게 호출하고 실행할 수 있도록 표준화된 인터페이스를 제공합니다.
- 예시: 항공편 예약 에이전트가 Google Flights API를 호출하여 사용 가능한 항공편 정보를 검색.
- 확장은 에이전트가 각 API의 매개변수 및 동작 방식을 이해하도록 설계되며, 이를 통해 에이전트는 사용자의 요청에 따라 적절한 API를 선택하고 호출할 수 있습니다.
- 함수(Functions)
함수는 클라이언트 측에서 실행되는 독립적인 코드 조각으로, 에이전트는 적절한 함수와 매개변수를 선택하여 데이터를 생성하거나 작업을 실행할 수 있습니다.
- 특징: 함수는 보안 제약이 있거나 API 호출을 실시간으로 처리할 수 없는 경우 유용합니다.
- 예시: 여행 계획 에이전트가 사용자의 요구에 따라 JSON 형식으로 도시 목록을 생성하고 이를 프런트엔드 애플리케이션으로 전달.
- 데이터 저장소(Data Stores)
데이터 저장소는 구조화된 데이터(PDF, 스프레드시트 등)나 비구조화된 데이터(HTML, TXT 등)를 에이전트가 활용할 수 있도록 하는 시스템입니다.
- 활용 방식: 데이터 저장소는 벡터 데이터베이스(Vector Database) 형식으로 구현되며, 검색 기반 생성(Retrieval-Augmented Generation, RAG)과 결합하여 에이전트의 데이터 접근성을 확장합니다.
- 예시: 에이전트가 사용자의 쿼리에 따라 사전 정의된 데이터 저장소에서 관련 정보를 검색하여 답변 생성.
도구는 에이전트가 외부 세계와 상호작용할 수 있는 핵심 매개체이며, 각 도구는 특정 작업을 수행하기 위해 설계되었습니다. 이를 통해 에이전트는 정적인 언어 모델의 한계를 넘어 실시간 데이터와 상호작용하며 동적으로 작업을 수행할 수 있습니다.
에이전트의 주요 구성요소: 오케스트레이션 계층 (Orchestration Layer)
오케스트레이션 계층(Orchestration Layer)은 에이전트의 핵심 조정 메커니즘으로, 입력된 정보를 기반으로 작업을 계획하고 실행하며, 그 결과를 분석하여 후속 작업을 결정하는 역할을 합니다. 쉽게 말해, 에이전트의 "두뇌"에 해당하는 이 계층은 에이전트의 내부 논리를 담당하며, 사용자의 요청이 최종적으로 완벽히 처리되기까지의 모든 과정을 조율합니다.
오케스트레이션 계층은 단순히 작업을 나열하는 것에서 그치지 않고, 실시간으로 변화하는 환경과 사용자의 요구에 대응하며, 작업의 우선순위를 정하고, 적합한 도구를 선택하여 실행하는 능력을 갖추고 있습니다. 이는 에이전트가 자율성을 유지하면서도 효율적으로 작동할 수 있는 기반을 제공합니다.
오케스트레이션 계층의 구성 요소
정보 수집과 입력 처리
오케스트레이션 계층의 첫 번째 단계는 사용자의 입력을 처리하는 것입니다.
- 정보 수집: 사용자가 제공한 요청(예: 자연어 질문)을 분석하여 핵심 정보를 추출합니다.
- 컨텍스트 관리: 대화의 맥락을 유지하고, 이전 작업 결과를 바탕으로 현재 요청의 의도를 파악합니다.
- 정보 정제: 중복되거나 불필요한 데이터를 제거하여 효율적인 처리를 가능하게 합니다.
예를 들어, 사용자가 "지난주 텍사스 롱혼즈가 누구와 경기를 했고, 상대 팀의 경기장은 어디인가요?"라는 질문을 하면, 오케스트레이션 계층은 이 질문에서 두 가지 작업(경기 상대 확인 및 경기장 위치 검색)을 추출하고 이를 각각의 작업으로 분리합니다.
내부 추론 및 계획 수립
입력된 정보가 정제되면, 오케스트레이션 계층은 이를 기반으로 실행 계획을 수립합니다.
- 추론 모델 활용: 체인 오브 쏘트(CoT)나 트리 오브 쏘트(Tree of Thought, ToT)와 같은 프레임워크를 사용하여 다단계 추론을 수행합니다.
- 작업 우선순위 결정: 작업의 순서를 정하고, 필요한 도구와 리소스를 할당합니다.
- 결정 트리 구성: 작업 흐름을 시뮬레이션하여 최적의 결과를 얻을 수 있는 경로를 선택합니다.
이 단계에서 오케스트레이션 계층은 단순히 명령을 실행하는 것이 아니라, 최적의 결과를 도출하기 위해 논리적이고 전략적으로 작업을 배치합니다.
도구 호출 및 작업 실행
계획이 수립되면, 에이전트는 외부 도구를 호출하여 작업을 실행합니다.
- 도구 선택: API, 함수, 데이터 저장소 중 적합한 도구를 선택.
- 작업 실행: 선택된 도구를 호출하여 작업을 수행.
- 결과 평가: 작업 결과를 분석하고, 후속 작업에 활용.
예를 들어, 경기 상대를 확인하기 위해 Google Search API를 호출하고, 경기장 위치를 검색하기 위해 Google Places API를 활용할 수 있습니다. 오케스트레이션 계층은 이러한 호출 과정을 자동으로 조율합니다.
오케스트레이션 계층의 작동 방식
반복적 루프와 상태 관리
오케스트레이션 계층은 작업이 완료될 때까지 반복적으로 실행됩니다. 이를 "인지 루프(Cognitive Loop)"라고 합니다.
- 정보 입력 → 추론 → 실행 → 피드백의 반복 과정.
- 상태(State)를 유지하여 대화의 일관성을 보장.
- 중간 결과를 반영하여 작업 계획을 지속적으로 수정.
인지 아키텍처의 역할
인지 아키텍처는 에이전트가 정보를 처리하고 의사결정을 내리는 데 필요한 구조를 제공합니다. 오케스트레이션 계층은 이러한 아키텍처를 기반으로 작동하며, 대표적인 방식은 다음과 같습니다:
- ReAct 프레임워크: 추론과 행동을 결합하여 사용자의 요청에 따른 최적의 결정을 도출.
- CoT 프레임워크: 단계별 논리적 추론을 통해 복잡한 문제를 해결.
- ToT 프레임워크: 여러 가능한 경로를 탐색하여 최적의 솔루션을 찾음.
사례: ReAct 프레임워크를 활용한 에이전트 작동
ReAct 프레임워크는 추론(Reasoning)과 행동(Action)을 결합한 방식으로, 에이전트가 사용자 요청을 처리하는 데 강력한 도구로 작동합니다. 다음은 ReAct를 활용한 예시입니다:
- 사용자 입력: "텍사스 롱혼즈의 지난 경기 상대는 누구인가요?"
- 질문 분석: 오케스트레이션 계층이 입력된 질문을 분석하여 "지난 경기 일정 검색" 작업을 생성.
- 도구 호출: Google Search API를 사용해 텍사스 롱혼즈의 최근 경기 데이터를 검색.
- 결과 평가: 검색 결과에서 경기 상대를 확인.
- 후속 작업: 확인된 상대 정보를 바탕으로 추가 정보를 검색.
- 최종 응답: 사용자가 요청한 정보를 완전한 답변 형태로 제공.
ReAct는 이러한 반복적 추론과 행동의 결합을 통해 에이전트가 더 신뢰할 수 있는 결과를 제공하도록 합니다.
LangChain을 활용한 에이전트 빠른 시작: 소개
LangChain은 언어 모델(Large Language Model, LLM)을 기반으로 한 애플리케이션 개발을 간소화하기 위한 오픈소스 프레임워크입니다. LangChain은 복잡한 논리 흐름과 도구 호출을 체계적으로 연결하여 사용자가 더 정교한 에이전트를 빠르게 개발할 수 있도록 지원합니다.
LangChain은 여러 언어 모델과 도구를 통합할 수 있는 모듈형 구조로 작성되어 있어, 복잡한 작업 및 멀티 태스크 환경에서 사용 가능합니다. 특히, LangChain을 활용하면 다양한 내장 기능을 통해 에이전트 개발 시간 단축할 수 있습니다.
LangChain의 주요 특징은 다음과 같습니다:
- 체인(Chains): 작업의 논리적 단계를 구성하는 도구. 체인은 사용자의 입력을 처리하여 여러 단계의 작업을 순차적으로 수행할 수 있도록 합니다.
- 도구(Tools): LangChain은 외부 API, 데이터베이스, 함수 호출 등을 통합할 수 있는 도구를 제공합니다.
- 메모리(Memory): 대화의 맥락을 유지하여 일관된 사용자 경험을 보장합니다.
예시: LangChain 기반 에이전트 구현 과정
LangChain을 활용하여 에이전트를 구현하는 과정은 다음과 같습니다:
먼저 LangChain 라이브러리를 설치한 후, 언어 모델(예: OpenAI GPT, Google Vertex AI 모델)을 초기화합니다.
from langchain.chat_models import ChatOpenAI
model = ChatOpenAI(model_name="gpt-3.5-turbo")
이후, LangChain에서 제공하는 기본 도구나 외부 API를 통합하여 작업 수행 가능성을 확장합니다.
from langchain.tools import GoogleSearchAPIWrapper
search_tool = GoogleSearchAPIWrapper(api_key="your_api_key")
마지막으로, 사용자의 질문에 따라 에이전트가 적합한 도구를 선택하여 작업을 수행합니다.
from langchain.chains import LLMChain
chain = LLMChain(llm=model, tools=[search_tool])
response = chain.run("텍사스 롱혼즈의 경기 상대는?")
print(response)
SerpAPI 및 Google Place API를 활용한 간략한 LangChain 예시 코드는 다음과 같습니다:
from langgraph.prebuilt import create_react_agent
from langchain_core.tools import tool
from langchain_community.utilities import SerpAPIWrapper
from langchain_community.tools import GooglePlacesTool
os.environ["SERPAPI_API_KEY"] = "XXXXX"
os.environ["GPLACES_API_KEY"] = "XXXXX"
@tool
def search(query: str):
"""Use the SerpAPI to run a Google Search."""
search = SerpAPIWrapper()
return search.run(query)
@tool
def places(query: str):
"""Use the Google Places API to run a Google Places Query."""
places = GooglePlacesTool()
return places.run(query)
model = ChatVertexAI(model="gemini-1.5-flash-001")
tools = [search, places]
query = "Who did the Texas Longhorns play in football last week? What is the
address of the other team's stadium?"
agent = create_react_agent(model, tools)
input = {"messages": [("human", query)]}
for s in agent.stream(input, stream_mode="values"):
message = s["messages"][-1]
if isinstance(message, tuple):
print(message)
else:
message.pretty_print()
요약: 생성형 AI 에이전트의 핵심 구성 요소와 미래 전망
에이전트는 언어 모델의 능력을 확장하여 실시간 데이터 접근, 자율 작업 실행, 복잡한 문제 해결을 가능하게 하는 차세대 AI 시스템입니다. 이 백서에서 논의한 핵심 요소들을 기반으로, 더 정교하고 유용한 에이전트 응용 프로그램이 개발될 수 있습니다.
에이전트 기술은 산업 전반에서 실질적인 가치를 창출하며, 앞으로의 발전은 AI의 가능성을 더욱 확대할 것입니다.
에이전트의 확장된 역할
에이전트는 언어 모델(Large Language Model, LLM)의 기능을 확장하여 다음을 가능하게 합니다:
- 실시간 정보 접근: 도구를 사용하여 최신 데이터를 검색하고 활용.
- 현실 세계에서의 작업 실행: API 호출, 데이터 분석, 추천 생성 등 다양한 작업 수행.
- 복잡한 작업 계획 및 실행: 자율적인 상태 전환과 도구 활용으로 언어 모델 단독으로는 불가능한 작업을 완료.
에이전트는 하나 이상의 언어 모델을 통합하여 복잡한 상태 전환 및 다중 작업을 실행할 수 있는 자율 시스템을 구축합니다.
오케스트레이션 계층: 에이전트의 핵심
에이전트의 작동 중심에는 **오케스트레이션 계층(Orchestration Layer)**이 존재합니다. 이 계층은 에이전트의 추론, 계획, 의사결정을 구조화하고 행동을 안내합니다.
- 인지 아키텍처(Cognitive Architecture): 에이전트가 정보를 수집하고, 내부적으로 처리하며, 결과적으로 최적화된 결정을 내리도록 설계.
- 추론 기법:
- ReAct: 추론과 행동을 결합하여 실시간 작업 수행.
- 체인 오브 쏘트(Chain-of-Thought, CoT): 중간 단계 추론을 통한 논리적 응답 생성.
- 트리 오브 쏘트(Tree-of-Thoughts, ToT): 여러 경로를 탐색하며 최적의 솔루션을 찾는 방식.
오케스트레이션 계층은 에이전트의 논리적 작업 흐름을 유지하며 복잡한 문제 해결을 지원합니다.
외부 세계와의 연결: 도구의 역할
도구는 에이전트가 외부 세계와 상호작용할 수 있는 핵심 매개체입니다:
- 확장(Extensions): 에이전트와 외부 API 간의 연결을 제공하여 실시간 정보 검색과 작업 실행 가능.
- 함수(Functions): 클라이언트 측에서 작업을 실행하도록 매개변수를 생성하여 더 세밀한 제어 가능.
- 데이터 저장소(Data Stores): 구조화된 데이터(PDF, 스프레드시트) 및 비구조화된 데이터(텍스트, HTML)와 상호작용하여 데이터 중심 응용 프로그램 구현.
도구는 에이전트의 데이터 접근성과 실행 능력을 강화하며, 이를 통해 더 풍부하고 정확한 결과를 제공합니다.
에이전트 기술의 미래
생성형 AI 에이전트는 아직 초기 단계에 있지만, 다음과 같은 발전 가능성을 내포하고 있습니다:
- 도구의 정교화: 더 강력한 API와 데이터 저장소의 발전으로 에이전트의 기능 확장.
- 추론 능력 향상: 새로운 추론 기법과 프레임워크가 도입되며, 더 복잡한 문제 해결 가능.
- 에이전트 체이닝(Agent Chaining):
- 여러 에이전트를 결합하여 각각의 전문성을 발휘할 수 있는 혼합 에이전트 전문가(Mixture of Agent Experts) 접근법.
- 예: 한 에이전트가 기술 문서를 분석하고, 다른 에이전트가 결과를 시각화하는 방식.
이러한 전략은 에이전트가 다양한 산업과 문제 영역에서 더욱 탁월한 성과를 낼 수 있도록 합니다.
에이전트 설계의 핵심 원칙
복잡한 에이전트 아키텍처를 구축하려면 반복적이고 점진적인 접근법이 필요합니다:
- 실험과 개선: 특정 비즈니스 문제와 조직의 요구 사항에 맞는 솔루션을 찾기 위해 지속적인 실험.
- 맞춤형 설계: 생성형 AI 모델의 특성상, 모든 에이전트는 고유하게 설계되어야 함.
- 기본 구성 요소의 활용: 모델, 오케스트레이션 계층, 도구의 강점을 최대한 활용하여 현실 세계에 영향을 미치는 응용 프로그램 개발.
더 읽어보기
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다.
파이토치 한국 사용자 모임이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래쪽에 좋아요를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~