1. 개요
다양한 업계에서 문맥 검색은 애플리케이션의 핵심이 되는 중요한 기능입니다. 검색 증강 생성은 오랫동안 생성형 AI 기반 검색 메커니즘을 통해 이 중요한 기술 혁신의 핵심 동인 역할을 해 왔습니다. 대규모 컨텍스트 창과 인상적인 출력 품질을 갖춘 생성형 모델이 AI를 변화시키고 있습니다. RAG는 AI 애플리케이션과 상담사에게 컨텍스트를 주입하여 구조화된 데이터베이스 또는 다양한 미디어의 정보에 기반하도록 하는 체계적인 방법을 제공합니다. 이러한 문맥 데이터는 사실의 명확성과 출력의 정확성에 매우 중요하지만, 결과의 정확성은 어느 정도일까요? 비즈니스에 이러한 문맥적 일치 및 관련성의 정확성이 크게 영향을 미치나요? 그렇다면 이 프로젝트가 마음에 드실 겁니다.
벡터 검색의 비밀은 벡터 검색을 빌드하는 것이 아니라 벡터 일치가 실제로 좋은지 아는 것입니다. 검색 결과 목록을 멍하니 바라보며'이거 작동하는 거야?'라고 생각해 본 적이 있을 것입니다. 벡터 일치의 품질을 실제로 평가하는 방법을 자세히 알아보겠습니다. 'RAG에서 어떤 점이 바뀌었나요?'라고 궁금하신가요? 모든 음악 오랫동안 검색 증강 생성 (RAG)은 유망하지만 도달하기 어려운 목표처럼 느껴졌습니다. 이제 드디어 미션 크리티컬 작업에 필요한 성능과 안정성을 갖춘 RAG 애플리케이션을 빌드할 수 있는 도구가 마련되었습니다.
이제 다음 세 가지에 대한 기본적인 이해를 얻었습니다.
- 상담사에게 문맥 검색이 의미하는 바와 벡터 검색을 사용하여 이를 실행하는 방법
- 또한 데이터 범위 내에서, 즉 데이터베이스 자체에서 벡터 검색을 실행하는 방법을 자세히 살펴봤습니다. 혹시 모르는 경우 모든 Google Cloud 데이터베이스에서 이를 지원합니다.
- Google은 ScaNN 색인을 기반으로 하는 AlloyDB 벡터 검색 기능을 사용하여 이러한 경량 벡터 검색 RAG 기능을 높은 성능과 품질로 실행하는 방법을 다른 업체보다 한 단계 더 나아가 알려드렸습니다.
기본, 중급, 약간 고급 수준의 RAG 실험을 진행하지 않았다면 여기, 여기, 여기의 세 가지 실험을 나열된 순서대로 읽어보시기 바랍니다.
특허 검색은 사용자가 검색 텍스트와 문맥적으로 관련 있는 특허를 찾는 데 도움을 줍니다. Google은 이미 이전에 이 버전을 빌드했습니다. 이제 애플리케이션에 품질이 관리되는 문맥 검색을 사용 설정하는 새로운 고급 RAG 기능으로 빌드합니다. 시작해 볼까요?
아래 그림은 이 애플리케이션에서 발생하는 전반적인 흐름을 보여줍니다.~
목표
사용자가 성능과 품질이 개선된 텍스트 설명을 기반으로 특허를 검색할 수 있도록 허용하면서 AlloyDB의 최신 RAG 기능을 사용하여 생성된 일치 항목의 품질을 평가할 수 있습니다.
빌드할 항목
이 실습에서는 다음을 수행합니다.
- AlloyDB 인스턴스 만들기 및 특허 공개 데이터 세트 로드
- 메타데이터 색인 및 ScaNN 색인 만들기
- ScaNN의 인라인 필터링 메서드를 사용하여 AlloyDB에 고급 벡터 검색 구현
- 재현율 평가 기능 구현
- 쿼리 응답 평가
요구사항
2. 시작하기 전에
프로젝트 만들기
- Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
- Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요 .
- Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다. Google Cloud 콘솔 상단에서 Cloud Shell 활성화를 클릭합니다.
- Cloud Shell에 연결되면 다음 명령어를 사용하여 이미 인증되었는지, 프로젝트가 프로젝트 ID로 설정되어 있는지 확인합니다.
gcloud auth list
- Cloud Shell에서 다음 명령어를 실행하여 gcloud 명령어가 프로젝트를 알고 있는지 확인합니다.
gcloud config list project
- 프로젝트가 설정되지 않은 경우 다음 명령어를 사용하여 설정합니다.
gcloud config set project <YOUR_PROJECT_ID>
- 필요한 API를 사용 설정합니다. Cloud Shell 터미널에서 gcloud 명령어를 사용할 수 있습니다.
gcloud services enable alloydb.googleapis.com compute.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudfunctions.googleapis.com aiplatform.googleapis.com
gcloud 명령어 대신 콘솔을 통해 각 제품을 검색하거나 이 링크를 사용할 수 있습니다.
gcloud 명령어 및 사용법은 문서를 참조하세요.
3. 데이터베이스 설정
이 실습에서는 AlloyDB를 특허 데이터의 데이터베이스로 사용합니다. 클러스터를 사용하여 데이터베이스 및 로그와 같은 모든 리소스를 보관합니다. 각 클러스터에는 데이터에 대한 액세스 포인트를 제공하는 기본 인스턴스가 있습니다. 테이블에는 실제 데이터가 포함됩니다.
특허 데이터 세트가 로드될 AlloyDB 클러스터, 인스턴스, 테이블을 만들어 보겠습니다.
클러스터 및 인스턴스 만들기
- Cloud 콘솔에서 AlloyDB 페이지로 이동합니다. Cloud Console에서 대부분의 페이지를 찾는 가장 쉬운 방법은 콘솔의 검색창을 사용하는 것입니다.
- 이 페이지에서 클러스터 만들기를 선택합니다.
- 아래와 같은 화면이 표시됩니다. 다음 값으로 클러스터 및 인스턴스를 만듭니다 (저장소에서 애플리케이션 코드를 클론하는 경우 값이 일치하는지 확인).
- 클러스터 ID: '
vector-cluster
' - 비밀번호: "
alloydb
" - PostgreSQL 15 / 최신 버전 권장
- 지역: "
us-central1
" - 네트워킹: '
default
'
- 기본 네트워크를 선택하면 아래와 같은 화면이 표시됩니다.
연결 설정을 선택합니다.
- 여기에서 '자동으로 할당된 IP 범위 사용'을 선택하고 계속을 클릭합니다. 정보를 검토한 후 '연결 만들기'를 선택합니다.
- 네트워크가 설정되면 클러스터를 계속 만들 수 있습니다. 클러스터 만들기를 클릭하여 아래와 같이 클러스터 설정을 완료합니다.
인스턴스 ID (클러스터 / 인스턴스 구성 시 확인 가능)를 다음으로 변경해야 합니다.
vector-instance
. 변경할 수 없는 경우 향후 모든 참조에서 인스턴스 ID를 사용해야 합니다.
클러스터를 만드는 데 약 10분이 소요됩니다. 완료되면 방금 만든 클러스터의 개요를 보여주는 화면이 표시됩니다.
4. 데이터 수집
이제 매장 데이터가 포함된 표를 추가하겠습니다. AlloyDB로 이동하여 기본 클러스터를 선택한 다음 AlloyDB Studio를 선택합니다.
인스턴스 생성이 완료될 때까지 기다려야 할 수 있습니다. 클러스터가 생성되면 클러스터를 만들 때 만든 사용자 인증 정보를 사용하여 AlloyDB에 로그인합니다. PostgreSQL에 인증할 때 다음 데이터를 사용합니다.
- 사용자 이름 : '
postgres
' - 데이터베이스 : '
postgres
' - 비밀번호 : '
alloydb
'
AlloyDB 스튜디오에 성공적으로 인증하면 편집기에 SQL 명령어가 입력됩니다. 마지막 창 오른쪽에 있는 더하기 기호를 사용하여 여러 편집기 창을 추가할 수 있습니다.
필요에 따라 실행, 형식 지정, 지우기 옵션을 사용하여 편집기 창에 AlloyDB 명령어를 입력합니다.
확장 프로그램 사용 설정
이 앱을 빌드하는 데 pgvector
및 google_ml_integration
확장 프로그램을 사용합니다. pgvector 확장 프로그램을 사용하면 벡터 임베딩을 저장하고 검색할 수 있습니다. google_ml_integration 확장 프로그램은 Vertex AI 예측 엔드포인트에 액세스하여 SQL에서 예측을 가져오는 데 사용하는 함수를 제공합니다. 다음 DDL을 실행하여 이러한 확장 프로그램을 사용 설정합니다.
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;
데이터베이스에서 사용 설정된 확장 프로그램을 확인하려면 다음 SQL 명령어를 실행합니다.
select extname, extversion from pg_extension;
테이블 만들기
AlloyDB Studio에서 아래 DDL 문을 사용하여 테이블을 만들 수 있습니다.
CREATE TABLE patents_data ( id VARCHAR(25), type VARCHAR(25), number VARCHAR(20), country VARCHAR(2), date VARCHAR(20), abstract VARCHAR(300000), title VARCHAR(100000), kind VARCHAR(5), num_claims BIGINT, filename VARCHAR(100), withdrawn BIGINT, abstract_embeddings vector(768)) ;
abstract_embeddings 열을 사용하면 텍스트의 벡터 값을 저장할 수 있습니다.
권한 부여
아래 문을 실행하여 '삽입' 함수에 실행 권한을 부여합니다.
GRANT EXECUTE ON FUNCTION embedding TO postgres;
AlloyDB 서비스 계정에 Vertex AI 사용자 역할 부여
Google Cloud IAM 콘솔에서 AlloyDB 서비스 계정 (service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com 형식)에 'Vertex AI 사용자' 역할에 대한 액세스 권한을 부여합니다. PROJECT_NUMBER에는 프로젝트 번호가 포함됩니다.
또는 Cloud Shell 터미널에서 아래 명령어를 실행할 수 있습니다.
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
데이터베이스에 특허 데이터 로드
BigQuery의 Google 특허 공개 데이터 세트가 데이터 세트로 사용됩니다. AlloyDB Studio를 사용하여 쿼리를 실행합니다. 데이터는 이 insert_scripts.sql
파일로 가져와서 실행하여 특허 데이터를 로드합니다.
- Google Cloud 콘솔에서 AlloyDB 페이지를 엽니다.
- 새로 만든 클러스터를 선택하고 인스턴스를 클릭합니다.
- AlloyDB 탐색 메뉴에서 AlloyDB 스튜디오를 클릭합니다. 사용자 인증 정보로 로그인합니다.
- 오른쪽에 있는 새 탭 아이콘을 클릭하여 새 탭을 엽니다.
- 위에 언급된
insert_scripts.sql
스크립트에서insert
쿼리 문을 편집기에 복사합니다. 이 사용 사례를 빠르게 데모하려면 10~50개의 삽입 문을 복사하면 됩니다. - 실행을 클릭합니다. 쿼리 결과가 결과 테이블에 표시됩니다.
참고: 삽입 스크립트에 데이터가 많이 포함되어 있을 수 있습니다. 삽입 스크립트에 임베딩이 포함되어 있기 때문입니다. GitHub에서 파일을 로드하는 데 문제가 있는 경우 '원본 보기'를 클릭합니다. 이는 Google Cloud에 무료 체험 크레딧 결제 계정을 사용하는 경우 앞으로의 단계에서 몇 개(예: 최대 20~25개)가 아닌 여러 임베딩을 생성하는 번거로움을 덜어드리기 위함입니다.
5. 특허 데이터의 임베딩 만들기
먼저 다음 샘플 쿼리를 실행하여 임베딩 함수를 테스트해 보겠습니다.
SELECT embedding('text-embedding-005', 'AlloyDB is a managed, cloud-hosted SQL database service.');
그러면 쿼리의 샘플 텍스트에 대한 부동 소수점 배열처럼 보이는 임베딩 벡터가 반환됩니다. 다음과 같이 표시됩니다.
abstract_embeddings 벡터 필드 업데이트
abstract_embeddings 데이터를 삽입 스크립트의 일부로 삽입하지 않은 경우에만 아래 DML을 실행하여 테이블의 특허 개요를 해당 임베딩으로 업데이트합니다.
UPDATE patents_data set abstract_embeddings = embedding( 'text-embedding-005', abstract);
Google Cloud에 무료 체험 크레딧 결제 계정을 사용하는 경우 몇 개 (예: 최대 20~25개) 이상의 임베딩을 생성하는 데 문제가 있을 수 있습니다. 따라서 삽입 스크립트에 이미 임베딩을 포함했으며 '데이터베이스에 특허 데이터 로드' 단계를 완료했다면 테이블에 로드되어 있어야 합니다.
6. AlloyDB의 새로운 기능으로 고급 RAG 실행
이제 테이블, 데이터, 임베딩이 모두 준비되었으므로 사용자 검색 텍스트에 대한 실시간 벡터 검색을 실행해 보겠습니다. 다음 쿼리를 실행하여 이를 테스트할 수 있습니다.
SELECT id || ' - ' || title as title FROM patents_data ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;
이 쿼리에서
- 사용자가 검색한 텍스트는 'Sentiment Analysis'입니다.
- text-embedding-005 모델을 사용하여 embedding() 메서드에서 텍스트를 임베딩으로 변환합니다.
- "<=>"는 COSINE SIMILARITY 거리 메서드의 사용을 나타냅니다.
- 데이터베이스에 저장된 벡터와 호환되도록 임베딩 메서드의 결과를 벡터 유형으로 변환합니다.
- LIMIT 10은 검색 텍스트와 가장 일치하는 10개를 선택한다는 것을 나타냅니다.
AlloyDB는 벡터 검색 RAG를 한 단계 업그레이드합니다.
이번 업데이트에서는 많은 기능이 도입되었습니다. 개발자 중심의 두 가지 기능은 다음과 같습니다.
- 인라인 필터링
- 재현율 평가자
인라인 필터링
이전에는 개발자가 벡터 검색 쿼리를 실행하고 필터링 및 검색을 처리해야 했습니다. AlloyDB 쿼리 최적화 도구는 필터가 있는 쿼리를 실행하는 방법을 선택합니다. 인라인 필터링은 AlloyDB 쿼리 최적화 도구가 메타데이터 필터링 조건과 벡터 검색을 모두 평가할 수 있는 새로운 쿼리 최적화 기법으로, 메타데이터 열의 벡터 색인과 색인을 모두 활용합니다. 이를 통해 리콜 성능이 향상되어 개발자는 AlloyDB가 제공하는 기능을 즉시 활용할 수 있습니다.
인라인 필터링은 선택성이 중간인 케이스에 가장 적합합니다. AlloyDB는 벡터 색인을 검색할 때 메타데이터 필터링 조건 (일반적으로 WHERE 절에서 처리되는 쿼리의 기능 필터)과 일치하는 벡터의 거리만 계산합니다. 이렇게 하면 이러한 쿼리의 성능이 크게 개선되어 사후 필터 또는 사전 필터의 이점을 보완할 수 있습니다.
- pgvector 확장 프로그램 설치 또는 업데이트
CREATE EXTENSION IF NOT EXISTS vector WITH VERSION '0.8.0.google-3';
pgvector 확장 프로그램이 이미 설치된 경우 벡터 확장 프로그램을 버전 0.8.0.google-3 이상으로 업그레이드하여 검색 평가자 기능을 사용합니다.
ALTER EXTENSION vector UPDATE TO '0.8.0.google-3';
이 단계는 벡터 확장 프로그램이 <0.8.0.google-3>인 경우에만 실행해야 합니다.
중요 사항: 행 수가 100개 미만인 경우 ScaNN 색인은 적용되지 않으므로 처음부터 ScaNN 색인을 만들 필요가 없습니다. 이 경우 다음 단계를 건너뜁니다.
- ScaNN 색인을 만들려면 alloydb_scann 확장 프로그램을 설치합니다.
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
- 먼저 색인이 없고 인라인 필터가 사용 설정되지 않은 상태에서 벡터 검색 쿼리를 실행합니다.
SELECT id || ' - ' || title as title FROM patents_data
WHERE num_claims >= 15
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;
결과는 다음과 유사합니다.
- Explain Analyze를 실행합니다(색인 또는 인라인 필터링 없음).
실행 시간은 2.4ms입니다.
- num_claims 필드로 필터링할 수 있도록 일반 색인을 만들어 보겠습니다.
CREATE INDEX idx_patents_data_num_claims ON patents_data (num_claims);
- 특허 검색 애플리케이션의 ScaNN 색인을 만들어 보겠습니다. AlloyDB Studio에서 다음을 실행합니다.
CREATE INDEX patent_index ON patents_data
USING scann (abstract_embeddings cosine)
WITH (num_leaves=32);
중요 사항: (num_leaves=32)
는 행이 1,000개를 초과하는 총 데이터 세트에 적용됩니다. 행 수가 100개 미만인 경우 색인이 적용되지 않으므로 처음부터 색인을 만들 필요가 없습니다.
- ScaNN 색인에서 인라인 필터링을 사용 설정합니다.
SET scann.enable_inline_filtering = on
- 이제 필터와 벡터 검색이 포함된 동일한 쿼리를 실행해 보겠습니다.
SELECT id || ' - ' || title as title FROM patents_data
WHERE num_claims >= 15
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;
보시다시피 동일한 벡터 검색의 실행 시간이 크게 단축되었습니다. 벡터 검색에 인라인 필터링이 적용된 ScaNN 색인을 통해 이 작업이 가능해졌습니다.
다음으로 이 ScaNN 지원 벡터 검색의 재현율을 평가해 보겠습니다.
재현율 평가자
유사 검색의 재현율은 검색에서 검색된 관련 인스턴스의 비율(즉, 참양성 수)입니다. 검색 품질을 측정하는 데 가장 일반적으로 사용되는 측정항목입니다. 검색 결과 손실의 한 가지 원인은 근사 최근접 이웃 검색(aNN)과 k(정확한) 최근접 이웃 검색(KNN)의 차이에서 비롯됩니다. AlloyDB의 ScaNN과 같은 벡터 색인은 aNN 알고리즘을 구현하므로 검색 결과의 정확성을 약간 떨어뜨리는 대신 대규모 데이터 세트에서 벡터 검색 속도를 높일 수 있습니다. 이제 AlloyDB를 사용하면 개별 쿼리에 대해 데이터베이스에서 직접 이 절충점을 측정하고 시간이 지남에 따라 안정적으로 유지되도록 할 수 있습니다. 이 정보에 따라 쿼리 및 색인 매개변수를 업데이트하여 더 나은 결과와 성능을 얻을 수 있습니다.
검색 결과 리콜의 로직은 무엇인가요?
벡터 검색의 맥락에서 재현율은 색인에서 반환하는 실제 최근접 이웃인 벡터의 비율을 나타냅니다. 예를 들어 최근접 이웃 20개에 대한 최근접 이웃 쿼리에서 최근접 이웃 '정답'을 19개 반환하면 재현율은 19/20x100 = 95%가 됩니다. 재현율은 검색 품질에 사용되는 측정항목으로, 객관적으로 쿼리 벡터에 가장 가까운 반환 결과의 비율로 정의됩니다.
evaluate_query_recall 함수를 사용하여 지정된 구성의 벡터 색인에서 벡터 쿼리의 재현율을 확인할 수 있습니다. 이 함수를 사용하면 원하는 벡터 쿼리 검색 결과를 얻기 위해 매개변수를 조정할 수 있습니다.
중요사항:
다음 단계에서 HNSW 색인에 대한 권한이 거부되는 오류가 발생하면 지금은 이 전체 검색 결과 평가 섹션을 건너뜁니다. 이 Codelab이 문서화될 때 방금 출시되었으므로 현재 액세스 제한과 관련이 있을 수 있습니다.
- ScaNN 색인 및 HNSW 색인에서 색인 스캔 사용 설정 플래그를 설정합니다.
SET scann.enable_indexscan = on
SET hnsw.enable_index_scan = on
- AlloyDB Studio에서 다음 쿼리를 실행합니다.
SELECT
*
FROM
evaluate_query_recall($$
SELECT
id || ' - ' || title AS title,
abstract
FROM
patents_data
where num_claims >= 15
ORDER BY
abstract_embeddings <=> embedding('text-embedding-005',
'sentiment analysis')::vector
LIMIT 25 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
evaluate_query_recall 함수는 쿼리를 매개변수로 사용하고 검색 실적을 반환합니다. 성능을 확인하는 데 사용한 쿼리를 함수 입력 쿼리로 사용하고 있습니다. SCaNN을 색인 메서드로 추가했습니다. 추가 매개변수 옵션은 문서를 참고하세요.
지금까지 사용해 온 이 벡터 검색 쿼리의 검색 결과는 다음과 같습니다.
RECALL이 70%인 것으로 확인됩니다. 이제 이 정보를 사용하여 색인 매개변수, 메서드, 쿼리 매개변수를 변경하고 이 벡터 검색의 검색 결과를 개선할 수 있습니다.
7. 수정된 쿼리 및 색인 매개변수로 테스트
이제 수신된 리콜을 기반으로 쿼리 매개변수를 수정하여 쿼리를 테스트해 보겠습니다.
- 결과 집합의 행 수를 이전의 25개에서 7개로 수정했습니다. RECALL이 86%로 개선되었습니다.
즉, 사용자의 검색 상황에 따라 실시간으로 사용자가 볼 수 있는 검색결과 수를 조정하여 검색결과의 관련성을 개선할 수 있습니다.
- 색인 매개변수를 수정하여 다시 시도해 보겠습니다.
이 테스트에서는 '코사인' 유사성 거리 함수 대신 'L2 거리'를 사용합니다. 또한 검색 결과 세트 수가 증가하더라도 검색 결과 품질이 개선되는지 확인할 수 있도록 쿼리 제한을 10으로 변경하겠습니다.
[이전] 코사인 유사성 거리 함수를 사용하는 쿼리:
SELECT
*
FROM
evaluate_query_recall($$
SELECT
id || ' - ' || title AS title,
abstract
FROM
patents_data
where num_claims >= 15
ORDER BY
abstract_embeddings <=> embedding('text-embedding-005',
'sentiment analysis')::vector
LIMIT 10 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
매우 중요: '이 쿼리가 COSINE 유사성을 사용하는지 어떻게 알 수 있나요?'라고 물을 수 있습니다. 코사인 거리를 나타내는 데 "<=>"를 사용하여 거리 함수를 식별할 수 있습니다.
벡터 검색 거리 함수의 문서 링크
위 쿼리의 결과는 다음과 같습니다.
보시다시피 색인 로직을 변경하지 않아도 RECALL은 70%입니다. 인라인 필터링 섹션의 6단계에서 만든 ScaNN 색인('patent_index
')을 기억하시나요? 위 쿼리를 실행하는 동안 동일한 색인이 계속 유효합니다.
이제 다른 거리 함수 쿼리(L2 거리: <->)를 사용하여 색인을 만들어 보겠습니다.
drop index patent_index;
CREATE INDEX patent_index_L2 ON patents_data
USING scann (abstract_embeddings L2)
WITH (num_leaves=32);
drop index 문은 테이블에 불필요한 색인이 없도록 하기 위한 것입니다.
이제 벡터 검색 기능의 거리 함수를 변경한 후 다음 쿼리를 실행하여 RECALL을 평가할 수 있습니다.
[후] 코사인 유사성 거리 함수를 사용하는 쿼리:
SELECT
*
FROM
evaluate_query_recall($$
SELECT
id || ' - ' || title AS title,
abstract
FROM
patents_data
where num_claims >= 15
ORDER BY
abstract_embeddings <-> embedding('text-embedding-005',
'sentiment analysis')::vector
LIMIT 10 $$,
'{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
ARRAY['scann']);
위 쿼리의 결과는 다음과 같습니다.
90%의 회상 값 변환이 놀랍습니다.
원하는 검색 결과 수와 애플리케이션에서 사용하는 데이터 세트를 기반으로 색인에서 num_leaves와 같은 다른 매개변수를 변경할 수 있습니다.
8. 삭제
이 게시물에서 사용한 리소스의 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 따르세요.
- Google Cloud 콘솔에서 리소스 관리자 페이지로 이동합니다.
- 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
- 대화상자에서 프로젝트 ID를 입력하고 종료를 클릭하여 프로젝트를 삭제합니다.
- 또는 '클러스터 삭제' 버튼을 클릭하여 이 프로젝트용으로 방금 만든 AlloyDB 클러스터 (구성 시 클러스터에 us-central1을 선택하지 않은 경우 이 하이퍼링크의 위치 변경)를 삭제할 수도 있습니다.
9. 축하합니다
축하합니다. AlloyDB의 고급 벡터 검색을 사용하여 성능을 높이고 진정한 의미 기반의 문맥 특허 검색 쿼리를 빌드했습니다. 여기에서 논의한 ADK 및 모든 AlloyDB 항목을 사용하여 품질이 보장된 다중 도구 에이전트 애플리케이션을 구성하여 성능이 우수하고 품질이 우수한 특허 벡터 검색 및 분석기 에이전트를 만들었습니다. 여기에서 확인할 수 있습니다. https://youtu.be/Y9fvVY0yZTY
이 에이전트를 빌드하는 방법을 알아보려면 이 codelab을 참고하세요.