준비 확인
오늘 쓰는 파일과 순서를 먼저 확인합니다. 체크한 내용은 이 브라우저에만 저장됩니다.
01_basic 폴더의 파일
| 파일 | 단계 | 내용 |
|---|---|---|
01_OpenAI_Chat_API.ipynb | 3 | OpenAI API로 질문하고 답 받기 |
02_Langchain_Basic.ipynb | 4 | LangChain의 다섯 가지 구성 요소 |
03_Streamlit_app1.py | 5 | 가장 단순한 웹 화면 |
04_Streamlit_app2.py | 5 | 대화를 기억하는 챗봇 화면 |
05_VectorDB_Search.ipynb | 6 | 임베딩과 벡터DB 검색 |
pyproject.toml, uv.lock | 2 | 설치할 패키지 목록 |
.ipynb는 노트북 파일입니다. 코드를 한 칸(셀)씩 실행하고 결과를 바로 아래에서 봅니다..py는 파이썬 파일입니다. 터미널에서 명령으로 통째로 실행합니다.- API 키는
.env파일에만 둡니다. 채팅창이나 코드에 붙여 넣지 않습니다.
개발 도구 설치하기
코드를 쓰고 실행할 작업 공간을 만듭니다. 설치할 것은 VS Code와 익스텐션입니다. 이미 설치된 것은 건너뜁니다.
파이썬은 따로 설치하지 않아도 됩니다
이 과정에서는 uv가 파이썬을 대신 설치합니다. 2단계에서 uv sync를 실행하면 실습에 맞는 버전(3.12)을 자동으로 내려받아 실습 폴더 안에 준비합니다.
- PC에 파이썬이 없어도 실습할 수 있습니다.
- 이미 다른 버전이 설치돼 있어도 그대로 두면 됩니다. 실습은 uv가 준비한 버전으로 돌아갑니다.
그래도 파이썬을 직접 설치하려면
uv 없이 파이썬을 쓸 일이 있을 때 참고합니다. 이 실습에는 필요하지 않습니다.
- https://www.python.org/downloads에서 설치 파일을 내려받습니다.
- 설치 첫 화면에서 Add Python to PATH를 체크한 뒤 설치합니다.
1. VS Code 설치
- https://code.visualstudio.com/에서 내 운영체제에 맞는 설치 파일을 내려받아 실행합니다.
2. 익스텐션 설치
VS Code 왼쪽 메뉴의 Extensions를 누르고, 아래 이름을 검색해 설치합니다.
| 검색어 | 설치할 것 | 용도 |
|---|---|---|
| python | Microsoft의 Python | 파이썬 코드 실행 |
| jupyter | Microsoft의 Jupyter | 노트북(.ipynb) 열기와 실행 |
| codex | OpenAI의 Codex | AI 코딩 도구 |
| korean | Korean Language Pack (선택) | 메뉴를 한글로 표시 |
3. Codex 확인하기
- VS Code 오른쪽의 Codex 탭을 선택합니다. 초기 설정 화면이 나오면 아래쪽 다음을 눌러 진행합니다.
- 로그인 화면이 나오면 로그인합니다.
- 설정이 끝나면 사용할 모델과 추론 수준을 고를 수 있습니다.
- VS Code 익스텐션 목록에 Python, Jupyter, Codex가 설치됨으로 나오나요?
- Codex 탭에 글을 입력할 수 있는 창이 보이나요?
설치가 어렵다면: Colab으로 노트북만 실습하기
Google Colab은 설치 없이 브라우저에서 노트북을 실행하는 서비스입니다. 구글 계정으로 https://colab.research.google.com/에 접속해 노트북 파일을 올리면 됩니다. PC에 설치가 안 될 때의 대안입니다.
| Colab에서 되는 것 | Colab에서 안 되는 것 |
|---|---|
3단계 01_OpenAI_Chat_API.ipynb4단계 02_Langchain_Basic.ipynb6단계 05_VectorDB_Search.ipynb | 5단계 Streamlit 화면 실습 2번, 3번 실습 (Codex, uv, GitHub 배포) |
- 패키지 설치와 API 키 넣는 방법이 PC와 다릅니다. Colab으로 할 때는 강사의 안내에 따릅니다.
- 2번 실습부터는 VS Code와 Codex가 꼭 필요합니다. Colab은 1번 실습의 노트북까지만 대신할 수 있습니다.
실습 환경 맞추기
모두가 같은 버전의 패키지로 실습하도록 환경을 맞춥니다. uv가 01_basic 폴더의 목록대로 한 번에 설치합니다.
1. 폴더 열기
- VS Code에서 파일 → 폴더 열기로
01_basic폴더를 엽니다. 실습파일 전체가 아니라01_basic을 엽니다. - 터미널 → 새 터미널로 터미널을 엽니다.
2. uv 설치
uv는 파이썬 패키지와 가상환경을 관리하는 도구입니다. 공식 안내는 https://docs.astral.sh/uv/에 있습니다.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
curl -LsSf https://astral.sh/uv/install.sh | sh
설치한 뒤 VS Code를 닫았다가 다시 엽니다. 새로 열어야 uv 명령을 찾습니다.
3. 환경 동기화
uv sync
처음에는 패키지를 내려받느라 몇 분 걸립니다. 끝나면 폴더에 .venv가 생깁니다. 노트북 실행에 필요한 ipykernel과 pandas도 이때 함께 설치됩니다.
4. 노트북 커널 선택
01_OpenAI_Chat_API.ipynb를 엽니다.- 오른쪽 위의 커널 선택을 누릅니다.
- Python 환경을 고르고, 목록에서
.venv가 붙은 항목을 선택합니다.
- 터미널에서
uv --version을 실행하면 버전 번호가 나오나요? 01_basic폴더에.venv폴더가 생겼나요?- 노트북 오른쪽 위에
.venv가 표시되나요?
- VS Code에서 연 폴더가
01_basic인지 확인합니다. 상위 폴더를 열면.venv를 찾지 못합니다. uv sync가 오류 없이 끝났는지 터미널을 확인합니다.
AI와 직접 대화해보기
파이썬 코드로 OpenAI API에 질문을 보내고 답을 받습니다. ChatGPT 화면 없이 AI를 부르는 방법입니다.
| 파일 | 01_OpenAI_Chat_API.ipynb |
| 실행 방법 | 셀을 누르고 Shift + Enter. 위에서부터 차례로 실행합니다. |
API를 부르는 다섯 단계
- 1라이브러리 설치uv sync로 이미 끝남
- 2API 키 설정.env에서 읽어 옴
- 3질문 준비질문을 프롬프트로 작성
- 4API 호출OpenAI 서버에 전송
- 5응답 받기답을 프로그램에서 사용
노트북의 실습 순서
| 실습 | 배우는 것 |
|---|---|
| 환경 설정 | load_dotenv()로 .env의 키 불러오기 |
| 실습 1 | 첫 번째 질문 보내고 output_text로 답 확인하기 |
| 실습 2 | 질문을 변수로 만들어 내용만 바꾸기 |
| 실습 3 | f-string으로 여러 조건을 넣은 프롬프트 만들기 |
| 실습 4 | instructions로 역할과 응답 원칙 지정하기 |
| 실습 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 키를 직접 발급받으려면
수업에서는 받은 키를 씁니다. 수업 뒤에 혼자 실습할 때는 직접 발급받습니다.
- https://platform.openai.com/api-keys에 로그인합니다.
- Create new secret key를 눌러 키를 만들고, 바로 복사해 안전한 곳에 저장합니다. 다시 볼 수 없습니다.
- 환경 설정에서 결제할 카드를 등록하고, 사전 충전(Prepaid) 방식으로 금액을 결제합니다.
.env파일의OPENAI_API_KEY=뒤를 새 키로 바꿉니다.
AI 앱에 뼈대 잡기
LangChain은 프롬프트, 모델, 출력 처리를 부품처럼 연결하게 해 주는 프레임워크입니다. 부품을 | 기호로 이어 붙이는 방법을 익힙니다.
| 파일 | 02_Langchain_Basic.ipynb |
| 실행 방법 | 커널이 .venv인지 확인하고, 위에서부터 Shift + Enter |
다섯 가지 구성 요소
| 구성 요소 | 하는 일 | 노트북에서 쓰는 것 |
|---|---|---|
| 1. 모델 | 답을 만드는 AI | ChatOpenAI |
| 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에서도 그대로 씁니다.
채팅 화면 만들기
Streamlit은 파이썬 코드만으로 웹 화면을 만드는 도구입니다. 화면 하나를 띄워 보고, 대화를 기억하는 챗봇 화면까지 실행합니다.
1. 가장 단순한 화면
uv run streamlit run 03_Streamlit_app1.py
브라우저가 열리고 "간단한 챗봇"이라는 제목이 보입니다. 끝낼 때는 터미널에서 Ctrl + C를 누릅니다.
2. 직접 해 보기: 인사 앱으로 바꾸기
03_Streamlit_app1.py의 st.title 줄 아래에 두 줄을 추가하고 저장합니다. 브라우저에서 Rerun을 누르면 바로 반영됩니다.
name = st.text_input("당신의 이름을 입력하세요")
if name: st.write(f"안녕하세요, {name}님! 반갑습니다!")3. 대화를 기억하는 챗봇
uv run streamlit run 04_Streamlit_app2.py
4단계에서 배운 프롬프트 템플릿, 모델, 메모리가 화면과 합쳐진 것입니다. 대화 주제를 고르고 메시지를 입력합니다.
- 이름을 입력하면 인사말이 나오나요?
- 챗봇에 "내 이름은 ○○야"라고 한 뒤 "내 이름이 뭐지?"라고 물으면 기억하나요?
- 주제를 "수학"으로 두고 요리 질문을 하면 "잘 모르겠습니다"라고 답하나요?
- 터미널이 화면을 돌리고 있습니다. 닫거나 Ctrl + C를 누르면 브라우저의 화면도 멈춥니다.
- 다른 파일을 실행하려면 먼저 Ctrl + C로 끝낸 뒤 새 명령을 넣습니다.
내 문서를 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 폴더를 씁니다. |