티스토리 뷰

반응형

사용자의 쿼리에 대하여 토큰 비용을 줄일 수 있는 방법 중에 캐싱 기법을 적용해보았다. 물론 토큰 비용이 얼마 되지 않아 그냥 해도 되지만 응답 속도는 확연하게 체감이 될 정도로 빨랐다.

 

랭체인에서 제공하는 라이브러리를 사용하면 캐싱 구현은 정말 간단하다.

from langchain.cache import RedisCache
from langchain.globals import set_llm_cache

set_llm_cache(RedisCache(redis_=Redis(host='redis', port=6379, db=1)))
response = rag_chain_with_source.invoke(text.question)

 

질문을 할때 마다 Key가 생성이 되었다. Key는 Hash로 이루어 져있는데 어떤 값을 가지고 해시화를 하는지 살펴보았다.

 

아래에 보면 promt와 llm_string으로 hash를 만드는데 prompt는 알겠는데 llm_string은 어떤건지 잘 모르겠다. content 부분에 응답이 저장되어 있다.

    def _key(self, prompt: str, llm_string: str) -> str:
        """Compute key from prompt and llm_string"""
        return _hash(prompt + llm_string)

 

아무튼 이러한 Key를 만들고 Value를 살펴보면 아래와 같은 Json이 저장되어 있다.

{
  "lc": 1,
  "type": "constructor",
  "id": [
    "langchain",
    "schema",
    "output",
    "ChatGeneration"
  ],
  "kwargs": {
    "message": {
      "lc": 1,
      "type": "constructor",
      "id": [
        "langchain",
        "schema",
        "messages",
        "AIMessage"
      ],
      "kwargs": {
        "content": "산전, 산후휴가는 90일을 주는 것으로 알려져 있습니다. 따라서 애기를 낳고 난 후에 회사에서는 90일 동안 휴가를 제공할 것입니다.",
        "additional_kwargs": {},
        "example": false
      }
    },
    "generation_info": {
      "finish_reason": "stop"
    }
  }
}

 

 

적용한 결과 응답이 3배 정도 더 빨랐고 토큰도 사용하지 않았다. 하지만 이러한 기술을 솔루션에 적용하기 위해서는 Redis 성능 튜닝 및 캐싱 관리 기법에 대해 공부가 더 필요해 보인다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함