6 points par sungmin330 2025-05-08 | 4 commentaires | Partager sur WhatsApp

TL;DR

Un agent de chat LLM personnalisé. Il collecte dynamiquement des informations sur l’utilisateur afin de fournir ensuite des réponses personnalisées.

Q) J’aime les pommes de terre

A) D’accord

Q) Qu’est-ce que j’aime ?

A) Tu aimes les pommes de terre~

Lien de démo : https://delosplatform.com
GitHub : https://github.com/sungminna/mcp_poc

ps) delos-lucia est une version qui package et améliore les fonctionnalités du service velt. delos-lucia prend en charge un temps de réponse court, le streaming LLM et une logique asynchrone améliorée.

L’utilisation est possible immédiatement après l’inscription (connexion). Vos retours m’intéressent beaucoup...

Lucia & Velt : agent de chat LLM personnalisé

Ces derniers temps, les tentatives se multiplient pour utiliser les LLM afin de structurer les informations obtenues via l’interaction avec l’utilisateur, puis de les réinjecter dans les réponses du LLM pour offrir une expérience personnalisée. Lucia et Velt sont des projets open source conçus pour atteindre cet objectif. Lucia est une bibliothèque Python qui modularise les fonctions IA essentielles à la mise en œuvre d’un LLM personnalisé, tandis que Velt est un système de chat RAG personnalisé construit à partir des concepts de Lucia.

Lucia : module LLM personnalisé

delos-lucia est une bibliothèque Python qui recompose et package les fonctions IA centrales initialement développées pour le service Velt. Sa conception modulaire permet de sélectionner uniquement les fonctions nécessaires ou de les personnaliser facilement.

Fonctionnalités principales :

  • Extraction d’informations personnelles et de mots-clés : utilise un LLM (comme les modèles OpenAI) pour identifier et extraire dans un texte les préférences de l’utilisateur, son état et d’autres informations personnelles, ainsi que les mots-clés importants.
  • Génération d’embeddings : utilise les modèles d’embedding d’OpenAI pour créer des représentations vectorielles du texte. Les embeddings générés peuvent être mis en cache via Redis afin de réduire le coût des appels API répétés.
  • Stockage des données : les informations structurées extraites (informations personnelles, relations, etc.) sont stockées dans une base de données graphe (Neo4j ou Clickhouse), tandis que les embeddings vectoriels générés sont stockés dans un vector store (Milvus) pour permettre une recherche efficace.
  • Pipelines fournis : propose des pipelines préconstruits pour les tâches courantes, comme KnowledgePipeline (workflow allant de l’extraction d’informations à la génération d’embeddings puis au stockage) et SearchPipeline (workflow de recherche d’informations basée sur des mots-clés et d’enrichissement du contexte), ce qui améliore l’ergonomie de développement.
  • Personnalisation : fournit une architecture enfichable permettant de remplacer l’extracteur d’informations/mots-clés (Extractor), le client d’embedding (EmbeddingClient), le magasin d’informations (InfoStore), le vector store (VectorStore), etc., par des composants implémentés par l’utilisateur.

Lucia abstrait et fournit la logique backend essentielle à la création d’applications d’IA personnalisées (extraction d’informations, vectorisation, stockage, recherche), afin d’aider les développeurs à se concentrer davantage sur la logique applicative. (Licence : Apache-2.0)

Dépôt GitHub : https://github.com/sungminna/mcp_poc/tree/main/lucia

Velt : PoC de chatbot RAG personnalisé exploitant les composants/concepts de Lucia

Velt est une application backend basée sur FastAPI, construite à partir des concepts fournis par la bibliothèque Lucia. Elle intègre un agent ReAct (LangGraph), un graphe de connaissances Neo4j, un vector store Milvus, PostgreSQL et Redis, avec pour objectif d’offrir à l’utilisateur une expérience de chatbot RAG (Retrieval-Augmented Generation) personnalisée. À travers les conversations avec l’utilisateur, elle construit dynamiquement des informations personnalisées dans le graphe de connaissances, puis les exploite pour générer des réponses plus pertinentes.

Fonctionnement clé :

  1. Construction du graphe de connaissances :
    • À partir d’une conversation avec l’utilisateur ("J’aime les hamburgers"), le LLM extrait une relation ((utilisateur) --aime--> (hamburger)).
    • Les informations extraites sont stockées sous forme de nœuds et d’arêtes dans la base graphe Neo4j. À ce moment-là, des relations de concepts supérieurs, comme (hamburger) --fait partie de--> (nourriture), sont également enregistrées afin de permettre un raisonnement et une recherche plus flexibles. ("Quel type de nourriture est-ce que j’aime ?") (dans lucia, une méthode un peu plus efficace est utilisée)
  2. Génération de réponses basée sur le RAG :
    • À partir de la question de l’utilisateur ("Est-ce que j’aime l’art ?"), le LLM extrait des mots-clés ("art", "aimer").
    • À l’aide de ces mots-clés, il recherche dans Milvus des informations fortement pertinentes par recherche vectorielle.
    • En parallèle, il explore dans Neo4j les nœuds et relations liés à cet utilisateur et aux mots-clés concernés (relations directes, relations à 1-2 sauts, y compris les sous-concepts).
    • Les informations récupérées depuis Milvus et Neo4j sont combinées comme contexte pour enrichir le prompt de l’agent ReAct basé sur LangGraph. (+ l’historique de conversation de la session)
    • L’agent s’appuie sur ce contexte enrichi pour générer une réponse personnalisée à la question de l’utilisateur.

