생성형 AI 기반 RAG 개발자 과정
Session 30 · Agent + RAG 서비스 결합
생성형 AI 기반 RAG 개발자 과정

Agent + RAG
서비스 결합

Session 30 / 33 — Day 4

문서검색 챗봇 → 도구를 활용하는 비서로 확장

박수현 · (사)한국정보공학기술사회 · 2026

LLM 이론 · LangChain · ChromaDB CRUD · Agent — 4일 핸즈온
생성형 AI 기반 RAG 개발자 과정·Session 30 · Agent + RAG 서비스 결합출처: Day 4Agent+RAG 서비스

이번 시간을 마치면

🔧 결합 방법

  • retriever 를 tool 로 노출
  • RAG 검색 = 여러 도구 중 하나
  • LLM 이 도구 선택

🏗️ 서비스로 (최종 프로젝트)

  • 작은 RAG + 검색·계산 도구 + 메모리
  • 멀티툴 라우팅 → 통합 웹 데모
  • 실행 과정을 trace 로 시각화

🎯 목표: 문서검색 전용 봇 → 필요한 도구를 선택하는 비서로 전환.

생성형 AI 기반 RAG 개발자 과정·Session 30 · Agent + RAG 서비스 결합출처: Day 4Agent+RAG 서비스

고정 경로 → 동적 선택

flowchart TB subgraph BEFORE["RAG-only (고정)"] Q1["질문"] --> R1["항상 검색"] --> A1["답변"] end subgraph AFTER["Agent + RAG (동적)"] Q2["질문"] --> AG["Agent<br/>도구 선택"] AG -->|"문서?"| RT["search_docs<br/>(RAG 검색)"] AG -->|"계산?"| MT["calculator"] AG -->|"불필요?"| WT["바로 답변"] RT --> A2["답변 + 출처"] MT --> A2 WT --> A2 end style R1 fill:#fdcb6e22,stroke:#fdcb6e style AG fill:#a29bfe22,stroke:#a29bfe style RT fill:#00b89422,stroke:#00b894

💡 핵심 차이: RAG 는 항상 검색, Agent 는 필요 시에만 RAG 도구를 호출.

생성형 AI 기반 RAG 개발자 과정·Session 30 · Agent + RAG 서비스 결합출처: Day 4Agent+RAG 서비스

RAG 검색을 @tool 로 노출 (스니펫)

from langchain_core.tools import tool

@tool
def search_docs(query: str) -> str:
    """기술 문서에서 질문과 관련된 내용을 검색한다
    (SSD, RAID 등 저장장치 주제)."""
    hits = vectorstore.similarity_search(query, k=3)
    return "\n".join(f"- {d.page_content}" for d in hits) \
        or "관련 문서를 찾을 수 없습니다."
  • docstring 이 곧 도구 설명 → LLM 이 도구 사용 시점을 판단
  • 소규모 RAG(Chroma.from_documents)를 검색 도구로 그대로 재사용

🔑 RAG 를 별도 개념이 아닌 도구 하나로 취급한다. 동일한 방식으로 calculator 도구도 추가한다.

생성형 AI 기반 RAG 개발자 과정·Session 30 · Agent + RAG 서비스 결합출처: Day 4Agent+RAG 서비스

도구 + 메모리 결합으로 Agent 구성 (스니펫)

agent = create_agent(
    llm, [search_docs, calculator],
    system_prompt="저장장치 질문은 search_docs 로 근거를 찾고, "
                  "계산은 calculator 를 써라. 문서에 없으면 모른다고 답하라.",
    checkpointer=MemorySaver())  # thread_id 로 대화 기억

# LLM 이 질문 보고 도구 선택
config = {"configurable": {"thread_id": "console"}}
agent.invoke({"messages": [("user",
    "NVMe와 SATA 속도를 더하면?")]}, config=config)
# → search_docs(속도 찾기) + calculator(덧셈) 순서대로 호출
  • 단일 질문에 여러 도구를 순차 호출 가능 (ReAct 루프)
  • 문서에서 숫자 검색 → 계산 — 검색·계산 자동 분담, thread_id 로 맥락 유지

📁 참고: 8.agents/3.applied_agents/, 7.RAG/6.agentic/

생성형 AI 기반 RAG 개발자 과정·Session 30 · Agent + RAG 서비스 결합출처: Day 4Agent+RAG 서비스

