벡터 스토어 통합

벡터 스토어 통합 (Vector store integrations)

LangChain JavaScript로 벡터 스토어와 통합해요.

개요 (Overview)

벡터 스토어임베딩된 데이터를 저장하고 유사도 검색을 수행해요.

flowchart LR

    subgraph "📥 Indexing phase (store)"
        A[📄 Documents] --> B[🔢 Embedding model]
        B --> C[🔘 Embedding vectors]
        C --> D[(Vector store)]
    end

    subgraph "📤 Query phase (retrieval)"
        E[❓ Query text] --> F[🔢 Embedding model]
        F --> G[🔘 Query vector]
        G --> H[🔍 Similarity search]
        H --> D
        D --> I[📄 Top-k results]
    end

    classDef process fill:#E5F4FF,stroke:#006DDD,stroke-width:2px,color:#030710
    class A,B,C,D,E,F,G,H,I process

인터페이스 (Interface)

LangChain은 벡터 스토어에 통합된 인터페이스를 제공해요, 다음을 할 수 있어요:

  • addDocuments - 스토어에 문서를 추가해요.
  • delete - ID로 저장된 문서를 제거해요.
  • similaritySearch - 의미적으로 유사한 문서를 쿼리해요.

이 추상화 덕분에 애플리케이션 로직을 바꾸지 않고도 다른 구현체로 전환할 수 있어요.

초기화 (Initialization)

LangChain의 대부분 벡터 스토어는 초기화 시 인자로 임베딩 모델을 받아요.

import { OpenAIEmbeddings } from "@langchain/openai";
import { MemoryVectorStore } from "@langchain/classic/vectorstores/memory";

const embeddings = new OpenAIEmbeddings({
  model: "text-embedding-3-small",
});
const vectorStore = new MemoryVectorStore(embeddings);

문서 추가 (Adding documents)

addDocuments 함수로 벡터 스토어에 문서를 추가할 수 있어요.

import { Document } from "@langchain/core/documents";
const document = new Document({
  pageContent: "Hello world",
});
await vectorStore.addDocuments([document]);

문서 삭제 (Deleting documents)

delete 함수로 벡터 스토어에서 문서를 삭제할 수 있어요.

await vectorStore.delete({
  filter: {
    pageContent: "Hello world",
  },
});

가장 가까운 임베딩 문서를 반환하는 similaritySearch로 의미 쿼리를 실행하세요:

const results = await vectorStore.similaritySearch("Hello world", 10);

많은 벡터 스토어가 다음과 같은 파라미터를 지원해요:

  • k — 반환할 결과 수
  • filter — 메타데이터 기반 조건부 필터링

유사도 지표와 인덱싱 (Similarity metrics & indexing)

임베딩 유사도는 다음을 사용해 계산할 수 있어요:

  • 코사인 유사도 (Cosine similarity)
  • 유클리드 거리 (Euclidean distance)
  • 내적 (Dot product)

효율적인 검색은 종종 HNSW(Hierarchical Navigable Small World) 같은 인덱싱 방법을 사용하지만, 구체적인 내용은 벡터 스토어에 따라 달라져요.

메타데이터 필터링 (Metadata filtering)

메타데이터(예: source, date)로 필터링하면 검색 결과를 정밀화할 수 있어요:

vectorStore.similaritySearch("query", 2, { source: "tweets" });
메타데이터 기반 필터링 지원은 구현체마다 달라요. 선택한 벡터 스토어의 문서에서 세부 사항을 확인하세요.

주요 통합 (Top integrations)

임베딩 모델 선택:

OpenAI

의존성 설치:

npm install @langchain/openai @langchain/core

환경 변수 추가:

OPENAI_API_KEY=your-api-key

모델 인스턴스화:

import { OpenAIEmbeddings } from "@langchain/openai";

const embeddings = new OpenAIEmbeddings({
  model: "text-embedding-3-large"
});

Azure

의존성 설치:

npm install @langchain/openai @langchain/core

환경 변수 추가:

AZURE_OPENAI_API_INSTANCE_NAME=<YOUR_INSTANCE_NAME>
AZURE_OPENAI_API_KEY=<YOUR_KEY>
AZURE_OPENAI_API_VERSION="2024-02-01"

모델 인스턴스화:

import { AzureOpenAIEmbeddings } from "@langchain/openai";

const embeddings = new AzureOpenAIEmbeddings({
  azureOpenAIApiEmbeddingsDeploymentName: "text-embedding-ada-002"
});

AWS

의존성 설치:

npm i @langchain/aws

환경 변수 추가:

BEDROCK_AWS_REGION=your-region

모델 인스턴스화:

import { BedrockEmbeddings } from "@langchain/aws";

const embeddings = new BedrockEmbeddings({
  model: "amazon.titan-embed-text-v1"
});

Google Gemini

의존성 설치:

npm i @langchain/google-genai

환경 변수 추가:

GOOGLE_API_KEY=your-api-key

모델 인스턴스화:

import { GoogleGenerativeAIEmbeddings } from "@langchain/google-genai";

const embeddings = new GoogleGenerativeAIEmbeddings({
  model: "text-embedding-004"
});

Gemini Enterprise Agent Platform

의존성 설치:

npm i @langchain/google-vertexai

환경 변수 추가:

GOOGLE_APPLICATION_CREDENTIALS=credentials.json

모델 인스턴스화:

import { VertexAIEmbeddings } from "@langchain/google-vertexai";

const embeddings = new VertexAIEmbeddings({
  model: "gemini-embedding-001"
});

