8장. 최종 프로젝트
최종 프로젝트 진행 방법
동네에 작은 가게를 차릴 때 처음부터 "무엇이든 다 파는 가게"를 열면 재료도 많이 들고 손님도 무엇이 맛있는지 모릅니다. 잘되는 작은 가게는 대개 메뉴가 몇 가지로 분명하고, 단골이 같은 메뉴를 자주 찾고, 재료를 어디서 받아 오는지가 정해져 있습니다. 챗봇의 주제도 이렇게 고릅니다. 근거로 삼을 문서가 있고, 같은 질문이 자주 반복되고, 틀리면 안 되는 범위가 분명한 일이 첫 챗봇의 주제로 좋습니다.
다섯 상자가 이 장에서 할 일의 순서입니다. 주제를 고르고(1), 설계서를 쓰고(2), 1~7장의 부품을 묶어 앱을 만들고(3), 평가 질문으로 재고(4), 시연한 뒤 피드백을 받아 고칩니다(5). 고친 뒤에는 다시 4번으로 돌아가 같은 평가를 돌립니다. 여기서 메뉴를 정하는 일이 주제 고르기, 단골이 자주 찾는 메뉴가 반복되는 질문, 재료를 받아 오는 곳이 근거 문서입니다. 비유와 다른 점은, 가게는 메뉴가 맛있으면 되지만 챗봇은 맛(답의 말씨)보다 "근거와 맞는가"를 먼저 잰다는 것입니다.
주제 고르기의 네 기준
| 기준 | 좋은 주제 | 피할 주제 |
|---|---|---|
| 근거 문서가 있다 | 규정집, 약관, 수업 노트, 제품 설명서 | "아무거나 물어보세요" 처럼 근거가 없는 주제 |
| 질문이 반복된다 | 휴가 신청 기한, 출장비, 포트 번호처럼 여러 사람이 같은 것을 묻는다 | 한 사람이 한 번만 물을 일 |
| 틀리면 안 되는 범위가 분명하다 | "규정에 적힌 것만 답하고 나머지는 인사팀에 넘긴다" | 의료 진단, 법률 판단처럼 틀리면 크게 다치는 일 |
| 개인정보가 없다 | 누구에게나 공개된 문서, 지어낸 연습 문서 | 직원 명부, 학생 성적, 손님 연락처 |
이 장의 세 프로젝트
| 프로젝트 | 문서(모두 지어낸 것) | 묶는 부품 | 실행 |
|---|---|---|---|
| 1. 실무 문서 챗봇: 사내 규정 도우미 | 가상 회사 솔마루상사의 복무·출장 규정 PDF(3쪽, 12조) | 문서 검색, 문턱, 웹 화면 | 키 없이 실제로 실행 |
| 2. 전공 지식 챗봇: 정보통신 학습 도우미 | 정보통신 기초 수업 노트 PDF(3쪽, 노트 10개) | 진짜 임베딩, 근거 표시, 대화 기억, 질문 바꿔 쓰기 | 예상 출력 |
| 3. 구름다리여행 종합 상담 챗봇 | 1~7장의 약관 PDF, FAQ, 상품 표 | 문서 검색 도구, 상품 도구, 에이전트, 대화 기억, 웹 화면 | 예상 출력 |
셋 가운데 하나를 골라도 되고, 자기 전공이나 업무의 문서로 바꿔 같은 짜임으로 만들어도 됩니다. 수업에서는 프로젝트 1을 함께 풀고, 2와 3 가운데 하나를 골라 자기 문서로 바꿔 시연하는 것을 권합니다.
짧은 예시
주제 후보를 네 기준으로 0~2점씩 매겨 견줘 봅니다. 점수는 설명용으로 매긴 것입니다.
import pandas as pd
# 주제 후보 셋을 네 기준으로 0~2점씩 매긴다(설명용 점수)
ideas = pd.DataFrame([
{"주제": "사내 규정 도우미", "문서": 2, "반복 질문": 2, "분명한 범위": 2, "개인정보 없음": 2},
{"주제": "수업 노트 도우미", "문서": 2, "반복 질문": 2, "분명한 범위": 1, "개인정보 없음": 2},
{"주제": "무엇이든 비서", "문서": 0, "반복 질문": 1, "분명한 범위": 0, "개인정보 없음": 1},
])
# drop(columns=…): 이름 칸을 빼고, sum(axis=1): 한 줄(주제)마다 가로로 더한다
ideas["합계"] = ideas.drop(columns="주제").sum(axis=1)
print(ideas.sort_values("합계", ascending=False).to_string(index=False)) 주제 문서 반복 질문 분명한 범위 개인정보 없음 합계
사내 규정 도우미 2 2 2 2 8
수업 노트 도우미 2 2 1 2 7
무엇이든 비서 0 1 0 1 2"무엇이든 비서"는 근거 문서가 없어 0점, 범위도 0점이라 합계가 2점에 그쳤습니다. 수업 노트 도우미는 학생이 노트 밖의 것(최신 기술 소식 등)도 물을 수 있어 범위를 1점으로 매겼습니다. 이런 주제는 설계서에 "노트 밖의 질문에는 어떻게 답할지"를 꼭 적어 둡니다.
코드가 의미하는 것
이 코드는 가게를 열기 전에 메뉴 후보를 종이에 적고 기준마다 점수를 매겨 보는 일을 표로 옮긴 것입니다. 후보를 표로 적고, 기준 점수를 줄마다 더하고, 합계 순으로 늘어놓는 세 동작입니다.
| 코드 | 하는 일 | 챗봇에서 뜻하는 것 |
|---|---|---|
pd.DataFrame([...]) | 주제 후보 셋을 한 줄씩 표로 만든다 | 주제를 느낌이 아니라 적어 둔 기준으로 고르겠다는 뜻입니다. 칸 이름이 곧 앞 표의 네 기준입니다 |
ideas.drop(columns="주제").sum(axis=1) | 이름 칸을 빼고 줄마다 점수를 더한다 | 이 예시는 네 기준을 같은 무게로 봅니다. 근거 문서, 반복 질문, 범위, 개인정보가 모두 같은 몫입니다 |
sort_values("합계", ascending=False) | 합계가 큰 순서로 늘어놓는다 | 맨 위 줄이 첫 챗봇으로 먼저 해 볼 주제입니다 |
결과에서 읽을 것은 두 가지입니다.
- 근거 문서가 없으면 맨 아래입니다. "무엇이든 비서"는 문서 0점, 범위 0점으로 합계 2점입니다. 근거가 없는 챗봇은 답을 맞춰 볼 곳이 없습니다.
- 깎인 1점이 설계서의 할 일입니다. 수업 노트 도우미는 범위가 1점이라 사내 규정 도우미보다 1점 낮은 7점입니다. 깎인 기준(노트 밖 질문)은 설계서에 대처 방법을 적어야 할 칸이 됩니다.
주의할 점
- 처음부터 기능을 많이 넣지 않습니다. 문서 검색 하나로 시작해 평가를 돌리고, 필요할 때 대화 기억이나 도구를 더합니다. 프로젝트 1은 일부러 대화 기억을 넣지 않았습니다.
- 실제 회사나 학교의 문서를 쓰려면 그 문서를 이런 데 써도 되는지, 바깥 서비스(OpenAI)에 보내도 되는지 먼저 확인합니다. 확인되지 않으면 이 장처럼 지어낸 연습 문서로 시연합니다.