PGVector vector store integration.
Setup:
Install @langchain/community and pg.
If you wish to generate ids, you should also install the uuid package.
npm install @langchain/community pg uuid
import {
PGVectorStore,
DistanceStrategy,
} from "@langchain/community/vectorstores/pgvector";
// Or other embeddings
import { OpenAIEmbeddings } from "@langchain/openai";
import { PoolConfig } from "pg";
const embeddings = new OpenAIEmbeddings({
model: "text-embedding-3-small",
});
// Sample config
const config = {
postgresConnectionOptions: {
type: "postgres",
host: "127.0.0.1",
port: 5433,
user: "myuser",
password: "ChangeMe",
database: "api",
} as PoolConfig,
tableName: "testlangchainjs",
columns: {
idColumnName: "id",
vectorColumnName: "vector",
contentColumnName: "content",
metadataColumnName: "metadata",
},
// supported distance strategies: cosine (default), innerProduct, or euclidean
distanceStrategy: "cosine" as DistanceStrategy,
};
const vectorStore = await PGVectorStore.initialize(embeddings, config);
import type { Document } from '@langchain/core/documents';
const document1 = { pageContent: "foo", metadata: { baz: "bar", num: 4 } };
const document2 = { pageContent: "thud", metadata: { bar: "baz" } };
const document3 = { pageContent: "i will be deleted :(", metadata: {} };
const documents: Document[] = [document1, document2, document3];
const ids = ["1", "2", "3"];
await vectorStore.addDocuments(documents, { ids });
await vectorStore.delete({ ids: ["3"] });
const results = await vectorStore.similaritySearch("thud", 1);
for (const doc of results) {
console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
}
// Output: * thud [{"baz":"bar"}]
const resultsWithFilter = await vectorStore.similaritySearch("thud", 1, { baz: "bar" });
for (const doc of resultsWithFilter) {
console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
}
// Output: * foo [{"baz":"bar"}]
Available filter operators: in, notIn, lte, lt, gte, gt, neq
const resultsWithFilters = await vectorStore.similaritySearch("thud", 1, {
baz: {
in: ["bar", "car"],
},
num: {
lte: 10
}
});
for (const doc of resultsWithFilters) {
console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
}
// Output: * foo [{"baz":"bar"}]
const resultsWithScore = await vectorStore.similaritySearchWithScore("qux", 1);
for (const [doc, score] of resultsWithScore) {
console.log(`* [SIM=${score.toFixed(6)}] ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
}
// Output: * [SIM=0.000000] qux [{"bar":"baz","baz":"bar"}]
const retriever = vectorStore.asRetriever({
searchType: "mmr", // Leave blank for standard similarity search
k: 1,
});
const resultAsRetriever = await retriever.invoke("thud");
console.log(resultAsRetriever);
// Output: [Document({ metadata: { "baz":"bar" }, pageContent: "thud" })]
Embeddings interface for generating vector embeddings from text queries, enabling vector-based similarity searches.
Returns a string representing the type of vector store, which subclasses must implement to identify their specific vector storage type.
Method to add documents to the vector store. It converts the documents into vectors, and adds them to the store.
Method to add vectors to the vector store. It converts the vectors into rows and inserts them into the database.
Creates a VectorStoreRetriever instance with flexible configuration options.
Method to create the HNSW index on the vector column.
Method to delete documents from the vector store. It deletes the documents that match the provided ids or metadata filter. Matches ids exactly and metadata filter according to postgres jsonb containment. Ids and filter are mutually exclusive.
Closes all the clients in the pool and terminates the pool.
Method to ensure the existence of the collection table in the database. It creates the table if it does not already exist.
Method to ensure the existence of the table in the database. It creates the table if it does not already exist.
Inserts a row for the collectionName provided at initialization if it does not exist and returns the collectionId.
Return documents selected using the maximal marginal relevance. Maximal marginal relevance optimizes for similarity to the query AND diversity among selected documents.
Searches for documents similar to a text query by embedding the query and performing a similarity search on the resulting vector.
Method to perform a similarity search in the vector store. It returns
the k most similar documents to the query vector, along with their
similarity scores.
Performs similarity search with both distance and similarity scores returned. This method returns both the raw distance and the normalized similarity score for each result.
Searches for documents similar to a text query by embedding the query, and returns results with similarity scores.
Static method to create a new PGVectorStore instance from an
array of Document instances. It adds the documents to the store.
Static method to create a new PGVectorStore instance from an
array of texts and their metadata. It converts the texts into
Document instances and adds them to the store.
Static method to create a new PGVectorStore instance from a
connection. It creates a table if one does not exist, and calls
connect to return a new instance of PGVectorStore.
The name of the serializable. Override to provide an alias or to preserve the serialized module name in minified environments.
Implemented as a static method to support loading logic.