벡터 스토어 통합
벡터 스토어 통합 (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",
},
});
유사도 검색 (Similarity search)
가장 가까운 임베딩 문서를 반환하는 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는 다양한 벡터 스토어와 통합돼요. 전체 목록은 아래에서 확인할 수 있어요:
WeaviateStorePineconeStoreQdrantVectorStoreMongoDBAtlasVectorSearchRedisVectorStoreOracleVSPGVectorStoreCloudflare vectorizeAzure Cosmos DB for MongoDB vCore (deprecated)Azure Cosmos DB for NoSQLAzure DocumentDBTurbopufferVectorStoreNeo4jVectorStoreGoogle cloud SQL for postgresqlSAP HANA Cloud Vector EngineLambdaDBYDBInfinolangchain
출처: 문서
본문
이 페이지는 LangChain JavaScript 벡터 스토어 통합의 인덱스예요. 벡터 스토어의 공통 인터페이스(addDocuments, delete, similaritySearch), 초기화·문서 추가·삭제·유사도 검색·메타데이터 필터링 방법을 설명하고, 주요 임베딩 모델(OpenAI, Azure, AWS, Gemini, Mistral, Cohere, Ollama, Voyage)과 벡터 스토어(Memory, MongoDB, Pinecone, Redis, Qdrant, Oracle, Weaviate)의 설정 코드를 제공해요. 마지막에 전체 벡터 스토어 목록을 보여줘요.