Alroha

[스나이퍼팩토리] 카카오클라우드 - 클라우드 개발자 교육 6주차(2) 본문

IT/Kakao cloud 부트캠프

[스나이퍼팩토리] 카카오클라우드 - 클라우드 개발자 교육 6주차(2)

헤이로하 2025. 9. 9. 16:18

🤖 9월 9일 – OpenAI API, Agent, RAG 심화

🔗실습링크: https://github.com/heyroha/KakaoCloud/tree/main/HW/September/9%EC%9B%94%209%EC%9D%BC

 

KakaoCloud/HW/September/9월 9일 at main · heyroha/KakaoCloud

Contribute to heyroha/KakaoCloud development by creating an account on GitHub.

github.com

 

🌐 OpenAI API 

OpenAI API는 대규모 언어 모델(LLM, Large Language Model)을 손쉽게 활용할 수 있게 해주는 클라우드 기반 서비스다. 단순한 문장 생성뿐 아니라 요약, 번역, 질의응답, 코드 생성, 대화형 에이전트 구축까지 다양한 작업을 지원한다.

📍 주요 특징

  • 자연어 이해와 생성: 질문-답변, 글쓰기, 번역, 요약 가능
  • 코드 지원: 코드 자동완성, 디버깅, 함수 설명
  • 외부 시스템 연동: 함수 호출(Function Calling)로 DB, API, 툴과 연결
  • 대화 지향 구조: system, user, assistant 역할 메시지를 순차적으로 주고받으며 맥락 유지
  • 맞춤형 학습: 파인튜닝(Fine-tuning)을 통해 특정 도메인에 특화된 모델로 확장 가능

📍 API 메시지 구조

  • system: AI의 성격과 행동 지침 정의
  • user: 사용자 입력
  • assistant: AI의 응답
    → 이 구조를 활용하면 챗봇의 말투, 답변 스타일, 역할까지 정밀하게 제어할 수 있다.
  • 아래는 openai API key를 가져와서 간단한 챗봇을 만들어서 활용해 본 것이다. 시스템 프롬프트에 이모티콘, 글자간 조정 등등 조건을 작성하면 그에 맞는 어투, 답변을 출력해준다.


🛠️ 함수 호출(Function Calling)

함수 호출은 GPT 모델이 대화 중 외부 함수나 API를 실행할 수 있는 기능이다.
이 기능으로 인해 챗봇은 단순히 답변만 주는 것이 아니라 실제 계산·검색·데이터 처리 작업을 수행하도록 도와준다.

  일반 챗봇 함수 호출 챗봇
응답 방식 훈련 데이터 기반 답변 외부 함수/API 호출 결과 반환
정확성 할루시네이션 발생 가능 실제 시스템과 연동 → 정확
기능성 대화·조언 위주 DB 조회, 웹 서비스 연동, 맞춤형 정보 제공
한계 최신 정보 반영 불가 실시간 검색 및 연산 가능

예시 시나리오

  • 일반 챗봇: "내일 서울 날씨는 맑을 것 같아요." (훈련 데이터 기반 → 틀릴 수 있음)
  • 함수 호출 챗봇: get_weather("Seoul", "2025-09-10") 실행 → API 응답: "내일 서울은 맑음, 최고 27도"
  • 위에서 작성한 챗봇에 날씨, 계산, 시간 등의 함수를 호출하여 작성하면 아래와 같이 출력이 된다. 
    (원래는 단순하게 텍스트와 답변만 출력하는데, 여기서는 프롬프트 조건에 추가적으로 작성해서 이렇게 작성된 것입니당!)


🗂️ 대화 상태 관리 (Dialogue State Management)

다중 턴 대화에서 맥락을 유지하는 기술. 사용자의 질문이 이어질 때, 이전 발화와 개인 정보를 기억하고 반영해야 자연스러운 대화가 가능하다. -> 즉, 대화가 길어져도 연속성을 보장함.

📍 대화 상태 관리 구성 요소

