실습 안내 · 3

강의 추천 RAG 챗봇 만들기

데이터 수집부터 갱신까지

패스트캠퍼스 강의 정보를 모아 추천 챗봇을 만들고, 맞게 답하는지 확인한 뒤, 자료를 갱신하며 운영하고 배포하는 데까지 갑니다.

준비

준비 확인

시작하기 전에 아래 항목을 확인해 주세요. 체크한 내용은 이 브라우저에만 저장됩니다.

헷갈리기 쉬운 점
  • ChatGPT 구독으로 Codex는 쓸 수 있지만, 우리가 만드는 챗봇이 호출하는 임베딩과 답변 생성에는 OpenAI API 키가 따로 필요합니다.
  • 수업용 API 키는 받은 .env 파일에 이미 들어 있습니다. 채팅창이나 코드에 붙여 넣지 않습니다.
  • .env는 이름이 점으로 시작해서 탐색기에서 안 보일 수 있습니다. 정상입니다.
1단계

완성본 보기

강사의 완성된 챗봇을 직접 써 보고 오늘 만들 범위를 확인합니다.

  • 질문하면 한 줄 결론과 추천 강의 카드가 나옵니다.
  • "운영자 보기"를 켜면 어떤 강의가 검색됐고 그중 무엇을 골랐는지 보입니다.
  • 화면 위에 자료의 기준일이 표시됩니다. 이것이 왜 필요한지는 뒤에서 다룹니다.
  • 완성본에 질문한 뒤, 수집할 곳에서 같은 강의를 찾아 제목과 수강 시간이 일치하는지 비교해 보세요.
2단계

데이터 모으기

패스트캠퍼스 사이트에서 강의 정보를 모으는 과정을 따라갑니다. 수집은 강사가 한 번 실행해 그 결과 파일을 배포하고, 여러분은 프롬프트의 흐름을 익힌 뒤 받은 데이터를 점검합니다.

수집은 강사가 합니다
  • 한 교육장에서 여러 명이 동시에 수집하면 사이트가 접속을 막을 수 있고, 사이트에도 부담이 됩니다.
  • 아래 프롬프트는 강사 시연을 보며 읽고, 직접 실행은 수업 뒤에 혼자 연습할 때 해 보세요.
  • 강사가 배포한 courses.json을 data 폴더에 넣으면 다음 단계로 갈 수 있습니다.

수집 전에 답해야 할 다섯 가지

질문왜 묻나
어디서 가져오나출처가 바뀌거나 막히면 챗봇도 멈춥니다
써도 되는 자료인가robots.txt, 이용약관, 보안 등급, 개인정보 포함 여부를 먼저 확인합니다
전부 가져왔나수집이 오류 없이 끝났다고 전부 가져온 것은 아닙니다
얼마나 자주 바뀌나갱신 주기를 정하는 기준이 됩니다
어떤 항목이 필요한가제목, 소개 외에 수강 대상, 시간, 링크, 수집 시각이 있어야 운영할 수 있습니다

1. 먼저 조사시키기

바로 수집 코드를 만들게 하지 않습니다. 사이트가 강의 목록을 어떻게 내려주는지부터 알아보게 합니다.

Codex에게
https://fastcampus.co.kr/categories 에 보이는 강의 정보를 모아 추천 챗봇을 만들려고 해.
아직 수집 코드는 만들지 말고 먼저 조사해줘.
- robots.txt와 이용약관에서 자동 수집과 관련된 내용
- 강의 목록을 얻을 수 있는 경로들 (sitemap.xml, 카테고리 화면이 불러오는 목록 데이터 등)
- 경로마다 얻을 수 있는 강의 수와 항목(제목, 소개, 수강 대상, 수강 시간, 분류)
- 요청을 가장 적게 보내면서 전체를 얻을 수 있는 방법
직접 확인한 것과 추측한 것을 구분해서 표로 정리해줘.

2. 수집 코드 만들기

Codex에게
조사 결과 중 카테고리 화면이 불러오는 목록 데이터로 수집하는 crawl.py를 만들어줘.
- "AI/업무생산성"과 "비즈니스/기획" 두 분야만, 분야마다 요청 한 번, 요청 사이 1초 쉬기
- 판매 중인 강의만, 겹치는 강의는 한 번만 저장
- 강의마다 제목, 소개, 수강 대상, 수강 시간, 키워드, 주소, 수집 시각을 저장
- 한 건도 못 받으면 기존 data/courses.json을 덮어쓰지 않기

