Nvidia 임베딩
Nvidia 임베딩 (Nvidia)
Qdrant는 Nvidia 임베딩과 함께 사용할 수 있어요. 요청 인증을 위한 API 키는 Nvidia Playground에서 발급받을 수 있고요, 발급받은 키를 Authorization: Bearer 헤더로 넣어 Nvidia의 임베딩 API를 호출한 뒤, 그 결과를 Qdrant 쪽에 저장·검색하는 흐름을 만들어요. Python과 TypeScript 두 방식 모두 지원돼요.
Qdrant 클라이언트와 Nvidia 세션 준비
먼저 요청을 보낼 Nvidia API 엔드포인트와 Qdrant 클라이언트를 준비해요.
import requests
from qdrant_client import QdrantClient
NVIDIA_BASE_URL = "https://ai.api.nvidia.com/v1/retrieval/nvidia/embeddings"
NVIDIA_API_KEY = "<YOUR_API_KEY>"
nvidia_session = requests.Session()
client = QdrantClient(":memory:")
headers = {
"Authorization": f"Bearer {NVIDIA_API_KEY}",
"Accept": "application/json",
}
texts = [
"Qdrant is the best vector search engine!",
"Loved by Enterprises and everyone building for low latency, high performance, and scale.",
]
import { QdrantClient } from '@qdrant/js-client-rest';
const NVIDIA_BASE_URL = "https://ai.api.nvidia.com/v1/retrieval/nvidia/embeddings"
const NVIDIA_API_KEY = "<YOUR_API_KEY>"
const client = new QdrantClient({ url: 'http://localhost:6333' });
const headers = {
"Authorization": "Bearer " + NVIDIA_API_KEY,
"Accept": "application/json",
"Content-Type": "application/json"
}
const texts = [
"Qdrant is the best vector search engine!",
"Loved by Enterprises and everyone building for low latency, high performance, and scale.",
]
문서 임베딩
다음 예시는 크기 1024의 문장 임베딩을 생성하는 NV-Embed-QA 모델로 문서를 임베딩해요. input_type을 passage로 주어 문서(패시지)에 대한 임베딩을 만들고 있어요.
payload = {
"input": texts,
"input_type": "passage",
"model": "NV-Embed-QA",
}
response_body = nvidia_session.post(
NVIDIA_BASE_URL, headers=headers, json=payload
).json()
let body = {
"input": texts,
"input_type": "passage",
"model": "NV-Embed-QA"
}
let response = await fetch(NVIDIA_BASE_URL, {
method: "POST",
body: JSON.stringify(body),
headers
});
let response_body = await response.json()
모델 출력을 Qdrant Point로 변환
응답의 data 배열에서 각 항목의 embedding을 꺼내 원본 텍스트와 함께 PointStruct로 만들어요.
from qdrant_client.models import PointStruct
points = [
PointStruct(
id=idx,
vector=data["embedding"],
payload={"text": text},
)
for idx, (data, text) in enumerate(zip(response_body["data"], texts))
]
let points = response_body.data.map((data, i) => {
return {
id: i,
vector: data.embedding,
payload: {
text: texts[i]
}
}
})
컬렉션 생성과 문서 삽입
NV-Embed-QA는 임베딩 차원이 1024이므로 VectorParams(size=1024)로 컬렉션을 만들고, 코사인 유사도(Distance.COSINE)로 검색하도록 설정해요. 그다음 upsert로 포인트를 넣어요.
from qdrant_client.models import VectorParams, Distance
collection_name = "example_collection"
client.create_collection(
collection_name,
vectors_config=VectorParams(
size=1024,
distance=Distance.COSINE,
),
)
client.upsert(collection_name, points)
const COLLECTION_NAME = "example_collection"
await client.createCollection(COLLECTION_NAME, {
vectors: {
size: 1024,
distance: 'Cosine',
}
});
await client.upsert(COLLECTION_NAME, {
wait: true,
points
});