6 pontos por sungmin330 2025-05-08 | 4 comentários | Compartilhar no WhatsApp

TL;DR

Agente de chat LLM personalizado. Coleta dinamicamente informações do usuário para fornecer respostas personalizadas depois.

P) Eu gosto de batatas

R) Entendi

P) Do que eu gosto?

R) Você gosta de batatas~

Link da demo: https://delosplatform.com
GitHub: https://github.com/sungminna/mcp_poc

ps) delos-lucia é uma versão que empacota e melhora os recursos do serviço velt. O delos-lucia oferece tempo de resposta curto, streaming de LLM e lógica assíncrona aprimorada.

É possível usar imediatamente após o cadastro (login). Agradeço muito o interesse e o feedback...

Lucia & Velt: agente de chat LLM personalizado

Recentemente, têm aumentado as tentativas de usar LLMs para estruturar as informações obtidas nas interações com usuários e reutilizá-las nas respostas do próprio LLM, oferecendo uma experiência personalizada. Lucia e Velt são projetos open source voltados a esse objetivo. Lucia é uma biblioteca Python que modulariza as funções centrais de IA para implementar LLMs personalizados, enquanto Velt é um sistema de chat com RAG personalizado construído com base nos conceitos da Lucia.

Lucia: módulo de LLM personalizado

delos-lucia é uma biblioteca Python empacotada a partir da reorganização das funções centrais de IA que foram originalmente desenvolvidas para o serviço Velt. Por ser modular, facilita o uso seletivo dos recursos necessários e a customização.

Principais recursos:

  • Extração de informações pessoais e palavras-chave: usa LLMs (como modelos da OpenAI) para identificar e extrair do texto informações pessoais do usuário, como preferências e estado, além de palavras-chave importantes.
  • Geração de embeddings: usa os modelos de embedding da OpenAI para criar representações vetoriais (embeddings) do texto. Os embeddings gerados podem ser armazenados em cache via Redis para reduzir o custo de chamadas repetidas de API.
  • Armazenamento de dados: as informações estruturadas extraídas (informações pessoais, relações etc.) são armazenadas em banco de dados em grafo (Neo4j ou Clickhouse), e os embeddings vetoriais gerados são armazenados em vector store (Milvus), permitindo busca eficiente.
  • Fornecimento de pipelines: oferece pipelines pré-construídos para tarefas comuns, como KnowledgePipeline (workflow de extração de informação, geração de embeddings e armazenamento) e SearchPipeline (workflow de busca de informações por palavras-chave e aumento de contexto), aumentando a produtividade no desenvolvimento.
  • Customização: fornece uma arquitetura plugável que permite substituir componentes como extrator de informações/palavras-chave (Extractor), cliente de embeddings (EmbeddingClient), armazenamento de informações (InfoStore) e armazenamento vetorial (VectorStore) por implementações próprias do usuário.

A Lucia abstrai e fornece a lógica central de backend necessária para construir aplicações de IA personalizadas — extração de informação, vetorização, armazenamento e busca — ajudando desenvolvedores a focarem mais na lógica da aplicação. (Licença: Apache-2.0)

Repositório GitHub: https://github.com/sungminna/mcp_poc/tree/main/lucia

Velt: PoC de chatbot RAG personalizado usando componentes/conceitos da Lucia

Velt é uma aplicação backend baseada em FastAPI construída com os conceitos fornecidos pela biblioteca Lucia. Seu objetivo é oferecer uma experiência de chatbot com RAG (Retrieval-Augmented Generation) personalizado ao usuário, integrando agente ReAct (LangGraph), grafo de conhecimento Neo4j, vector store Milvus, PostgreSQL e Redis. A partir das conversas com o usuário, o sistema constrói dinamicamente informações personalizadas em um grafo de conhecimento e as utiliza para gerar respostas mais relevantes.

Modo de funcionamento central:

  1. Construção do grafo de conhecimento:
    • A partir da conversa com o usuário ("Eu gosto de hambúrguer"), extrai relações usando LLM ((usuário) --gosta de--> (hambúrguer)).
    • As informações extraídas são armazenadas como nós e arestas no banco de dados em grafo Neo4j. Nesse processo, relações de conceitos superiores, como (hambúrguer) --inclui--> (comida), também são armazenadas para possibilitar inferência e busca flexíveis. ("De que tipo de comida eu gosto?"), (na Lucia é usado um método um pouco mais eficiente)
  2. Geração de respostas baseada em RAG:
    • Da pergunta do usuário ("Eu gosto de arte?") o LLM extrai palavras-chave ("arte", "gostar").
    • Usando as palavras-chave extraídas, busca informações altamente relevantes no Milvus por meio de busca vetorial.
    • Ao mesmo tempo, explora no Neo4j os nós e relações conectados àquele usuário e às palavras-chave (relações diretas, relações de 1-2 hops e conceitos subordinados incluídos).
    • Combina como contexto as informações recuperadas de Milvus e Neo4j para ampliar o prompt do agente ReAct baseado em LangGraph. (+ histórico de conversa da sessão)
    • Com base nesse contexto ampliado, o agente gera uma resposta personalizada para a pergunta do usuário.

