실습 안내 · 1

RAG 챗봇 기초 만들기

도구 설치부터 벡터DB까지

개발 도구를 설치하고, OpenAI API로 AI와 대화하고, LangChain과 Streamlit, 벡터DB를 차례로 다뤄 봅니다. 여기까지 하면 RAG 챗봇을 만들 준비가 끝납니다.

준비

준비 확인

오늘 쓰는 파일과 순서를 먼저 확인합니다. 체크한 내용은 이 브라우저에만 저장됩니다.

01_basic 폴더의 파일

파일단계내용
01_OpenAI_Chat_API.ipynb3OpenAI API로 질문하고 답 받기
02_Langchain_Basic.ipynb4LangChain의 다섯 가지 구성 요소
03_Streamlit_app1.py5가장 단순한 웹 화면
04_Streamlit_app2.py5대화를 기억하는 챗봇 화면
05_VectorDB_Search.ipynb6임베딩과 벡터DB 검색
pyproject.toml, uv.lock2설치할 패키지 목록
헷갈리기 쉬운 점
  • .ipynb는 노트북 파일입니다. 코드를 한 칸(셀)씩 실행하고 결과를 바로 아래에서 봅니다.
  • .py는 파이썬 파일입니다. 터미널에서 명령으로 통째로 실행합니다.
  • API 키는 .env 파일에만 둡니다. 채팅창이나 코드에 붙여 넣지 않습니다.
1단계

개발 도구 설치하기

코드를 쓰고 실행할 작업 공간을 만듭니다. 설치할 것은 VS Code와 익스텐션입니다. 이미 설치된 것은 건너뜁니다.

파이썬은 따로 설치하지 않아도 됩니다

이 과정에서는 uv가 파이썬을 대신 설치합니다. 2단계에서 uv sync를 실행하면 실습에 맞는 버전(3.12)을 자동으로 내려받아 실습 폴더 안에 준비합니다.

  • PC에 파이썬이 없어도 실습할 수 있습니다.
  • 이미 다른 버전이 설치돼 있어도 그대로 두면 됩니다. 실습은 uv가 준비한 버전으로 돌아갑니다.
그래도 파이썬을 직접 설치하려면

uv 없이 파이썬을 쓸 일이 있을 때 참고합니다. 이 실습에는 필요하지 않습니다.

  1. https://www.python.org/downloads에서 설치 파일을 내려받습니다.
  2. 설치 첫 화면에서 Add Python to PATH를 체크한 뒤 설치합니다.

1. VS Code 설치

  1. https://code.visualstudio.com/에서 내 운영체제에 맞는 설치 파일을 내려받아 실행합니다.

2. 익스텐션 설치

VS Code 왼쪽 메뉴의 Extensions를 누르고, 아래 이름을 검색해 설치합니다.

검색어설치할 것용도
pythonMicrosoft의 Python파이썬 코드 실행
jupyterMicrosoft의 Jupyter노트북(.ipynb) 열기와 실행
codexOpenAI의 CodexAI 코딩 도구
koreanKorean Language Pack (선택)메뉴를 한글로 표시

3. Codex 확인하기

  1. VS Code 오른쪽의 Codex 탭을 선택합니다. 초기 설정 화면이 나오면 아래쪽 다음을 눌러 진행합니다.
  2. 로그인 화면이 나오면 로그인합니다.
  3. 설정이 끝나면 사용할 모델과 추론 수준을 고를 수 있습니다.
확인할 것
  • VS Code 익스텐션 목록에 Python, Jupyter, Codex가 설치됨으로 나오나요?
  • Codex 탭에 글을 입력할 수 있는 창이 보이나요?
설치가 어렵다면: Colab으로 노트북만 실습하기

Google Colab은 설치 없이 브라우저에서 노트북을 실행하는 서비스입니다. 구글 계정으로 https://colab.research.google.com/에 접속해 노트북 파일을 올리면 됩니다. PC에 설치가 안 될 때의 대안입니다.

