etalab-ia / albert

Backend ressources for Albert. Albert is a conversational agent that uses official French data sources to answer administrative agents questions.
MIT License
109 stars 7 forks source link

:wave: d'Elastic #5

Open pquentin opened 2 months ago

pquentin commented 2 months ago

Bonjour,

Félicitations pour Albert, c'est une excellente initiative ! (Et bravo pour le projet moderne en Python.) J'ai noté que vous utilisez Elasticsearch, ce qui m'intéresse en tant que mainteneur principal du client Elasticsearch Python. Je serais ravi d'aider ; est-ce que vous accepteriez une pull request pour le mettre à jour vers une version un peu plus récente, par exemple ?

Par ailleurs, je note que vous utilisez Elasticsearch et Qdrant, mais Elasticsearch est aussi une excellente base de donnnées vectorielle (la meilleure à notre avis). Vous pourriez utiliser Elasticsearch pour les deux usages, ce qui simplifierait les déploiements. https://www.elastic.co/search-labs est une excellente ressource à ce sujet.

bolinocroustibat commented 2 months ago

Merci de vos encouragements et votre retour utile.

Oui bien sûr, même si notre organisation n'est pas encore parfaitement armée pour gérer toutes les issues et PRs qui peuvent être créées, nous acceptons et encourageons les PRs !

Le fait qu'on utilise Elasticsearch + Qdrant est lié à l'histoire du projet, utiliser Elasticsearch également pour la base vectorielle est en cours de discussion dans l'équipe.

leoguillaume commented 2 months ago

@pquentin Hello, merci pour ton retour. Nous sommes à l'étude d'une solution pour rationaliser nos bases de données. Nous souhaitons également rationaliser notre code base en déléguant une partie du code à Langchain.

Nos tests sur l'utilisation de Elastic comme vector store avec Langchain ne sont pas concluants (des erreurs sont rencontrées). Ce qui n'est pas le cas avec Qdrant.

Nos sommes également à l'étude d'utiliser Redis comme base pour le chat memory plutôt que PostgreSQL. Nous nous interrogeons si Elastic pourrait être également un candidat à ce poste. Nous sommes preneurs de d'avis sur ces questions.

pquentin commented 2 months ago

Merci Adrien et Léo pour les réponses rapides !

Oui bien sûr, même si notre organisation n'est pas encore parfaitement armée pour gérer toutes les issues et PRs qui peuvent être créées, nous acceptons et encourageons les PRs !

Top, merci. Elasticsearch 8.9 est sorti en juillet dernier, et nous avons énormément travaillé sur le support de la recherche vectorielle depuis ce temps là, que ce soit via de nombreuses optimisations dans Lucene ou Elasticsearch directement qui est de plus en plus rapide et simple à utiliser. Et le progrès va continuer cette année.

Nos tests sur l'utilisation de Elastic comme vector store avec Langchain ne sont pas concluants (des erreurs sont rencontrées). Ce qui n'est pas le cas avec Qdrant.

Aïe. Si ce n'est pas trop demander, serait-il possible d'indiquer les erreurs rencontrées ? Je pourrai les remonter à l'équipe en interne qui gère les intégrations, dont LangChain.

Elasticsearch gère des choses que Qdrant ne fait pas, comme une excellente recherche (lexicale, sémantique et hybride) ou une meilleur gestion du découpage des documents.

Nos sommes également à l'étude d'utiliser Redis comme base pour le chat memory plutôt que PostgreSQL. Nous nous interrogeons si Elastic pourrait être également un candidat à ce poste. Nous sommes preneurs de d'avis sur ces questions.

Oui, on utilise en interne Elasticsearch pour stocker l'historique de nos assistants, sans problème. Le paquet langchain-elasticsearch inclut la classe LangChain ElasticsearchChatMessageHistory. Notre application RAG d'exemple l'utilise : https://github.com/elastic/elasticsearch-labs/blob/main/example-apps/chatbot-rag-app/api/chat.py. Je ne doute pas que Redis soit dans l'absolu plus rapide que PostgreSQL ou Elasticsearch pour stocker le chat, mais quelle que soit la base de données, stocker et récupérer le chat ne peut pas prendre plus de quelques millisecondes.

En tout cas, je ne peux que vous encourager au maximum à utiliser les abstractions fournies par LangChain et autres, comme ça vous pourrez toujours changer de base de données dans le futur.

scenaristeur commented 1 month ago

Nos sommes également à l'étude d'utiliser Redis comme base pour le chat memory plutôt que PostgreSQL. Nous nous interrogeons si Elastic pourrait être également un candidat à ce poste. Nous sommes preneurs de d'avis sur ces questions.

Bonjour, avez-vous regardé du côté de MemGPT https://memgpt.readme.io/docs/index ?