Stack tecnológica:

  • Backend: FastAPI, Uvicorn, Python 3.13+
  • IA/LLM: LangChain, LangGraph, langchain-openai, OpenAI Embeddings
  • Bancos de dados: Neo4j (Graph), Milvus (Vector), PostgreSQL (User/Chat Data), Redis (Cache)
  • Outros: SQLAlchemy (Async), JWT (Auth), slowapi (Rate Limiting), Poetry, Docker
  • Frontend: SvelteKit (diretório velt/ separado)

Principais resultados e considerações:

  • Comprovação de viabilidade: foi confirmada a possibilidade de construir dinamicamente um grafo de conhecimento personalizado combinando LLM e bancos de dados de grafo/vetoriais, e de implementar um serviço de LLM hiperpersonalizado com isso.
  • Desempenho: atualmente foram observados gargalos na parte de acesso ao banco de dados (queries), sendo necessária otimização. Também é preciso validar o desempenho do Neo4j em ambientes de grande escala e tempo real. (parcialmente resolvido na Lucia)
  • Qualidade das respostas: embora o LLM responda com base nas informações recuperadas (contexto), ainda são necessários mais validação e aprimoramentos para garantir respostas sempre mais relevantes e naturais. Em especial, ao aplicar RAG, é preciso resolver a tendência de respostas artificiais por depender demais do contexto.
  • Prompt engineering: como o LLM às vezes não segue as instruções, é necessário melhorar os prompts e revisar possíveis questões de desempenho do modelo.
  • Escalabilidade: as queries de banco atualmente hardcoded podem ser substituídas por Text-to-Cypher/SQL etc. para aumentar a flexibilidade. Se não houver análise de relações entre usuários, também vale considerar uma implementação baseada em RDB. (na Lucia houve melhoria para permitir uso de Clickhouse)

Repositório GitHub: https://github.com/sungminna/mcp_poc
Serviço demo: https://delosplatform.com
Directory: https://my.surfit.io/w/528136765


Resumo:

Lucia é uma biblioteca Python modular para extração de informações pessoais/palavras-chave com base em LLM, embeddings e armazenamento em bancos de dados de grafo/vetoriais. Velt é uma PoC baseada em FastAPI que usa os conceitos da Lucia para construir um grafo de conhecimento dinâmico (Neo4j) a partir de conversas com o usuário e combinar busca vetorial (Milvus) com RAG (agente ReAct do LangGraph), oferecendo respostas personalizadas de chatbot. Os dois projetos demonstram o potencial da construção de IA personalizada, mas ainda enfrentam desafios como otimização de desempenho e melhoria da naturalidade das respostas.

4 comentários

 
sungmin330 2025-05-11

Como é um LLM, ele não fica funcionando o tempo todo (T_T)... Usem bastante, com tranquilidade.
Escrevi os motivos dos problemas de desempenho que surgiram até agora, caso alguém tenha curiosidade,,,

  • Escrevi o prompt para extrair kw em inglês, mas às vezes ele extrai em coreano, o que causa limitações na busca
  • Em alguns casos, ele não consegue extrair palavras-chave adequadas
  • Estamos fazendo busca semântica medindo similaridade depois de gerar embeddings de kw, mas o desempenho ainda é inconsistente

ps) O desempenho do delos-lucia é melhor do que o da web PoC. Se vocês executarem o delos-lucia via shell, provavelmente verão resultados melhores.

ps) Depois de criar o serviço de fato, percebi que tanto fazer QA quanto introduzir eval é difícil. Parece que, se o desempenho do LLM fosse bom, daria para resolver de algum jeito, mas senti que é preciso muito mais esforço do que eu esperava em outras partes além do modelo.

 
1206good 2025-05-08

Vi um projeto parecido recentemente, interessante.
Vou tentar.

website : https://www.secondme.io/
Github repo : https://github.com/mindverse/Second-Me

 
sungmin330 2025-05-11

Ah, que projeto interessante!! Obrigado

 
rlaehdus2003 2025-05-08

Talvez se torne uma IA que me conhece melhor do que eu mesmo..?