의미적 유사성으로 벡터 저장소 문서 검색
의미적 유사성과 배치 작업으로 벡터 저장소 문서 검색
예제 요청
curl -X GET \
"https://api.rememberizer.ai/api/v1/vector-stores/vs_abc123/documents/search?q=How%20to%20integrate%20our%20product%20with%20third-party%20systems&n=5&prev_chunks=1&next_chunks=1" \
-H "x-api-key: YOUR_API_KEY"const searchVectorStore = async (vectorStoreId, query, numResults = 5, prevChunks = 1, nextChunks = 1) => {
const url = new URL(`https://api.rememberizer.ai/api/v1/vector-stores/${vectorStoreId}/documents/search`);
url.searchParams.append('q', query);
url.searchParams.append('n', numResults);
url.searchParams.append('prev_chunks', prevChunks);
url.searchParams.append('next_chunks', nextChunks);
const response = await fetch(url.toString(), {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY'
}
});
const data = await response.json();
console.log(data);
};
searchVectorStore(
'vs_abc123',
'How to integrate our product with third-party systems',
5,
1,
1
);import requests
def search_vector_store(vector_store_id, query, num_results=5, prev_chunks=1, next_chunks=1):
headers = {
"x-api-key": "YOUR_API_KEY"
}
params = {
"q": query,
"n": num_results,
"prev_chunks": prev_chunks,
"next_chunks": next_chunks
}
response = requests.get(
f"https://api.rememberizer.ai/api/v1/vector-stores/{vector_store_id}/documents/search",
headers=headers,
params=params
)
data = response.json()
print(data)
search_vector_store(
'vs_abc123',
'How to integrate our product with third-party systems',
5,
1,
1
)require 'net/http'
require 'uri'
require 'json'
def search_vector_store(vector_store_id, query, num_results=5, prev_chunks=1, next_chunks=1)
uri = URI("https://api.rememberizer.ai/api/v1/vector-stores/#{vector_store_id}/documents/search")
params = {
q: query,
n: num_results,
prev_chunks: prev_chunks,
next_chunks: next_chunks
}
uri.query = URI.encode_www_form(params)
request = Net::HTTP::Get.new(uri)
request['x-api-key'] = 'YOUR_API_KEY'
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
response = http.request(request)
data = JSON.parse(response.body)
puts data
end
search_vector_store(
'vs_abc123',
'How to integrate our product with third-party systems',
5,
1,
1
)경로 매개변수
vector-store-id
문자열
필수. 검색할 벡터 저장소의 ID입니다.
쿼리 매개변수
q
문자열
필수. 검색 쿼리 텍스트.
n
정수
반환할 결과 수. 기본값: 10.
t
숫자
일치 임계값. 기본값: 0.7.
prev_chunks
정수
일치하는 청크 이전에 포함할 청크 수. 기본값: 0.
next_chunks
정수
일치하는 청크 이후에 포함할 청크 수. 기본값: 0.
응답 형식
{
"vector_store": {
"id": "vs_abc123",
"name": "제품 문서"
},
"matched_chunks": [
{
"document": {
"id": 1234,
"name": "통합 가이드.pdf",
"type": "application/pdf",
"size": 250000,
"indexed_on": "2023-06-15T10:30:00Z",
"vector_store": "vs_abc123",
"created": "2023-06-15T10:15:00Z",
"modified": "2023-06-15T10:30:00Z"
},
"matched_content": "우리 제품은 서드파티 시스템을 위한 여러 통합 옵션을 제공합니다. 주요 방법은 OAuth2 인증을 지원하는 RESTful API를 통한 것입니다. 또한 Python, JavaScript 및 Java에서 사용할 수 있는 SDK를 사용할 수 있습니다.",
"distance": 0.123
},
// ... 더 많은 일치하는 청크
]
}인증
이 엔드포인트는 x-api-key 헤더에 API 키를 사용하여 인증이 필요합니다.
오류 응답
400
잘못된 요청 - 필수 매개변수가 누락되었거나 형식이 잘못됨
401
인증되지 않음 - 잘못되었거나 누락된 API 키
404
찾을 수 없음 - 벡터 저장소를 찾을 수 없음
500
내부 서버 오류
검색 최적화 팁
컨텍스트 윈도우
prev_chunks 및 next_chunks 매개변수를 사용하여 각 일치 항목에 포함되는 컨텍스트의 양을 제어합니다:
정확한 일치를 위해 둘 다 0으로 설정
최소한의 컨텍스트가 있는 일치를 위해 둘 다 1-2로 설정
상당한 컨텍스트가 있는 일치를 위해 둘 다 3-5로 설정
일치 임계값
t 매개변수는 일치 항목이 얼마나 엄격하게 필터링되는지를 제어합니다:
높은 값(예: 0.9)은 매우 가까운 일치 항목만 반환합니다
낮은 값(예: 0.5)은 더 다양한 일치 항목을 반환합니다
기본값(0.7)은 균형 잡힌 접근 방식을 제공합니다
배치 작업
고속 처리 애플리케이션을 위해 Rememberizer는 벡터 저장소에서 효율적인 배치 작업을 지원합니다. 이러한 방법은 여러 검색 쿼리를 처리할 때 성능을 최적화합니다.
배치 검색 구현
import requests
import time
import concurrent.futures
def batch_search_vector_store(vector_store_id, queries, num_results=5, batch_size=10):
"""
벡터 저장소에 대해 배치 검색 수행
Args:
vector_store_id: 검색할 벡터 저장소의 ID
queries: 검색 쿼리 문자열 목록
num_results: 쿼리당 결과 수
batch_size: 병렬 요청 수
Returns:
검색 결과 목록
"""
headers = {
"x-api-key": "YOUR_API_KEY"
}
results = []
# API를 과부하하지 않도록 배치로 처리
for i in range(0, len(queries), batch_size):
batch_queries = queries[i:i+batch_size]
with concurrent.futures.ThreadPoolExecutor(max_workers=batch_size) as executor:
futures = []
for query in batch_queries:
params = {
"q": query,
"n": num_results,
"prev_chunks": 1,
"next_chunks": 1
}
# 스레드 풀에 요청 제출
future = executor.submit(
requests.get,
f"https://api.rememberizer.ai/api/v1/vector-stores/{vector_store_id}/documents/search",
headers=headers,
params=params
)
futures.append(future)
# 모든 future에서 결과 수집
for future in futures:
response = future.result()
if response.status_code == 200:
results.append(response.json())
else:
results.append({"error": f"상태 코드로 실패: {response.status_code}"})
# 비율 제한을 피하기 위해 배치 간 지연 추가
if i + batch_size < len(queries):
time.sleep(1)
return results
# 예제 사용법
queries = [
"REST API와의 통합",
"인증 프로토콜",
"프로덕션에 배포하는 방법",
"성능 최적화 기법",
"오류 처리 모범 사례"
]
search_results = batch_search_vector_store("vs_abc123", queries, num_results=3, batch_size=5)/**
* 벡터 저장소에 대해 배치 검색 수행
*
* @param {string} vectorStoreId - 벡터 저장소 ID
* @param {string[]} queries - 검색 쿼리 목록
* @param {Object} options - 구성 옵션
* @returns {Promise<Array>} - 검색 결과 목록
*/
async function batchSearchVectorStore(vectorStoreId, queries, options = {}) {
const {
numResults = 5,
batchSize = 10,
delayBetweenBatches = 1000,
prevChunks = 1,
nextChunks = 1,
distanceThreshold = 0.7
} = options;
const results = [];
const apiKey = 'YOUR_API_KEY';
// API 부하 관리를 위해 배치로 처리
for (let i = 0; i < queries.length; i += batchSize) {
const batchQueries = queries.slice(i, i + batchSize);
// 병렬 요청을 위한 프로미스 배열 생성
const batchPromises = batchQueries.map(query => {
const url = new URL(`https://api.rememberizer.ai/api/v1/vector-stores/${vectorStoreId}/documents/search`);
url.searchParams.append('q', query);
url.searchParams.append('n', numResults);
url.searchParams.append('prev_chunks', prevChunks);
url.searchParams.append('next_chunks', nextChunks);
url.searchParams.append('t', distanceThreshold);
return fetch(url.toString(), {
method: 'GET',
headers: {
'x-api-key': apiKey
}
})
.then(response => {
if (response.ok) {
return response.json();
} else {
return { error: `상태: ${response.status}로 실패했습니다.` };
}
})
.catch(error => {
return { error: error.message };
});
});
// 배치 내 모든 요청이 완료될 때까지 대기
const batchResults = await Promise.all(batchPromises);
results.push(...batchResults);
// 속도 제한을 피하기 위해 배치 간 지연 추가
if (i + batchSize < queries.length) {
await new Promise(resolve => setTimeout(resolve, delayBetweenBatches));
}
}
return results;
}
// 예제 사용법
const queries = [
"REST API와의 통합",
"인증 프로토콜",
"프로덕션에 배포하는 방법",
"성능 최적화 기법",
"오류 처리 모범 사례"
];
const options = {
numResults: 3,
batchSize: 5,
delayBetweenBatches: 1000,
prevChunks: 1,
nextChunks: 1
};
batchSearchVectorStore("vs_abc123", queries, options)
.then(results => console.log(results))
.catch(error => console.error("배치 검색 실패:", error));require 'net/http'
require 'uri'
require 'json'
require 'concurrent'
# 벡터 저장소에 대한 배치 검색 수행
#
# @param vector_store_id [String] 벡터 스토어의 ID
# @param queries [Array<String>] 검색 쿼리 목록
# @param num_results [Integer] 쿼리당 결과 수
# @param batch_size [Integer] 병렬 요청 수
# @param delay_between_batches [Float] 배치 간 대기할 초
# @return [Array] 각 쿼리에 대한 검색 결과
def batch_search_vector_store(vector_store_id, queries, num_results: 5, batch_size: 10, delay_between_batches: 1.0)
results = []
api_key = 'YOUR_API_KEY'
# 배치로 처리
queries.each_slice(batch_size).with_index do |batch_queries, batch_index|
# 동시 실행을 위한 스레드 풀 생성
pool = Concurrent::FixedThreadPool.new(batch_size)
futures = []
batch_queries.each do |query|
# 각 요청을 스레드 풀에 제출
futures << Concurrent::Future.execute(executor: pool) do
uri = URI("https://api.rememberizer.ai/api/v1/vector-stores/#{vector_store_id}/documents/search")
params = {
q: query,
n: num_results,
prev_chunks: 1,
next_chunks: 1
}
uri.query = URI.encode_www_form(params)
request = Net::HTTP::Get.new(uri)
request['x-api-key'] = api_key
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
begin
response = http.request(request)
if response.code.to_i == 200
JSON.parse(response.body)
else
{ "error" => "상태 코드로 실패: #{response.code}" }
end
rescue => e
{ "error" => e.message }
end
end
end
# 모든 futures에서 결과 수집
batch_results = futures.map(&:value)
results.concat(batch_results)
# 배치 간 지연 추가
if batch_index < (queries.length / batch_size.to_f).ceil - 1
sleep(delay_between_batches)
end
end
pool.shutdown
results
end
# 예제 사용법
queries = [
"REST API와의 통합",
"인증 프로토콜",
"프로덕션에 배포하는 방법",
"성능 최적화 기법",
"오류 처리 모범 사례"
]
results = batch_search_vector_store(
"vs_abc123",
queries,
num_results: 3,
batch_size: 5
)
puts results배치 작업을 위한 성능 최적화
벡터 저장소 검색을 위한 배치 작업을 구현할 때 다음의 모범 사례를 고려하세요:
최적의 배치 크기: 대부분의 애플리케이션에서는 5-10개의 쿼리를 병렬로 처리하는 것이 처리량과 자원 사용 간의 좋은 균형을 제공합니다.
속도 제한 인식: API 속도 제한에 걸리지 않도록 배치 간에 지연 메커니즘(일반적으로 1-2초)을 포함하세요.
오류 처리: 배치 내에서 실패할 수 있는 개별 쿼리에 대해 강력한 오류 처리를 구현하세요.
연결 관리: 대량의 애플리케이션의 경우 오버헤드를 줄이기 위해 연결 풀링을 구현하세요.
타임아웃 구성: 전체 배치가 차단되지 않도록 각 요청에 적절한 타임아웃을 설정하세요.
결과 처리: 모든 결과를 기다리기보다는 결과가 제공되는 대로 비동기적으로 처리하는 것을 고려하세요.
모니터링: 평균 응답 시간 및 성공률과 같은 성능 지표를 추적하여 최적화 기회를 식별하세요.
쿼리 볼륨이 매우 높은 프로덕션 애플리케이션의 경우, 대규모 배치를 효율적으로 관리하기 위해 작업 프로세스가 있는 큐 시스템을 구현하는 것을 고려하세요.
이 엔드포인트는 의미적 유사성을 사용하여 벡터 저장소를 검색할 수 있게 해줍니다. 이는 쿼리와 개념적으로 관련된 문서를 반환하며, 정확한 키워드를 포함하지 않더라도 가능합니다. 이는 자연어 쿼리 및 질문 응답에 특히 강력합니다.
Last updated