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.
Installertxtaiet toutes les dépendances.
# Installer txtai pip install txtai[ann,database,graph]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';"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))embeddings.search("Parlez-moi d'un cheval mythique", 1)[{'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}]embeddings.search("Quel est l'ingrédient principal du ketchup ?", 1)[{'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}]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.jsonconfig.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 }