챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

OpenAI API를 이용한 챗봇을 만들면서 대화가 길어질수록 LLM 호출 시 토큰 수 증가로 응답 시간이
길어지는 문제가 발생
문제분석
여기서 생각하는 문제는
db 조회의 부하
처음 챗봇에게 부여하는 역할이 너무 긴데, 이걸 매 API 호출마다 전송함
대화 흐름을 기억하기 위해 챗봇-유저 간 대화 내용을 모두 DB에 저장한 다음 그대로 API 호출 마다 LLM에 전달함
→ 모든 대화 내용을 LLM한테 보내버리는 것
→ 이렇게 모든 내용을 전송 하다보면 대화 내용이 쌓일수록 엄청난 양의 토큰과 데이터가 소모될 것
구상
이걸 해결하기 위해 생각한것이
챗봇 역할 단순화하기
대화 내용을 요약해서 LLM에 요청 보내기
대화 내용을 캐시에 담아 정보 전달하기
결정
대화 내용을 매번 전달하는 것이 아닌 캐시에 담아 일정 횟수마다 보내 한번에 보내는 데이터 수를
낮추려고 했는데, 캐시에 데이터를 담아 전달하면 대화를 저장하지 못해 대화의 흐름 파악에 문제가 생겨 캐시는 기각
대화 내용을 요약하기 위해 다른 LLM을 사용하면 추가적인 API 호출이 발생해서 속도를 높이려다
오히려 비용이 더 들 수 있지 않을까라는 고민이 있었지만,
다르게 생각해보면 과하게 많은 데이터를 전송하면서 발생하는 토큰 비용과 비교해 보면 요약해주는
역할을 수행하는 LLM API 호출 비용이 더 저렴하고 효율적이라 판단함
따라서 대화 내용을 챗봇 LLM에 전달하기 전에 요약 LLM을 통해 대화를 요약한 뒤 요약한 데이터를
전송하는 방식으로 결정
요약 기준 : 중요도 높은 대화(질문/답변 패턴)는 더 자주 요약하고 간단한 인사(인사, 짧은 대화)는 제외
요약 LLM 최소화 : 꼭 요약이 필요한 경우에만 수행
정확도가 높지만 무거운 gpt-4o 모델 대신 빠르고 가벼운 gpt-3.5-turbo로 요약 수행
구현
DB 및 API 호출 시간을 확인하기 위해 파이썬의 time 모듈 사용
대화가 일정 횟수 이상 이어질 경우 LLM을 활용해 중요 대화를 요약한 후 API에 전달
- 대화 횟수는 10회로 지정. 너무 자주 넘기면 요약을 한다고 오히려 시간이 더 오래 걸리게 되기 때문
요약 기준 : 질문-답변 패턴이나 핵심 정보는 요약하고 단순 인사나 짧은 대화는 제외
결과
- 평균 처리 시간이 3.2488초에서 3.0470초로 약 6.2% 단축
코드 수정 전 실행
코드 수정 전 호출 시간을 측정한 결과 대화 데이터가 누적될수록 api 호출 시간이 점차 증가하는 것을
확인하였으며, 이는 api 호출 과정에서 전달되는 데이터의 양이 주요 원인임을 알게 되었다.
4문장이 1세트라고 가정하고 실행했을 때, db에서 기록 호출 시간은 1세트 내내 일정했지만,
api 호출 시간은 데이터 누적에 따라 점차 증가했다.
따라서 db 조회가 부하의 주요 원인이 아니며, 데이터 누적에 따른 api 호출 시간이 증가하는 원인은
전달되는 데이터 양때문이라고 판단된다.
| 시도 횟수 | 전체 처리 시간 |
| 1회 | 3.9899 초 |
| 2회 | 3.2760 초 |
| 3회 | 2.4806 초 |
| 평균 | 3.2488 초 |
코드 수정 후 실행
| 시도 횟수 | 전체 처리 시간 |
| 1회 | 2.9651 초 |
| 2회 | 3.2448 초 |
| 3회 | 2.9312 초 |
| 평균 | 3.0470 초 |



