BedrockEmbeddings 통합
BedrockEmbeddings 통합
LangChain JavaScript로 BedrockEmbeddings 임베딩 모델과 통합하는 방법을 안내할게요.
출처: 문서
본문
Amazon Bedrock은 AI21 Labs, Anthropic, Cohere, Meta, Stability AI, Amazon과 같은 선도적 AI 기업의 고성능 기반 모델(FM)을 단일 API로 선택할 수 있게 하는 완전 관리형 서비스이며, 보안·개인정보 보호·책임 있는 AI를 갖춘 생성형 AI 애플리케이션 구축에 필요한 광범위한 기능을 제공해요.
이 문서는 LangChain으로 Amazon Bedrock 임베딩 모델을 시작하는 데 도움을 줘요. Bedrock 기능과 구성 옵션에 대한 자세한 문서는 API 레퍼런스를 참고하세요.
개요
통합 세부 정보
| 클래스 | 패키지 | Local | Py 지원 | Downloads | Version |
|---|---|---|---|---|---|
Bedrock |
@langchain/aws |
❌ | ✅ |
설정
Bedrock 임베딩 모델에 접근하려면 AWS 계정을 만들고 API 키를 받은 뒤 @langchain/aws 통합 패키지를 설치해야 해요.
AWS 문서로 이동해 AWS에 가입하고 자격 증명을 설정하세요. 또한 이 지침을 따라 계정에 모델 접근을 활성화해야 해요.
자격 증명
모델 호출의 자동 추적(tracing)을 원한다면 아래 주석을 해제해 LangSmith API 키를 설정할 수도 있어요:
# export LANGSMITH_TRACING="true"
# export LANGSMITH_API_KEY="your-api-key"
설치
LangChain Bedrock 통합은 @langchain/aws 패키지에 있어요:
yarn add @langchain/aws @langchain/core
pnpm add @langchain/aws @langchain/core
인스턴스 생성
이제 모델 객체를 생성하고 텍스트를 임베딩할 수 있어요.
AWS로 인증하는 방법은 몇 가지가 있어요 — 아래 예제는 환경 변수에 설정된 액세스 키, 시크릿 액세스 키, 리전에 의존해요:
import { BedrockEmbeddings } from "@langchain/aws";
const embeddings = new BedrockEmbeddings({
region: process.env.BEDROCK_AWS_REGION!,
credentials: {
accessKeyId: process.env.BEDROCK_AWS_ACCESS_KEY_ID!,
secretAccessKey: process.env.BEDROCK_AWS_SECRET_ACCESS_KEY!,
},
model: "amazon.titan-embed-text-v1",
});
인덱싱 및 검색
임베딩 모델은 데이터 인덱싱과 나중 검색 모두의 일부로, 검색 증강 생성(RAG) 흐름에서 자주 사용돼요. 더 자세한 지침은 Learn 탭의 RAG 튜토리얼을 참고하세요.
아래에서 위에서 초기화한 embeddings 객체로 데이터를 인덱싱하고 검색하는 방법을 확인하세요. 이 예제에서는 데모 MemoryVectorStore를 사용해 샘플 문서를 인덱싱하고 검색할 거예요.
// Create a vector store with a sample text
import { MemoryVectorStore } from "@langchain/classic/vectorstores/memory";
const text = "LangChain is the framework for building context-aware reasoning applications";
const vectorstore = await MemoryVectorStore.fromDocuments(
[{ pageContent: text, metadata: {} }],
embeddings,
);
// Use the vector store as a retriever that returns a single document
const retriever = vectorstore.asRetriever(1);
// Retrieve the most similar text
const retrievedDocuments = await retriever.invoke("What is LangChain?");
retrievedDocuments[0].pageContent;
LangChain is the framework for building context-aware reasoning applications
직접 사용
내부적으로 vectorstore와 retriever 구현은 fromDocuments에 사용된 텍스트와 retriever의 invoke 연산에 대해 각각 embeddings.embedDocument(...) 와 embeddings.embedQuery(...)를 호출해 임베딩을 만들어요.
이 메서드들을 직접 호출해 자신의 사용 사례에 대한 임베딩을 얻을 수 있어요.
단일 텍스트 임베딩
embedQuery로 검색을 위한 쿼리를 임베딩할 수 있어요. 이는 쿼리에 특화된 벡터 표현을 생성해요:
const singleVector = await embeddings.embedQuery(text);
console.log(singleVector.slice(0, 100));
[
0.625, 0.111328125, 0.265625, -0.20019531, 0.40820312,
-0.010803223, -0.22460938, -0.0002937317, 0.29882812, -0.14355469,
-0.068847656, -0.3984375, 0.75, -0.1953125, -0.5546875,
-0.087402344, 0.5625, 1.390625, -0.3515625, 0.39257812,
-0.061767578, 0.65625, -0.36328125, -0.06591797, 0.234375,
-0.36132812, 0.42382812, -0.115234375, -0.28710938, -0.29296875,
-0.765625, -0.16894531, 0.23046875, 0.6328125, -0.08544922,
0.13671875, 0.0004272461, 0.3125, 0.12207031, -0.546875,
0.14257812, -0.119628906, -0.111328125, 0.61328125, 0.6875,
0.3671875, -0.2578125, -0.27734375, 0.703125, 0.203125,
0.17675781, -0.26757812, -0.76171875, 0.71484375, 0.77734375,
-0.1953125, -0.007232666, -0.044921875, 0.23632812, -0.24121094,
-0.012207031, 0.5078125, 0.08984375, 0.56640625, -0.3046875,
0.6484375, -0.25, -0.37890625, -0.2421875, 0.38476562,
-0.18164062, -0.05810547, 0.7578125, 0.04296875, 0.609375,
0.50390625, 0.023803711, -0.23046875, 0.099121094, 0.79296875,
-1.296875, 0.671875, -0.66796875, 0.43359375, 0.087890625,
0.14550781, -0.37304688, -0.068359375, 0.00012874603, -0.47265625,
-0.765625, 0.07861328, -0.029663086, 0.076660156, -0.32617188,
-0.453125, -0.5546875, -0.45703125, 1.1015625, -0.29492188
]
여러 텍스트 임베딩
embedDocuments로 인덱싱을 위한 여러 텍스트를 임베딩할 수 있어요. 이 메서드에 사용되는 내부는 쿼리 임베딩과 다를 수 있지만(다를 필요는 없음) 있어요:
const text2 = "LangGraph is a library for building stateful, multi-actor applications with LLMs";
const vectors = await embeddings.embedDocuments([text, text2]);
console.log(vectors[0].slice(0, 100));
console.log(vectors[1].slice(0, 100));
[
0.625, 0.111328125, 0.265625, -0.20019531, 0.40820312,
-0.010803223, -0.22460938, -0.0002937317, 0.29882812, -0.14355469,
-0.068847656, -0.3984375, 0.75, -0.1953125, -0.5546875,
-0.087402344, 0.5625, 1.390625, -0.3515625, 0.39257812,
-0.061767578, 0.65625, -0.36328125, -0.06591797, 0.234375,
-0.36132812, 0.42382812, -0.115234375, -0.28710938, -0.29296875,
-0.765625, -0.16894531, 0.23046875, 0.6328125, -0.08544922,
0.13671875, 0.0004272461, 0.3125, 0.12207031, -0.546875,
0.14257812, -0.119628906, -0.111328125, 0.61328125, 0.6875,
0.3671875, -0.2578125, -0.27734375, 0.703125, 0.203125,
0.17675781, -0.26757812, -0.76171875, 0.71484375, 0.77734375,
-0.1953125, -0.007232666, -0.044921875, 0.23632812, -0.24121094,
-0.012207031, 0.5078125, 0.08984375, 0.56640625, -0.3046875,
0.6484375, -0.25, -0.37890625, -0.2421875, 0.38476562,
-0.18164062, -0.05810547, 0.7578125, 0.04296875, 0.609375,
0.50390625, 0.023803711, -0.23046875, 0.099121094, 0.79296875,
-1.296875, 0.671875, -0.66796875, 0.43359375, 0.087890625,
0.14550781, -0.37304688, -0.068359375, 0.00012874603, -0.47265625,
-0.765625, 0.07861328, -0.029663086, 0.076660156, -0.32617188,
-0.453125, -0.5546875, -0.45703125, 1.1015625, -0.29492188
]
[
0.65625, 0.48242188, 0.70703125, -0.13378906, 0.859375,
0.2578125, -0.13378906, -0.0002670288, -0.34375, 0.25585938,
-0.33984375, -0.26367188, 0.828125, -0.23242188, -0.61328125,
0.12695312, 0.43359375, 1.3828125, -0.099121094, 0.3203125,
-0.34765625, 0.35351562, -0.28710938, 0.009521484, 0.083496094,
0.040283203, -0.25390625, 0.17871094, 0.044189453, -0.19628906,
0.45898438, 0.21191406, 0.67578125, 0.8359375, -0.29101562,
0.021118164, 0.13671875, 0.083984375, 0.34570312, 0.30859375,
-0.001625061, 0.31835938, -0.18164062, -0.0058288574, 0.22460938,
0.26757812, -0.09082031, 0.17480469, 1.4921875, -0.24316406,
0.36523438, 0.14550781, -0.609375, 0.33007812, 0.10595703,
0.3671875, 0.18359375, -0.62109375, 0.51171875, 0.024047852,
0.092285156, -0.44335938, 0.4921875, 0.609375, -0.48242188,
0.796875, -0.47851562, -0.53125, -0.66796875, 0.68359375,
-0.16796875, 0.110839844, 0.84765625, 0.703125, 0.8671875,
0.37695312, -0.0022888184, -0.30664062, 0.3671875, 0.16503906,
-0.59765625, 0.3203125, -0.34375, 0.08251953, 0.890625,
0.38476562, -0.24707031, -0.125, 0.00013160706, -0.69921875,
-0.53125, 0.052490234, 0.27734375, 0.42773438, -0.38867188,
-0.2578125, -0.25, -0.46875, 0.828125, -0.94140625
]
Bedrock 런타임 클라이언트 구성
credentials, region, retryPolicy 등 옵션을 커스터마이즈하고 싶다면 BedrockRuntimeClient 인스턴스를 직접 전달할 수 있어요.
import { BedrockRuntimeClient } from "@aws-sdk/client-bedrock-runtime";
import { BedrockEmbeddings } from "@langchain/aws";
const getCredentials = () => {
// do something to get credentials
}
// @lc-ts-ignore
const client = new BedrockRuntimeClient({
region: "us-east-1",
credentials: getCredentials(),
});
const embeddingsWithCustomClient = new BedrockEmbeddings({
client,
});
API 레퍼런스
모든 Bedrock 기능과 구성에 대한 자세한 문서는 API 레퍼런스를 참고하세요.
더 알아보기
- 이 문서를 MCP로 연결하면 Claude, VSCode 등에서 실시간 답변을 받을 수 있어요.
- GitHub에서 이 페이지 편집하기 또는 이슈 제출하기.