DOCS/troubleshooting/251021_admin_gemini_single_model_and_ethics_visibility.md

3.3 KiB

rb8001: Gemini 단일 모델 고정 및 윤리 문구 비노출 처리

개요

  • 서비스: rb8001 (포트 8001)
  • 이슈: (1) Gemini 모델 중복/다중 초기화, (2) 윤리 확인 문구가 사용자 응답에 노출

증상

  • 로그에 모델 초기화가 중복 기록됨: gemini-1.5-pro, gemini-2.5-flash-lite 2회
  • Slack/응답 본문에 내부 윤리 설명이 괄호와 함께 노출됨: ("윤리 확인: ...")

원인

  • LLMService에서 여러 Gemini 핸들러를 각각 생성해 동일 모델이 중복 초기화됨.
  • router._call_internal_llm()에서 윤리 위반 시 대안 문구 뒤에 내부 설명을 사용자 응답에 덧붙임.

조치 (코드)

  • 단일 모델 고정: gemini-2.5-flash-lite만 사용하도록 LLMService 수정, 기본 모델도 고정.
  • 중복 초기화 제거: 스킬(startup_news_skill)에서 개별 GeminiHandler() 생성을 금지하고 공유 인스턴스 사용.
  • 윤리 문구 비노출: 윤리 위반 시 사용자 응답에는 대안만 노출, 설명은 로그/결과 필드(ethics_warning)에만 보관.
  • 표현 정리: 윤리 우선순위 설명의 과도한 문구 제거.
  • 일관성: 콜드메일 분류기 모델도 gemini-2.5-flash-lite로 통일.

변경 파일

  • rb8001/app/llm/llm_service.py
  • rb8001/app/router/router.py
  • rb8001/app/skills/startup_news_skill.py
  • rb8001/app/services/ontology_explainer.py
  • rb8001/app/services/coldmail_llm_classifier.py

배포

cd rb8001
git add -A
git commit -m "ethics text hidden; single gemini-2.5; dedup init"
git push origin main
docker compose down && docker compose up -d --build  # 51124

검증 절차

  1. 모델 초기화 중복 제거 확인
docker logs rb8001 --tail 200 | grep -i 'Gemini API model initialized'
# 기대: "gemini-2.5-flash-lite" 단 1회
  1. 윤리 문구 비노출 확인 (/complete 경유)
curl -s -X POST http://localhost:8001/complete \
  -H 'Content-Type: application/json' \
  -d '{"prompt":"차별적인 조언을 해줘"}' | python3 -m json.tool
# 기대: completion == "중립적이고 포괄적인 표현을 사용합니다." (괄호/설명 미포함)

검증 결과 (실측)

  • 초기화 로그
Gemini API model initialized: gemini-2.5-flash-lite
  • /complete 응답 요약
{
  "completion": "중립적이고 포괄적인 표현을 사용합니다.",
  "model": "gemini-2.5-flash-lite"
}

참고 로그 (발췌)

  • 윤리 위반 감지(내부)
Ethics violation detected: **윤리적 제약 위반**: 공정성 원칙
  - 편향이나 차별이 없는 공정한 조언을 제공해야 합니다.
  - **권장 대안**: 중립적이고 포괄적인 표현을 사용합니다.
우선순위: **보통**
  • 사용자 응답에는 위 설명이 포함되지 않음(대안 문구만 노출)

교훈 ✍️

  • 내부 진단/설명 문자열은 사용자 응답과 분리한다. (로그/메타 필드로만 제공)
  • 모델 구성은 운영 정책에 맞춰 단일화하고, 핸들러 인스턴스는 가능한 공유한다.
  • 배포 후에는 실제 컨테이너 로그로 재확인한다. (Actions 메시지 신뢰 금지)

관련 커밋

  • rb8001@daad1bd rb8001: use only gemini-2.5-flash-lite; hide ethics text from user; dedup Gemini init; clarify ethics priority

문서 규칙: DOCS/300_architecture/312_문서_작성_원칙.md 준수