과정 안내
실습 코드 사용 안내
실습 코드를 직접 돌리기 전에 장마다 무엇이 필요한지 한곳에 모았습니다. API 키가 필요한지, 무엇을 설치하고 받아 두어야 하는지, 앞의 어떤 실습을 먼저 돌려야 하는지를 표로 봅니다. 설치 방법은 환경설정에, 데이터 파일의 설명은 실습 데이터에 있습니다.
먼저 알아 둘 것
- 작업 폴더는 data 폴더입니다. 과목 폴더를
C:\chatbot-course로 정했다면C:\chatbot-course\data입니다(환경설정의 "작업 폴더 정하기"). 실습 코드는 파일 이름만 적어 읽고 쓰므로cd data로 들어간 뒤 실행합니다. API 키 파일.env는 과목 폴더에 두고, 코드의find_dotenv(usecwd=True)가 data 폴더에서 위로 올라가며 찾습니다. - 실습 코드 파일: 원고의 실습과 프로젝트 코드는 장마다
code/chNN/에 파일로도 있습니다(lab1.py,project1_solution.py등). 프로젝트 풀이는solutions/에 모여 있습니다. - out_ 로 시작하는 파일은 실습이 만듭니다. 없다는 오류가 나면 아래 "먼저 할 실습"을 먼저 돌립니다. 5장의 MCP 서버 파일(
out_ch05_server.py)과 7장의 앱 파일(out_ch07_*.py)도 실습 코드가 글로 써서 만듭니다. - 패키지는 `requirements.txt` 로 설치합니다. pip 대신 uv 를 써도 됩니다. uv 를 쓰는 법은 환경설정의 부록에 있고, 같은 목록에서 같은 판이 설치됩니다. uv 가 만든 가상환경에는 pip 가 없으므로
uv pip install로 설치합니다. - 데이터는 다시 만들 수 있습니다.
tools/make_data.py가 씨앗을 고정해 만들어서 다시 실행해도 같은 파일이 나옵니다. 약관 PDF 는 Windows 의 맑은 고딕 글꼴로 만들므로 다른 OS 에서는 data 폴더의 PDF 를 그대로 씁니다. - 예상 출력 절이 있습니다. 교안을 만든 PC 에는 API 키가 없어서, 모델을 부르는 절은 실행하지 않고 유추한 예상 출력을 실었습니다. 그런 절은 첫 문단 끝에 그렇게 적혀 있습니다. 키를 넣고 돌리면 답의 글과 숫자가 원고와 조금씩 다릅니다.
API 키와 비밀 값
1장은 진짜 키 없이 모두 돌아갑니다. 2장부터는 모델이나 진짜 임베딩을 부르는 절만 .env 의 OpenAI API 키가 있어야 돌아가고, 나머지 절은 가짜 모델(FakeListChatModel)과 연습용 임베딩(BigramEmbeddings)으로 키 없이 돌아갑니다.
| 장 | 나오는 값 | 진짜 키가 필요한가 | 어떻게 다루나 |
|---|---|---|---|
| 1장 | 없음 | 아니요 | 가짜 모델과 tiktoken 만 쓴다 |
| 2장 | OPENAI_API_KEY, OPENAI_MODEL | 실습 3·4·5, 프로젝트만 예 | .env 에 넣고 load_dotenv 로 읽는다. 실습 2의 연습 파일은 지어낸 시험용 키 sk-test-0000… 을 쓴다 |
| 3장 | OPENAI_API_KEY, OPENAI_MODEL | 실습 3·4, 프로젝트만 예 | 2장와 같은 준비 코드 |
| 4장 | OPENAI_API_KEY, OPENAI_MODEL | 실습 2·4·6, 프로젝트만 예 | 2장와 같은 준비 코드 |
| 5장 | OPENAI_API_KEY, OPENAI_MODEL | 실습 3·5, 프로젝트만 예 | MCP 서버는 키를 쓰지 않는다. 서버가 data 폴더 밖(.env 등)을 읽지 못하게 막는다 |
| 6장 | OPENAI_API_KEY, OPENAI_MODEL, OPENAI_EMBED_MODEL | 실습 5, 프로젝트만 예 | 임베딩 모델 이름은 없으면 text-embedding-3-small 을 쓴다 |
| 7장 | st.secrets["OPENAI_API_KEY"] 또는 .env | 실습 4만 예 | 클라우드에서는 Secrets 칸, 내 PC 에서는 .env 에서 읽는다. 배포 폴더에는 값이 발급받은_인증키 인 견본만 넣는다. 프로젝트의 실수 폴더는 지어낸 가짜 키(sk-proj- 뒤에 0)를 쓴다 |
| 8장 | OPENAI_API_KEY, OPENAI_MODEL, OPENAI_EMBED_MODEL | 프로젝트 2·3만 예 | 프로젝트 1은 연습용 임베딩과 가짜 모델로 키 없이 돈다. 프로젝트 3의 앱은 키가 없으면 경고를 띄우고 멈춘다 |
키를 이 채팅이나 코드, 원고에 붙여 넣지 않습니다. 원고에는 발급받은_인증키 라는 자리표시만 있습니다.
장별 실습 준비표
새 패키지는 그 장에서 처음 쓰는 것입니다. 환경설정에서 모두 한 번에 설치했다면 따로 설치할 것은 없습니다. 이 과정에는 GPU 가 필요한 실습이 없습니다.
| 장 | 새 패키지 | 받아 둘 것 | 장비 | 먼저 할 실습 |
|---|---|---|---|---|
| 1장 | langchain, tiktoken, numpy, pandas, matplotlib | tiktoken 의 토큰 사전 o200k_base(처음 실행할 때 저절로 받는다, 인터넷 필요) | 안 씀 | 실습 4 ← 실습 2 |
| 2장 | langchain-openai, openai, python-dotenv | 없음 | 안 씀 | 없음 |
| 3장 | 없음 | 없음 | 안 씀 | 실습 3 ← 1장 실습 1 |
| 4장 | pydantic(langchain 과 함께 설치된다) | 없음 | 안 씀 | 없음 |
| 5장 | mcp, langchain-mcp-adapters | 없음 | 안 씀 | 실습 5, 프로젝트 ← 실습 4 |
| 6장 | langchain-community, langchain-text-splitters, langchain-classic, pypdf, faiss-cpu | 없음 | 안 씀 | 실습 3 ← 실습 2, 실습 4 ← 실습 3, 실습 5 ← 실습 2·3, 프로젝트 ← 실습 2 |
| 7장 | streamlit | 없음 | 안 씀(브라우저로 볼 때 포트 8501) | 프로젝트 ← 실습 6 |
| 8장 | 없음 | 없음 | 안 씀 | 없음. 프로젝트마다 부품 파일(out_ch08_rules_bot.py 등)을 먼저 쓰고 화면 파일이 sys.path.insert 로 불러 쓴다 |
실행하지 않은 안내 코드
| 장 | 안내 코드 | 돌리려면 |
|---|---|---|
| 환경설정 | Set-ExecutionPolicy -Scope CurrentUser RemoteSigned | 가상환경이 켜지지 않을 때만. 회사 PC 는 관리자에게 먼저 묻는다 |
| 1장 | 프로젝트의 "실제 데이터로 해 보려면"(대화 기록 내보내기, 공개 데이터) | 각 서비스의 약관과 개인정보를 확인한 뒤 |
| 3장, 4장, 5장, 6장, 8장 | 프로젝트의 "실제 데이터로 해 보려면" | 내 자료나 공개 자료와 API 키 |
| 2장부터 8장까지 | 모델을 부르는 예상 출력 절 | .env 에 OpenAI API 키 |
| 7장 | streamlit run, git init·git push 등 배포 명령, Streamlit Community Cloud 에서 앱 만들기 | GitHub 계정과 Streamlit Community Cloud 계정. 메뉴 이름은 공식 문서에서만 확인했다 |
장을 건너는 의존과 순서
| 뒤 장 | 앞 장에서 가져오는 것 | 없으면 |
|---|---|---|
| 3장 실습 3 | out_rule_bot_result.csv(규칙 챗봇의 채점 결과) | 1장 실습 1을 먼저 돌린다 |
| 7장 실습 5·6, 프로젝트 | travel_terms.pdf(6장와 같은 약관), BigramEmbeddings 코드 | PDF 는 data 폴더에 처음부터 있다. 앱이 PDF 에서 직접 색인을 만들므로 6장 실습을 먼저 돌리지 않아도 된다 |
| 8장 프로젝트 3 | faq.csv, travel_terms.pdf, trip_products.csv | 모두 data 폴더에 처음부터 있어 앞 장 실습을 먼저 돌리지 않아도 된다 |
장 안에서 앞 실습의 파일을 쓰는 곳은 위 준비표의 "먼저 할 실습"과 장마다의 "실습 지도"에 있습니다.
오래 걸리는 곳
교안을 만든 PC 에서 걸린 시간은 재어 싣지 않았습니다. 아래는 다른 실습보다 기다림이 생기는 곳입니다.
| 곳 | 까닭 |
|---|---|
| 1장 실습 3 등 tiktoken 을 처음 쓰는 곳 | 토큰 사전을 인터넷에서 처음 받아 온다. 한 번 받으면 다음부터는 PC 에 저장된 것을 쓴다 |
| 5장 실습 4·5, 프로젝트 | MCP 서버 프로세스를 띄우고 연결한다. 도구를 부를 때마다 새 연결을 연다 |
| 6장 실습 5, 프로젝트 | 진짜 임베딩으로 조각과 질문을 모두 OpenAI 서버에 보내 숫자로 바꾼다 |
| 7장 실습 5·6, 프로젝트, 8장 프로젝트 | 앱이 처음 켜질 때 약관 PDF 를 읽고 색인을 만든다. st.cache_resource 덕분에 두 번째부터는 다시 만들지 않는다 |
| 모델을 부르는 모든 절 | 질문마다 OpenAI 서버를 다녀온다. 네트워크와 서버 사정에 따라 걸리는 시간이 다르다 |