과정 안내
과정 로드맵과 STEP 요약
8개 장을 4개 STEP 으로 묶었습니다. 이 쪽에서는 STEP 마다 무엇을 배우고 무엇을 만드는지, 장끼리 어떻게 이어지는지를 한눈에 봅니다. 장의 자세한 내용은 표의 장 번호를 눌러 봅니다. 실습을 돌리기 전에 필요한 것은 실습 코드 사용 안내에 있습니다.
과정 한눈에
동네 식당 하나를 여는 일에 빗대 볼 수 있습니다. 먼저 요리사가 어떤 사람인지 알고 주방 기구를 들여놓습니다. 다음에는 주문을 받아 요리로 내는 순서를 정하고, 단골의 취향을 기억하게 합니다. 그다음 창고의 재료(데이터)와 요리책(문서)을 요리사가 꺼내 쓰게 합니다. 마지막으로 손님이 앉는 홀과 키오스크를 차리고 문을 엽니다. 여기서 요리사가 LLM 이고, 주방 기구가 가상환경과 API 키, 요리 순서가 LCEL 체인, 창고와 요리책이 도구(MCP)와 문서 검색(RAG), 홀과 키오스크가 Streamlit 웹 화면입니다. 실제 식당과 다른 점은, 이 요리사는 단골을 스스로 기억하지 못해서 우리 코드가 매번 지난 주문을 일러 줘야 한다는 것입니다.
정거장 하나가 STEP 하나이고, 정거장 안에 그 STEP 의 장 번호와 아래에 짧은 설명이 있습니다. 화살표를 따라가면 앞 STEP 에서 만든 부품이 뒤 STEP 에서 하나의 챗봇으로 합쳐집니다.
| STEP | 이름 | 장 | 한 줄 요약 |
|---|---|---|---|
| 1 | 챗봇과 개발 환경 | 1~2장 | LLM 의 성질을 알고, 가상환경과 API 키를 갖춰 첫 질문을 보낸다 |
| 2 | LCEL 체인과 대화 기억 | 3~4장 | 프롬프트·모델·파서를 체인으로 잇고, 구조화된 출력과 메모리 전략을 익힌다 |
| 3 | 도구와 문서로 넓히기 | 5~6장 | 도구 호출과 MCP 로 데이터를, RAG 로 문서를 모델에 잇는다 |
| 4 | 웹 화면과 나만의 챗봇 | 7~8장 | Streamlit 웹 화면에 올려 배포하고, 나만의 챗봇을 설계해 시연한다 |
장을 건너 이어지는 실습
과정 내내 가상의 여행사 "구름다리여행"을 소재로 씁니다. 회사, 상품, 규정, 대화는 모두 지어낸 것입니다.
| 소재 | 지나는 장 | 하는 일 |
|---|---|---|
자주 묻는 질문 faq.csv | 1장 → 3장 → 5장 | 규칙 챗봇의 정답표에서, Q&A 체인의 프롬프트로, MCP 서버가 읽는 자료로 쓴다 |
상담 대화 chat_log.json | 1장 → 4장 | 보내는 토큰을 세는 데서, Window·Summary 메모리를 견주는 데로 이어진다 |
상품 목록 trip_products.csv | 5장 | 상품 찾기·요금 계산 도구와 MCP 서버의 자료가 된다 |
여행 약관 travel_terms.pdf | 6장 → 7장 | 조각 내어 FAISS 로 색인하고, 같은 검색을 웹 화면의 문서 챗봇에 붙인다 |
연습용 임베딩 BigramEmbeddings | 6장 → 7장 → 8장 | 키 없이 검색을 돌려 보는 대역으로 쓰고, 진짜 임베딩과 견준다 |
| 약관·FAQ·상품 목록 | 5장·6장 → 8장 | 종합 상담 챗봇에서 약관 검색, 상품 찾기 도구, 대화 기억, 웹 화면으로 묶는다 |
STEP 1. 챗봇과 개발 환경
새 식당의 주인이 요리사를 뽑고 주방을 차리는 단계입니다. 요리사(LLM)가 무엇을 잘하고 무엇을 못하는지 알아야 메뉴를 짤 수 있고, 가스와 칼(가상환경과 API 키)이 갖춰져야 첫 요리를 낼 수 있습니다.
왼쪽 칸이 이 STEP 에서 배우는 개념, 가운데 칸이 실습과 프로젝트에서 만드는 것, 오른쪽 칸이 다음 STEP 에서 다시 쓰는 것입니다. 아래 STEP 의 그림도 같은 순서로 읽습니다.
| 장 | 제목 | 실습과 프로젝트에서 만드는 것 |
|---|---|---|
| 1장 | 과정 소개와 LLM 의 이해 | 규칙 챗봇, 다음 낱말 맞히기 모델, 토큰·요금 어림, 온도 실험, 대화 비용 계산기 |
| 2장 | 개발 환경 준비 | 가상환경 점검, .env 읽기, OpenAI 라이브러리와 ChatOpenAI 로 첫 질문, 오류 안내, 내 PC 점검표 |
- 규칙 챗봇은 사람이 정한 낱말에만 답합니다. 1장 실습 1의 규칙 챗봇은 손님 질문 20개 가운데 11개만 맞혔습니다.
- LLM 은 "다음 낱말 맞히기"를 되풀이해 글을 쓰고, 글을 토큰 조각으로 셉니다. 요금, 길이 제한, 속도가 모두 토큰 수로 정해집니다.
- LLM API 는 기억하지 못하므로 앞의 대화를 매번 함께 보내야 하고, 대화가 길어질수록 보내는 토큰이 늘어납니다.
- API 키는 코드에 적지 않고
.env에 두며,load_dotenv(find_dotenv(usecwd=True))로 읽습니다..gitignore가.env를 올리지 않게 막습니다. - 오류는 번호로 읽습니다. 401 은 키, 429 는 한도, 404 는 모델 이름을 확인합니다.
STEP 2. LCEL 체인과 대화 기억
주문을 받아 요리로 내는 순서를 정하고, 단골의 지난 주문을 기억하는 단계입니다. 주문서(프롬프트), 요리사(모델), 담는 접시(파서)를 한 줄로 세우면 같은 순서로 몇 번이고 요리가 나옵니다.
| 장 | 제목 | 실습과 프로젝트에서 만드는 것 |
|---|---|---|
| 3장 | LangChain 기본 구조와 LCEL | 프롬프트 템플릿, 가짜 모델 체인, 구름다리여행 Q&A 체인, 프롬프트 견주기, 요약·키워드 갈래 체인, 여행지 소개 체인 |
| 4장 | 대화형 챗봇과 메모리 전략 | Pydantic 틀, 요청 글에서 조건 뽑기, 세션별 기록, 기억하는 여행 비서, Window·Summary 메모리, 세 전략 견주기 |
- LCEL 은 부품을
|로 이어 체인을 만드는 방식입니다.prompt | model | parser에서 앞 부품의 결과가 뒤 부품의 입력이 됩니다. - 모든 부품은
invoke(하나),batch(여럿),stream(조각) 세 손잡이를 가집니다. - 역할·형식·제약 지시와 퓨샷 예시는 답의 꼴을 잡습니다. 3장 실습 4에서 보내는 토큰은 13, 91, 173 으로 늘었습니다.
- 구조화된 출력은 답을 정해 둔 칸으로 받는 것이고, Pydantic 틀이 조건을 어긴 값을 걸러 냅니다. 4장 실습 1에서 일부러 틀린 값 넷은 모두 걸렸습니다.
- 모델은 기억하지 않으므로 우리 코드가 세션마다 기록을 들고 다닙니다. 짧은 상담은 모두 보내기, 긴 상담은 Summary, 앞의 일이 필요 없는 FAQ 는 Window 가 알맞습니다.
STEP 3. 도구와 문서로 넓히기
요리사가 창고의 재료 장부를 직접 들여다보고, 요리책을 펼쳐 정확한 분량을 확인하게 하는 단계입니다. 요리사는 "장부에서 이것을 찾아 달라"고 말하고, 찾는 일은 주방 직원(우리 코드)이 합니다.
| 장 | 제목 | 실습과 프로젝트에서 만드는 것 |
|---|---|---|
| 5장 | LLM 외부 도구 연동 | @tool 상품 찾기·요금 계산 도구, 도구 실행기, bind_tools 모델, 상품 자료 MCP 서버, MCP 도구를 쓰는 에이전트, 데이터를 찾아 답하는 챗봇 |
| 6장 | 문서 기반 챗봇 | 약관 PDF 읽기, 청킹 견주기, 연습용 임베딩과 FAISS 색인, RetrievalQA·LCEL 체인, 진짜 임베딩 견주기, 여행 약관 챗봇 |
- Tool Calling 에서 모델은 도구 이름과 인자만 돌려주고, 실행은 우리 코드가 합니다. 결과는 같은
tool_call_id를 단ToolMessage로 돌려줍니다. - MCP 는 AI 앱이 도구를 꽂아 쓰는 열린 규격입니다. 5장 실습 4에서 FastMCP 로 만든 서버의 도구 셋이 LangChain 도구가 되었고, 폴더 밖 경로는 모두 거절됐습니다.
- RAG 는 질문과 관련된 문서 조각을 먼저 찾아 프롬프트에 넣고 그 조각으로 답하게 하는 방법입니다. 색인 단계(읽기 → 나누기 → 임베딩 → 저장)와 질문 단계(검색 → 프롬프트 → 답)로 나뉩니다.
- 6장 실습 3에서 머리글을 지우고 조항 단위로 나누자 연습용 임베딩의 1위 적중이 12개 가운데 6개에서 8개로 올랐습니다. 낱말이 다른 질문은 놓쳐서 진짜 임베딩과 견줍니다.
- 출처는 코드가
metadata에서 붙이고, 문서에 없는 질문은 프롬프트 규칙과 거리 문턱으로 "찾지 못했습니다"라고 답하게 합니다.
STEP 4. 웹 화면과 나만의 챗봇
주방이 다 갖춰졌으니 손님이 앉는 홀과 주문 키오스크를 차리고 간판을 거는 단계입니다. 그리고 내가 고른 메뉴로 나만의 가게를 여는 연습을 합니다.
마지막 STEP 이라 오른쪽 칸은 "다음 STEP 으로" 대신 "현업으로"입니다.
| 장 | 제목 | 실습과 프로젝트에서 만드는 것 |
|---|---|---|
| 7장 | 웹 UI 연동과 배포 | 첫 화면, 채팅 화면, 스트리밍 답, 진짜 모델 채팅 화면, 문서 챗봇 웹 화면, 배포할 폴더와 배포 점검 |
| 8장 | 최종 프로젝트 | 설계서와 평가 질문, 사내 규정 도우미(키 없이 실행), 정보통신 학습 도우미, 구름다리여행 종합 상담 챗봇, 시연 점검표와 피드백 기록 |
- Streamlit 은 손님이 위젯을 만질 때마다 스크립트를 맨 위부터 다시 돌립니다. 그때 남는 것은 위젯의 값과
st.session_state입니다. - 대화 기록을
st.session_state에 두고 다시 돌 때마다st.chat_message로 다시 그리면 채팅 화면이 됩니다. - 모델과 문서 색인처럼 무거운 부품은
st.cache_resource로 한 번만 만듭니다. 7장 실습 5에서 스크립트는 세 번 돌았지만 약관 색인은 한 번만 만들었습니다. - 키는 클라우드에서는 Secrets 칸(
st.secrets), 내 PC 에서는.env에서 읽습니다. - 배포할 폴더에는 앱, 앱이 읽는 파일,
requirements.txt, 비밀 값 견본,.gitignore가 갖춰져야 합니다. - 나만의 챗봇은 코드보다 설계서(사용자와 질문, 문서, 부품, 범위 밖 질문에 할 말, 평가)를 먼저 씁니다. 8장 프로젝트 1에서 별칭 사전을 넣자 평가 질문의 1위 적중이 10개 가운데 6개에서 9개로 올랐지만, 새 말투 질문은 4개 가운데 2개만 찾았습니다.
- 시연은 정해 둔 순서로 하고, 피드백은 "받은 피드백 | 고친 것 | 다시 잰 결과"로 적은 뒤 같은 평가를 다시 돌려 나빠지지 않았는지 봅니다.
장 사이 이어지는 것
| 앞 장에서 만든 것 | 쓰는 곳 |
|---|---|
1장 실습 1의 out_rule_bot_result.csv(규칙 챗봇의 채점 결과) | 3장 실습 3(LLM 체인과 견주기) |
1장 실습 2의 out_next_word.json(낱말 횟수표) | 1장 실습 4(온도 실험) |
2장의 .env 와 ChatOpenAI 준비 코드 | 3장부터 모델을 부르는 모든 실습 |
| 4장의 세션별 기록과 메모리 전략 | 7장의 st.session_state 채팅 기록 |
6장의 약관 PDF 와 BigramEmbeddings, 검색 체인 | 7장 실습 5·6의 문서 챗봇 앱(앱이 PDF 에서 직접 색인을 만든다) |
| 1~7장의 부품(문서 검색, 대화 기억, 도구, 화면, 배포 점검) | 8장의 세 프로젝트. 프로젝트 3은 faq.csv, travel_terms.pdf, trip_products.csv 를 다시 쓴다 |
과정을 마친 뒤
- 내 문서로 바꾸기: 약관 자리에 회사 규정, 제품 설명서, 수업 노트를 넣고 색인을 다시 만듭니다. 문서를 쓰기 전에 공개해도 되는 자료인지, 개인정보가 들었는지 먼저 확인합니다.
- 평가표로 고치기: 평가 질문과 정답 위치를 표로 만들어 적중률을 재고, 청킹·k·프롬프트를 하나씩 바꿀 때마다 다시 잽니다.
- 진짜 임베딩과 모델로 바꾸기: 연습용 임베딩과 가짜 모델을 쓴 실습은
OpenAIEmbeddings와ChatOpenAI로 바꿔 끼우면 됩니다. 부품의 손잡이(invoke,embed_query)가 같아서 나머지 코드는 그대로입니다. - 더 배울 것: 대화 기록을 오래 저장하는 법(LangGraph 의 저장 기능), 여러 도구를 오가는 에이전트, 답의 품질을 자동으로 재는 법이 다음 걸음입니다.