퍼스널 페이지에 LLM 연동하기 4편 - 실제 기록 기반 개선하기
약 두 달 전, 개인 포트폴리오를 개편할 겸 노션(Notion)으로 관리하던 이력을 웹사이트 형태로 옮겼다. 바쁜 일정 탓에 따로 홍보하지 않고 잠시 잊고 지냈는데, 오늘 문득 생각나서 들어가 보니 누군가 내 웹사이트에 방문해 챗봇과 대화를 나눈 흔적이 남아 있었다.
기록을 살펴보니, 사용자는 ‘your recent work’에 대해 질문했고, 이에 대한 챗봇의 응답은 나의 최근 경력을 중심으로 이루어졌다. 틀린 답변은 아니었지만, 질문의 의도는 아마도 "최근 논문이나 연구 성과"였을 가능성이 높아 보였다. 나는 대학원생이자 연구자이므로, ‘recent work’이라는 표현은 ‘최근 직장’보다는 ‘최근 연구’나 ‘논문’으로 해석되는 것이 더 자연스럽다. 이처럼 질문의 모호성으로 인해 엉뚱한 답변이 생성된 것은 사용자 경험 측면에서 분명한 한계였다.
그래서 이번 글에서는 이 문제를 어떻게 개선했는지를 기록해보려 한다.
시도 1: 쿼리 재작성
가장 먼저 시도한 방법은 쿼리 재작성(Query Rewriting) 기법이었다. 사용자의 질문이 모호하거나 실제 데이터 구조와 잘 맞지 않을 경우, 이를 더 명확하고 의미 있는 형태로 바꾸는 방식이다. 예컨대 ‘your recent work’처럼 해석의 여지가 큰 표현을 구체화하거나, 문맥에 맞게 다시 구성하는 식이다.
이를 위해 rewriteQuery 함수를 구현했다. 핵심은 LLM에게 단순히 질문만 전달하는 것이 아니라, 대상 인물(즉, 나 자신)의 정체성과 활동 맥락을 프롬프트에 함께 제공하는 것이었다. 내 연구자적 배경을 명시함으로써, 모델이 "recent work"이나 "your project" 같은 표현을 직장이 아닌 논문 또는 연구 프로젝트로 자연스럽게 해석하도록 유도했다.
다음은 실제 프롬프트의 일부이다:
You are rewriting a user question to make it more precise, assuming the subject is a graduate student researcher.
## Profile Assumption:
The subject is an M.S. student at HCIS Lab, GIST (Gwangju Institute of Science and Technology), focused on AI × HCI research.
They are a product-minded builder passionate about improving human life through responsible and innovative technologies.
Their "work" often refers to academic research, publications, and technically rigorous projects.
## Objective:
- Clarify vague or ambiguous user queries.
- Reflect the most likely intent in an academic and research-driven context.
- If the original question is clear, return it unchanged.
## Guidelines:
1. Interpret general terms like "your recent work", "your contributions", or "your project" as referring to research output (e.g., publications or research projects), unless clearly meant otherwise.
2. Use reasonable assumptions about academic and research communication—but do not invent facts.
3. Preserve the original user intent and tone.
4. Only rewrite if ambiguity exists. Otherwise, return the question unchanged.
## Examples:
- “Tell me more about his latest work.” → “Tell me more about Kangbeen Ko’s most recent research publication.”
- “What is that project you mentioned?” → “What is the project titled ‘LLM-Augmented Golf Swing Analysis’?”
- “Can you tell me about your project?” → “Can you tell me about your research project titled ‘SickGPT’?”
- “What are you currently working on?” → “What research are you currently working on?”
## Input:
Current user question: ${query}
Rewritten question:
이처럼 프롬프트에 나의 정체성과 활동 영역을 명시적으로 포함시킴으로써, 모델이 보다 일관되고 의미 있는 방식으로 질문을 재구성할 수 있게 되었다.
실제로 검증을 해본 결과 아래와 같은 결과가 도출됨을 확인할 수 있었다.
질문에 포함된 'recent work'가 나의 이력과 상황을 고려하여 'recente research publication or project'로 rewrite 된 것을 볼 수 있다. 답변 또한 그럭저럭 무난하게 나오는 것을 확인할 수 있었다.
시도 2: 쿼리 재작성 결과와 후속 문제
하지만 여기서 또 다른 문제가 드러났다. 재작성된 쿼리가 되묻는 질문 형태가 되어, 시스템에서 이를 무관한 질문으로 간주해 차단한 것이다. 현재 시스템은 포트폴리오와 직접 관련 없는 질문은 걸러내도록 설정되어 있는데, 되묻는 형식으로 바뀐 쿼리가 이 규칙에 걸린 것이다.
사실 챗봇이 에이전트 형태였다면 꽤 자연스러운 흐름일 수 있었겠지만, 현재의 간단한 구성에서는 문제로 작용했다. 이를 해결하기 위해, 재작성된 쿼리가 질문 형태일 경우 그대로 통과시키는 간단한 함수를 추가했다:
function isLikelyQuestion(text: string): boolean {
const lowered = text.toLowerCase().trim();
return lowered.endsWith('?') || /^[\s]*(what|which|who|when|why|how)\b/.test(lowered);
}
아주 간단한 구현이기 때문에 허점이 많을 수 있지만, 당장은 더 깊이 파고들 여유가 없기에 추후 개선하기로 했다.
아무튼 이렇게까지 추가해 주자 다음과 같은 결과를 얻을 수 있었다.
나쁘지 않다.
아무튼 이러한 보완 과정을 거쳐, 확인된 문제는 일단 빠르게 개선되었다. 추후 더 복잡한 문제가 발생하거나, 현재 진행 중인 논문 작업이 마무리되면 시스템을 한층 고도화해 볼 계획이다.
끝! 논문 쓰러 가자 이제..
'개인공부&프로젝트' 카테고리의 다른 글
CVPR과 UIST에 등장한 1인칭 시점으로 압력 예측하는 논문 비교해 보기 (0) | 2025.06.16 |
---|---|
Windows에서 vLLM 설치 시 "ERROR: Failed to build installable wheels for some pyproject.toml based projects (vllm)" 오류 해결하기 (0) | 2025.05.30 |
10가지 UI/UX 사용성 원칙으로 본 그룹바이에이치알 웹사이트 분석 (0) | 2025.04.21 |
퍼스널 페이지에 LLM 연동하기 3편 – RAG 연결과 Langfuse 기반 모니터링 (0) | 2025.04.06 |
퍼스널 페이지에 LLM 연동하기 2편 – Astro에 챗봇 연결하기 (feat. Gemini) (0) | 2025.04.05 |
댓글