Colab에서 되는 것Colab에서 안 되는 것
3단계 01_OpenAI_Chat_API.ipynb
4단계 02_Langchain_Basic.ipynb
6단계 05_VectorDB_Search.ipynb
5단계 Streamlit 화면 실습
2번, 3번 실습 (Codex, uv, GitHub 배포)
  • 패키지 설치와 API 키 넣는 방법이 PC와 다릅니다. Colab으로 할 때는 강사의 안내에 따릅니다.
  • 2번 실습부터는 VS Code와 Codex가 꼭 필요합니다. Colab은 1번 실습의 노트북까지만 대신할 수 있습니다.
2단계

실습 환경 맞추기

모두가 같은 버전의 패키지로 실습하도록 환경을 맞춥니다. uv가 01_basic 폴더의 목록대로 한 번에 설치합니다.

1. 폴더 열기

  1. VS Code에서 파일 → 폴더 열기로 01_basic 폴더를 엽니다. 실습파일 전체가 아니라 01_basic을 엽니다.
  2. 터미널 → 새 터미널로 터미널을 엽니다.

2. uv 설치

uv는 파이썬 패키지와 가상환경을 관리하는 도구입니다. 공식 안내는 https://docs.astral.sh/uv/에 있습니다.

Windows · PowerShell에서 설치
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
macOS · 터미널에서 설치
curl -LsSf https://astral.sh/uv/install.sh | sh

설치한 뒤 VS Code를 닫았다가 다시 엽니다. 새로 열어야 uv 명령을 찾습니다.

3. 환경 동기화

VS Code 터미널에서
uv sync

처음에는 패키지를 내려받느라 몇 분 걸립니다. 끝나면 폴더에 .venv가 생깁니다. 노트북 실행에 필요한 ipykernel과 pandas도 이때 함께 설치됩니다.

4. 노트북 커널 선택

  1. 01_OpenAI_Chat_API.ipynb를 엽니다.
  2. 오른쪽 위의 커널 선택을 누릅니다.
  3. Python 환경을 고르고, 목록에서 .venv가 붙은 항목을 선택합니다.
확인할 것
  • 터미널에서 uv --version을 실행하면 버전 번호가 나오나요?
  • 01_basic 폴더에 .venv 폴더가 생겼나요?
  • 노트북 오른쪽 위에 .venv가 표시되나요?
커널 목록에 .venv가 안 보이면
  • VS Code에서 연 폴더가 01_basic인지 확인합니다. 상위 폴더를 열면 .venv를 찾지 못합니다.
  • uv sync가 오류 없이 끝났는지 터미널을 확인합니다.
3단계

AI와 직접 대화해보기

파이썬 코드로 OpenAI API에 질문을 보내고 답을 받습니다. ChatGPT 화면 없이 AI를 부르는 방법입니다.

파일01_OpenAI_Chat_API.ipynb
실행 방법셀을 누르고 Shift + Enter. 위에서부터 차례로 실행합니다.

API를 부르는 다섯 단계

  1. 1라이브러리 설치uv sync로 이미 끝남
  2. 2API 키 설정.env에서 읽어 옴
  3. 3질문 준비질문을 프롬프트로 작성
  4. 4API 호출OpenAI 서버에 전송
  5. 5응답 받기답을 프로그램에서 사용

노트북의 실습 순서

실습배우는 것
환경 설정load_dotenv()로 .env의 키 불러오기
실습 1첫 번째 질문 보내고 output_text로 답 확인하기
실습 2질문을 변수로 만들어 내용만 바꾸기
실습 3f-string으로 여러 조건을 넣은 프롬프트 만들기
실습 4instructions로 역할과 응답 원칙 지정하기
실습 5출력 항목, 개수, 길이 지정하기
실습 6예시를 주고 같은 형식으로 답하게 하기
실습 7파이썬이 만든 표를 AI에게 넘겨 해석시키기
이미지 분석data/graph02.png 그래프를 보여 주고 설명 받기
오디오 출력답변을 음성 파일 sample.wav로 저장하기
확인할 것
  • load_dotenv() 셀을 실행하면 True가 나오나요? False면 .env를 찾지 못한 것입니다.
  • 실습 1에서 "답변:" 아래에 한 문장이 나오나요?
  • 같은 셀을 두 번 실행하면 답이 똑같은가요, 조금 다른가요?

