최근 AI 개발 생태계에서 가장 주목받는 트렌드 중 하나는 AI 에이전트입니다. 단순한 LLM 호출을 넘어, 추론하고 행동하며 외부 시스템과 상호작용하는 자율적인 AI 시스템이 다양한 산업에 혁신을 가져오고 있습니다. 이번 글에서는 가볍고 강력한, 그리고 빠르게 성장하고 있는 AI 에이전트 프레임워크인 Agno를 소개하고, 실제 애플리케이션을 구축하는 방법까지 상세히 알아보겠습니다.

Agno란 무엇인가?
Agno는 메모리, 지식, 도구 및 추론 기능을 갖춘 AI 에이전트를 구축하기 위한 경량 라이브러리입니다. 단순한 모델 호출이 아니라, 실제로 ‘생각’하고 ‘행동’하는 에이전트를 쉽게 만들 수 있도록 설계되었습니다.
Agno의 핵심 기능
Agno 프레임워크를 특별하게 만드는 주요 기능은 다음과 같습니다:
- 모델 독립성: 23개 이상의 모델 제공업체와 연결 가능하여 특정 모델에 종속되지 않습니다. OpenAI, Anthropic, Google, Mistral 등 다양한 모델을 자유롭게 사용할 수 있습니다.
- 경량 설계: 에이전트 초기화에 약 3μs만 소요되며, 평균 5-6.5Kib의 메모리만 사용합니다. 이는 대규모 시스템에서 중요한 이점입니다.
- 추론 중심 설계:
ReasoningTools
와 커스텀chain-of-thought
접근법을 통해 에이전트가 명시적으로 “생각”하고 “분석”할 수 있습니다. - 멀티모달 지원: 텍스트뿐만 아니라 이미지, 오디오, 비디오 등 다양한 형태의 입출력을 처리할 수 있습니다.
- 고급 멀티 에이전트 아키텍처:
route
,collaborate
,coordinate
모드를 통해 다양한 유형의 에이전트 팀을 구성할 수 있습니다. - 에이전틱 RAG: 단순한 RAG가 아닌, 에이전트가 능동적으로 자신이 필요로 하는 특정 정보를 검색하는 방식을 지원합니다.
Agno의 기본 구성 요소
Agno에서 에이전트는 다음과 같은 핵심 요소로 구성됩니다:
- 모델(Model): 에이전트의 “두뇌” 역할로, 추론, 행동, 사용자 응답을 담당합니다.
- 도구(Tools): 에이전트의 “몸체” 역할로, 실제 세계와 상호작용할 수 있게 해줍니다.
- 지시사항(Instructions): 에이전트의 행동을 안내합니다.
- 추론(Reasoning): 응답하기 전에 “생각”하고 행동의 결과를 “분석”하는 능력입니다.
- 지식(Knowledge): 벡터 데이터베이스에 저장된 도메인별 정보입니다.
- 저장소(Storage): 세션 기록과 상태를 데이터베이스에 저장해 다중 턴 대화를 가능하게 합니다.
- 메모리(Memory): 이전 상호작용에서 정보를 저장하고 회상할 수 있는 능력입니다.
Agno 시작하기: 기본 에이전트 구축
이제 실제 코드를 통해 Agno를 사용하는 방법을 알아보겠습니다. 먼저 간단한 에이전트를 만들어 보겠습니다.
설치
# 가상환경 생성 (선택사항이지만 권장)
python -m venv agno_env
source agno_env/bin/activate # Linux/Mac
# 또는 Windows에서는: agno_env\Scripts\activate
# Agno 설치
pip install agno
기본 에이전트 만들기
# basic_agent.py
from agno.agent import Agent
from agno.models.openai import OpenAIChat # OpenAI 모델 사용
# API 키 설정 (또는 환경변수로 설정)
import os
os.environ["OPENAI_API_KEY"] = "sk-your-api-key"
# 기본 에이전트 생성
agent = Agent(
model=OpenAIChat(id="gpt-4o"), # OpenAI의 GPT-4o 모델 사용
description="당신은 친절하고 도움이 되는 AI 비서입니다.",
markdown=True # 마크다운 형식 응답 활성화
)
# 에이전트에게 질문하고 응답 출력
agent.print_response("오늘 서울 날씨가 어때?", stream=True)
이 간단한 에이전트는 사용자의 질문에 응답할 수 있지만, 실시간 정보를 가져오는 능력은 없습니다. 도구를 추가하여 이 제한을 해결해봅시다.
도구를 가진 에이전트 만들기
# agent_with_tools.py
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools # 웹 검색 도구
# API 키 설정
import os
os.environ["OPENAI_API_KEY"] = "sk-your-api-key"
# 도구를 가진 에이전트 생성
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
description="당신은 최신 정보를 제공하는 AI 비서입니다.",
tools=[DuckDuckGoTools()], # DuckDuckGo 검색 도구 추가
show_tool_calls=True, # 도구 호출 과정 표시
markdown=True
)
# 에이전트에게 질문하고 응답 출력
agent.print_response("오늘 서울의 날씨는 어때?", stream=True)
이제 에이전트는 DuckDuckGo를 통해 실시간 정보를 검색할 수 있습니다.
지식을 가진 에이전트 구축하기
다음 단계로 지식 베이스를 가진 에이전트를 만들어 보겠습니다. 이 에이전트는 특정 도메인 지식(예: 한국 요리 레시피)을 저장하고 사용자 질문에 답할 수 있습니다.
# knowledge_agent.py
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.embedder.openai import OpenAIEmbedder
from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
from agno.vectordb.lancedb import LanceDb, SearchType
# API 키 설정
import os
os.environ["OPENAI_API_KEY"] = "sk-your-api-key"
# 지식 에이전트 생성
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
description="당신은 한식 요리 전문가입니다.",
instructions=[
"지식 베이스에서 한국 요리 레시피를 검색하세요.",
"질문이 지식 베이스의 내용에 관련되지 않으면 솔직히 모른다고 답변하세요."
],
knowledge=PDFUrlKnowledgeBase(
urls=["https://example.com/korean_recipes.pdf"], # 한식 레시피 PDF URL
vector_db=LanceDb(
uri="tmp/lancedb",
table_name="recipes",
search_type=SearchType.hybrid,
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
),
),
markdown=True
)
# 지식 베이스 로드 (처음 한 번만 실행)
if agent.knowledge is not None:
agent.knowledge.load()
# 에이전트에게 질문
agent.print_response("김치찌개를 어떻게 만들어?", stream=True)
이 에이전트는 PDF 문서에서 추출한 한국 요리 레시피 지식을 바탕으로 사용자 질문에 답변합니다.
MCP(Model Context Protocol) 연동
Agno는 MCP(Model Context Protocol)를 통해 다양한 외부 시스템과 연동할 수 있는 기능을 제공합니다. MCP는 에이전트가 표준화된 인터페이스를 통해 외부 시스템과 상호작용할 수 있게 해주는 프로토콜입니다.
# mcp_agent.py
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.mcp import MCPTools
# MCP 파일시스템 서버와 연결하는 에이전트 생성
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
tools=[
MCPTools(
command="npx @mcp/server-filesystem@latest",
tool_names=["filesystem"],
add_instructions=True,
)
],
show_tool_calls=True,
markdown=True
)
# 에이전트에게 파일시스템 관련 작업 요청
agent.print_response("현재 디렉토리에 있는 파일들을 보여주고, 가장 큰 파일의 내용을 출력해줘", stream=True)
MCP를 통해 다양한 서버(파일시스템, GitHub, 날씨 정보 등)와 연동할 수 있습니다.
에이전트 팀 구성하기
복잡한 작업을 위해 여러 전문 에이전트로 구성된 팀을 만들 수 있습니다.
# agent_team.py
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.yfinance import YFinanceTools
from agno.team import Team
# 웹 검색 전문 에이전트
web_agent = Agent(
name="웹 검색 에이전트",
role="웹에서 정보를 검색합니다",
model=OpenAIChat(id="gpt-4o"),
tools=[DuckDuckGoTools()],
instructions="항상 출처를 포함해주세요",
markdown=True
)
# 금융 정보 전문 에이전트
finance_agent = Agent(
name="금융 에이전트",
role="금융 데이터를 분석합니다",
model=OpenAIChat(id="gpt-4o"),
tools=[YFinanceTools(stock_price=True, company_info=True)],
instructions="데이터를 표로 정리해 보여주세요",
markdown=True
)
# 에이전트 팀 구성
agent_team = Team(
mode="coordinate", # 협력 모드 설정 (route, collaborate, coordinate 중 선택)
members=[web_agent, finance_agent], # 팀 구성원
model=OpenAIChat(id="gpt-4o"), # 팀 조정자 모델
success_criteria="데이터에 기반한 통찰력 있는 종합 보고서",
instructions=["항상 출처 포함", "데이터는 표로 정리"],
show_tool_calls=True,
markdown=True
)
# 팀에게 복합적인 질문
agent_team.print_response("AI 반도체 기업들의 시장 전망과 재무 성과는 어떤가요?", stream=True)
이 팀은 웹 검색 에이전트와 금융 데이터 에이전트가 협력하여 복합적인 질문에 답변합니다.
Streamlit을 활용한 웹 인터페이스 구축
이제 Agno 에이전트를 Streamlit과 연결하여 사용자 친화적인 웹 인터페이스를 만들어 보겠습니다. 다음은 앞서 소개한 한식 레시피 지식 에이전트를 Streamlit 앱으로 구현한 예제입니다.
# app.py
import os
import streamlit as st
import time
from typing import Iterator
# Agno 라이브러리 임포트
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.embedder.openai import OpenAIEmbedder
from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
from agno.vectordb.lancedb import LanceDb, SearchType
from agno.run.response import RunResponse
# 페이지 설정
st.set_page_config(
page_title="한식 레시피 도우미",
page_icon="🍲",
layout="wide"
)
# 사이드바 - API 키 설정
with st.sidebar:
st.title("🔑 API 키 설정")
openai_api_key = st.text_input("OpenAI API 키", type="password")
st.title("ℹ️ 정보")
st.info("""
이 애플리케이션은 Agno 라이브러리를 사용한 지식 에이전트입니다.
한국 요리 레시피에 관한 질문에 답변해 드립니다.
""")
# 디버그 모드 체크박스
debug_mode = st.checkbox("디버그 모드", value=False)
# 지식 베이스 재로드 버튼
if st.button("지식 베이스 재로드"):
st.session_state.knowledge_loaded = False
st.rerun()
# 메인 영역 - 제목 및 설명
st.title("🍲 한식 레시피 도우미")
st.markdown("""
한국 요리 레시피와 관련된 질문을 해보세요. 예시:
- 김치찌개 레시피가 궁금해요
- 비빔밥에 들어가는 재료는 무엇인가요?
- 불고기 양념을 만드는 방법을 알려주세요
- 떡볶이와 라볶이의 차이점은 무엇인가요?
""")
# 전역 변수로 Agent 초기화 함수
def initialize_agent():
"""지식 에이전트를 초기화합니다."""
# API 키 설정
os.environ["OPENAI_API_KEY"] = openai_api_key
# PDF URL (한국 요리 레시피)
recipe_pdf_url = "https://cdn-akamai.lkk.com/-/media/kr-site---homecook/e-book_kr/korean-cuisine-recipe-book-2021_kr.pdf"
# 지식 에이전트 생성
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
description="당신은 한식 요리 전문가입니다.",
instructions=[
"지식 베이스에서 한국 요리 레시피를 검색하세요.",
"레시피 외에도 한국 음식 문화와 역사에 대한 정보를 제공하세요.",
"답변을 찾을 수 없다면 솔직히 모른다고 답변하세요.",
"식재료와 조리 방법을 자세히 설명하세요.",
"모든 답변에 출처를 포함하세요."
],
knowledge=PDFUrlKnowledgeBase(
urls=[recipe_pdf_url],
vector_db=LanceDb(
uri="tmp/lancedb",
table_name="korean_recipes",
search_type=SearchType.hybrid,
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
),
),
markdown=True,
debug_mode=debug_mode
)
return agent
# 세션 상태 초기화
if "messages" not in st.session_state:
st.session_state.messages = []
if "knowledge_loaded" not in st.session_state:
st.session_state.knowledge_loaded = False
# 이전 메시지 표시
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# 사용자 입력 처리
user_query = st.chat_input("질문을 입력하세요...")
if user_query:
# 사용자 입력을 대화 기록에 추가
st.session_state.messages.append({"role": "user", "content": user_query})
# 사용자 메시지 표시
with st.chat_message("user"):
st.markdown(user_query)
# 로딩 상태 표시
with st.chat_message("assistant"):
if not openai_api_key:
st.error("OpenAI API 키를 입력해주세요.")
st.session_state.messages.append({"role": "assistant", "content": "⚠️ OpenAI API 키를 입력해주세요."})
else:
message_placeholder = st.empty()
full_response = ""
try:
# 에이전트 초기화
agent = initialize_agent()
# 지식 베이스 로드
if not st.session_state.knowledge_loaded:
with st.spinner("지식 베이스를 로딩 중입니다..."):
if agent.knowledge is not None:
agent.knowledge.load()
st.session_state.knowledge_loaded = True
# 에이전트 스트리밍 응답
response_stream: Iterator[RunResponse] = agent.run(user_query, stream=True)
for chunk in response_stream:
if chunk.content and isinstance(chunk.content, str):
full_response += chunk.content
message_placeholder.markdown(full_response + "▌")
message_placeholder.markdown(full_response)
# 응답을 대화 기록에 추가
st.session_state.messages.append({"role": "assistant", "content": full_response})
except Exception as e:
error_message = f"오류가 발생했습니다: {str(e)}"
st.error(error_message)
message_placeholder.markdown(f"⚠️ {error_message}")
st.session_state.messages.append({"role": "assistant", "content": f"오류: {str(e)}"})
이 코드를 app.py
로 저장하고 다음 명령어로 실행하면 Streamlit 웹 애플리케이션이 시작됩니다:
streamlit run app.py

