LESSON 05

/ask API를 Code 탭으로 만들기

질문이 답이 되기까지, Vercel 배포와 토큰

오늘의 목표

질문을 받아 지식 팩에서 찾고 모델에 보내 짧은 평문 답을 돌려주는 /ask API를 만들어 Vercel에 배포하고, 폰 봇과 연결합니다.

예상 소요 시간 약 50분

한 번의 흐름

폰이 질문을 API에 넘기면 서버가 답을 만들어요. 순서를 먼저 이해해요.

  1. 인증: 봇 전용 토큰이 맞아야 시작해요.
  2. 개인정보 차단: 질문에 전화·계좌 같은 패턴이 있으면 모델을 부르지 않고 고정 안내로 끝내요.
  3. 캐시: 같은 질문은 일정 시간 저장된 답을 써서 비용을 줄여요.
  4. 한도: 전체 하루·사람당·방당 한도를 넘으면 정해진 문구로 답하고 모델은 부르지 않아요.
  5. 검색: 지식 팩에서 관련 조각 몇 개를 찾아요.
  6. 모델: 규칙(시스템 프롬프트) + 조각 + 질문을 보내요.
  7. 후처리: 마크다운 기호 제거, 길이 줄이기, 금지 표현 가드.
  8. 기록: 길이·건수만 남기고 질문과 답의 원문은 저장하지 않아요.

한도 초과도 응답 코드는 정상으로 두면 폰이 분기 없이 받은 문장을 그대로 올릴 수 있어요.

따라하기 1: API 만들기

chatbot-knowledge/build/knowledge.json을 읽는 Next.js API /api/ask를 만들어줘. POST로 {q, asker, room}을 받고, 위의 순서(토큰 인증 → 개인정보 패턴이면 모델 미호출 → 캐시 → 한도 → 검색 → 모델 → 후처리)로 처리해. 토큰과 모델 키는 코드에 쓰지 말고 환경변수에서 읽어. 질문·답 원문은 어디에도 저장하지 마. 답은 마크다운 없는 평문, 300자 이내로 해줘. 어떤 환경변수가 필요한지 목록을 알려줘.

시스템 프롬프트 규칙

API의 시스템 프롬프트에 이 규칙을 넣어줘. (1) 지식 조각에 없는 것은 모른다고 하고 안내 페이지로 보낸다 (2) 효능·결과를 단정하거나 보장하지 않는다, "자료에 따르면"과 "개인차가 있어요"를 쓴다 (3) 의학·법률 조언은 하지 않는다 (4) 개인정보를 묻지 않는다 (5) 300자 이내 평문, 마크다운 금지.

답이 이상하면 조각은 맞는데 모델이 어긋나게 말한 경우이므로 이 규칙을 고쳐요.

안전장치 점검 포인트

장치막는 것주의
금지 표현 가드"기적·보장·100%" 같은 단정"보장하지는 않아요" 같은 부정 문맥은 통과시켜야 해요
한도폭주·비용·스팸전체·사람·방 세 층
개인정보 차단전화·계좌 입력모델에 보내지 않아요
캐시비용캐시에서 꺼낸 답에도 후처리를 걸어요

배포와 키 등록

배포는 Git·Vercel 배포와 같아요. 단 키와 토큰은 내가 직접 해요.

이 프로젝트를 Vercel에 배포하는 순서를 알려줘. 환경변수는 내가 터미널이나 Vercel 대시보드에서 직접 등록할 거니까 키 값을 대화에 쓰라고 하지 말고, 이름과 등록 방법만 알려줘.

  • 모델 키·봇 토큰은 채팅과 파일에 붙여넣지 않아요. 새어 나갔다면 서버 값을 새로 만들고 폰 스크립트의 토큰도 바꿔요.
  • 사용할 모델은 공식 문서의 가격과 지원 종료 일정을 확인하고 고르고, 7강의 질문 목록으로 두세 개를 비교해요.
  • 비용은 모델 단가와 질문 수로 계산돼요. 하루 전체 한도가 곧 비용의 상한이에요.

폰과 연결

3강 스크립트에서 "정해진 답"을 /ask 호출로 바꿔요. 토큰은 폰 스크립트의 설정 한 줄에만 넣고, 서버 응답이 없거나 오류면 침묵해요.

🧪 실습

  • /api/ask를 만들고 로컬에서 질문 하나를 보내 평문 답을 받았다
  • 전화번호 모양의 숫자를 넣은 질문이 모델 호출 없이 고정 안내로 끝나는 것을 확인했다
  • 같은 질문을 두 번 보내 두 번째가 더 빠른지 보았다
  • Vercel에 배포하고 환경변수를 직접 등록했다
  • 시험 방에서 @도우미 질문에 지식 팩 기반 답이 왔다

오늘의 체크리스트

  • 질문이 답이 되는 여덟 단계를 순서대로 말할 수 있다
  • 키와 토큰이 코드·채팅에 없다
  • 질문·답 원문을 저장하지 않는 설계를 이해했다