Stack technique :

  • Backend : FastAPI, Uvicorn, Python 3.13+
  • IA/LLM : LangChain, LangGraph, langchain-openai, OpenAI Embeddings
  • Bases de données : Neo4j (Graph), Milvus (Vector), PostgreSQL (données utilisateur/chat), Redis (cache)
  • Autres : SQLAlchemy (Async), JWT (Auth), slowapi (rate limiting), Poetry, Docker
  • Frontend : SvelteKit (répertoire velt/ séparé)

Principaux résultats et points à considérer :

  • Validation du potentiel : a confirmé la faisabilité de construire dynamiquement un graphe de connaissances personnalisé en combinant un LLM avec des bases graphes/vectorielles, et de l’utiliser pour implémenter un service LLM hyperpersonnalisé.
  • Performance : un goulot d’étranglement est actuellement observé dans la partie accès BD (requêtes), ce qui nécessite une optimisation. Une validation des performances de Neo4j dans un environnement temps réel à grande échelle est également nécessaire. (partiellement résolu dans lucia)
  • Qualité des réponses : bien que le LLM réponde sur la base des informations récupérées (contexte), il faut encore vérifier et améliorer s’il fournit toujours les réponses les plus pertinentes et naturelles. En particulier, avec le RAG, il faut corriger la tendance à produire des réponses peu naturelles en dépendant excessivement du contexte.
  • Prompt engineering : le LLM ne suit parfois pas les instructions, ce qui appelle des améliorations du prompt et un examen des problèmes de performance du modèle.
  • Scalabilité : les requêtes BD actuellement codées en dur peuvent être remplacées par du Text-to-Cypher/SQL, etc., afin d’améliorer la flexibilité. En l’absence d’analyse des relations entre utilisateurs, la possibilité d’une architecture basée sur un SGBDR peut aussi être envisagée. (dans lucia, une amélioration permet l’utilisation de clickhouse)

Dépôt GitHub : https://github.com/sungminna/mcp_poc
Service de démo : https://delosplatform.com
Annuaire : https://my.surfit.io/w/528136765


Résumé :

Lucia est une bibliothèque Python modulaire pour l’extraction d’informations personnelles/mots-clés à base de LLM, les embeddings et le stockage dans des bases graphes/vectorielles. Velt est un PoC basé sur FastAPI qui, à partir des concepts de Lucia, construit un graphe de connaissances dynamique (Neo4j) à travers les conversations avec l’utilisateur et combine recherche vectorielle (Milvus) et RAG (agent ReAct LangGraph) pour fournir des réponses de chatbot personnalisées. Les deux projets montrent le potentiel de l’IA personnalisée, tout en soulevant encore des défis comme l’optimisation des performances et l’amélioration du naturel des réponses.

4 commentaires

 
sungmin330 2025-05-11

Comme c’est un LLM, il ne fonctionne pas toujours en permanence (T_T)... N’hésitez pas à l’utiliser confortablement et autant que vous voulez.
Je me suis dit que certains se poseraient peut-être la question, alors j’ai rédigé les causes des problèmes de performance survenus jusqu’à présent.

  • J’ai écrit le prompt pour extraire les kw en anglais, mais il arrive parfois qu’ils soient extraits en coréen, ce qui limite la recherche
  • Il arrive que des mots-clés pertinents ne soient pas extraits
  • Nous effectuons une recherche sémantique en mesurant la similarité après avoir vectorisé les kw, mais les performances restent peu claires

ps) Les performances de delos-lucia sont meilleures que celles du web PoC. Si vous exécutez delos-lucia en mode shell, vous obtiendrez probablement de meilleurs résultats.

ps) Une fois qu’on se met réellement à créer le service, on se rend compte que le QA est difficile et que l’introduction de l’eval l’est aussi. On a l’impression que tout pourrait se résoudre si les performances du LLM étaient bonnes, mais j’ai constaté qu’en dehors du modèle, bien plus d’efforts sont nécessaires que je ne l’imaginais.

 
1206good 2025-05-08

J’ai vu récemment un projet similaire, c’est intéressant.
Je vais essayer.

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

 
sungmin330 2025-05-11

Oh, projet très intéressant !! Merci

 
rlaehdus2003 2025-05-08

Une IA qui me connaît peut-être mieux que moi-même..?