Azure DocumentDB
Azure DocumentDB
Azure DocumentDB용 벡터 스토어 통합
Azure DocumentDB는 완전한 네이티브 MongoDB 지원으로 데이터베이스를 쉽게 만들 수 있게 해줘요. 애플리케이션을 연결 문자열로 지정하면 MongoDB 경험을 그대로 적용하고 좋아하는 MongoDB 드라이버, SDK, 툴을 계속 사용할 수 있어요. Azure DocumentDB의 벡터 검색을 사용해 AI 기반 애플리케이션을 Azure DocumentDB에 저장된 데이터와 원활하게 통합할 수 있어요.
Azure DocumentDB는 익숙한 아키텍처로 최신 애플리케이션을 구축할 수 있는 완전 관리형 MongoDB 호환 데이터베이스 서비스를 개발자에게 제공해요.
Azure DocumentDB의 벡터 검색 기능을 활용하는 방법은 이 페이지에서 배울 수 있어요. Azure 계정이 없다면 무료 계정을 만들면 시작할 수 있어요.
설정 (Setup)
먼저 @langchain/azure-cosmosdb 패키지를 설치해야 해요:
npm install @langchain/azure-cosmosdb @langchain/core
실행 중인 Azure DocumentDB 인스턴스도 필요해요. 이 가이드를 따라 Azure Portal에서 무료 버전을 비용 없이 배포할 수 있어요.
인스턴스가 실행되면 연결 문자열과 관리자 키가 있는지 확인하세요. Azure Portal의 인스턴스 "Connection strings" 섹션에서 찾을 수 있어요. 그런 다음 다음 환경 변수를 설정해야 해요:
AZURE_DOCUMENTDB_CONNECTION_STRING=
예제 (Example)
다음은 파일의 문서를 Azure DocumentDB에 인덱싱하고, 벡터 검색 쿼리를 실행한 뒤, 마지막으로 검색된 문서를 기반으로 자연어로 질문에 답하는 체인을 사용하는 예제예요.
import {
AzureDocumentDBVectorStore,
AzureDocumentDBSimilarityType,
} from "@langchain/azure-cosmosdb";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { ChatOpenAI, OpenAIEmbeddings } from "@langchain/openai";
import { createStuffDocumentsChain } from "@langchain/classic/chains/combine_documents";
import { createRetrievalChain } from "@langchain/classic/chains/retrieval";
import { TextLoader } from "@langchain/classic/document_loaders/fs/text";
import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";
// Load documents from file
const loader = new TextLoader("./state_of_the_union.txt");
const rawDocuments = await loader.load();
const splitter = new RecursiveCharacterTextSplitter({
chunkSize: 1000,
chunkOverlap: 0,
});
const documents = await splitter.splitDocuments(rawDocuments);
// Create Azure DocumentDB vector store
const store = await AzureDocumentDBVectorStore.fromDocuments(
documents,
new OpenAIEmbeddings(),
{
databaseName: "langchain",
collectionName: "documents",
indexOptions: {
numLists: 100,
dimensions: 1536,
similarity: AzureDocumentDBSimilarityType.COS,
},
}
);
// Performs a similarity search
const resultDocuments = await store.similaritySearch(
"What did the president say about Ketanji Brown Jackson?"
);
console.log("Similarity search results:");
console.log(resultDocuments[0].pageContent);
// Use the store as part of a chain
const model = new ChatOpenAI({ model: "gpt-3.5-turbo-1106" });
const questionAnsweringPrompt = ChatPromptTemplate.fromMessages([
[
"system",
"Answer the user's questions based on the below context:\n\n{context}",
],
["human", "{input}"],
]);
const combineDocsChain = await createStuffDocumentsChain({
llm: model,
prompt: questionAnsweringPrompt,
});
const chain = await createRetrievalChain({
retriever: store.asRetriever(),
combineDocsChain,
});
const res = await chain.invoke({
input: "What is the president's top priority regarding prices?",
});
console.log("Chain response:");
console.log(res.answer);
// Clean up
await store.delete();
await store.close();
관련 (Related)
- 벡터 스토어 통합 개요
출처: 문서
본문
AzureDocumentDBVectorStore는 Azure DocumentDB에 벡터를 저장·검색하는 통합이에요. @langchain/azure-cosmosdb 패키지에서 가져와 fromDocuments로 문서를 인덱싱하고, similaritySearch로 유사도 검색하며, asRetriever()와 createRetrievalChain으로 RAG 체인에 연결할 수 있어요. AZURE_DOCUMENTDB_CONNECTION_STRING 환경 변수로 연결 문자열을 설정해야 해요.