이 애플리케이션은 다음 기능을 제공합니다:
- 사이드바:
- OpenAI API 키 입력 필드
- 디버그 모드 토글
- 지식 베이스 재로드 버튼
- 앱 정보 표시
- 메인 화면:
- 채팅 인터페이스로 한식 레시피에 관한 질문 가능
- 에이전트 응답은 스트리밍 방식으로 실시간 표시
- 마크다운 포맷으로 구조화된 응답 제공
- 지식 베이스:
- 한국 요리 PDF 문서를 벡터 데이터베이스로 변환
- LanceDB 사용한 하이브리드 검색으로 관련 정보 검색
- 사용자 질문에 맞는 레시피 정보를 찾아 응답
⠀
실전 응용: 여행 계획 에이전트 팀 구축
Agno와 Streamlit, 그리고 MCP를 활용한 더 복잡한 예제로 여행 계획 에이전트 팀을 구현해 보겠습니다. 이 애플리케이션은 다음과 같은 전문 에이전트들로 구성됩니다:
- 지도 에이전트: 경로, 관심 지점, 이동 시간 등을 제공
- 날씨 에이전트: 날씨 예보와 활동 추천
- 예약 에이전트: 숙박 옵션 검색
- 일정 에이전트: 일정 관리 및 알림
⠀ 핵심 코드는 다음과 같습니다:
async def run_agent(message: str):
"""여행 계획 에이전트 팀을 실행합니다."""
# API 키 가져오기
google_maps_key = st.session_state.get('google_maps_key')
accuweather_key = st.session_state.get('accuweather_key')
openai_key = st.session_state.get('openai_key')
# 환경 설정
env = {
**os.environ,
"GOOGLE_MAPS_API_KEY": google_maps_key,
"ACCUWEATHER_API_KEY": accuweather_key,
"OPENAI_API_KEY": openai_key
}
# MCP 도구 설정
async with MultiMCPTools(
[
"npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt", # Airbnb MCP
"npx -y @modelcontextprotocol/server-google-maps", # Google Maps MCP
"uvx --from git+https://github.com/adhikasp/mcp-weather.git mcp-weather", # 날씨 MCP
"./calendar_mcp.py" # 커스텀 캘린더 MCP
],
env=env,
) as mcp_tools:
# 전문 에이전트 정의
maps_agent = Agent(
tools=[mcp_tools],
model=OpenAIChat(id="gpt-4o-mini", api_key=openai_key),
name="Maps Agent",
goal="최적 경로 찾기, 관심 지점 식별, 이동 시간 계산 등"
)
weather_agent = Agent(
tools=[mcp_tools],
name="Weather Agent",
model=OpenAIChat(id="gpt-4o-mini", api_key=openai_key),
goal="목적지 날씨 예보 제공, 기상 조건에 따른 활동 추천 등"
)
booking_agent = Agent(
tools=[mcp_tools],
name="Booking Agent",
model=OpenAIChat(id="gpt-4o-mini", api_key=openai_key),
goal="예산 내 숙박 시설 찾기, 가격 비교, 특정 날짜 가용성 확인 등"
)
calendar_agent = Agent(
tools=[mcp_tools],
name="Calendar Agent",
model=OpenAIChat(id="gpt-4o-mini", api_key=openai_key),
goal="상세 여행 일정 작성, 예약 및 체크인 알림 설정, 활동 일정 관리 등"
)
# 에이전트 팀 구성
team = Team(
members=[maps_agent, weather_agent, booking_agent, calendar_agent],
name="Travel Planning Team",
markdown=True,
show_tool_calls=True,
instructions="종합적인 여행 계획 작성을 위해 협력하세요."
)
result = await team.arun(message)
output = result.messages[-1].content
return output
이러한 복잡한 멀티 에이전트 시스템은 각 에이전트가 전문 분야에 집중하면서도 모두 함께 협력하여 사용자에게 종합적인 여행 계획을 제공합니다.
시장 분석
Agno는 AI 에이전트 개발을 위한 강력하고 유연한 프레임워크로, 기본적인 단일 에이전트부터 복잡한 다중 에이전트 시스템까지 다양한 애플리케이션을 구축할 수 있습니다. 가볍고 빠른 특성, 모델 독립성, 그리고 고급 추론 및 멀티 에이전트 아키텍처는 Agno를 실제 프로덕션 환경에서 뛰어난 선택지로 만들고 있습니다.
현재 시장에는 LangChain, OpenAI Assistants API, AutoGPT, CrewAI, Microsoft Semantic Kernel, LlamaIndex 등 다양한 에이전트 솔루션이 있습니다.
Agno는 이 생태계에서 ‘경량성’과 ‘성능’이라는 핵심 가치를 중심으로 차별화됩니다. 초기화 시간(~3μs)과 메모리 사용량(~5Kib)에서 경쟁 제품 대비 월등한 효율성을 보여주며, 23개 이상의 모델 제공업체를 지원하는 독립성은 특정 모델에 종속되길 원하지 않는 개발자들에게 큰 매력입니다. 또한 추론 중심 설계와 고급 멀티 에이전트 아키텍처는 복잡한 문제 해결이 필요한 엔터프라이즈 환경에서 특히 유용합니다. 물론 다른 솔루션들도 각자의 장점이 있습니다 – LangChain은 풍부한 통합과 생태계, OpenAI Assistants API는 사용 편의성, LlamaIndex는 RAG에 특화된 기능을 제공합니다. 결국 최적의 선택은 프로젝트의 특성과 요구사항에 따라 달라질 것입니다.
앞으로 AI 에이전트 기술이 발전함에 따라 Agno와 같은 프레임워크는 더욱 중요해질 것입니다. 특히 다음과 같은 방향으로 발전이 예상됩니다:
- 더 정교한 추론 능력: LLM의 능력이 향상됨에 따라 에이전트의 추론과 분석 기능도 더욱 발전할 것입니다.
- 다중 모달리티 통합: 텍스트뿐만 아니라 이미지, 오디오, 비디오 등 다양한 모달리티를 처리하는 에이전트가 일반화될 것입니다.
- 자율성 향상: 에이전트가 더 높은 수준의 자율성을 가지고 복잡한 작업을 수행할 수 있게 될 것입니다.
- 에이전트 간 협업 고도화: 다양한 전문 에이전트들이 더 효율적으로 협업하여 복잡한 문제를 해결하는 시스템이 발전할 것입니다.
- 인간-에이전트 협업: AI 에이전트가 단독으로 작업하기보다 인간과 효과적으로 협업하는 방식으로 발전할 것입니다.
⠀ Agno는 이러한 미래 발전 방향을 선도하는 포지션에 있으며, 오픈소스 커뮤니티의 지속적인 기여를 통해 계속해서 발전하고 있습니다. 개발자로서 Agno를 활용하면 최신 AI 에이전트 기술을 손쉽게 구현하고 실제 비즈니스 문제를 해결하는 솔루션을 만들 수 있습니다.
Agno를 이용한 프로젝트 아이디어
Agno를 활용할 수 있는 다양한 프로젝트 아이디어를 몇 가지 소개합니다:
- 개인 연구 비서: 학술 논문을 검색하고 요약하며, 관련 연구를 추적하는 에이전트
- 재무 분석 도우미: 기업 재무제표를 분석하고 투자 인사이트를 제공하는 에이전트 팀
- 코드 리뷰 도우미: 코드를 분석하고 개선점과 보안 취약점을 찾아주는 에이전트
- 법률 문서 분석기: 계약서와 법률 문서를 분석하고 중요 조항을 요약해주는 에이전트
- 마케팅 콘텐츠 생성기: 다양한 마케팅 채널에 맞는 콘텐츠를 자동으로 생성하는 에이전트 시스템
- 개인 건강 코치: 운동, 영양, 수면 데이터를 분석하여 맞춤형 건강 조언을 제공하는 에이전트
- 다국어 고객 지원 시스템: 여러 언어로 고객 문의에 응답하고 복잡한 문제는 전문 에이전트에게 라우팅하는 시스템
⠀
마치며
AI 에이전트 기술은 단순한 챗봇을 넘어 복잡한 업무를 자동화하고, 인간의 의사결정을 지원하는 강력한 도구로 발전하고 있습니다. Agno와 같은 프레임워크는 이러한 고급 AI 에이전트 시스템을 보다 접근하기 쉽게 만들어 더 많은 개발자들이 에이전트 기술의 잠재력을 실현할 수 있도록 돕고 있습니다.
이 글에서 살펴본 것처럼, Agno를 사용하면 다양한 모델, 도구, 지식 베이스를 조합하여 강력한 AI 에이전트를 구축할 수 있습니다. 단일 에이전트부터 복잡한 멀티 에이전트 시스템까지, Agno의 유연한 아키텍처는 다양한 사용 사례에 적합합니다.
AI 에이전트 시대는 이제 막 시작되었습니다. Agno와 함께 이 흥미로운 여정에 동참해보세요!
참고 자료
- Agno 공식 GitHub 저장소
- Agno 공식 문서
- Agno 에이전트 소개
- Model Context Protocol (MCP)
- Building Your AI Research Squad with Agno, Streamlit, and uv
- Build an AI Travel Planning Agent with MCP
- Model Context Protocol 공식 웹사이트
- Streamlit 공식 문서
⠀