3. 전부 가져왔는지 교차 확인

Codex에게
수집한 강의 수가 맞는지 다른 경로로 대조해줘.
sitemap.xml에 있는 강의 주소 수, 카테고리 화면에 보이는 강의 수와 비교하고,
한쪽에만 있는 강의가 있으면 예를 5개 보여줘. 차이가 나는 이유도 설명해줘.
강사 시연에서 볼 것
  • 경로에 따라 얻는 강의 수가 얼마나 다른가요?
  • Codex가 처음 제안한 방법이 가장 좋은 방법이었나요?

4. 실습: 받은 데이터 점검하기

강사가 배포한 파일을 넣고 직접 실행합니다.

Codex에게
data/courses.json을 점검해줘. 아직 코드는 만들지 마.
- 강의 수, 분야별 개수, 수강 대상별 개수
- 필드별로 값이 비어 있는 강의 수
- url이 중복된 강의가 있는지
- type, state 값별 개수와, 추천하면 안 될 것 같은 값
- crawled_at으로 본 수집 날짜
결과를 표로 보여주고, 챗봇에 쓰기 전에 고쳐야 할 점을 제안해줘.
확인할 것
  • 추천하면 안 되는 강의가 섞여 있나요? 몇 개인가요?
  • 수강 시간이 비어 있는 강의는 몇 개인가요? 시간 조건으로 검색하면 이 강의들은 어떻게 될까요?
  • Codex가 말한 숫자를 파일을 직접 열어 한 가지라도 대조해 보세요.
3단계

최소 챗봇 만들기

질문하면 강의를 찾아 답하는 가장 단순한 챗봇을 만듭니다. 조건을 구체적으로 적을수록 Codex가 추측할 부분이 줄어듭니다.

1. 프로젝트 규칙 정하기 (선택)

건너뛰어도 챗봇은 만들어집니다. Codex가 매번 따를 조건을 파일로 적어 두면 프롬프트마다 같은 말을 반복하지 않아도 됩니다.

  1. 프로젝트 폴더 바로 아래에 AGENTS.md라는 이름으로 파일을 만듭니다. 대문자와 확장자까지 그대로 적습니다.
  2. 아래 내용을 넣고 저장합니다.
  3. Codex를 종료했다가 다시 시작합니다. Codex는 시작할 때 이 파일을 읽습니다.
AGENTS.md에 넣을 내용
- 패키지 관리는 uv를 쓴다.
- API 키는 .env에서 읽고, 코드에 직접 쓰지 않는다. .env는 .gitignore에 넣는다.
- 코드를 바꾼 뒤에는 실제로 실행해서 확인하고, 확인한 것과 못 한 것을 구분해 보고한다.
- 한국어 주석을 단다.

2. 챗봇 만들기

앞에서 배운 LangChain을 그대로 쓰고, 벡터DB는 배포가 쉬운 FAISS로 합니다. 쓰는 방법은 Chroma와 거의 같습니다. 프롬프트는 무엇으로 만들지 정하는 "조건"과 어떻게 동작할지 정하는 "기능"으로 나눠 적습니다.

Codex에게
data/courses.json으로 강의 추천 RAG 챗봇을 만들어줘.

조건:
- Python 3.11, 패키지 관리와 실행은 uv
- 화면은 Streamlit, RAG 구성은 LangChain
- OpenAI API 사용, API Key는 .env의 OPENAI_API_KEY에서 읽기 (.env는 이미 있음)
- 임베딩 모델: text-embedding-3-small
- 답변 모델: gpt-4o-mini
- 벡터DB: FAISS. data/faiss 폴더에 저장하고, 이미 저장돼 있으면 다시 임베딩하지 않기
- 파일: 화면 app.py, 검색과 답변 rag.py. 주석은 한국어

기능:
- 강의 하나를 문서 하나로 넣는다. 내용은 "제목 + 소개 + 키워드"
- 강의 id를 문서 id로 쓰고, 수강 대상·수강 시간·분야·주소는 메타데이터로 넣는다
- 질문과 가장 비슷한 강의 5개를 찾아 답변 모델에게 넘긴다
- 목록에 있는 강의만 추천하고, 맞는 게 없으면 없다고 답한다
- 답변 아래에 검색된 강의 5개와 유사도를 보여준다

