퇴근 후, Gemini와 AI 임베딩으로 FAQ 챗봇 만들기
기획자로 일하다 보면 종종 이런 말을 듣는다.
“이거 그냥 GPT 붙이면 되는 거 아냐?”
“AI가 알아서 답해주면 좋겠다~”
처음엔 나도 그게 어려운 줄 알았다. 근데 어쩌면 정말 쉬운 걸 수도 있겠단 생각도 들었다.
그래서 직접 실험해 봤다. Google Gemini API를 써서.
고객들이 자주 물어보는 질문들이 정리된 FAQ 문서가 가장 먼저 들어왔다.
"결제는 아떻게 하나요?"
"영수증은 어디서 확인하나요?"
딱히 어렵진 않지만, 매번 사람 손이 가는 영역.
맨날 기획 업데이트 할 때마다 하나씩 추가하는 게 너무 귀찮고, 큰 의미 없는 작업 같다고 느껴졌는데, 이걸 학습시키면 우리 서비스에 대해서 이해하고 더 멋진 답변을 해줄까? 하는 생각이 들었다.
그래서 생각한 구조는 단순했다.
사용자가 질문을 입력하면
사전에 정리된 FAQ 중 가장 유사한 질문을 찾아
그에 해당하는 답변을 출력해 주는 챗봇
처음부터 모든 게 익숙하진 않았다.
지금이야 "임베딩", "코사인 유사도", "임계값" 같은 단어를 자연스럽게 쓰지만
그땐 아무것도 몰랐다.
"TPO-k filtering이 뭐야?"
"threshold가 낮으면 뭐가 안 좋은 거지?"
"코사인 유사도 말고 다른 방법은 없어?"
이런 질문을 수십 번 던졌고, 그때마다 AI에게 묻고 또 실험했다.
(고맙게도 GPT가 성실히 도왔다.)
OpenAI의 GPT API도 물론 고려했다.
다만 무료 티어에서는 embedding API 사용이 불가했고, 내가 만든 파일을 직접 올려서 FAQ 데이터를 벡터화(임베딩) 하는 작업은 Gemini가 훨씬 간편했다.
Gemini의 embedding-001 모델은 정보 검색(Retrieval) 용도로 설계되어 있어, 챗봇 FAQ처럼 짧은 문서 간 유사도를 비교할 때 꽤 잘 작동했다.
문장 하나하나를 임베딩하는 속도도 빠른 편이었고, 따로 벡터 DB를 쓰지 않아도 될 정도로 심플하게 처리할 수 있었다.
물론 이런 설명은 나중에 알게 된 것이고, 처음엔 그냥 무료로 써볼 수 있으니까, 매일 쓰는 GPT 말고 새로운 걸 써보고 싶었을 뿐이었다.
처음 짠 코드는 이랬다.
python
user_question = input("무엇이 궁금하신가요? � ") user_embedding = get_gemini_embedding(user_question) similarity_scores = cosine_similarity([user_embedding], faq_embeddings)[0]
임베딩 비교 → 가장 유사한 질문 찾기 → 그에 대한 답변 출력.
이론적으로는 끝.
그런데…
사용자 질문: "영수증은 어디서 확인하나요?"
챗봇 답변: "회원증은 카운터에서 발급받을 수 있습니다."
질문에 전혀 다른 답이 튀어나왔다.
FAQ에는 분명 '영수증' 관련 답변이 있었지만,
챗봇은 비슷한 단어가 들어있는 '회원증' FAQ를 골라버렸다.
이유는 간단했다.
FAQ 수가 적어서 학습된 문장이 너무 적었고,
유사도 기반으로만 찾다 보니 어설픈 유사어를 제대로 거르지 못한 것.
그래서 아래와 같은 개선 작업을 반복했다. (작업하면서 알게 된 전문 용어들은 나중에 개념을 설명하는 글을 쓸 기회가 있다면 따로 다루어 보겠다.)
엑셀에서 FAQ를 전처리해서 질문/답변을 구분하고
질문들을 Gemini Embedding으로 벡터화하여 저장
유사도 계산 후 일정 기준(threshold) 이하일 경우는 "적절한 FAQ를 찾지 못했습니다" 처리
Top-K 유사 질문을 추출하고, 점수 차이가 적은 경우는 FAQ 후보를 리스트로 보여주기
그중 일부 코드는 다음과 같았다:
python
similarity_scores = cosine_similarity([user_embedding], faq_embeddings)[0] best_idx = np.argmax(similarity_scores) if similarity_scores[best_idx] < 0.85: print("� 관련된 FAQ를 찾지 못했어요.")
이 실험을 하며 가장 크게 느낀 건
기획자도 AI를 직접 써보고 튜닝할 수 있다는 점이다.
개념을 모른다고, 코드를 몰랐다고 포기할 필요 없다.
지금은 프롬프트만 잘 써도, 구조만 이해해도 할 수 있는 게 정말 많다. 무료 AI들에게 도움을 받아 하나씩 차근차근해보자. (코드도 다 써줌)
환경세팅도 따로 할 필요 없이 구글 colab에서 바로 gpt가 짜준 코드들을 넣어보며 테스트했다.
유사도 기반이 아닌 LLM 직접 응답 기반으로 확장
사전에 없는 질문이라도 유사하게 초거대언어모델이 생성 응답을 해주는 구조
사용자 입력 데이터를 기반으로 FAQ 업데이트 추천 기능 붙이기
이 글은 거창한 프로젝트의 결과가 아니다.
사이드 프로젝트, 그것도 "LLM 한 번 써볼까?"라는 단순한 질문에서 시작된 작은 실험일 뿐이다.
하지만 이 과정을 거치며 AI에 대한 감각도, 챗봇 구조에 대한 이해도, 나아가 협업 시 고려할 점들도 많이 배웠다. 앞으로도 여러 가지 테스트들을 해보며 아이디어를 실행해 볼 예정이다.