5차시. LangChain 입문
실습 1 — LangChain 입문 실습 따라 하기
관련 수업 자료: 5차시 「2. Document Loader — 문서 읽기」(2~3쪽), 5차시 「4. 첫 번째 LangChain 프로젝트」(4~5쪽), 5차시 「5. Prompt Template 사용하기」(5~6쪽) · 실습 코드 05/textloader.py, 05/load_and_split.py, 05/prompt_template.py
이 실습은 교안 해설(05_LangChain입문.md)의 실습 순서를 옮긴 것입니다. OpenAI 임베딩이나 채팅 모델을 부르는 파일은 .env 에 API 키가 있어야 돌아갑니다. 키가 없으면 실행 결과 샘플로 출력 모양을 확인합니다.
수업 자료와 이어지는 곳
| 실습 코드 | 원본 PDF | 이어지는 내용 |
|---|---|---|
05/textloader.py | 3쪽 | 5차시 「2. Document Loader — 문서 읽기」 › 2-2) TextLoader 사용 예시 아래에 실었습니다 |
05/load_and_split.py | 5쪽 | 5차시 「4. 첫 번째 LangChain 프로젝트」 › 4-2) load_and_split.py 작성 아래에 실었습니다 |
05/prompt_template.py | 5~6쪽 | 5차시 「5. Prompt Template 사용하기」 아래에 실었습니다 |
실행 흐름
notice.txt → TextLoader
TextLoader → Document
Document → Splitter
Splitter → 조각들
조각들 → PromptTemplate실습 순서
실습/src/05에서 다음 순서로 실행합니다.
python textloader.py
python load_and_split.py
python prompt_template.pychunk_size를 80과 150으로 바꿔 조각 수가 어떻게 달라지는지 봅니다. 값을 바꾼 뒤에는 원본 150/30으로 되돌립니다.
스스로 확인
- Document의 두 칸을 말할 수 있는가?
- overlap이 없을 때 문장이 어떻게 잘리는가?
- PromptTemplate의 빈 칸은 언제 채워지는가?
코드 설명
TextLoader("../../data/notice.txt", encoding="utf-8")의 encoding 은 파일을 어떤 글자 규칙으로 읽을지 정합니다. 한글 파일을 읽을 때 빼먹으면 Windows에서 읽기 오류가 나기 쉽습니다.documents[0].page_content에 [0]이 붙는 까닭은 load() 가 Document 하나가 아니라 리스트를 돌려주기 때문입니다. TXT 파일 하나를 읽었으므로 실행 결과의 문서 길이가 1입니다.chunk_size = 150이라 안내문이 조각 2개로 나뉘었습니다. [1]의 끝 "이 경우 배송비는 당사가 부담합니다. 3. 고객센터"가 [2]의 맨 앞에 다시 나오는데, 이것이chunk_overlap = 30이 만든 겹침입니다.chuncks,chunck는 chunks 를 잘못 적은 이름이지만, 처음부터 끝까지 같은 이름으로 쓰면 문제없이 돌아갑니다. 따라 치다가 한 곳만 바르게 고치면 NameError 가 납니다.input_variables=["doc", "q"]의 이름은 틀 안의{doc},{q}와 한 글자도 다르지 않아야 합니다.prompt.format(doc = ..., q = ...)은 빈칸을 채운 문자열을 돌려줄 뿐 화면에 찍지 않습니다. 그래서 prompt_template.py 는 실행해도 아무것도 나오지 않습니다. 보고 싶으면 결과를 변수에 받아 맨 아래# print(result)자리에서 print 하시면 됩니다.