만든 뒤 직접 실행해서 "엑셀 자동화" 질문으로 확인하고,
확인한 것과 확인하지 못한 것을 구분해서 알려줘.
확인할 것
  • 브라우저에서 챗봇이 열리고, 질문하면 답이 나오나요?
  • 답변 아래에 검색된 강의 5개가 보이나요?
  • data/faiss 폴더가 생겼나요? 챗봇을 껐다 켰을 때 임베딩을 다시 계산하지 않고 이 폴더를 불러오나요?
  • 화면에 나오는 유사도는 클수록 비슷한 것인가요, 작을수록 비슷한 것인가요? Codex에게 물어보세요.
비교해 보기
  • "강의 추천 챗봇 만들어줘"라고만 했다면 Codex는 임베딩 모델, 벡터DB, 검색 개수, 화면 구성을 임의로 정합니다. 무엇을 정해 주지 않았는지 떠올려 보세요.

3. 폴더가 어떻게 생겼는지 모르겠다면

Codex에게
이 프로젝트의 파일 구성을 표로 설명해줘. 파일마다 역할을 한 줄로 적어줘.
4단계

검증하고 고치기

Codex가 "완료했습니다"라고 해도 직접 확인하기 전에는 완료가 아닙니다. 아래 질문을 넣어 보고 기대와 다른 것을 찾습니다.

질문기대하는 결과
정부지원사업 사업계획서 쓰는 법정부지원사업 관련 강의가 맨 위 근처에 나온다
칼퇴하고 싶어요"자동화"라는 단어 없이도 업무 자동화 강의를 찾는다
요리 강의 추천해줘맞는 강의가 없다고 답한다. 억지로 추천하면 실패
가장 싼 강의가 뭐야?가격을 지어내지 않고 강의 페이지에서 확인하라고 안내한다
AI 배우고 싶어직무나 수준을 되묻거나, 범위가 넓다는 점을 알려준다
완전 초보인데 2~3시간 안에 끝나는 강의수강 대상이 "누구나"이고 짧은 강의가 나온다

틀린 결과를 찾았다면: 진단과 수정을 나누기

Codex에게 · 색칠된 부분을 내 내용으로 바꿔서
"[질문]"이라고 물었더니 [실제로 나온 결과]가 나왔어.
[기대한 결과]가 나와야 해.
아직 코드는 바꾸지 말고, 데이터 문제인지 검색 문제인지 답변 지시문 문제인지
파일을 열어 보거나 직접 실행해서 확인한 근거와 함께 알려줘.

설명을 읽고 납득되면 그때 고치게 합니다.

Codex에게
그 원인대로 고쳐줘. 고친 뒤 같은 질문으로 다시 실행해서 결과를 보여주고,
앞에서 잘 되던 "엑셀 자동화" 질문이 여전히 잘 되는지도 확인해줘.
확인할 것
  • 원인이 데이터, 검색, 답변 지시문 중 어디였나요?
  • 하나를 고쳤더니 다른 질문이 나빠지지 않았나요?
  • 2단계에서 찾은 "추천하면 안 되는 강의"는 지금 추천되고 있나요?
5단계

운영 기능 붙이기

다른 사람이 쓰는 챗봇에는 답을 믿을 근거가 필요합니다. 기준일 표시는 모두 만들고, 나머지 넷 중 하나를 골라 만듭니다.

필수: 기준일 표시

Codex에게
화면 위쪽에 자료의 기준일을 표시해줘.
courses.json의 crawled_at에서 가장 최근 날짜를 읽어
"○○○○년 ○월 ○일 수집 자료 기준 · 강의 ○개" 형태로 보여줘.

선택: 하나 고르기

