Spring

[Spring AI] LLM, call(), stream(), 모델의 확률성

montmer27 2026. 2. 26. 22:32

1. LLM과 호출 방법

LLM 객체란, 모델과의 통신 방식을 추상화한 클래스이다. 

LLM 객체를 호출하는 메서드는 call(), stream() 두 가지가 있다.

 

2. Call()

call()은 짧은 응답이나 배치 처리에 적합하다. 사용자는 대기 후 답변을 한 번에 받을 수 있다. 

응답을 db에 저장할 때, 응답 결과로 다음 로직을 실행할 때(스텝 백 프롬프트)에도 call()이 유리하다.

 

3. Stream()

stream()은 응답을 기다리지 않고 생성되는 즉시 수신한다. 때문에 실시간으로 타이핑되듯 표시된다.

실시간 채팅이나 긴 응답인 경우 적합하다. 이때 응답은 청크 단위로 반환한다. 실제로 call()은 stream()을 내부에서 사용하고 모든 chunk를 모아서 반환하는 방식으로 구현되는 경우가 많다. 

챗봇/대화형 인터페이스, 코드 생성, 요약 및 분석 리포트의 경우 스트리밍 UX가 필요하다. 사용자가 답변 방향을 보고 답변을 유지할지, 중간에 중지할지 결정할 수 있기 때문이다. 

 

4. 모델의 확률성

LLM은 다음 토큰을 확률적으로 선택하기 때문에 같은 질문에 매번 다른 답이 나올 수 있다. 

다른 답이 나오는 정도, 즉 다양성을 조절하는 파라미터가 존재하는데, 이를 Temperature라고 한다.

Temperature가 0.0이면 항상 가장 높은 확률의 토큰만 선택한다 -> 매번 같은 답이 생성되므로 결정적(Deterministic)이라 부른다. 1.0이면 확률 분포대로 선택하므로 다양하고 창의적이다. 2.0이면 확률이 매우 평탄해지므로 예측 불가가 된다. 

창작이나 아이디어 브레인스토밍과 같은 상황에서는 Temperature를 높게, 계산이나 코드 작성과 같이 정확하고 일관된 결과가 필요한 경우 낮게 설정하는 것이 일반적이다.