Show GN: Personal AI Agent, LLM이 나를 알게 된다면?
(delosplatform.com)TL;DR
개인화된 LLM Chat Agent. 동적으로 사용자 정보를 수집해 차후 개인화된 답변을 제공합니다.
Q) 나는 감자가 좋아
A) 글쿤
Q) 내가 좋아하는게 뭐야?
A) 넌 감자를 좋아해~
데모 링크: https://delosplatform.com
깃헙: https://github.com/sungminna/mcp_poc
ps) delos-lucia가 velt 서비스의 기능을 패키징 하고 개선한 버전입니다. delos-lucia는 짧은 response time, LLM 스트리밍, 개선된 비동기 로직을 지원합니다.
회원가입(로그인) 후 바로 사용 가능합니다. 많은 관심 피드백 부탁드려요...
Lucia & Velt: 개인화된 LLM 채팅 Agent
최근 LLM을 활용하여 사용자와의 상호작용을 통해 얻은 정보를 구조화하고, 이를 다시 LLM 답변에 활용하여 개인화된 경험을 제공하려는 시도가 늘고 있습니다. Lucia 와 Velt는 이러한 목표를 달성하기 위한 오픈소스 프로젝트입니다. Lucia는 개인화된 LLM을 구현하기 위해 핵심 AI 기능을 모듈화한 Python 라이브러리이며, Velt는 Lucia의 개념을 활용하여 구축된 개인화 RAG 채팅 시스템입니다.
Lucia: 개인화 LLM 모듈
delos-lucia는 원래 Velt 서비스를 위해 개발되었던 핵심 AI 기능들을 재구성하여 패키징한 Python 라이브러리입니다. 모듈식으로 구성되어 있어 필요한 기능을 선택적으로 사용하거나 커스터마이징하기 용이합니다.
주요 기능:
- 개인 정보 및 키워드 추출: LLM(OpenAI 모델 등)을 사용하여 텍스트에서 사용자의 선호, 상태 등 개인 정보와 핵심 키워드를 식별하고 추출합니다.
- 임베딩 생성: OpenAI의 임베딩 모델을 사용하여 텍스트의 벡터 표현(임베딩)을 생성합니다. 생성된 임베딩은 Redis를 통해 캐싱하여 반복적인 API 호출 비용을 줄일 수 있습니다.
- 데이터 저장: 추출된 구조화된 정보(개인 정보, 관계 등)는 그래프 데이터베이스(Neo4j or Clickhouse)에 저장하고, 생성된 벡터 임베딩은 벡터 저장소(Milvus)에 저장하여 효율적인 검색을 지원합니다.
-
파이프라인 제공:
KnowledgePipeline
(정보 추출, 임베딩 생성, 저장까지의 워크플로우)과SearchPipeline
(키워드 기반 정보 검색 및 컨텍스트 증강 워크플로우) 등 일반적인 작업을 위한 사전 구축된 파이프라인을 제공하여 개발 편의성을 높입니다. - 커스터마이징: 정보/키워드 추출기(Extractor), 임베딩 클라이언트(EmbeddingClient), 정보 저장소(InfoStore), 벡터 저장소(VectorStore) 등을 사용자가 직접 구현한 컴포넌트로 교체할 수 있는 플러그형 아키텍처를 제공합니다.
Lucia는 개인화된 AI 애플리케이션 구축에 필요한 핵심 백엔드 로직(정보 추출, 벡터화, 저장, 검색)을 추상화하여 제공함으로써 개발자가 애플리케이션 로직에 더 집중할 수 있도록 돕습니다. (라이선스: Apache-2.0)
GitHub Repository: https://github.com/sungminna/mcp_poc/tree/main/lucia
Velt: Lucia 컴포넌트/개념을 활용한 개인화 RAG 챗봇 PoC
Velt는 Lucia 라이브러리에서 제공하는 개념들을 활용하여 구축된 FastAPI 기반 백엔드 애플리케이션입니다. ReAct 에이전트(LangGraph), Neo4j 지식 그래프, Milvus 벡터 스토어, PostgreSQL, Redis를 통합하여 사용자에게 개인화된 RAG(Retrieval-Augmented Generation) 챗봇 경험을 제공하는 것을 목표로 합니다. 사용자와의 대화를 통해 개인화된 정보를 동적으로 지식 그래프에 구축하고, 이를 활용하여 더욱 관련성 높은 답변을 생성합니다.
핵심 동작 방식:
-
지식 그래프 구축:
- 사용자와의 대화("나는 햄버거를 좋아해")에서 LLM을 이용해 관계(
(사용자) --좋아한다--> (햄버거)
)를 추출합니다. - 추출된 정보는 Neo4j 그래프 DB에 노드와 엣지로 저장됩니다. 이때,
(햄버거) --포함한다--> (음식)
과 같이 상위 개념 관계도 함께 저장하여 유연한 추론 및 검색을 가능하게 합니다. ("내가 어떤 음식을 좋아해?”), (lucia에선 조금 더 효율적인 방식을 이용합니다)
- 사용자와의 대화("나는 햄버거를 좋아해")에서 LLM을 이용해 관계(
-
RAG 기반 답변 생성:
- 사용자 질문("나 미술 좋아하니?")에서 LLM으로 키워드("미술", "좋아하다")를 추출합니다.
- 추출된 키워드를 사용하여 Milvus에서 관련성 높은 정보를 벡터 검색으로 찾습니다.
- 동시에 Neo4j에서 해당 사용자와 키워드에 연결된 노드 및 관계(직접 관계, 1-2홉 관계, 하위 개념 포함)를 탐색합니다.
- Milvus와 Neo4j에서 검색된 정보를 컨텍스트로 조합하여 LangGraph 기반 ReAct 에이전트의 프롬프트를 증강(Augmented)시킵니다.(+ 세션 대화 이력)
- 에이전트는 이 증강된 컨텍스트를 바탕으로 사용자 질문에 대한 개인화된 답변을 생성합니다.
기술 스택:
- 백엔드: FastAPI, Uvicorn, Python 3.13+
- AI/LLM: LangChain, LangGraph, langchain-openai, OpenAI Embeddings
- 데이터베이스: Neo4j (Graph), Milvus (Vector), PostgreSQL (User/Chat Data), Redis (Cache)
- 기타: SQLAlchemy (Async), JWT (Auth), slowapi (Rate Limiting), Poetry, Docker
- 프론트엔드: SvelteKit (별도
velt/
디렉토리)
주요 결과 및 고려사항:
- 가능성 확인: LLM과 그래프/벡터 DB를 결합하여 동적으로 개인화된 지식 그래프를 구축하고, 이를 활용한 초개인화 LLM 서비스 구현 가능성을 확인했습니다.
- 성능: 현재 DB 접근(쿼리) 부분에서 병목 현상이 관찰되어 최적화가 필요합니다. 대규모 실시간 환경에서의 Neo4j 성능 검증도 필요합니다. (lucia에서 일부 해결)
- 답변 품질: 검색된 정보(컨텍스트)를 기반으로 LLM이 답변하지만, 항상 가장 관련성 높고(Relevant) 자연스러운 답변을 제공하는지에 대한 추가 검증 및 개선이 필요합니다. 특히 RAG 적용 시 컨텍스트에 지나치게 의존하여 부자연스러운 답변이 나오는 경향 해결이 필요합니다.
- 프롬프트 엔지니어링: LLM이 간혹 Instruction을 따르지 않는 경우가 있어 프롬프트 개선 및 모델 성능 이슈 검토가 필요합니다.
- 확장성: 현재 하드코딩된 DB 쿼리를 Text-to-Cypher/SQL 등으로 대체하여 유연성을 높일 수 있습니다. 사용자 간 관계 분석이 없다면 RDB 기반 구축 가능성도 검토해볼 수 있습니다.(lucia에서 clickhouse사용 가능하도록 개선)
GitHub Repository: https://github.com/sungminna/mcp_poc
Demo Service: https://delosplatform.com
Directory: https://my.surfit.io/w/528136765
요약:
Lucia는 LLM 기반 개인 정보/키워드 추출, 임베딩, 그래프/벡터 DB 저장을 위한 모듈식 Python 라이브러리입니다. Velt는 Lucia의 개념을 활용하여 사용자와의 대화로 동적 지식 그래프(Neo4j)를 구축하고 벡터 검색(Milvus)과 RAG(LangGraph ReAct 에이전트)를 결합하여 개인화된 챗봇 응답을 제공하는 FastAPI 기반 PoC입니다. 두 프로젝트는 개인화 AI 구축의 가능성을 보여주지만, 성능 최적화, 답변 자연스러움 개선 등 해결 과제도 안고 있습니다.
최근에 비슷한 프로젝트를 봤었는데, 흥미롭네요.
한번 시도해보겠습니다.
website : https://www.secondme.io/
Github repo : https://github.com/mindverse/Second-Me