조건 필터
사이드바에 수강 대상과 수강 시간(5시간 이하, 10시간 이하, 20시간 이하) 필터를 추가해줘.
선택지는 데이터에 실제로 있는 값만 보여주고, 문서의 메타데이터로 걸러서 조건에 맞는 강의 안에서만 검색해.
조건에 맞는 강의가 하나도 없으면 AI를 호출하지 말고 조건을 넓히라고 안내해줘.
추천 카드
답변 아래에 추천한 강의를 카드로 보여줘. 카드에는 제목, 수강 대상, 수강 시간,
강의 페이지로 가는 버튼을 넣어.
제목과 링크는 AI가 쓴 글에서 가져오지 말고 courses.json의 값을 그대로 써줘.
수집 데이터 관리 페이지
현재 Streamlit 강의 추천 챗봇에 `수집 데이터` 관리 페이지를 추가해줘.
- 왼쪽 사이드바에 `추천 / 수집 데이터 / 질문 기록` 메뉴를 둬.
- 수집 데이터 페이지에는 강의 수·분야 수·평균 본문 길이·청크 수를 상단에 보여줘.
- 분야 필터와 제목·본문 검색을 넣어줘.
- 아래에는 강의 목록 표를 표시하고, 제목·분야·수강 대상·수강 시간·소개·강의 링크를 보여줘.
- 탭으로 강의 상세와 분야별 통계도 제공해줘.
- 데이터는 `data/courses.json`만 사용하고, 기존 RAG와 질문 기록은 유지해줘.
- 밝고 단정한 대시보드 UI로 만들고, 기존 포트에서 직접 실행해 확인해줘.
질문 기록
질문할 때마다 시각, 질문, 검색된 강의와 유사도, 답변을 logs/questions.jsonl에 한 줄씩 저장해줘.
화면 아래에 "질문은 품질 개선을 위해 저장됩니다. 개인정보는 입력하지 마세요."라고 표시하고,
logs 폴더는 .gitignore에 넣어줘.
확인할 것
  • 기준일이 데이터 파일의 실제 날짜와 같은가요?
  • 옆 사람은 무엇을 골랐나요? 화면을 서로 보여 주세요.
6단계

데이터 갱신 운영

사이트의 강의가 바뀌어도 챗봇은 모릅니다. 사이트에서 다시 수집해 달라진 것만 반영하는 갱신 절차를 만듭니다.

문제방치하면대응
종료된 강의가 남음없는 강의를 추천목록을 통째로 새로 받아 교체
무엇이 바뀌었는지 모름답이 달라져도 원인을 못 찾음신규, 종료, 수정 내역을 기록
전체를 다시 임베딩문서가 많으면 비용과 시간 증가바뀐 강의만 벡터DB에서 추가, 교체, 삭제
수집이 실패했는데 덮어씀빈 데이터로 챗봇이 멈춤건수가 0이거나 급감하면 기존 자료 유지

1. 갱신 스크립트 만들기

두 번에 나눠 시킵니다. 먼저 무엇이 바뀌었는지 비교하게 하고, 결과를 본 뒤 임베딩을 붙입니다.

Codex에게 · 먼저 비교하기
사이트에서 강의를 다시 수집해 기존 자료와 비교하는 update.py를 만들어줘.
신규, 종료, 내용이 바뀐 강의를 나눠 출력하고 data/changes.md에 날짜와 함께 기록해.
새로 받은 강의가 0개이거나 기존의 절반 이하면 교체하지 말고 멈춰.
--dry-run을 주면 비교 결과만 보여주고 아무것도 바꾸지 마.
Codex에게 · 이어서 벡터DB 반영
비교 결과를 data/faiss에 반영하게 고쳐줘. 전체를 다시 임베딩하지 말고,
신규 강의는 추가, 내용이 바뀐 강의는 같은 id로 지우고 다시 추가, 종료된 강의는 삭제해.
끝나면 새로 임베딩한 개수와 그대로 둔 개수를 출력하고 data/faiss를 저장해.

2. 사이트에 요청하지 않고 시험하기

갱신 로직이 맞는지는 사이트에 다시 접속하지 않아도 확인할 수 있습니다. 자료를 일부러 조금 바꿔 두고 잡아내는지 봅니다.

Codex에게
update.py가 변경을 제대로 잡는지 사이트에 요청하지 않고 시험해줘.
data/courses.json을 복사해서 강의 1개를 지우고, 1개의 소개글을 고치고,
가짜 강의 1개를 추가한 파일을 만든 다음, 그 파일을 새 목록으로 삼아 비교를 돌려줘.
결과가 "신규 1 / 종료 1 / 수정 1 / 새로 임베딩 2"로 나오는지 확인하고,
시험에 쓴 파일은 지우고 data/faiss도 시험 전 상태로 되돌려줘.

3. 실제 갱신

  1. uv run python update.py --dry-run으로 무엇이 바뀌는지 먼저 봅니다.
  2. 이상이 없으면 uv run python update.py로 반영합니다.
  3. 챗봇을 다시 켜고 4단계의 테스트 질문을 넣어 봅니다.
  4. 배포판에도 반영하려면 7단계처럼 GitHub에 올립니다.
실제 갱신은 한 사람씩
  • 사이트에 접속하는 갱신은 수업 중에는 강사가 시연합니다. 직접 해 볼 때는 하루에 여러 번 돌리지 마세요.