기존 서비스에 Agent 계층 추가

flowchart LR UI["static 프론트<br/>(좌:대화 · 우:trace)"] -->|"POST /ask"| API["Flask"] API --> AGENT["create_agent<br/>+ MemorySaver"] AGENT --> T1["search_docs<br/>(RAG)"] AGENT --> T2["calculator"] T1 --> DB[("ChromaDB")] AGENT --> RESP["answer + build_trace(messages)"] style AGENT fill:#a29bfe22,stroke:#a29bfe style T1 fill:#00b89422,stroke:#00b894

💡 /askagent.invoke(...) 한 줄을 호출한다. 응답에 답변과 trace(질문→도구 호출→도구 결과→최종 답변)를 함께 담아 우측 패널에 시각화한다.

생성형 AI 기반 RAG 개발자 과정·Session 30 · Agent + RAG 서비스 결합출처: Day 4Agent+RAG 서비스

최종 프로젝트: trace 시각화 웹앱

integrated web agent demo

통합 웹 데모 · 브라우저(좌측 대화 · 우측 에이전트 trace 패널) ↔ Flask /ask ↔ 에이전트가 search_docs·calculator 도구를 골라 실행, 단계를 trace로 반환

💡 build_trace(result["messages"]) 가 "질문 → 판단·도구 호출 → 도구 결과 → 최종 답변"을 단계 카드로 분해해, 블랙박스였던 도구 선택 과정을 가시화한다.

생성형 AI 기반 RAG 개발자 과정·Session 30 · Agent + RAG 서비스 결합출처: Day 4Agent+RAG 서비스

자율성과 통제의 균형

⚠️ 트레이드오프

  • 도구 증가에 따른 지연·비용 상승
  • 부적절한 도구 선택 가능성
  • 무한 루프 위험 (max iterations)

✅ 통제 레버

  • 도구 description 정교화
  • max_iterations 제한
  • 도구 호출 로그·추적
  • 단순 질문은 RAG 직답, 복잡한 경우에만 Agent

🔑 Agent 가 항상 정답은 아니다 — 단순함 우선, 자율성은 필요한 경우에 한정.

생성형 AI 기반 RAG 개발자 과정·Session 30 · Agent + RAG 서비스 결합출처: Day 4Agent+RAG 서비스

핵심 5가지

  1. ✅ RAG 검색을 @tool 로 노출(search_docs) → 도구 중 하나로
  2. ✅ docstring = 도구 설명 → LLM 이 선택 판단
  3. search_docs + calculator + 메모리(MemorySaver/thread_id)로 조립
  4. agent.invoke 한 줄을 Flask /ask 로 감싸 통합 웹 데모
  5. build_trace 로 도구 선택 과정을 trace 시각화(좌:대화·우:패널)
1 / 9

목차 — Session 30

키보드 단축키 (뷰어)

네비게이션

다음 슬라이드 Space
이전 슬라이드 PgUp
처음 / 끝Home End
목차M

화면

전체화면F
테마 전환D
글자 크게 / 작게+ -
원래 크기 (100%)=
도움말 (열기/닫기)H ?
닫기 (모든 오버레이)Esc
강의 종료 (메인으로)Q

키보드 단축키 (강사)

네비게이션

다음 슬라이드 Space
이전 슬라이드 PgUp
처음 / 끝Home End
목차 (Menu)M
전체화면F

화면

테마 전환D
도움말 (열기/닫기)H ?
닫기 (모든 오버레이)Esc
툴바 펼치기 / 접기[ ]
강의 종료 (메인으로)Q

화면 확대

글자 크게 / 작게+ -
원래 크기 (100%)=
돋보기 (마우스 따라 2× 확대)V

발표자 도구 (PPT 호환)

화이트 화면W ,
블랙 화면B .
레이저 포인터L
펜 모드 ON/OFFP
펜 색상1 2 3 4
펜 자국 지우기 (현재 슬라이드)E
펜 — 마지막 스트로크 취소 (Undo)Z
펜 — 다시 (Redo)R
⏰ 쉬는시간 타이머T
📱 노트뷰 QR (휴대폰 동기화)N

PDF / 종료

PDF 저장 (슬라이드)Ctrl+P
강의 종료 (메인으로)Q X