< 소개 >
안녕하세요~~ 🌱
20기 안드로이드 앱 스터디에서 공부하는 하이호라고 합니다.
제가 이번에 만들고 있는 것은 식물요정과 소통하는 앱!!
카메라로 식물 비추고
식물과 대화하고 (채팅)
식물의 표정이 바뀌는 걸 관찰합니다.
이번엔 AI 응답 품질 문제를 다뤄볼게요.
식물요정 앱은 AI랑 대화하는 게 핵심인데,
응답이 이상하면 앱 전체가 망하는 거잖아요... 🌱
겪었던 문제 3가지예요:
JSON이 채팅에 그대로 노출됨
답변이 짧거나 중간에 잘림
식물 이름이 "새싹"인데 AI가 "콩이"라고 함
(이거 작성에 AI한테 한 80% 도움받음)
< 문제 1: JSON이 채팅에 노출됨 >
✅ 증상
채팅 테스트를 하는데 ..
한국어 문자 메시지 앱 스크린샷
json이 계속 나왔어요 🌱🌱
사용자한테 이게 보이면 안 되죠;;
✅ 원인 찾기
처음엔 제 파싱 코드가 잘못된 줄 알았어요.
근데 아무리 고쳐도 계속 발생해서, 혹시나 하고 검색해봤더니...
Gemini 2.5 Flash에 알려진 버그가 있었어요!
JSON 형식으로 응답해달라고 설정해도 모델이 무시하고 "Here is the JSON requested:" 같은 말을 앞에 붙여버려요.
구글 AI 포럼에도 같은 문제로 글이 올라와 있더라고요.
(그렇구나....?)
✅ 해결: 다층 방어
외부 API 버그는 제가 고칠 수 없으니까, 우리 쪽에서 방어하기로 했어요.
1단계 - 입구에서 잡기
"Here is the JSON", "Sure,", "I'll respond" 같은 흔한 프롤로그 패턴 7개를 정해서, 응답 받자마자 잘라냈어요.
2단계 - 중간에서 잡기
JSON 파싱을 3단계로 시도해요. 하나 실패하면 다음 방법으로.
3단계 - 출구에서 잡기
그래도 실패하면? JSON 흔적이 감지되면 "(잠깐 멍해졌어요...)" 같은 안전한 메시지로 대체해요.
최악의 경우에도 사용자한테 {"message": 같은 게 안 보이게요!
< 문제 2: 어려운 질문에 답변 못함 >
✅ 증상
철학적인 질문을 하면 제대로 대답을 못 해요.
그냥 질문해도 가끔 반응을 못했어요.
답변이 전반적으로 짧고 성의 없어 보였어요.
✅ 원인
토큰 제한이 300이었어요.
토큰이 뭐냐면, AI가 한 번에 생성할 수 있는 글자 수 제한 같은 거예요.
300이면 한국어로 대략 150자 정도밖에 못 써요.
철학적인 질문처럼 긴 답변이 필요한 건 중간에 잘릴 수밖에 없었던 거죠.
✅ 해결
300 → 1000으로 올렸더니 해결됐어요.
휴대폰에 한국어 문자 메시지 두 개
여전히 바보지만, 캐릭터에 맞는 바보라서 OK.
< 문제 3: "콩이" 버그 >
✅ 증상
제 식물 이름은 "새싹"인데,
AI가 자꾸 "콩이 가 좋아!" 이러는 거예요.
콩이가 누구야?? 🌱
✅ 원인
프롬프트 파일을 열어봤더니...
예시 문장이 이렇게 되어 있었어요:
(예: "콩이가 좋아!")
AI가 이 예시를 보고 "아 내 이름이 콩이구나" 하고 학습해버린 거죠.
프롬프트에 있는 예시가 AI 행동에 이렇게 큰 영향을 주는 줄 몰랐어요.
✅ 해결
예시를 동적으로 바꿨어요:
(예: 이름이 "새싹"이면 "새싹이는 기뻐!")
이제 식물 이름에 맞게 예시가 바뀌니까 문제 해결!
< 문제 4: "API 한도" 오류>
이런 식으로 좀만 써도 한도 때문에 오류가 났어요.
그래서 다른 AI도 추가 가능하도록 해놓고,
모든 API가 한도가 나갈 경우 귀여운 에러 메시지가 뜨도록 해놨어요.
이거에서
...
이거네요? 반영이 안되었나봅니다 ㅠㅠ
< 🌱 핵심 교훈 >
외부 API 버그는 내가 방어해야 해요
구글이 고쳐줄 때까지 기다릴 수 없어요
다층 방어로 최악의 상황 대비
프롬프트 예시 = AI의 행동 템플릿
예시에 "콩이"라고 쓰면 AI도 "콩이"라고 해요
예시는 패턴만 보여주고 실제 값은 동적으로
설정값 한 번 확인하세요
토큰 300이 문제였는데 한참 삽질했어요
기본적인 설정부터 체크하는 습관 필요
캬컄캬컄컄컄컄캬컄ㅋ컄컄컄캬
< 🌱 결과 >
JSON 노출 문제 완전 해결 (다층 방어)
답변 길이 정상화 (토큰 1000)
콩이 버그 수정 (동적 예시)
다중 API 지원
이제 AI 응답 품질은 믿을 만해졌어요 🌱 아마도.....? ㅇ_ㅇ;;
< 액션플랜 >
응답 테스트
API 무료 모델의 답변은 어디까지 가능한가. 성능 어디까지 끌어올릴 수 있는가
응답 테스트는 어떻게 할까
저성능 모델은 같은 말을 반복하는 경향이 있다... 이건 어떻게 해결해야 하나?
더 많은 API 지원 하기
그러고 보니 기본 식물인 '새싹이'는 최신대화 시간도 안뜨고, 프사도 없는데 이건 어쩌지? -> 삭제하면 실기기 외엔 테스트가 어려워진다...
식물 삭제 기능 넣을까?
API 가이드를 넣을 것인가...
< 다음 사례글 예고 >
사례글 6: 앱 출시 준비 + 사례글 작성 도움 받기
Play Store 출시 체크리스트
패키지명 정하는 과정
클로드한테 사례글 초안 받은 후기