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
Instantiate
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);

Add documents
import type { Document } from '@langchain/core/documents';

const document1 = { pageContent: "foo", metadata: { baz: "bar" } };
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 });

Delete documents
await vectorStore.delete({ ids: ["3"] });

Similarity search
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"}]

Similarity search with filter
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"}]

Similarity search with score
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"}]

As a retriever
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" })]

Hierarchy

  • VectorStore
    • PGVectorStore

Constructors

Properties

FilterType: Metadata
chunkSize: number = 500
client?: PoolClient
collectionMetadata: null | Metadata
collectionName: string = "langchain"
collectionTableName?: string
contentColumnName: string
distanceStrategy?: DistanceStrategy = "cosine"
embeddings: EmbeddingsInterface

Embeddings interface for generating vector embeddings from text queries, enabling vector-based similarity searches.

extensionSchemaName: null | string
filter?: Metadata
idColumnName: string
metadataColumnName: string
pool: Pool
schemaName: null | string
tableName: string
vectorColumnName: string

Accessors

Methods

  • Method to add documents to the vector store. It converts the documents into vectors, and adds them to the store.

    Parameters

    • documents: Document<Record<string, any>>[]

      Array of Document instances.

    • Optionaloptions: {
          ids?: string[];
      }

      Optional arguments for adding documents

      • Optionalids?: string[]

    Returns Promise<void>

    Promise that resolves when the documents have been added.

  • Method to add vectors to the vector store. It converts the vectors into rows and inserts them into the database.

    Parameters

    • vectors: number[][]

      Array of vectors.

    • documents: Document<Record<string, any>>[]

      Array of Document instances.

    • Optionaloptions: {
          ids?: string[];
      }

      Optional arguments for adding documents

      • Optionalids?: string[]

    Returns Promise<void>

    Promise that resolves when the vectors have been added.

  • Creates a VectorStoreRetriever instance with flexible configuration options.

    Parameters

    • OptionalkOrFields: number | Partial<VectorStoreRetrieverInput<PGVectorStore>>

      If a number is provided, it sets the k parameter (number of items to retrieve).

      • If an object is provided, it should contain various configuration options.
    • Optionalfilter: Metadata

      Optional filter criteria to limit the items retrieved based on the specified filter type.

    • Optionalcallbacks: Callbacks

      Optional callbacks that may be triggered at specific stages of the retrieval process.

    • Optionaltags: string[]

      Tags to categorize or label the VectorStoreRetriever. Defaults to an empty array if not provided.

    • Optionalmetadata: Record<string, unknown>

      Additional metadata as key-value pairs to add contextual information for the retrieval process.

    • Optionalverbose: boolean

      If true, enables detailed logging for the retrieval process. Defaults to false.

    Returns VectorStoreRetriever<PGVectorStore>

    • A configured VectorStoreRetriever instance based on the provided parameters.

    Basic usage with a k value:

    const retriever = myVectorStore.asRetriever(5);
    

    Usage with a configuration object:

    const retriever = myVectorStore.asRetriever({
    k: 10,
    filter: myFilter,
    tags: ['example', 'test'],
    verbose: true,
    searchType: 'mmr',
    searchKwargs: { alpha: 0.5 },
    });
  • Method to create the HNSW index on the vector column.

    Parameters

    • config: {
          dimensions: number;
          distanceFunction?: string;
          efConstruction?: number;
          m?: number;
          namespace?: string;
      }
      • dimensions: number
      • OptionaldistanceFunction?: string
      • OptionalefConstruction?: number
      • Optionalm?: number
      • Optionalnamespace?: string

    Returns Promise<void>

    Promise that resolves with the query response of creating the index.

  • 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.

    Parameters

    • params: {
          filter?: Metadata;
          ids?: string[];
      }

      Object containing either an array of ids or a metadata filter object.

      • Optionalfilter?: Metadata
      • Optionalids?: string[]

    Returns Promise<void>

    Promise that resolves when the documents have been deleted.

    Error if neither ids nor filter are provided, or if both are provided.

    await vectorStore.delete({ ids: ["id1", "id2"] });
    
    await vectorStore.delete({ filter: { a: 1, b: 2 } });
    
  • Method to ensure the existence of the collection table in the database. It creates the table if it does not already exist.

    Returns Promise<void>

    Promise that resolves when the collection table has been ensured.

  • Method to ensure the existence of the table in the database. It creates the table if it does not already exist.

    Parameters

    • Optionaldimensions: number

      Number of dimensions in your vector data type. For example, use 1536 for OpenAI's text-embedding-3-small. If not set, indexes like HNSW might not be used during query time.

    Returns Promise<void>

    Promise that resolves when the table has been ensured.

  • Inserts a row for the collectionName provided at initialization if it does not exist and returns the collectionId.

    Returns Promise<string>

    The collectionId for the given collectionName.

  • Return documents selected using the maximal marginal relevance. Maximal marginal relevance optimizes for similarity to the query AND diversity among selected documents.

    Parameters

    • query: string

      Text to look up documents similar to.

    • options: MaxMarginalRelevanceSearchOptions<Metadata>
    • _callbacks: undefined | Callbacks

    Returns Promise<DocumentInterface<Record<string, any>>[]>

    • List of documents selected by maximal marginal relevance.
  • Searches for documents similar to a text query by embedding the query and performing a similarity search on the resulting vector.

    Parameters

    • query: string

      Text query for finding similar documents.

    • Optionalk: number

      Number of similar results to return. Defaults to 4.

    • Optionalfilter: Metadata

      Optional filter based on FilterType.

    • Optional_callbacks: Callbacks

      Optional callbacks for monitoring search progress

    Returns Promise<DocumentInterface<Record<string, any>>[]>

    A promise resolving to an array of DocumentInterface instances representing similar documents.

  • 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.

    Parameters

    • query: number[]

      Query vector.

    • k: number

      Number of most similar documents to return.

    • Optionalfilter: Metadata

      Optional filter to apply to the search.

    Returns Promise<[Document<Record<string, any>>, number][]>

    Promise that resolves with an array of tuples, each containing a Document and its similarity score.

  • Searches for documents similar to a text query by embedding the query, and returns results with similarity scores.

    Parameters

    • query: string

      Text query for finding similar documents.

    • Optionalk: number

      Number of similar results to return. Defaults to 4.

    • Optionalfilter: Metadata

      Optional filter based on FilterType.

    • Optional_callbacks: Callbacks

      Optional callbacks for monitoring search progress

    Returns Promise<[DocumentInterface<Record<string, any>>, number][]>

    A promise resolving to an array of tuples, each containing a document and its similarity score.

  • Returns Serialized

  • Static method to create a new PGVectorStore instance from an array of Document instances. It adds the documents to the store.

    Parameters

    • docs: Document<Record<string, any>>[]

      Array of Document instances.

    • embeddings: EmbeddingsInterface

      Embeddings instance.

    • dbConfig: PGVectorStoreArgs & {
          dimensions?: number;
      }

      PGVectorStoreArgs instance.

    Returns Promise<PGVectorStore>

    Promise that resolves with a new instance of PGVectorStore.

  • 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.

    Parameters

    • texts: string[]

      Array of texts.

    • metadatas: object | object[]

      Array of metadata objects or a single metadata object.

    • embeddings: EmbeddingsInterface

      Embeddings instance.

    • dbConfig: PGVectorStoreArgs & {
          dimensions?: number;
      }

      PGVectorStoreArgs instance.

    Returns Promise<PGVectorStore>

    Promise that resolves with a new instance of PGVectorStore.