지난 이야기
이제 임베딩과 llm 응답 생성까지는 구현이 되었다. 실제 웹 화면과 연동하여 사용할 수 있는지가 중요하기 때문에.. 이번에는 웹페이지에 띄워보도록 하겠다.
웹페이지 수정하기

우리 챗봇의 초기 버전이다. 팀원분께서 나름 주제와 잘 어울리는 테마로 이쁘게 만들어주셨다.
이제 이 페이지를 받고 나서, 이걸 서버와 잘 연동을 해야 한다. 그 전에 코드를 뜯어서 API 스키마를 동일하게 설정하여주고, CORS 설정까지 해야 한다.
{
"success": true,
"error": null,
"result": {
"response": "...",
"similarity": 0.6111,
"cache_hit": true,
"latency": 2000,
"co2_grams": 1.36,
"ci_g_per_kwh": 400,
"sources": [doc_id...]
}
}
저번에 정했던 통합 스키마로 채팅을 출력되게 하면 된다.
어쨌든 API를 연동하고 나면 채팅을 실제로 할 수 있다.

답변은 잘 나온다. 임베딩 해놓은 문서에서 거의 정보를 끌어다 쓰고 있고, LLM이 생성한 문장으로 답변이 나오고 있다.
다만 아래에 보면 응답하는데 14.82초가 걸린다. 로컬 모델을 가져다 쓰고 있긴 하지만, 그렇다고 해도 너무 오래 걸린다.

LM 스튜디오에서 찍어본 로그이다. 보면 추론하는데 6.22초가 걸렸고, total time으로 7319ms가 걸린 것을 확인할 수 있다. 이걸 제외하고도 거의 5초이상 다른 곳에서 시간을 잡아먹고 있다. 어디인지 보고 해결해야 한다. 쿼리 과정이 꽤나 복잡하기 때문에, 각 과정 별로 로그를 출력하고 소비된 시간을 측정해보기로 하였다.

로그를 확인해보니, 시간이 크게 걸리는 곳은 두 부분이었다. 첫 번째는 탄소 집약도 API 호출이었고, 하나는 LLM 답변 생성이었다.
이제 첫번째 개선점을 찾았다.
그리고 캐시 히트가 잘 이루어지는지 확인해야한다.

qa pair에 등록되어 있는 것과 정확하게 같은 프롬프트로 테스트를 해보았다. 당연히 캐시 히트가 이루어졌고, 답변도 qa pair에 등록되어 있는 것과 같은 답변이 출력되었다. 바람직한 답변이지만, 아직도 5초 이상이 걸리고 있다. 왜인지 살펴보니...
캐시 히트가 되어서, document fallback이 이루어지지 않았어도, LM 스튜디오에 계속 요청을 날리고 있었다. qa pair에 등록된 질문은 이미 llm이 생성했다는 점에서 꽤 무의미한 짓을 하고 있다.
이걸로 두번째 개선점을 찾았다.
캐시 활용해보기
캐시된 답변을 사용하는거면, LLM을 거칠 필요가 없다. LLM을 거치지 않는다면, 답변 생성하는데 걸리는 5초에서 7초의 시간을 아낄 수 있다.
따라서 qa_pair 검색 -> cache hit -> 캐시된 답변 응답 이런 순서로 이루어지면 되겠다.
바꾼 코드를 테스트해보자.

15초에서 5초 가량으로 시간이 줄어들었다! 역시 LLM 답변을 생성하는 시간이 압도적으로 긴 것 같다.
남은 과제들
이렇게 연동을 하고, 조금의 최적화를 해보았다. 그래도 긍정적인 점은, 캐시 응답이 제대로 온다는 것과, GPU 사용량이 잘 출력된다는 것이다.
이제 남은 것은 탄소 API 최적화이다. 사실 이미 구현된 것이 있긴 하지만, 내 파트가 아니라서.. 제대로 연동이 안된 것 같다. 팀원 분이랑 이야기해보고 적용해보면 될 것 같다.
이 외에도 RAG 답변 고도화, 프롬프트 엔지니어링 등이 남아있다. 또한 실질적인 데이터와 탄소 최적화 수치를 알기 위해서 더 체계적인 테스트를 수행해야 한다.
'탄소중립' 카테고리의 다른 글
| [탄소중립 아카데미 6기] API 최적화하기 (1) | 2026.06.08 |
|---|---|
| [탄소중립 아카데미 6기] 벡터 임베딩과 벡터 검색 (0) | 2026.04.27 |
| [탄소중립 아카데미 6기] 자동 크롤러 구현하기 (1) | 2026.04.13 |
| [탄소중립 아카데미 6기] RAG란 무엇인가? (0) | 2026.04.06 |
| [탄소중립 아키데미 6기] 1주차 - OT (0) | 2026.03.27 |