직접 해 보기

  • 실습 2의 question을 내 업무에 관한 질문으로 바꿔 실행합니다.
  • 실습 3의 goal, daily_time, level 값을 바꿔 계획이 어떻게 달라지는지 봅니다.
  • 실습 4의 instructions에서 역할을 "초등학교 선생님"으로 바꿔 말투가 달라지는지 봅니다.
오류가 나면
  • 오류 메시지에 api_key가 보이면 load_dotenv() 셀을 먼저 실행했는지 확인합니다.
  • 그래도 안 되면 오류 메시지를 복사해 Codex에게 "이 오류의 원인을 알려줘"라고 물어봅니다.
내 API 키를 직접 발급받으려면

수업에서는 받은 키를 씁니다. 수업 뒤에 혼자 실습할 때는 직접 발급받습니다.

  1. https://platform.openai.com/api-keys에 로그인합니다.
  2. Create new secret key를 눌러 키를 만들고, 바로 복사해 안전한 곳에 저장합니다. 다시 볼 수 없습니다.
  3. 환경 설정에서 결제할 카드를 등록하고, 사전 충전(Prepaid) 방식으로 금액을 결제합니다.
  4. .env 파일의 OPENAI_API_KEY= 뒤를 새 키로 바꿉니다.
4단계

AI 앱에 뼈대 잡기

LangChain은 프롬프트, 모델, 출력 처리를 부품처럼 연결하게 해 주는 프레임워크입니다. 부품을 | 기호로 이어 붙이는 방법을 익힙니다.

파일02_Langchain_Basic.ipynb
실행 방법커널이 .venv인지 확인하고, 위에서부터 Shift + Enter

다섯 가지 구성 요소

구성 요소하는 일노트북에서 쓰는 것
1. 모델답을 만드는 AIChatOpenAI
2. 메시지사용자, AI, 시스템의 말을 구분HumanMessage, AIMessage, SystemMessage
3. 프롬프트 템플릿빈칸이 있는 질문 틀PromptTemplate, ChatPromptTemplate
4. 출력 파서답을 원하는 형태로 정리StrOutputParser, JsonOutputParser
5. 메모리앞의 대화를 기억RunnableWithMessageHistory
확인할 것
  • response.content와 response를 각각 출력하면 무엇이 다른가요?
  • response.usage_metadata에서 토큰 사용량이 보이나요? 요금은 이 숫자로 계산됩니다.
  • 시스템 메시지를 번역 어시스턴트로 준 뒤 "Peace"만 보내도 번역이 나오나요?
  • 메모리 부분에서 "여기에 숫자 2를 곱하면 얼마인가요?"에 앞의 숫자를 기억하고 답하나요?

직접 해 보기

노트북 끝의 [실습]을 풉니다. 영어 문장을 넣으면 한국어로 번역하는 체인을 PromptTemplate, ChatOpenAI, StrOutputParser로 만들고 2회 이상 실행합니다. 먼저 직접 써 본 뒤 아래의 Solution과 비교합니다.

이 구조가 뒤에서 다시 나옵니다
  • 프롬프트 | 모델 | 파서로 잇는 방식은 여비 챗봇의 app.py에서도 그대로 씁니다.
5단계

채팅 화면 만들기

Streamlit은 파이썬 코드만으로 웹 화면을 만드는 도구입니다. 화면 하나를 띄워 보고, 대화를 기억하는 챗봇 화면까지 실행합니다.

1. 가장 단순한 화면

VS Code 터미널에서
uv run streamlit run 03_Streamlit_app1.py

브라우저가 열리고 "간단한 챗봇"이라는 제목이 보입니다. 끝낼 때는 터미널에서 Ctrl + C를 누릅니다.

2. 직접 해 보기: 인사 앱으로 바꾸기

03_Streamlit_app1.py의 st.title 줄 아래에 두 줄을 추가하고 저장합니다. 브라우저에서 Rerun을 누르면 바로 반영됩니다.

03_Streamlit_app1.py에 추가할 코드
name = st.text_input("당신의 이름을 입력하세요")
if name: st.write(f"안녕하세요, {name}님! 반갑습니다!")

