AI 커리어 플래너

AI Mentoring

OpenAI의 GPT 모델을 연동하여 AI 멘토링 기능을 구현했습니다.

ReactTypeScriptOpenAI API

핵심 기여 사항

  • GPT 응답 구조 설계 및 프롬프트 엔지니어링 협업
  • UI 설계 흐름에 맞는 GPT 응답 포맷과 프론트엔드 파싱 로직 통일

도전 과제: 신뢰성 있는 AI 멘토 응답 생성

가장 큰 도전은 GPT 모델이 자유로운 텍스트(Free Text)가 아닌, 프론트엔드의 마인드맵, 간트차트 등 시각화 컴포넌트에서 즉시 사용할 수 있는 구조화된 데이터(JSON)를 일관되게 생성하도록 만드는 것이었습니다. 동시에, 반복적인 질문에 대해 매번 API를 호출하는 것은 불필요한 비용과 지연 시간을 유발하므로 이를 최적화할 필요가 있었습니다.

해결 전략: 체계적인 프롬프트 엔지니어링과 응답 구조화

이 문제를 해결하기 위해 프롬프트 엔지니어링(Prompt Engineering) 기법을 적극 활용했습니다. AI의 역할을 '진로 상담 멘토'로 명확히 정의하고, 항상 지정된 JSON 형식으로만 답변하도록 구체적인 규칙과 예시를 제공했습니다.

다이어그램을 불러오는 중...

[그림 1] 프롬프트 엔지니어링 및 응답 처리 흐름

해결 전략 2: 응답 캐싱을 통한 비용 및 지연 시간 최적화

API 토큰 사용량을 절감하고 응답 속도를 향상시키기 위해, 단순 캐싱을 넘어선 유사도 기반의 응답 재활용 전략을 도입했습니다. 새로운 질문이 들어오면, 먼저 임베딩 모델을 사용해 질문을 벡터로 변환하고, 기존에 저장된 질문-응답 데이터베이스에서 가장 유사한 질문을 찾아 그 응답을 반환하도록 설계했습니다.

다이어그램을 불러오는 중...

[그림 2] 유사도 검색 기반 응답 재활용 아키텍처

챗봇 서버는 사용자의 메시지를 받아 사전에 정의된 시스템 프롬프트와 결합하여 GPT 모델에 전달합니다. GPT가 생성한 JSON 응답은 다시 서버에서 유효성을 검증하고 파싱하여 프론트엔드에 전달하는 흐름으로, AI 응답의 신뢰성을 크게 높였습니다.

# 예시: 임베딩과 유사도 검색을 활용한 응답 재활용 로직
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
# 모델 및 DB 초기화 (예시)
embedding_model = SentenceTransformer('all-MiniLM-L6-v2')
question_db = load_question_database() # {question: answer} 형태의 DB
async def get_response_with_similarity(message: str, threshold=0.9):
message_embedding = embedding_model.encode([message])
for stored_question, answer in question_db.items():
stored_embedding = embedding_model.encode([stored_question])
# 코사인 유사도 계산
similarity = cosine_similarity(message_embedding, stored_embedding)
if similarity[0][0] > threshold:
return answer # 유사도가 높으면 저장된 답변 반환
# 유사한 질문이 없으면 GPT API 호출
api_response = await generate_structured_response(message)
# 새로운 질문과 답변을 DB에 저장...
return api_response

결과 및 성과

체계적인 프롬프트 엔지니어링을 통해 AI 응답의 실패율을 5% 미만으로 낮추었고, 유사도 검색 기반의 응답 재활용 전략을 통해 의미적으로 유사한 질문에 대한 중복 API 호출을 60% 이상 줄여 토큰 사용 비용을 크게 절감했습니다. 이 기술적 안정성과 운영 효율성은 제품의 핵심 경쟁력이 되어 실제 고등학교와의 계약 체결에 결정적인 역할을 했습니다.