Fast-LLM-Agent-MCP: LLM, 에이전트 및 MCP 도구 개념의 이론과 실습
요약
LLM, 에이전트, MCP(Model Context Protocol)의 이론과 실습을 다루는 기술 저장소입니다. LangChain, LangGraph, AWS Strands, Google ADK를 활용한 다양한 에이전트 구현 패턴과 샘플 코드를 제공합니다.
핵심 포인트
- LLM, RAG, MCP 등 핵심 에이전트 개념의 이론 및 실습 제공
- LangGraph를 활용한 멀티 에이전트 패턴(순차, 생성자-평가자, 라우터) 구현
- AWS Strands 및 Google ADK 기반의 에이전트 개발 가이드 포함
- Streamlit과 FastAPI를 이용한 에이전트 GUI 및 컨테이너화 방법 제시
이 저장소는 LLM (Large Language Model), 에이전트 (Agents), MCP (Model Context Protocol) 도구, 기술 (Skills) 개념을 이론과 실습 양면에서 다룹니다.
-
LLM 아키텍처 (Architectures), RAG (Retrieval-Augmented Generation), 미세 조정 (Fine Tuning), 에이전트 (Agents), 도구 (Tools), MCP, 에이전트 프레임워크 (Agent Frameworks), 참조 문서 (Reference Documents).
-
**LangChain & LangGraph (> v1.0.0, 프로덕션 버전)**을 사용한 에이전트 샘플 코드.
-
AWS Strands Agents를 사용한 에이전트 샘플 코드.
-
**Google Agent Development Kit (ADK)**를 사용한 에이전트 샘플 코드.
-
Sample-00: 기본 에이전트 (Basic Agent)
-
Sample-01: 정적 도구를 사용하는 에이전트 (Agent With Static Tools)
-
Sample-02: 구조화된 출력을 사용하는 도구 기반 에이전트 (Agent With Tools Structured Output)
-
Sample-03: 단기 기억을 가진 에이전트 (Agent Short Term Memory)
-
Sample-04: 에이전트 메시지 (Agent Messages)
-
Sample-05: 에이전트 PII (개인정보) 미들웨어 가드레일 (Agent PII Middleware Guardrail)
-
Sample-06: 도구로서의 에이전트 하위 에이전트 (Agent Subagents as Tool)
-
Sample-07: 에이전트 기술 (Agent Skills)
-
Sample-08: LangGraph 멀티 에이전트 순차 패턴 (LangGraph Multi Agents Sequential Pattern)
-
Sample-09: LangGraph 멀티 에이전트 생성자-평가자 패턴 (LangGraph Multi Agents Generator Evaluator Pattern)
-
Sample-10: LangGraph 멀티 에이전트 라우터 패턴 (LangGraph Multi Agents Router Pattern)
-
Sample-00: AWS Strands Agents를 사용한 첫 번째 에이전트
-
Sample-01: Streamlit UI를 사용하는 Agent Strands
-
Sample-02: Agent Strands 로컬 MCP 파일 작업 (FileOps), Streamlit
-
Sample-03: Agent Strands, 원격 MCP Serper Google 검색 도구와 Streamlit
-
Sample-00: Google ADK 및 ADK Web을 사용하는 에이전트
-
Sample-01: Google ADK, FastAPI, Streamlit GUI를 사용하는 에이전트 컨테이너
-
Sample-02: Google ADK, FastAPI, Streamlit GUI를 사용하는 에이전트 로컬 MCP 도구 (FileServer)
-
Sample-03: Google ADK, FastAPI, Streamlit GUI를 사용하는 에이전트 원격 MCP 도구 (웹 검색: Serper)
-
Sample-04: Streamlit GUI를 사용하는 에이전트 메모리 및 내장 Google 검색 도구
-
Sample-05: Streamlit GUI를 사용하는 에이전트 LiteLLM - AWS Bedrock (Llama3.1-405B), Ollama
-
Sample-06: 멀티 에이전트 순차 방식 (Multi-Agent Sequential), Streamlit GUI
-
Sample-07: 멀티 에이전트 병렬 방식 (Multi-Agent Parallel), Streamlit GUI
-
Sample-08: 멀티 에이전트 루프 방식 (Multi-Agent Loop), Streamlit GUI
-
Sample-09: 멀티 에이전트 계층 구조 (Multi-Agent Hierarchy), Streamlit GUI
-
동기 (Motivation)
-
LLM 아키텍처 및 LLM 모델 (LLM Architecture & LLM Models)
-
프롬프트 엔지니어링 (Prompt Engineering)
-
RAG: 검색 증강 생성 (Retrieval-Augmented Generation)
-
미세 조정 (Fine Tuning)
-
LLM 애플리케이션 프레임워크 및 라이브러리 (LLM Application Frameworks & Libraries)
-
에이전트 프레임워크 (Agent Frameworks)
-
에이전트 (Agents)
-
참조 (References)
왜 우리는 LLM 모델과 애플리케이션을 사용/학습/개발해야 하는가?
-
🔍
복잡한 작업 자동화 (Automate Complex Tasks): 요약, 번역, 코딩, 조사 및 대규모 콘텐츠 생성. -
🧠
지능형 앱 구현 (Enable Intelligent Apps): 자연어 인터페이스를 갖춘 챗봇, 코파일럿 (Copilots), 검색 엔진 및 데이터 탐색기 구축. -
🚀
생산성 향상 (Boost Productivity): 반복적이거나 지식 기반인 작업을 처리함으로써 사용자 및 기업의 시간 절약. -
💰
높은 시장 수요 (High Market Demand): SaaS, 엔터프라이즈 도구, 고객 지원 및 교육 분야에서 LLM 애플리케이션에 대한 필요성 증가. -
🧩
다재다능한 통합 (Versatile Integration): 도구, API, 데이터베이스 및 에이전트와 결합하여 강력한 워크플로 (Workflows) 구축. -
🛠️
특수 사례를 위한 맞춤화 (Customize for Edge Cases): 특정 도메인 요구 사항(금융, 법률, 의료 등)에 맞춰 미세 조정 (Fine-tune) 또는 적응. -
📈
커리어 성장 (Career Growth): AI 엔지니어링, MLOps, 제품 혁신 및 기술 리더십 분야의 역할 제공. -
🌍
글로벌 영향력 (Global Impact): 특히 비기술적 사용자들에게 정보 및 자동화에 대한 접근성을 민주화함. -
LLM (Large Language Model, 거대 언어 모델)은 인간과 유사한 언어를 이해하고 생성하기 위해 방대한 양의 텍스트 데이터로 학습된 인공지능 모델의 한 종류입니다.
-
"Large (거대)": 학습 과정에서 사용되는 수십억 개의 파라미터 (Parameters)와 방대한 데이터셋을 의미합니다.
-
"Language Model (언어 모델)": 입력된 문맥을 바탕으로 텍스트를 예측하고 생성합니다.
-
LLM은 트랜스포머 아키텍처 (Transformer architecture) (문맥 이해를 위해 셀프 어텐션 (Self-attention)을 사용)를 기반으로 구축되며, LLM은 디코더 전용 (Decoder-only) 트랜스포머입니다.
LLM 핵심 구성 요소:
임베딩 레이어 (Embedding layer): 단어/토큰을 벡터 (Vectors)로 변환합니다.
위치 인코딩 (Positional encoding): 단어 순서 정보를 추가합니다.
셀프 어텐션 메커니즘 (Self-attention mechanism): 토큰 간의 관계를 포착합니다.
피드포워드 레이어 (Feed-forward layers): 토큰 수준의 정보를 처리합니다.
레이어 정규화 및 잔차 연결 (Layer normalization & residuals): 학습을 안정화하고 향상시킵니다.
출력 헤드 (Output head): 다음 토큰 또는 분류 결과를 예측합니다.
LLM 모델을 사용하는 방법에는 2가지가 있습니다: API (AI 및 클라우드 제공업체로부터 제공), 로컬 (Local)
-
다음과 같은 제공업체를 통해 접근할 수 있습니다: OpenAI, Claude, Gemini, AWS Bedrock, ..
-
로컬 컴퓨터에서 작은 LLM을 가져오거나 실행하는 가장 쉬운 방법입니다.
-
또 다른 방법은 HuggingFace에서 오픈 소스 소형 및 대형 LLM을 다운로드하는 것입니다.
-
오픈 소스 모델을 다운로드한 후, 더 많은 사용자(>10명)에게 제공하려면 서빙 엔진 (serving engine)과 함께 실행해야 합니다.
-
vLLM은 LLM 추론 (inference) 및 서빙 (serving)을 위한 빠르고 사용하기 쉬운 라이브러리입니다.
-
프롬프트 엔지니어링 (Prompt engineering)은 LLM (Large Language Models)으로부터 가능한 최선의 응답을 얻기 위해 입력 프롬프트를 설계하고 개선하는 실습입니다.
-
명확하고 구체적인 지침을 작성합니다.
-
구조화된 형식(예: 리스트, JSON, 예시)을 사용합니다.
-
다음과 같은 기술을 적용합니다:
-
제로샷 프롬프팅 (Zero-shot prompting) (그냥 질문하기)
-
퓨샷 프롬프팅 (Few-shot prompting) (예시 제공하기)
-
생각의 사슬 프롬프팅 (Chain-of-thought prompting) (모델에게 단계별로 설명하도록 요청하기)
-
왜 중요한가요?
출력 품질 향상: 잘 만들어진 프롬프트는 LLM이 관련성 있고 정확한 결과를 생성하도록 안내합니다.
모델 정확도 향상: LLM이 복잡한 지침을 따르도록 돕습니다. 정밀한 지침은 잘못된 정보나 허위 정보(made-up information)를 줄여줍니다.
작업별 성능 구현: 잘 작성된 프롬프트만으로 모델이 요약, 번역, 코드 생성 또는 워크플로우를 따르도록 할 수 있습니다.
비용 효율적: 대형 모델을 재학습(retraining)하거나 미세 조정(fine-tuning)하지 않고도 결과를 개선합니다.
생성형 AI (GenAI) 앱에 필수적: 챗봇, 에이전트 (agents), 검색 어시스턴트 및 코파일럿 (copilots)을 구축하는 데 매우 중요합니다.
RAG 및 도구 사용 지원: 고급 시스템에서 도구, API 또는 지식 베이스 (knowledge bases)와 LLM을 오케스트레이션 (orchestrate)하는 것을 돕습니다.
RAG (Retrieval-Augmented Generation, 검색 증강 생성)는 외부 지식 검색과 LLM 기반의 텍스트 생성을 결합하는 기술입니다. 작동 방식은 다음과 같습니다:
Retrieve (검색): 쿼리(Query)를 사용하여 지식 베이스(예: 문서, PDF, 데이터베이스)를 검색합니다. 일반적으로 임베딩 (Embeddings)을 사용한 벡터 검색 (Vector Search)을 활용합니다 (예: FAISS, Elasticsearch).
Augment (증강): 검색된 텍스트를 프롬프트 (Prompt)에 주입합니다.
Generate (생성): LLM은 이 컨텍스트 (Context)를 사용하여 더 정확하고 근거 있는 응답을 생성합니다.
RAG가 중요한 이유:
환각 (Hallucinations) 감소: LLM의 응답을 실제 데이터에 근거하게 함으로써 환각 현상을 줄입니다.
최신 정보 유지: (LLM을 매 업데이트마다 재학습시킬 필요가 없습니다).
신뢰도 및 투명성 향상: (출처를 보여줄 수 있습니다).
엔터프라이즈급 확장성: 챗봇, 검색, 문서 QA, 에이전트 (Agents) 등에 사용됩니다.
RAG 관련 인기/일반 도구:
-
임베딩 모델 (Embedding Models)
- OpenAI (text-embedding-ada-002),
- HuggingFace (all-MiniLM-L6-v2, sentence-transformers/all-mpnet-base-v2),
- AWS Titan embeddings
-
리랭커 모델 (Reranker Models)
-
생성 모델 (Generation Models)
-
벡터 스토어 및 데이터베이스 (Vector stores & Databases):
- FAISS,
- Pinecone,
- Weaviate,
- Chroma,
- Milvus,
- Qdrant
파인튜닝 (Fine-tuning)은 사전 학습된 (Pre-trained) LLM 모델을 더 작고 전문화된 데이터셋으로 추가 학습시켜 특정 작업이나 도메인에 적응시키는 과정입니다. 목표는 처음부터 다시 시작하지 않고도 모델이 특정 요구 사항을 더 잘 처리할 수 있도록 만드는 것입니다.
파인튜닝의 작동 방식:
사전 학습된 모델로 시작: 언어를 이해하기 위해 방대한 양의 일반 데이터 (PDF 등)로 학습된 대규모 모델 (Llama3.3, Mistral)을 사용합니다.
도메인 특화 데이터 사용: 관심 있는 작업이나 도메인에 특화된 더 작은 데이터셋을 제공합니다 (예: 법률 텍스트, 의료 데이터, 고객 서비스).
모델 학습: 모델의 파라미터 (Parameters)가 이 새로운 전문 데이터로 업데이트되어 대상 도메인에서 더 나은 성능을 발휘하도록 하지만, 대규모 학습 데이터셋에서 배운 일반적인 지식은 유지합니다.
파인튜닝된 모델 적용: 이제 모델은 전문 도메인을 기반으로 텍스트를 생성하거나 분류할 수 있으며, 종종 일반 모델보다 훨씬 높은 성능을 달성합니다.
파인튜닝이 중요한 이유:
정확도 향상 (Improves Accuracy): 모델이 의료 텍스트 분석이나 고객 지원 챗봇과 같이 귀하의 특정 사용 사례(use case)에 대해 더욱 정밀해집니다.
시간 및 자원 절약 (Saves Time and Resources): 처음부터 새로운 모델을 훈련할 필요가 없습니다 (이는 방대한 컴퓨팅 자원과 데이터를 필요로 합니다).
동작 커스텀 (Customizes Behavior): 파인튜닝 (Fine-tuning)을 통해 모델이 애플리케이션의 목표(예: 어조, 문맥, 스타일)에 부합하는 방식으로 동작하도록 조정할 수 있습니다.
파인튜닝 방법 (Fine-Tuning Methods):
전체 파인튜닝 (Full Fine-Tuning): 특정 작업을 위해 사전 훈련된 모델의 **모든 파라미터 (all parameters)**를 파인튜닝합니다. 최대의 커스텀화가 가능하지만, 자원 집약적이며 대규모 데이터셋이 필요합니다.
특징 기반 파인튜닝 (Feature-based Fine-Tuning): 모델의 나머지 부분은 동결(frozen)한 채, 사전 훈련된 모델의 **마지막 레이어 (final layers)**만을 파인튜닝합니다. 전체 파인튜닝보다 빠르고 자원 소모가 적지만, 작업 특화된 최적화 수준은 그만큼 낮을 수 있습니다.
PFET (Progressive Fine-Tuning): 더 단순한 작업부터 시작하여 더 복잡한 작업으로 나아가는 단계적 (stages) 과정을 통해 파인튜닝이 수행됩니다. 이 방법은 치명적 망각 (catastrophic forgetting)을 줄이고 모델이 복잡한 작업을 점진적으로 학습하는 능력을 향상시키지만, 시간이 더 많이 소요됩니다.
어댑터 파인튜닝 (Adapter Fine-Tuning): 사전 훈련된 모델에 작은 **학습 가능한 레이어 (trainable layers, 어댑터)**를 추가하고, 이 어댑터들만 파인튜닝합니다. 멀티태스크 학습 (multi-task learning)에 매우 효율적이지만, 전체 파인튜닝보다 유연성이 떨어지며 모든 작업에 최적은 아닐 수 있습니다.
LoRA (Low-Rank Adaptation): 사전 훈련된 모델의 **특정 레이어에 저차원 행렬 (low-rank matrices)**을 추가하고, 이 행렬들만 파인튜닝합니다. 메모리와 연산 측면에서 효율적이어서 대규모 모델에 이상적이지만, 매우 복잡한 작업에는 효과가 덜할 수 있습니다.
QLoRA (Quantized LoRA): LoRA를 양자화 (quantization) 기술과 결합하여 모델의 크기와 메모리 요구 사항을 더욱 줄입니다. 저차원 행렬을 양자화하여 메모리 효율성을 높였습니다.
LLM (Large Language Model) 애플리케이션 프레임워크 및 라이브러리는 GPT, Claude, Gemini 또는 LLaMA와 같은 대규모 언어 모델로 구동되는 애플리케이션의 개발, 오케스트레이션 (Orchestration) 및 배포를 단순화하기 위해 설계된 도구입니다. 이러한 도구들은 프롬프트 (Prompt), 메모리 (Memory), 에이전트 (Agent), 도구 (Tool), 워크플로 (Workflow), 그리고 외부 데이터 또는 시스템과의 통합을 관리하기 위한 추상화 (Abstraction)를 제공합니다.
-
LangChain은 모델을 도구, 프롬프트, 메모리 및 데이터 소스와 결합하여 LLM 애플리케이션을 구축하기 위한 프레임워크입니다. LangGraph는 LangChain의 확장판으로, LLM 워크플로를 상태 기반 그래프 (Stateful Graphs)로 모델링하여 루프 (Loop)와 제어 흐름 (Control Flow)이 포함된 다단계 또는 멀티 에이전트 (Multi-agent) 시스템을 더 쉽게 구축할 수 있게 합니다.
-
LlamaIndex는 대규모 언어 모델 (OpenAI GPT 등)을 PDF, 데이터베이스 또는 API와 같은 외부 데이터 소스에 연결하도록 돕는 프레임워크입니다. 이는 데이터 수집 (Ingestion), 인덱싱 (Indexing) 및 검색 (Retrieval)에 집중하여, LLM 앱 (예: RAG 시스템)이 개인 데이터나 구조화된 데이터를 효율적으로 쿼리할 수 있도록 합니다.
에이전트 프레임워크 (Agent frameworks)는 LLM 기반 에이전트를 구축, 관리 및 오케스트레이션하기 위해 설계된 특화된 소프트웨어 도구 또는 라이브러리입니다. 이러한 프레임워크는 외부 도구를 사용하거나 다른 에이전트와 협력하여 자율적으로 추론, 계획 및 행동할 수 있는 지능형 에이전트를 생성할 수 있도록 돕습니다.
에이전트 프레임워크는 무엇을 제공하는가?
에이전트 추상화 (Agent Abstractions): 에이전트의 정체성, 목표, 메모리, 행동 및 권한을 정의합니다.
도구 인터페이스 (Tool Interfaces): 에이전트가 사용할 수 있는 외부 도구 (API, 함수, 데이터베이스 등)를 등록합니다.
실행 로직 (Execution Logic): 계획, 의사 결정, 도구 호출 (Tool-calling), 재시도 (Retries) 및 피드백 루프를 처리합니다.
멀티 에이전트 오케스트레이션 (Multi-Agent Orchestration): 여러 에이전트 간의 통신 및 작업 위임을 관리합니다.
메모리 및 컨텍스트 (Memory & Context): 지속적인 메모리, 이력 추적 및 문맥적 추론을 가능하게 합니다.
관측 가능성 (Observability): 디버깅을 위해 트레이싱 (Tracing), 로깅 (Logging) 및 단계별 추론 출력을 제공합니다.
-
LangChain 및 LangGraph 또한 강력한 에이전트 프레임워크를 보유하고 있습니다. LangChain은 LLM이 작업을 완료하기 위해 어떤 도구, API 또는 작업을 사용할지 동적으로 결정할 수 있게 하는 강력한 에이전트 프레임워크를 제공합니다. LangGraph는 그래프 기반 실행 모델을 사용하여 상태 유지형 멀티 에이전트 워크플로 (Stateful, multi-agent workflows) 및 복잡한 제어 흐름 (루프, 분기)을 가능하게 함으로써 이를 확장합니다.
-
Strands Agents SDK는 개발자가 AI 기반 에이전트를 빠르게 구축, 관리, 평가 및 배포할 수 있도록 지원합니다.
-
Agent Development Kit (ADK)는 AI 에이전트를 개발하고 배포하기 위한 유연하고 모듈화된 프레임워크입니다. Gemini 및 Google 생태계에 최적화되어 있지만, ADK는 모델 불가지론적 (Model-agnostic)이며 배포 불가지론적 (Deployment-agnostic)이고, 다른 프레임워크와의 호환성을 위해 구축되었습니다.
-
ADK는 에이전트 개발이 소프트웨어 개발과 더 유사하게 느껴지도록 설계되었으며, 개발자가 단순한 작업부터 복잡한 워크플로에 이르는 에이전트 아키텍처 (Agentic architectures)를 더 쉽게 생성, 배포 및 오케스트레이션할 수 있도록 합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Codex tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기