3. 대화를 기억하는 챗봇

VS Code 터미널에서
uv run streamlit run 04_Streamlit_app2.py

4단계에서 배운 프롬프트 템플릿, 모델, 메모리가 화면과 합쳐진 것입니다. 대화 주제를 고르고 메시지를 입력합니다.

확인할 것
  • 이름을 입력하면 인사말이 나오나요?
  • 챗봇에 "내 이름은 ○○야"라고 한 뒤 "내 이름이 뭐지?"라고 물으면 기억하나요?
  • 주제를 "수학"으로 두고 요리 질문을 하면 "잘 모르겠습니다"라고 답하나요?
터미널을 닫지 마세요
  • 터미널이 화면을 돌리고 있습니다. 닫거나 Ctrl + C를 누르면 브라우저의 화면도 멈춥니다.
  • 다른 파일을 실행하려면 먼저 Ctrl + C로 끝낸 뒤 새 명령을 넣습니다.
6단계

내 문서를 AI에 연결하기

RAG는 질문과 관련된 문서를 먼저 찾아 AI에게 함께 넘기는 방법입니다. 그 바탕이 되는 임베딩과 벡터DB 검색을 직접 실행합니다.

파일05_VectorDB_Search.ipynb
실행 방법커널이 .venv인지 확인하고, 위에서부터 Shift + Enter

두 가지 개념

임베딩글을 숫자 목록(벡터)으로 바꾸는 일. 뜻이 비슷한 글은 숫자도 비슷해집니다.
벡터DB벡터를 저장해 두고, 질문과 가까운 것을 빠르게 찾아 주는 저장소. 여기서는 FAISS를 씁니다.

노트북의 순서

부분배우는 것
1. Embeddings문장 하나와 여러 문장을 벡터로 바꾸기
2-(1) 벡터 생성글과 문서로 FAISS 벡터DB 만들기
2-(2) 저장과 불러오기save_local, load_local
2-(3) 유사도 검색질문과 가까운 문서 찾기, 개수(k)와 필터 지정
2-(4) 검색기as_retriever로 검색기 만들기
2-(5) 코사인 유사도거리 대신 유사도로 비교하기
2-(6) 문서 추가만들어 둔 벡터DB에 새 문서 넣기
확인할 것
  • len(query_result)가 1536으로 나오나요? 문장 하나가 숫자 1536개로 바뀐 것입니다.
  • save_local을 실행한 뒤 폴더에 faiss_index가 생겼나요?
  • "인공지능에 대해 알려줘"로 검색했을 때 인공지능 문서가 맨 위에 나오나요?
  • k=2로 바꾸면 결과가 2개만 나오나요?
  • 점수는 작을수록 비슷한 것인가요, 클수록 비슷한 것인가요? 노트북의 설명에서 찾아보세요.

직접 해 보기

노트북 끝의 [실습]을 풉니다. 서울, 부산, 제주의 관광지 설명 3개를 벡터DB에 넣고, 질문에 맞는 관광지를 찾는 추천 시스템을 만듭니다. 먼저 직접 써 본 뒤 Solution과 비교합니다.

"바다가 보고 싶어"처럼 설명에 없는 단어로 물어도 부산이 나오는지 확인해 보세요. 단어가 아니라 뜻으로 찾는다는 것이 임베딩 검색의 핵심입니다.

다음

RAG 챗봇 만들기로

지금까지 익힌 네 가지를 합치면 RAG 챗봇이 됩니다.

오늘 익힌 것RAG 챗봇에서 맡는 일
OpenAI API임베딩과 답변 생성
LangChain검색 결과와 질문을 프롬프트로 묶어 모델에 전달
Streamlit질문을 입력하고 답을 보는 화면
벡터DB문서 조각을 저장하고 질문과 가까운 것 찾기

다음 실습에서는 공무원 여비 문서로 실제 챗봇을 만들고 배포합니다. 이번에는 코드를 직접 쓰지 않고 Codex에게 프롬프트로 맡깁니다.

다음 실습공무원 여비 RAG 챗봇 만들기 · 프로젝트 설정부터 배포까지
실습파일의 chatbot 폴더를 씁니다.