MistralAI

의존성 설치:

npm install @langchain/mistralai @langchain/core

환경 변수 추가:

MISTRAL_API_KEY=your-api-key

모델 인스턴스화:

import { MistralAIEmbeddings } from "@langchain/mistralai";

const embeddings = new MistralAIEmbeddings({
  model: "mistral-embed"
});

Cohere

의존성 설치:

npm i @langchain/cohere

환경 변수 추가:

COHERE_API_KEY=your-api-key

모델 인스턴스화:

import { CohereEmbeddings } from "@langchain/cohere";

const embeddings = new CohereEmbeddings({
  model: "embed-english-v3.0"
});

Ollama

의존성 설치:

npm install @langchain/ollama @langchain/core

모델 인스턴스화:

import { OllamaEmbeddings } from "@langchain/ollama";

const embeddings = new OllamaEmbeddings({
  model: "llama2",
  baseUrl: "http://localhost:11434", // Default value
});

Voyage AI

의존성 설치:

npm install @langchain/mongodb @langchain/core

환경 변수 추가:

VOYAGE_API_KEY=your-api-key

모델 인스턴스화:

import { VoyageEmbeddings } from "@langchain/mongodb";

const embeddings = new VoyageEmbeddings({
  model: "voyage-4"
});

벡터 스토어 선택:

Memory

npm i langchain
import { MemoryVectorStore } from "@langchain/classic/vectorstores/memory";

const vectorStore = new MemoryVectorStore(embeddings);

MongoDB

수동 임베딩(Manual embedding):

npm install @langchain/mongodb mongodb @langchain/core
import { MongoDBAtlasVectorSearch } from "@langchain/mongodb"
import { MongoClient } from "mongodb";

const client = new MongoClient(process.env.MONGODB_ATLAS_URI!);
const collection = client
  .db(process.env.MONGODB_ATLAS_DB_NAME)
  .collection(process.env.MONGODB_ATLAS_COLLECTION_NAME);

const vectorStore = new MongoDBAtlasVectorSearch(embeddings, {
  collection,
  indexName: "vector_index",
  textKey: "text",
  embeddingKey: "embedding",
});

자동 임베딩(Automated embedding):

import { MongoDBAtlasVectorSearch } from "@langchain/mongodb"
import { MongoClient } from "mongodb";

const client = new MongoClient(process.env.MONGODB_ATLAS_URI!);
const collection = client
  .db(process.env.MONGODB_ATLAS_DB_NAME)
  .collection(process.env.MONGODB_ATLAS_COLLECTION_NAME);

const vectorStore = new MongoDBAtlasVectorSearch({ collection });

Pinecone

npm install @langchain/pinecone @langchain/core @pinecone-database/pinecone
import { PineconeStore } from "@langchain/pinecone";
import { Pinecone as PineconeClient } from "@pinecone-database/pinecone";

const pinecone = new PineconeClient();
const vectorStore = new PineconeStore(embeddings, {
  pineconeIndex,
  maxConcurrency: 5,
});

Redis

npm install @langchain/redis @langchain/core redis
import { RedisVectorStore } from "@langchain/redis";

const vectorStore = new RedisVectorStore(embeddings, {
  redisClient: client,
  indexName: "langchainjs-testing",
});

Qdrant

npm install @langchain/qdrant @langchain/core
import { QdrantVectorStore } from "@langchain/qdrant";

const vectorStore = await QdrantVectorStore.fromExistingCollection(embeddings, {
  url: process.env.QDRANT_URL,
  collectionName: "langchainjs-testing",
});

Oracle AI Database

npm i @oracle/langchain-oracledb @langchain/core
import oracledb from "oracledb";
import { OracleEmbeddings, OracleVS } from "@oracle/langchain-oracledb";

const connection = await oracledb.getConnection({
  user: process.env.ORACLE_USER,
  password: process.env.ORACLE_PASSWORD,
  connectionString: process.env.ORACLE_DSN,
});

const embeddings = new OracleEmbeddings(connection, {
  provider: "database",
  model: process.env.DEMO_ONNX_MODEL ?? "DEMO_MODEL",
});

const vectorStore = new OracleVS(embeddings, {
  client: connection,
  tableName: "DEMO_VECTORS",
  query: "Find support tickets mentioning service outages.",
  distanceStrategy: "DOT",
});
await vectorStore.initialize();

Weaviate

npm install @langchain/weaviate @langchain/core weaviate-client
import { WeaviateStore } from "@langchain/weaviate";

const vectorStore = new WeaviateStore(embeddings, {
    client: weaviateClient,
    indexName: "Langchainjs_test",
});

모든 벡터 스토어 (All vector stores)

LangChain.js는 다양한 벡터 스토어와 통합돼요. 전체 목록은 아래에서 확인할 수 있어요:

출처: 문서

본문

이 페이지는 LangChain JavaScript 벡터 스토어 통합의 인덱스예요. 벡터 스토어의 공통 인터페이스(addDocuments, delete, similaritySearch), 초기화·문서 추가·삭제·유사도 검색·메타데이터 필터링 방법을 설명하고, 주요 임베딩 모델(OpenAI, Azure, AWS, Gemini, Mistral, Cohere, Ollama, Voyage)과 벡터 스토어(Memory, MongoDB, Pinecone, Redis, Qdrant, Oracle, Weaviate)의 설정 코드를 제공해요. 마지막에 전체 벡터 스토어 목록을 보여줘요.

더 알아보기 (Learn more)