Cet article fait suite à mon article précédent sur la façon de configurer une instance MySQL locale dans Docker.
RAG (Retrieval Augmented Generation) est en train de devenir rapidement le « Hello World » des applications d'IA. Si vous travaillez ou jouez avec des modèles de langage étendus, vous devrez sans aucun doute créer un pipeline RAG à un moment donné. Un composant important de RAG est une base de données vectorielles, et une option populaire est pgvector - une recherche de similarité vectorielle open source pour Postgres. Voici comment configurer rapidement une instance locale dans un conteneur Docker.
Extrayez la dernière image du référentiel Docker. Remplacez 17 par la version de votre serveur Postgres de votre choix.
docker pull pgvector/pgvector:pg17
Exécutez l'image, définissez le mot de passe de l'utilisateur root et exposez le port Postgres par défaut.
docker run -d --name <container_name> -e POSTGRES_PASSWORD=postgres -p 5432:5432 pgvector/pgvector:pg17
Avec le serveur Postgres en cours d'exécution, créez une base de données à l'intérieur du conteneur.
docker exec -it <container_name> createdb -U postgres <database_name>
Nous pouvons maintenant nous connecter à la base de données depuis notre application et initialiser l'extension pgvector. J'utiliserai JavaScript. La configuration de l'ensemble de l'application sort du cadre de cet article, mais vous devrez installer quelques dépendances :
pnpm add pg pgvector
Définissez une DATABASE_URL dans votre environnement. J'utilise un fichier .env. Il doit suivre ce format :
DATABASE_URL=postgresql://<pg_user>:<pg_password>@localhost:5432/<database_name>
Pour le développement local, utilisez @localhost, mais si vous utilisez quelque chose comme docker-compose.yml et que vous avez nommé le service, vous devez utiliser le nom du service, par exemple. @db.
Dans votre code d'application, créez la connexion :
const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL, });
Ensuite, initialisez pgvector et créez une nouvelle table :
async function createStore() { // Initialize pgvector extension and create table if not exists await pool.query('CREATE EXTENSION IF NOT EXISTS vector'); return { vectorStore: await PGVectorStore.initialize(embeddings, { postgresConnectionOptions: { connectionString: process.env.DATABASE_URL, }, tableName: 'documents', // Default table name }), }; }
Avec la configuration de vectorStore, vous pouvez y ajouter du contenu à l'aide de vectorStore.addDocuments et interroger le contexte à l'aide de vectorStore.similaritySearch.
C'est tout pour ce post. Peut-être que la prochaine fois j'explorerai des utilisations plus spécifiques de pgvector, et/ou de l'utiliser avec Drizzle ORM ! ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!