Intent History 지금까지 요청된 의도의 기록 "비행기 예약" → "호텔 예약"
Entity Memory 대화 속 개체 저장 "뉴욕행 티켓" (도시=뉴욕, 날짜=9/10)
Context Stack 주제의 흐름 유지 항공권 검색 → 결제 안내
User Profile 사용자 선호, 기록 반영 "좌석은 무조건 창가"

 

  • 챗봇에게 정보를 주고 맥락을 기억시킨 뒤 그를 기반으로 취미를 추천해달라고 하는 예제이다. 정보를 기반으로 나이에 적합한 취미들을 추천해줌을 볼 수 있다.

  • 위의 내용에서 시스템 프롬프트와 유저의 정보(직업, 사는곳 등)을 추가로 넣어주면 추천하는 종류가 조금 달라지는 것을 볼 수 있다.


🧑‍💻 Agent (지능형 에이전트)

에이전트는 환경을 인식하고, 추론을 통해 최적의 행동을 선택하고, 결과를 학습하여 성능을 개선하는 지능형 개체다.

📍 Agent의 구조적 특징

  1. 계획 수립(Planning): 목표를 달성하기 위해 필요한 작업을 여러 단계로 분해.
  2. 실행(Action): 실제 API 호출, DB 질의, 파일 처리 등을 수행.
  3. 평가 및 학습(Evaluation): 결과를 점검하고 필요 시 수정·개선.

📍 Agent vs 챗봇 비교

  단순 챗봇 에이전트
역할 입력-출력 기반 응답기 목표 달성을 위해 행동을 하는 지능형 개체
처리 방식 한 발화 단위 응답 다단계 작업 체계적 수행
학습 사전 학습된 모델 의존 실행 결과 반영, 성능 개선
예시 "비행기 예매 링크를 드릴게요" 항공편 검색 + 조건 비교 + 예매까지 실행
  • 에이전트에게 목표(ex. 학습 자료 찾기, 회사 매출 데이터 분석 보고서 작성 등)를 제공하면 단계별로 계획수립, 작업실행, 결과 요약 등 목표에 맞는 작업을 체계적으로 수행하며 그에 맞는 결과를 제공한다.


📚 RAG (Retrieval-Augmented Generation)

RAG는 검색 기반 생성 모델로, LLM이 외부 지식 베이스에서 관련 정보를 검색한 후 답변을 생성한다.

📍 RAG의 필요성

  • 기존 LLM의 한계:
    • 할루시네이션: 사실이 아닌 내용을 만들어내는 문제
    • 지식 업데이트 한계: 학습 시점 이후의 최신 데이터 반영 불가
  • RAG는 외부 문서 검색을 통해 이를 보완 → 정확성과 신뢰성 향상

📍 아키텍처

  1. 문서 저장소(Document Store) – 벡터 DB(Pinecone, FAISS 등)에 임베딩 저장
  2. 검색기(Retriever) – 사용자 쿼리와 가장 유사한 문서 검색
  3. 생성기(Generator) – 검색된 문서 기반으로 근거 포함 답변 생성

📍 워크플로우

사용자 질문 → 쿼리 임베딩 → 문서 검색 → 관련 문서 반환 
→ LLM 입력에 문서 포함 → 신뢰성 있는 답변 생성

📍 RAG 장점

  • 최신 정보 반영 가능
  • 답변에 참고자료 출처 포함
  • 도메인 특화 지식(법률, 의료 등) 반영 용이

📂 문서 전처리와 청킹(Chunking)

RAG의 성능은 문서를 어떻게 쪼개어(Chunk) 저장하느냐에 크게 좌우된다.
긴 문서를 그대로 저장하면 검색 효율이 떨어지고, 너무 잘게 나누면 맥락을 잃게 되기 때문에 전략적 청킹이 필요하다.

1. 고정 크기 청킹(Fixed-size Chunking)

  • 텍스트를 일정한 토큰 수 또는 글자 수 단위로 잘라 저장.
  • 장점: 단순하고 구현 쉬움.
  • 단점: 문맥이 중간에서 끊겨 의미 손실 가능.

