일단 하고 보는 사람

나중보단 지금에 집중하되, 지금보단 나중에 완벽해지자💪🏻

LLM

[오늘의실수]RAG 반환값이 없다⁉️→ 무응답도 응답이다

JanginTech 2025. 6. 3. 00:46

Tistory에는 너무 오랜만에 기록하는 거 같은데,, 일단 내가 하고 있는 일중 하나는 바로 LLM 데이터 쌓는 작업이다.

 

자세히 쓸 순 없지만 Azure AI Search에 적재한 HTML 문서에 특정 키워드에 대한 특정 항목을 특정 포맷에 맞춰 요약 출력하는 로직을 구현하다가 겪은 일이다.

 

📌 LLM 호출 결과의 부재.. 대체 왜?????

그렇다. LLM 기반 RAG 로직 짜다가 겪은 일이다.

데이터 흐름상 서치필드에 관한 파라미터도 정상적으로 흘러가고, 디버깅 과정에서도 query 값과 document 모두 이상이 없었다.

너무 답답해서 각 필드 하나하나 뜯어봤는데 정. 확. 히. 일치했다.

 

그러나 LLM 호출 이후 반환값과 쿼리가 모두 빈 문자열로 처리되는 현상이 발생했다 😢

처음에는 금방 해결할 줄 알았다. 로직 중간에 변수명을 잘못 기재해 줬을 줄 알았기 때문이다(웹소캣 로직이라 우리가 정한 비슷한 번호의 수많은 로직이 존재했고, 각각 비슷한 필드명을 써서 이런 실수가 비일비재했기 때문).

 

breakpoint를 몇십 개를 달았는지 모르겠다. 

미치도록 찍고 들어가고 나오고 다시 실행하고를 반복해도 답을 찾을 수 없어, 상사분께 도움을 요청했다 살려달라고 빌었다 

 

함께 파라미터부터 도큐먼트 구조, OpenAI 설정 등등 모두 꼼꼼히 확인했지만 문제를 찾을 수 없었다.

그러던 중, 상사분께서 코드 한 줄을 가리키며 이런 말씀을 하시더라.

 

"00씨 혹시.. 저기 저 문장 때문에 얘가 출력 안 하는 건 아니겠죠?"

가리킨 곳은 정확히는 프롬프트였다.

 

내가 쓴 프롬프트는 다음과 같았다.

..
"<document>" 태그 내부의 데이터를 요약 정리하세요.
주어진 A에 대한 정보만을 요약정리 하며, A에 대한 데이터가 존재하지 않을 경우, 다른 정보를 출력하지 마세요.
..

 

🙀🙀🙀🙀 그럴 리가 없지 했는데

 

그럴 리가 있었다.

 

 

 

내가 살다 살다 gpt가 무응답을 응답으로 내세우는 경우는 또 처음 본다..;;

아니 전에는 저렇게 써도 잘만 나오더구먼!!!!!!!!!!!!!!!!!!! 1

 

아무튼 이 프롬프트는 다음 두 가지 제약 조건을 동시에 포함한다.

1. A에 대한 정보만 요약할 것
2. A에 대한 정보가 없으면 출력하지 말 것

 

GPT-4 mini(우리가 쓰는) 모델은 내가 설정한 프롬프트를 엄격히 해석하여 따랐다..ㅎㅎ

인덱스에 있는 문서 내에 A에 대한 정보가 불명확하거나 존재하지 않는다고 판단해서 출력을 완전히 생략한 것이다..ㅎㅎ

 

즉, 디버깅 시 파라미터가 잘 들어왔음에도 결과가 빈값이었던 건 잘못된 게 아니었던 것!!!!

 

 

 

🤓 오늘의 교훈: LLM 프롬프트==함수 로직과 같이 봐라.

  • if-else 분기 처리에 따라 플래그 값이 True/False로 바뀌는 것과 같이, 프롬프트의 조건이 지나치게 엄격하면 출력은 실패한다는 것을 배웠다.
  • 특히 RAG 짤 땐 디버깅 시 '프롬프트 조건' 점검도 필수다!!
  • 빈 문자열 출력이 오류가 아니라 의도된 무응답일 수도 있다

 

 

🧭 개선 방향

아무튼 

그래서 프롬프트를 아래와 같이 개선했다.

"A에 대한 정보가 있을 경우만 A를 요약하세요. 없으면 '정보 없음'이라고 출력하세요."

 

 

 

 

 

찾고 나니 어처구니없었지만 아무튼 해결했으니 천만다행이다~

암튼, 실무 뛰다 보니 이런 일도 다 겪고 ㅋㅋㅋ 당시엔 답답했지만 집 오면서도 생각나서 피식하게 만드는 일화였다