캡스톤 프로젝트: 엔터프라이즈 지식 에이전트
최종 프로젝트에 도달한 것을 축하합니다! 이 캡스톤은 4주간 배운 모든 것을 결합합니다.
프로젝트 개요
다음을 수행할 수 있는 엔터프라이즈 지식 베이스 에이전트를 구축합니다:
- 회사 문서에서 질문에 답변 (RAG)
- 여러 전문 서브 에이전트 사용
- 안전한 응답을 위한 가드레일 적용
- REST API로 서비스
- 자체 성능 평가
아키텍처 구성요소
1. 쿼리 라우터 (Week 3)
쿼리를 전문 에이전트로 라우팅:
ROUTING_PROMPT = """
이 쿼리를 다음 중 하나로 분류하세요: FAQ, TECHNICAL, POLICY
쿼리: {query}
분류:
"""
def route_query(query: str) -> str:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": ROUTING_PROMPT.format(query=query)}
]
)
return response.choices[0].message.content.strip()2. 전문 에이전트 (Week 3)
각 에이전트는 도메인별 지식을 보유:
AGENTS = {
"FAQ": {
"system_prompt": "회사에 대한 자주 묻는 질문에 답변합니다.",
"knowledge_base": "faq_docs/"
},
"TECHNICAL": {
"system_prompt": "제품에 대한 기술 지원을 제공합니다.",
"knowledge_base": "tech_docs/"
},
"POLICY": {
"system_prompt": "회사 정책을 설명합니다. 절대 약속하지 마세요.",
"knowledge_base": "policy_docs/"
}
}3. RAG 파이프라인 (Week 4)
관련 문서 검색:
from chromadb import Client
def retrieve_context(query: str, collection_name: str, k: int = 3) -> str:
collection = chroma_client.get_collection(collection_name)
results = collection.query(query_texts=[query], n_results=k)
return "\n".join(results["documents"][0])4. 가드레일 (Week 4)
응답 검증:
def apply_guardrails(response: str, agent_type: str) -> tuple[bool, str]:
# 정책 에이전트는 특정 결과를 약속해서는 안 됨
if agent_type == "POLICY":
forbidden = ["보장", "약속", "반드시", "100%"]
for word in forbidden:
if word.lower() in response.lower():
return False, f"정책 위반: '{word}'"
# PII 검사
if contains_pii(response):
return False, "응답에 PII 포함"
return True, "OK"5. LLM-as-Judge 평가 (Week 4)
응답 점수 매기기:
class EvalResult(BaseModel):
relevance: int = Field(ge=1, le=5)
accuracy: int = Field(ge=1, le=5)
safety: int = Field(ge=1, le=5)
reasoning: str
def evaluate_response(query: str, response: str, context: str) -> EvalResult:
completion = client.beta.chat.completions.parse(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": EVAL_PROMPT},
{"role": "user", "content": f"쿼리: {query}\n컨텍스트: {context}\n응답: {response}"}
],
response_format=EvalResult
)
return completion.choices[0].message.parsed6. FastAPI 엔드포인트 (Week 4)
완전한 시스템 서빙:
@app.post("/v1/knowledge/query")
async def knowledge_query(request: QueryRequest):
# 1. 라우팅
agent_type = route_query(request.query)
# 2. 검색
context = retrieve_context(request.query, AGENTS[agent_type]["knowledge_base"])
# 3. 생성
response = generate_response(request.query, context, agent_type)
# 4. 가드레일
is_safe, reason = apply_guardrails(response, agent_type)
if not is_safe:
return {"response": FALLBACK_RESPONSES[agent_type], "blocked": True}
# 5. 평가 (비동기, 로깅용)
asyncio.create_task(log_evaluation(request.query, response, context))
return {"response": response, "agent": agent_type, "blocked": False}구현 체크리스트
프로젝트 구조 설정
capstone/
├── agents/
│ ├── router.py
│ ├── faq_agent.py
│ ├── tech_agent.py
│ └── policy_agent.py
├── rag/
│ ├── indexer.py
│ └── retriever.py
├── safety/
│ ├── guardrails.py
│ └── evaluator.py
├── api/
│ ├── main.py
│ └── models.py
├── data/
│ ├── faq_docs/
│ ├── tech_docs/
│ └── policy_docs/
├── tests/
│ └── test_agents.py
├── Dockerfile
└── docker-compose.yml지식 베이스 인덱싱
ChromaDB를 사용하여 문서 임베딩 및 저장
라우터 구현
쿼리 라우팅을 위한 분류 시스템 생성
전문 에이전트 구축
각 에이전트의 시스템 프롬프트와 지식 접근 권한
가드레일 추가
입력 검증, 출력 필터링, PII 감지
평가 구현
품질 모니터링을 위한 LLM-as-Judge
API 생성
적절한 에러 처리가 있는 FastAPI 엔드포인트
모든 것 Docker화
쉬운 배포를 위한 Docker Compose
테스트 작성
각 컴포넌트에 대한 유닛 테스트
평가 기준
| 컴포넌트 | 비중 | 기준 |
|---|---|---|
| 라우팅 | 15% | 올바른 분류 정확도 |
| RAG 품질 | 20% | 관련 컨텍스트 검색 |
| 에이전트 응답 | 25% | 정확하고 유용한 답변 |
| 가드레일 | 15% | 안전하고 정책 준수하는 출력 |
| API 설계 | 15% | 깔끔하고 문서화된 엔드포인트 |
| 코드 품질 | 10% | 잘 정리되고 테스트된 코드 |
보너스 챌린지
동적 모델 라우팅
간단한 쿼리는 gpt-4o-mini로, 복잡한 것은 gpt-4o로 라우팅:
def select_model(query: str, complexity_score: float) -> str:
if complexity_score > 0.7:
return "gpt-4o"
return "gpt-4o-mini"적용된 스킬
이 프로젝트는 다음 숙달을 보여줍니다:
| 주차 | 스킬 |
|---|---|
| Week 1 | ReAct 패턴, Tool calling, Structured output |
| Week 2 | RAG, 메모리 시스템, 고급 추론 |
| Week 3 | 멀티 에이전트 시스템, MCP, CrewAI 개념 |
| Week 4 | 평가, 가드레일, 프로덕션 배포 |
배운 것들
축하합니다! LLM Agent Cookbook을 완료했습니다!
이제 다음을 수행할 수 있는 스킬을 갖추었습니다:
- ReAct 패턴을 사용하여 처음부터 에이전트 구축
- 구조화된 출력으로 도구 호출 구현
- 지식 검색을 위한 RAG 파이프라인 생성
- 적절한 오케스트레이션으로 멀티 에이전트 시스템 설계
- 안전한 AI 애플리케이션을 위한 가드레일 적용
- 에이전트 성능을 체계적으로 평가
- 프로덕션 준비된 AI 서비스 배포
참고 자료 & 추가 학습
계속 학습하기
- Anthropic Courses: anthropic.com/courses (opens in a new tab)
- OpenAI Cookbook: cookbook.openai.com (opens in a new tab)
- DeepLearning.AI: deeplearning.ai (opens in a new tab)
학술 논문
-
"ReAct: Synergizing Reasoning and Acting" - Yao et al., 2022
-
"Retrieval-Augmented Generation for Knowledge-Intensive NLP" - Lewis et al., 2020
-
"A Survey on Large Language Model based Autonomous Agents" - Wang et al., 2023
프로젝트 공유하기
멋진 것을 만들었나요? 공유하세요!
- GitHub:
#llm-agent-cookbook태그 - Twitter/X:
@SOTAAZ멘션 - LinkedIn: 커뮤니티와 연결
LLM Agent Cookbook과 함께 학습해주셔서 감사합니다! 🎓