Langchain,Streamlit , Milvus 등의 LLM을 위한 툴

Description: 주요 프레임워크임 Langchain과 Streamlit, Milvus등의 선정이유와 고민포인트들을 기록한 글입니다.

현재 노트: KR-110.10 a Langchain ,Streamlit , Milvus 등의 LLM을 위한 툴
상위 분류: KR-110.10 LLM에 RAG를 결합하여 내 블로그를 안내해주는 개인 사서

#LLM #RAG #개인프로젝트

프레임워크 및 라이브러리 선정

구현된 주요 기능

RAG기능

앞서 언급한 ChatGPT와 같은 LLM이 학습된 데이터 이외에 외부데이터를 활용하여 대답하는 기능입니다.
가지고 있는 데이터와 임베딩 된 벡터DB를 활용하는 부분이 섞여있습니다.
가장 먼저 로컬파일의 base_template.txt라는 txt의 값이 기본적으로 들어가 해당 내용기반으로 답변합니다. 이 후 유저가 특정 글을 더욱 상세하게 요구한다면 Mlivus로 구성된 벡터DB에 쿼리 요청을 통해 id가 같은 값을 찾아 해당 내용을 기반으로 답변합니다

고민 포인트

Admin 페이지기능

파일일괄 관리와 같은 기능을 수행하기 위한 Admin페이지 기능입니다.
해당 페이지가 없던 상황에서는 일일히 코드 수정하고 python feature.py와 같은 동작을 해야했었던 상황이였기에 구현하였습니다. 암호화 관련 지원 요소가 거의 없어서 단순히 빌민번호가 일치하면 페이지가 보이는 형식으로 구현. 이후 관리자가 사용하기 쉬운 단일 파일 업데이트, 모든 파일 업데이트, 삭제, 생성 버튼을 구현하였습니다.

고민 포인트

메모리

uuid를 통해 사용자가 관리하는 메모리 기능입니다.
해당 기능을 구현하기위해서 서버에 어떻게 메모리를 구현해야하는 고민이 많았습니다. 하지만 결론적으로는 세션의 대화데이터를 내가 기록하고, uuid값을 사용자에게 제공하여 필요시 사용자가 해당 uuid를 입력하여 데이터를 찾는 방식으로 구현하였습니다. 물론 보안면이나 편의면이나 부끄러운 수준의 기능이지만, 결국 제한된 환경 특히 기술이 부족한 상황에서 임시로나마 기능을 구현하기 위한 방법이었습니다.

고민 포인트

메인 프롬프트

https://smith.langchain.com/hub/murphy/librarian_guide
LLM 애플리케이션의 특성상 시스템 프롬프트 조작을 통해 성능을 크게 개선할 수 있었습니다. 하지만 이를 위해선 적절한 예시, 명확한 목적 설명, 퓨샷 러닝을통한 일부 예제 학습등의 절차가 필요했습니다. 특히 대답할때의 answer link가 실제 웹 링크와 연동되게 하기위해서 코드를 수정하는 것보다, 시스템 프롬프트를 수정하는 경우가 많았습니다.

human

Library_base_knowledge
{Library_base_knowledge}
history_conversation
{history_conversation}
Current conversation:
Human: {input}

배포와 운영 관리

운영관리를 위해서는 24시간 서비스되며, 최대한 비용과 저의 시간과 노력을 줄이고자 하였습니다. 그래서 24시간 무료 호스팅 서비스들을 사용하였습니다.
사용된 툴