확인할 것
  • 시험에서 신규, 종료, 수정이 각각 1개로 잡혔나요?
  • 새로 임베딩한 개수가 "신규 + 수정"과 같은가요? 전체를 다시 임베딩했다면 실패입니다.
  • 삭제한 강의를 질문했을 때 더 이상 검색되지 않나요?
  • 갱신 뒤 화면의 기준일이 새 날짜로 바뀌었나요?
  • data/changes.md에 기록이 남았나요?
7단계

GitHub에 올리기

저장소를 만들고 프로젝트 폴더와 연결한 뒤 올립니다. 올리기 전에 API 키가 빠져 있는지 반드시 확인합니다.

1. 저장소 만들기

  1. github.com/new를 엽니다.
  2. Repository name에 이름을 넣습니다. 예: course-bot
  3. Private을 선택합니다. 수집한 강의 자료가 함께 올라가기 때문입니다.
  4. README, .gitignore, license 추가 옵션은 모두 끈 채로 Create repository를 누릅니다.
  5. 다음 화면에 나오는 저장소 주소(https://github.com/계정/저장소.git)를 복사합니다.
화면에 나오는 안내 명령은 실행하지 마세요
  • 첫 줄 echo "# ..." >> README.md는 README가 없을 때 쓰는 명령입니다. 이미 README가 있는 폴더에서 실행하면 파일이 깨질 수 있습니다. 연결은 아래 프롬프트로 합니다.

2. 연결하고 올리기

1번에서 복사한 주소를 붙여 넣으면 아래 프롬프트에 자동으로 들어갑니다.
Codex에게
이 프로젝트를 GitHub 저장소 (위 칸에 저장소 주소를 넣으세요) 에 올려줘.
1) git 저장소가 아니면 git init 하고 기본 브랜치를 main으로 맞춘다
2) .gitignore에 .env, 가상환경 폴더, __pycache__, logs가 들어 있는지 확인하고 없으면 추가한다
3) origin이 없으면 위 주소로 연결하고, 다른 주소로 연결돼 있으면 바꾸기 전에 나에게 물어본다
4) .env와 API 키가 올라갈 파일에 포함되지 않았는지 확인한다
5) 올라갈 파일 목록을 보여주고 내 확인을 받은 뒤 커밋하고 origin/main에 푸시한다
기존 README.md는 건드리지 마.
확인할 것
  • 업로드 목록에 .env가 없나요? 수업용 키가 든 파일이라 가장 먼저 확인합니다.
  • data/courses.json과 data/faiss 폴더가 목록에 있나요? 배포판이 이 파일을 읽습니다. 없다면 .gitignore에서 제외됐는지 Codex에게 확인시키세요.
  • 올린 뒤 GitHub 저장소 화면을 새로고침해 파일 목록을 직접 확인했나요?

3. 푸시에서 멈추거나 로그인 오류가 나면

Codex에게 "커밋까지만 해줘"라고 한 뒤, 터미널에서 아래 명령을 직접 실행합니다. 브라우저에 GitHub 로그인 창이 뜨면 로그인합니다.

터미널에서 직접
git push -u origin main

한 번 로그인하면 다음부터는 묻지 않습니다. 이후에는 Codex에게 "변경된 내용을 커밋하고 푸시해줘. 올리기 전에 목록을 보여줘"라고 하면 됩니다.

8단계

Streamlit Cloud 배포

GitHub에 올린 챗봇을 링크로 접속할 수 있게 만듭니다. 내 PC에서는 .env가 키를 주지만, 배포 서버에는 그 파일이 없으므로 키를 넣는 방법이 달라집니다.

1. 배포 환경에 맞게 준비

Codex에게
이 챗봇을 Streamlit Community Cloud에 배포하려고 해. 배포 전에 준비해줘.
- OPENAI_API_KEY를 PC에서는 .env에서, 배포 환경에서는 st.secrets에서 읽기
- APP_PASSWORD가 설정돼 있으면 암호를 입력해야 쓸 수 있게 하기
- data/faiss를 그대로 불러와 배포 서버에서 다시 임베딩하지 않게 하기
고친 뒤 PC에서 실행해 확인하고, 변경분을 GitHub에 올려줘.

