Intégrer txtai à Postgres

DEV - 25/04
txtai est une base de données d'intégration tout-en-un pour la recherche sémantique, l'orchestration LLM et le langage...

txtai est une base de données d'intégration tout-en-un pour les workflows de recherche sémantique, d'orchestration LLM et de modèles de langage.

Les méthodes de persistance par défaut pour txtai sont locales et basées sur des fichiers.SQLitepour le contenu,Faisspour les vecteurs etRéseauXpour les données graphiques. La principale valeur ajoutée de txtai est d'être opérationnel rapidement avec un minimum de dépendances externes.

Une autre caractéristique clé de txtai est la possibilité de passer rapidement du prototypage à la production. Cet article démontrera comment txtai peut s'intégrer à Postgres, un système de base de données relationnelle objet puissant, prêt pour la production et open source. Une fois que txtai aura conservé le contenu dans Postgres, nous montrerons qu'il peut être directement interrogé avec SQL à partir de n'importe quel client Postgres.

Installer les dépendances

Installertxtaiet toutes les dépendances.

# Installer txtai pip install txtai[ann,database,graph]
Entrer en mode plein écran Quitter le mode plein écran

Installer Postgres

Ensuite, nous installerons Postgres et démarrerons une instance Postgres. Cela installera également lepgvecteurextension pour permettre la recherche et le stockage de vecteurs.

Remarque : avec les environnements locaux, envisagez d'exécuter Postgres en tant que conteneur Docker.

# Installez Postgres et pgvector !apt-get update && apt install postgresql postgresql-server-dev-14 !git clone --branch v0.6.2 https://github.com/pgvector/pgvector.git !cd pgvector && make && make install # Démarrer la base de données !service postgresql start !sudo -u postgres psql -U postgres -c "ALTER USER postgres PASSWORD 'pass';"
Entrer en mode plein écran Quitter le mode plein écran

Créer une base de données Embeddings

Tout d’abord, nous chargerons les 100 000 articles les plus populaires de Wikipédia. Cet exemple stockera les vecteurs et le contenu dans Postgres.

from txtai import Embeddings # URL définie dans le code à des fins de démonstration. Utilisez des variables d'environnement en production. url = "postgresql+psycopg2://postgres:pass@localhost/postgres" # Créer des intégrations embeddings = Embeddings( content=url, backend="pgvector", pgvector={ "url": url } ) # Charger l'ensemble de données wikipedia = Embeddings () wikipedia.load(provider="huggingface-hub", conteneur="neuml/txtai-wikipedia") query = """ SELECT id, text FROM txtai order by percentile desc LIMIT 100000 """ # Index de l'ensemble de données embeddings.index (wikipedia.search(requête))
Entrer en mode plein écran Quitter le mode plein écran
embeddings.search("Parlez-moi d'un cheval mythique", 1)
Entrer en mode plein écran Quitter le mode plein écran
[{'id': 'Licorne', 'text': 'La licorne est une créature légendaire qui a été décrite depuis l'Antiquité comme une bête avec une seule grande corne pointue en spirale dépassant de son front.', 'score': 0,6493861675262451}]
Entrer en mode plein écran Quitter le mode plein écran
embeddings.search("Quel est l'ingrédient principal du ketchup ?", 1)
Entrer en mode plein écran Quitter le mode plein écran
[{'id': 'Ketchup', 'text': 'Le ketchup ou catsup est un condiment de table au goût aigre-doux. Le terme non modifié (« ketchup ») fait désormais généralement référence au ketchup aux tomates, bien que les premières recettes de diverses variétés de ketchup contenaient des champignons, des huîtres, des moules, des blancs d'œufs, des raisins ou des noix, entre autres ingrédients. ', 'score' : 0,6998806595802307}]
Entrer en mode plein écran Quitter le mode plein écran

Voyons maintenant plus en détail comment les données sont stockées. Nous allons sauvegarder la base de données et y jeter un œil.

%env TOKENIZERS_PARALLELISM=false # Valider les résultats dans la base de données embeddings.save("test") embeddings.close() !ls test !cat test/config.json
Entrer en mode plein écran Quitter le mode plein écran
config.json { "content": "postgresql+psycopg2://postgres:pass@localhost/postgres", "backend": "pgvector", "pgvector": { "url": "postgresql+psycopg2://postgres: pass@localhost/postgres" }, "path": "sentence-transformers/all-MiniLM-L6-v2", "dimensions": 384, "offset": 100000 }
Entrer en mode plein écran Quitter le...
[Courte citation de 8% de l'article original]
Loading...