Agent Retrieval 벡터 스토어
Agent Retrieval(이전 명칭: Vector Search 2.0)은 Gemini Enterprise Agent Platform에서 제공하는 Google의 관리형 벡터 데이터베이스이며, 일반적으로 vectorsearch.googleapis.com에서 사용할 수 있습니다. adk-rag의 agent-retrieval 기능은 이를 대상으로 [VectorStore] trait를 구현하므로, pgvector, Qdrant, LanceDB 및 SurrealDB 백엔드와 마찬가지로 기존 RAG 파이프라인에 그대로 통합됩니다.
[dependencies]
adk-rag = { version = "2.1.0", features = ["agent-retrieval"] }
빠른 시작
use adk_rag::VectorStore;
use adk_rag::agent_retrieval::{AgentRetrievalConfig, AgentRetrievalStore};
async fn run() -> adk_rag::Result<()> {
// Application Default Credentials; project/location from the environment.
let store = AgentRetrievalStore::new_with_adc(AgentRetrievalConfig::from_env()?)?;
store.create_collection("docs", 768).await?;
// upsert / search / delete exactly as with any other VectorStore backend
Ok(())
}
플랫폼에 매핑하기
| 트레이트 작업 | 에이전트 검색 호출 |
|---|---|
create_collection | POST {parent}/collections (장기 실행 작업; ALREADY_EXISTS은 no-op) |
delete_collection | DELETE {collection} (장기 실행 작업; NOT_FOUND은 no-op) |
upsert | dataObjects:batchCreate (≤1000, 원자적), 마지막 쓰기가 승리하도록 객체별 create-else-patch로 폴백 |
delete | dataObjects:batchDelete, ID가 없으면 객체별 delete로 폴백 |
search | vectorSearch 쿼리를 사용하는 dataObjects:search |
청크 텍스트와 메타데이터는 벡터와 함께 Data Object 내에 저장되므로 별도의 동반 저장소가 필요하지 않습니다. 저장소는 BYOE(사용자 지정 임베딩 사용) 모드로 실행됩니다. 임베딩은 adk-rag의 임베더 파이프라인에서 생성되므로 백엔드 간 동작이 동일하게 유지됩니다. 점수는 DOT_PRODUCT 거리이며, 정규화된 임베딩에서는 코사인 유사도와 같으므로 값이 높을수록 관련성이 높습니다.
구성
| 옵션 | 효과 |
|---|---|
with_collection_prefix("rag-") | 모든 컬렉션 ID에 접두사를 추가하여 이 저장소의 컬렉션을 격리합니다 |
with_existing_collections_only(true) | create_collection은 컬렉션을 생성하는 대신 해당 컬렉션이 존재하는지 확인합니다. 플랫폼 도구를 사용하여 사전 프로비저닝하는 배포에 적합합니다 |
with_endpoint(...) | 사용자 지정 API 원본(테스트를 위해 루프백 HTTP 허용) |
컬렉션 이름은 RFC 1035 레이블로 정제되므로(소문자로 변환하고 잘못된 문자는 하이픈으로 변경), my_docs은 컬렉션 ID my-docs이 됩니다. 정제 결과가 동일한 서로 다른 이름은 충돌하므로 대소문자나 구두점 외에도 차이가 있는 이름을 선택하세요.
트레이트를 넘어서
구체적인 AgentRetrievalStore을 보유한 호출자의 경우, hybrid_search는 하나의 dataObjects:batchSearch 호출에서 시맨틱 쿼리와 키워드 쿼리를 실행하고 상호 순위 융합으로 순위가 매겨진 목록을 반환합니다.
# use adk_rag::agent_retrieval::{AgentRetrievalConfig, AgentRetrievalStore};
# async fn run(store: AgentRetrievalStore, embedding: Vec<f32>) -> adk_rag::Result<()> {
let results = store
.hybrid_search("docs", &embedding, "quarterly revenue", 10, (0.6, 0.4))
.await?;
# Ok(())
# }
플랫폼 참고 사항
- 리전: Agent Retrieval은 리전별로 제공되며, 지원되는 리전에는
us-central1,us-east4,us-west1,europe-north1,europe-west2,europe-west4,asia-east1,asia-northeast1,asia-southeast1이 포함됩니다. - CMEK: 독립 실행형 Agent Retrieval은 컬렉션의
encryptionSpec을 통해 고객 관리 암호화 키를 지원합니다(생성 시 변경할 수 없음). 플랫폼 도구로 CMEK 컬렉션을 사전 프로비저닝하고with_existing_collections_only(true)을 사용하세요. - Vector Search 1.0은 의도적으로 구현되지 않았습니다. 해당 제품의 인덱스/엔드포인트 인프라 모델은
VectorStore트레이트에 적합하지 않으며, Google은 Agent Retrieval을 그 후속 제품으로 소개하고 있습니다. - 할당량: 일괄 쓰기는 요청당 객체 1000개로 제한되며 원자적으로 처리됩니다. 저장소는 더 큰 업서트를 자동으로 여러 청크로 나눕니다.
테스트
백엔드는 모든 adk-rag 백엔드가 실행하는 공유 VectorStore 계약 및 속성 테스트 모음을 통과하므로, 다른 저장소와 동작상 호환됩니다. #[ignore] 라이브 테스트는 고유한 이름의 컬렉션을 생성하고 삭제합니다(pgvector 및 Qdrant 라이브 테스트와 마찬가지로 데이터 플레인에서 수행).
GOOGLE_CLOUD_PROJECT=my-project GOOGLE_CLOUD_LOCATION=us-central1 \
cargo test -p adk-rag --features agent-retrieval -- --ignored