2. 앱 만들기

  1. share.streamlit.io에 GitHub 계정으로 로그인합니다. 비공개 저장소라면 접근 권한을 묻는 화면에서 허용합니다.
  2. 오른쪽 위의 Create app을 누르고 Yup, I have an app을 선택합니다.
  3. Repository에 내 저장소, Branch에 main, File path에 app.py를 넣습니다. 실행 파일 이름이 다르면 그 이름을 넣습니다.
  4. App URL은 course-bot-본인이름처럼 정합니다. 배포 주소는 다른 사람과 겹칠 수 없어서 course-bot만으로는 만들 수 없습니다.
  5. Advanced settings를 열어 Python version은 3.11을 고르고, Secrets 칸에 아래 내용을 넣습니다.
  6. Deploy를 누릅니다. 첫 배포는 패키지 설치 때문에 몇 분 걸립니다.
Secrets 칸에 들어갈 모양
OPENAI_API_KEY="(.env 파일에 있는 줄을 그대로)"

받은 course-bot 폴더의 .env 파일을 메모장으로 열어, OPENAI_API_KEY=로 시작하는 줄을 통째로 복사해 Secrets 칸에 그대로 붙여 넣습니다. 고칠 것은 없습니다.

Secrets를 쓸 때
  • 값을 큰따옴표로 감쌉니다. .env와 형식이 다릅니다.
  • 접속 암호 없이 공개하면 링크를 아는 누구나 질문할 수 있고, 질문마다 내 API 요금이 나갑니다.
  • OpenAI 계정에 월 사용 한도를 걸어 둡니다.
확인할 것
  • 질문했을 때 추천 설명이 나오나요? 검색 결과만 나온다면 Secrets의 키를 읽지 못한 것입니다.
  • 화면의 기준일과 강의 수가 PC에서 본 것과 같은가요?
  • 오류 화면이 나오면 오른쪽 아래 Manage app의 로그를 복사해 Codex에게 보여 주세요.

한 번 배포해 두면, 이후에는 GitHub에 올릴 때마다 배포판이 자동으로 새 코드와 새 자료로 다시 시작됩니다. 6단계의 갱신 결과도 올리기만 하면 반영됩니다.

9단계

내 업무에 적용

오늘 다룬 문제는 업무 문서 챗봇에서 그대로 다시 나타납니다.

오늘의 챗봇업무 문서 챗봇
사이트에서 모은 강의 목록규정집, 지침, 공문, 업무 매뉴얼
사이트에서 다시 수집해 갱신개정본이 나오면 문서 폴더를 다시 읽어 갱신
일부만 수집되고도 오류가 없었음공유 폴더에 최신본이 없고 개인 PC에만 있음
모집이 끝난 강의가 섞임폐지되거나 개정 전인 규정이 섞임
수강 대상, 수강 시간문서 종류, 시행일, 소관 부서
기준일 표시"○○○○년 개정본 기준"
이용 조건 확인보안 등급, 개인정보, 외부 AI로 보내도 되는지
갱신 주기와 담당자를 정한다누군가 하겠지가 되면 아무도 하지 않습니다.
기준일을 화면에 보여준다사용자가 답을 얼마나 믿을지 스스로 판단합니다.
테스트 질문을 정해 둔다자료를 바꿀 때마다 같은 질문을 다시 넣어 봅니다.
변경 기록을 남긴다지난주엔 됐는데 왜 안 되는지 추적할 수 있습니다.
원본 링크를 답에 붙인다최종 확인은 원문과 담당 부서에서 합니다.
폐지된 자료를 먼저 걸러낸다옛 규정으로 답하는 챗봇은 없는 것보다 위험합니다.
참고

오늘 반복해서 쓴 프롬프트 습관

이렇게 말고이렇게
검색이 이상해, 고쳐줘어떤 질문에 무엇이 나왔고 무엇이 나와야 하는지, 나온 결과를 그대로 붙여서 말한다
고쳐줘아직 코드는 바꾸지 말고, 확인한 근거와 함께 원인부터 알려줘
개수를 좀 줄여줘분야별로 고르게 100개만, 전체 수집 기능은 그대로 두고
다 됐어?실제로 실행해서 확인한 것과 확인하지 못한 것을 구분해서 알려줘
GitHub에 올려줘키가 빠졌는지 확인하고, 올릴 파일 목록을 보여준 뒤 진행해줘

프롬프트에 넣을 네 가지: 증상(무엇이 어떻게 틀렸나), 증거(화면에 나온 그대로), 범위(무엇을 고치고 무엇은 두나), 확인 방법(고친 뒤 어떻게 검증하나).