Dieser Beitrag ist eine Fortsetzung meines vorherigen Beitrags zum Einrichten einer lokalen MySQL-Instanz in Docker.
RAG (Retrieval Augmented Generation) entwickelt sich schnell zur „Hallo Welt“ der KI-Apps. Wenn Sie mit großen Sprachmodellen arbeiten oder spielen, müssen Sie zweifellos irgendwann eine RAG-Pipeline erstellen. Eine wichtige Komponente von RAG ist eine Vektordatenbank, und eine beliebte Option ist pgvector – eine Open-Source-Vektorähnlichkeitssuche für Postgres. So richten Sie schnell eine lokale Instanz in einem Docker-Container ein.
Laden Sie das neueste Image aus dem Docker-Repository herunter. Ersetzen Sie 17 durch die Postgres-Serverversion Ihrer Wahl.
docker pull pgvector/pgvector:pg17
Führen Sie das Image aus, legen Sie das Root-Benutzerkennwort fest und legen Sie den Standard-Postgres-Port offen.
docker run -d --name <container_name> -e POSTGRES_PASSWORD=postgres -p 5432:5432 pgvector/pgvector:pg17
Erstellen Sie bei laufendem Postgres-Server eine Datenbank im Container.
docker exec -it <container_name> createdb -U postgres <database_name>
Jetzt können wir von unserer Anwendung aus eine Verbindung zur Datenbank herstellen und die pgvector-Erweiterung initialisieren. Ich werde JavaScript verwenden. Das Einrichten der gesamten Anwendung liegt außerhalb des Rahmens dieses Beitrags, Sie müssen jedoch einige Abhängigkeiten installieren:
pnpm add pg pgvector
Legen Sie eine DATABASE_URL in Ihrer Umgebung fest. Ich verwende eine .env-Datei. Es sollte diesem Format folgen:
DATABASE_URL=postgresql://<pg_user>:<pg_password>@localhost:5432/<database_name>
Für die lokale Entwicklung verwenden Sie @localhost, aber wenn Sie etwas wie docker-compose.yml verwenden und dem Dienst einen Namen gegeben haben, sollten Sie den Namen des Dienstes verwenden, z. B. @db.
Erstellen Sie in Ihrem Anwendungscode die Verbindung:
const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL, });
Dann initialisieren Sie pgvector und erstellen Sie eine neue Tabelle:
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 }), }; }
Mit dem vectorStore-Setup können Sie mit vectorStore.addDocuments Inhalte hinzufügen und mit vectorStore.similaritySearch den Kontext abfragen.
Das war's für diesen Beitrag. Vielleicht werde ich das nächste Mal spezifischere Einsatzmöglichkeiten von pgvector erkunden und/oder es mit Drizzle ORM verwenden! ?
Das obige ist der detaillierte Inhalt vonRichten Sie PostgreSQL mit pgvector in einem Docker-Container ein. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!