2. 맥락 기반 청킹(Contextual Chunking)

  • 문단, 문장, 섹션 등 의미 단위를 기준으로 분리.
  • 장점: 문맥 보존, 검색 시 더 자연스러운 결과.
  • 단점: 길이 불균형 발생 가능.

3. 계층적 청킹(Hierarchical Chunking)

  • 고정 크기 + 맥락 기반을 결합한 방식.
  • 큰 단위(예: 장/절) → 작은 단위(문단/문장) 순서로 계층적 분리.
  • 장점: 검색 정확도 향상, 문맥과 효율성 모두 확보.
  • 단점: 구현이 다소 복잡.

고정 크기 토큰/문자 수 단순, 빠름 문맥 손실 대규모 단순 검색
맥락 기반 문장/문단 문맥 보존 길이 불균형 QA 시스템, 요약
계층적 큰 단위→작은 단위 문맥+효율 구현 복잡 RAG, 도메인 특화 검색

🔎 벡터 임베딩과 검색

RAG의 핵심은 문서를 벡터 공간에 표현하고, 질문과 유사한 문서를 빠르게 찾는 것이다.

  • 벡터 임베딩: 텍스트를 고차원 벡터(예: 768차원)로 변환하여 의미적 유사성을 수치화.
  • OpenAI Embeddings:
    • 다국어 지원 (100+ 언어, 한국어 포함)
    • API 기반, 고품질 임베딩 제공
    • 단점: 유료, 데이터 외부 전송 필요

  • 벡터 데이터베이스(Vector DB):
    • 대규모 벡터를 저장하고 유사도 검색을 수행하는 특수 DB
    • 예시: FAISS, Pinecone, Weaviate, ChromaDB
    • FAISS는 Meta가 개발한 라이브러리로 수백만 벡터를 밀리초 단위로 검색 가능

🧩 컨텍스트(Context)의 역할

컨텍스트란 AI가 답변을 생성할 때 참고하는 배경 지식이다.

  • 역할:
    • 정확성 보장 (검색된 문서를 근거로 답변)
    • 범위 제한 (주제와 상관없는 답변 방지)
    • 신뢰성 확보 (출처 기반 응답)

예시:
사용자 질문: “파이썬에서 리스트 정렬 방법은?”
컨텍스트:

  • 문서1: list.sort()는 리스트를 오름차순 정렬.
  • 문서2: sorted()는 새로운 정렬된 리스트 반환.
  • 문서3: reverse=True 옵션으로 내림차순 정렬 가능.
    → 최종 답변: 위 문서들의 근거를 종합해 더 구체적이고 신뢰성 있는 응답을 제공한다.

✨ 회고

- 이전에 잠깐 챗봇 프로젝트를 했었을때에는 gpt에만 의존하고 제대로 배웠다는 느낌이 없었는데, 한줄씩 직접 코드를 쳐보면서 실행해보고 결과를 보니까 어떻게 동작이 되는건지 아주 약간은 와닿는 것..같다. 또, 언어모델 api 호출해서 연구할때 role이나 prompt 입력 과정에 대해서 모른채로 막무가내로 프로젝트 했을때는 계속 오류나고 호출도 잘 안되는게 반복되다보니 살짝 트라우마가 있었는데 그래도 그런 삽질했던 과정이 있어서 그런지 오늘은 전보다 조금 재미있게 실습 진행했다! 그래도 계속 여기저기서 오류가 나는데 앞으로 하나씩 보완해 나가야겠다!.! 화이링~💪🏻

본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 2기(B-log) 리뷰로 작성 되었습니다.

AIaaS, AIaaS마스터클래스2기, 개발자교육, 부트캠프, 스나이퍼팩토리, 카카오엔터프라이즈, 카카오클라우드, 클라우드개발자, 클라우드엔지니어, 한국생산성본부