본문 바로가기

rag

로컬 RAG 에서 요금제 추천 결과. 요금제 Spec 데이터를 임베딩 해두고, 이제 유저에게 어떻게 요금제를 추천하지?를 고민하다가..  처음에는 고객의 데이터 사용 패턴을 입력받고, 임베딩된 요금제 데이터에서 필터링한 정보와 함께 한번에 큰~~~프롬프트를 구성해 결과를 도출하는 방식으로 접근했다. 기본적인 뼈대는 정말 잘 작동했는데.... 하지만 결과적으로 이 방식은 생각보다 훨씬 까다로웠다.  특정 요금제에 맞춘 프롬프트를 정교하게 작성하면 그에 맞는 사용 패턴 입력에는 정확한 결과가 나왔지만, 사용 패턴이 조금만 달라져도 갑자기 전혀 관련 없는 요금제를 추천하는 문제가 발생했다. 또한, 프롬프트 내에 시간, 분, 초와 같은 단위들이 많이 포함되다 보니 어느 순간부터는 AI가 이러한 시간 단위들을 제대로 구분하지 못하는 현상도 나타났다... 더보기
로컬 RAG 에서 채팅 내용 유지하기. 상담 챗봇을 특정 메시지 수 만큼 영속성을 갖도록 하고 싶어 보니..Langchain4J에서는 기본적으로 지원이 되고 있었다.  https://docs.langchain4j.dev/tutorials/chat-memory/ Chat Memory | LangChain4jMaintaining and managing ChatMessages manually is cumbersome.docs.langchain4j.dev MessageWindowChatMemory 단순 N개 관리면 충분해 보여서 이걸로 정한 후, 사용될 Store 는 Redis 로 간략히 설정해 봤다. fun createCounselorChatMemory(sessionId: String, maxMessages: Int = 20): ChatMem.. 더보기
간단한 RAG 를 로컬 환경에서 구성해보자. 이번에 요금제 추천을 진행해보면서 간단한 로컬 RAG를 구성해 봤는데, 가벼운 즐거움을 느꼈달까..ㅎㅎ우선 재미가 있어서 향후에 좀 더 해보기로 했다.- Exaone / Ollama 로컬 API 를 이용한 Model 적용. (개인적으로는 익시젠을 사용하고 싶은데.. 오픈소스가 아니다)- Langchain4J의 History 에 Redis를 얹어서 채팅 유지하고 삭제하기. 이번 요금제 추천은 용량기준으로 만들어 봤는데, 기본적인 흐름은 아래와 같다.  1. 임베딩- 먼저 요금제 전체 데이터를 특정 포맷에 맞춰 TXT 파일로 생성해둔다.- TXT 파일을 읽어서 초기 한번 임베딩을 해둔다.   2. 사용량 확인.- 사용자가 웹에서 자신의 인터넷 사용 패턴을 자연스럽게 입력할 수 있도록 한다.- 물론 사용자의 .. 더보기