본문 바로가기

Programming!

로컬 RAG 에서 요금제 추천 결과. 요금제 Spec 데이터를 임베딩 해두고, 이제 유저에게 어떻게 요금제를 추천하지?를 고민하다가..  처음에는 고객의 데이터 사용 패턴을 입력받고, 임베딩된 요금제 데이터에서 필터링한 정보와 함께 한번에 큰~~~프롬프트를 구성해 결과를 도출하는 방식으로 접근했다. 기본적인 뼈대는 정말 잘 작동했는데.... 하지만 결과적으로 이 방식은 생각보다 훨씬 까다로웠다.  특정 요금제에 맞춘 프롬프트를 정교하게 작성하면 그에 맞는 사용 패턴 입력에는 정확한 결과가 나왔지만, 사용 패턴이 조금만 달라져도 갑자기 전혀 관련 없는 요금제를 추천하는 문제가 발생했다. 또한, 프롬프트 내에 시간, 분, 초와 같은 단위들이 많이 포함되다 보니 어느 순간부터는 AI가 이러한 시간 단위들을 제대로 구분하지 못하는 현상도 나타났다... 더보기
로컬 RAG 에서 채팅 내용 유지하기 Langchain4j/Reids 상담 챗봇을 특정 메시지 수 만큼 영속성을 갖도록 하고 싶어 보니..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. 사용량 확인.- 사용자가 웹에서 자신의 인터넷 사용 패턴을 자연스럽게 입력할 수 있도록 한다.- 물론 사용자의 .. 더보기
실 데이터 사용량과 요금제 정보로 GPT에게 추천을 받아 보았다. 실제 통신 사용량 데이터와 요금제를 이용해서 요금제 추천을 GPT에게 받아보았다.  오! 생각보다 잘 나오는데...문제는 정말 프롬프트와의 싸움 같은 느낌이다.이놈이 요청의 문장을 좀만 바꿔도 지맘대로 response를 던저준다... 아니 '79 요금제'는 있지도 않았어 이놈아!!! ㅎㅎ(즐거운 토이 플젝은 여기까지...;;) 더보기
Spring Boot 3 & Kotlin 2 & JPA (QueryDSL) 음.. 이 조합으로 기존 플젝을 업그레이드 하려고 하니 Gradle 버전부터 JDK 버전등등 신경써야 하는게 많았다. 웹과 GPT등등에 도움을 구해봤지만..역시 이상한 답변(주로 1.9.25환경 으로..)이라, github 토론장에 정보를 보면서 기본 세팅을 완료해본다. 우선 Gradle 8.5 이상, JAVA 21 이상으로 프로젝트의 세팅은 지정해줘야 했다. ( 그냥 권장으로 )https://docs.gradle.org/8.5/release-notes.html Gradle 8.5 Release NotesGradle Release Notes The Gradle team is excited to announce Gradle 8.5. Gradle now supports running on Java 21. T.. 더보기