[5단계] 데이터 컨텍스트 보강 설계 - 100-hours-a-week/KTB4-3rd-wiki GitHub Wiki
[5단계] 데이터/컨텍스트 보강 설계
기능 1,2 - 이미지 판정
-
Visual RAG 사용 안함.
- 이유 :
- Visual RAG는 이미지-텍스트 쌍을 사용하는데, 이 서비스에서는 단순히 이미지가 들어오고, 유사한것을 판정하는게 아닌, 이미지 내부의 정보를 판정하는것이기 때문에 사용하면 안됨.
- 지식이 필요한게 아니라 이미지 내부의 정보를 판정하는것이기 때문에, 사용하면 안됨.
- 이유 :
-
보강을 위해 파인튜닝은 고려할만함.
- JSON 형식고정 파인튜닝은 진행 예정
- 이후 포지셔닝을 학습시키는 파인튜닝은 고려하고 있으나, 데이터 확보와 라벨링에 상당한 시간이 소요되므로, 우선순위가 낮음
-
양자화는 하지 않을것.
- 이미 초경량 모델이라 실측에서 확인한 바로 성능 저하가 심각했음.
기능 3 - 혼잡도 분석
-
RAG 사용 안함.
- 이유 :
- 최근 제보의 의미를 분석하는 기능이라, 판단 근거가 해당 게시글 묶음의 원글·댓글 자체임. 외부에서 검색해 올 지식이 없음.
- 과거 제보를 검색해 넣으면 만료된 혼잡 정보가 현재 판정을 오염시킴. 같은 장소의 어제 판정은 지금의 근거가 될 수 없음.
- 이유 :
-
별도의 문맥 캐시나 복원 로직 없이 요청 자체로 문맥을 채움.
- 댓글은 단독으로 해석되지 않음. "저도요"만 주면 혼잡도와 무관한 글로 버려지지만, 부모 원글("판교역 지금 사람 너무 많아요")을 같이 주면 HIGH 제보 한 건으로 살아남음.
- 게시글 묶음에 변화가 있으면 Spring은 원글과 최근 20분의 현재 댓글 전체를 매 요청에 다시 담아 보냄. 원글이 20분보다 오래됐어도 유효한 댓글이 있으면 함께 보냄. AI는 원문을 따로 보관하지 않아도 새 댓글을 해석할 수 있음.
- AI가 보관하는 것은 신호별 판정(혼잡 단계·원인)뿐이고 원문은 보관하지 않음. 판정은 25분간 재사용하며, 이 재사용 기간은 20분 집계 유효 시간과 별개 값임.
- 시각(
created_at)은 요청 기준 상대 시각으로 변환해 같이 넣음. 위치(spot_name)는 1단계 요청 스키마에 없어 지금은 넣지 못함 — Spring과 협의해 정식 필드로 추가되면 같이 넣음. - 보강 위치는 [4단계]의 게시글 묶음 구성 단계. LLM 호출은 게시글 묶음당 1회 그대로임.
-
AI의 분석 상태 자체를 잃었을 때는 지어내지 않고 다시 받음.
- 재시작·재배포로 보관 중인 판정을 잃으면 AI는 해당 요청을 적용하지 않고
409 STATE_RESET을 반환함. 가짜 판정을 만들지 않음. - Spring은 현재 유효한 게시글 묶음 전체를 다시 보내고, AI는 전체 분석에 성공해야 정상 처리로 돌아감. 하나라도 실패하면
503을 반환하고 복구 대기를 유지함. - 즉 상태 유실이 결과를 틀리게 만들지 않고, 전체가 성공할 때까지 한 주기씩 늦어질 뿐임.
- 재시작·재배포로 보관 중인 판정을 잃으면 AI는 해당 요청을 적용하지 않고
-
보강 효과는 A/B로 검증함.
- 확인할 것 : 상대 시각을 모델 입력에 추가하는 것이 그만큼 늘어난 입력 토큰값을 하는지. 위치(
spot_name)는 1단계에 필드가 생긴 뒤 별도로 검증함.- A는 원글·댓글 본문만, B는 상대 시각 보강. 모델과 프롬프트는 동일.
- 이득 - 판정 정확도, 그중에서도 관련 여부(RELEVANT/IRRELEVANT) 혼동이 몇 건 줄어드는지.
- 비용 - 게시글 묶음당 입력 토큰 수와 처리 시간. 댓글이 쌓일수록 문맥이 길어지므로 AI 응답 제한 50초와 API 비용에 반영됨.
- 이득이 비용을 넘지 못하면 시각 보강도 뺌.
- 확인할 것 : 상대 시각을 모델 입력에 추가하는 것이 그만큼 늘어난 입력 토큰값을 하는지. 위치(
-
LangChain은 우선 도입하지 않음.
-
이유 :
- 지금 하는 보강은 요청에 이미 담긴 원글·댓글에 상대 시각을 붙이는 것뿐이라 체인으로 묶을 단계가 없음.
- 검색이나 여러 도구를 조합할 일이 없어서 직접 구성하는 편이 더 단순함.
-
추후 검토 : 외부 검색이나 여러 단계를 조합해야 하는 보강이 필요해지면 그때 다시 판단함.
-
-
LLM 파인튜닝은 지금은 안함. 자체 서빙으로 전환할 때 검토함.
- 지금 안하는 이유 :
- 운영 API가 대상이 아님.
- 파인튜닝은 정답을 대량으로 보여주는 작업이라, 정답 자체가 흔들리면 흔들린 기준을 학습함. 실제 유용한 정답셋을 충분히 얻을 수 있을지 미지수.
- 판정 품질이 부족하면 LoRA SFT 고려해볼 것. SFT 목표는 단계·원인 판정으로 좁힘.
- 지금 안하는 이유 :
-
재학습보다 정답셋 확보가 먼저임.
- 운영 로그에서 사람이 검토한 정답을 모아 평가셋을 키움.
- 혼잡단계와 원인이 객관적인 기준이 있는 것이 아니라 추론 경로만 바꿔도 그 정도가 흔들린 실측이 있음.
- 라벨은 신호 단위로 매김. 집계 규칙이 바뀌어도 신호 라벨은 그대로 쓸 수 있지만, 스팟 단위 라벨은 규칙을 바꾸는 순간 무효가 됨.