재무 문서와 같은 PDF 파일은 구조가 복잡하고 텍스트, 숫자, 표가 섞여 있어 RAG 파이프라인에서 사용하기 어려울 수 있습니다. 이 튜토리얼에서는 Document AI의 레이아웃 파서와 함께 AI.PARSE_DOCUMENT 함수를 사용하여 PDF 파일에서 추출한 주요 정보를 기반으로 RAG 파이프라인을 빌드하는 방법을 보여줍니다.
목표
이 튜토리얼에서는 다음 태스크를 다룹니다.- Cloud Storage 버킷을 만들고 샘플 PDF 파일을 업로드합니다.
- PDF 파일을 파싱하는 데 사용할 수 있는 Document AI 프로세서를 만듭니다.
AI.PARSE_DOCUMENT함수를 사용하여 PDF 콘텐츠를 청크로 파싱한 다음 해당 콘텐츠를 BigQuery 테이블에 작성합니다.- 파싱된 PDF 콘텐츠에서 임베딩을 생성한 후 해당 임베딩을 BigQuery 테이블에 작성하기 임베딩은 PDF 콘텐츠의 수치적 표현으로, PDF 콘텐츠에 대한 시맨틱 검색을 실행할 수 있도록 합니다.
- 임베딩에
VECTOR_SEARCH함수를 사용하여 의미적으로 유사한 PDF 콘텐츠를 식별합니다. AI.GENERATE함수를 사용하여 텍스트를 생성하고, 벡터 검색 결과를 사용하여 프롬프트 입력을 보강하고 결과를 개선하여 검색 증강 생성 (RAG) 수행하기
비용
이 문서에서는 비용이 청구될 수 있는 Google Cloud구성요소를 사용합니다.
- BigQuery: You incur costs for the data that you process in BigQuery.
- Gemini Enterprise Agent Platform: You incur costs for calls to Agent Platform models.
- Document AI: You incur costs for calls to the Document AI API.
- Cloud Storage: You incur costs for object storage in Cloud Storage.
프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요.
이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.
시작하기 전에
콘솔
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigQuery, BigQuery Connection, Vertex AI, Document AI, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigQuery, BigQuery Connection, Vertex AI, Document AI, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
프로젝트에 다음 역할이 있는지 확인합니다. 스토리지 관리자, Document AI 편집자, BigQuery 관리자, 프로젝트 IAM 관리자
역할 확인
-
Google Cloud 콘솔에서 IAM 페이지로 이동합니다.
IAM으로 이동 - 프로젝트를 선택합니다.
-
주 구성원 열에서 나 또는 내가 속한 그룹을 식별하는 모든 행을 찾습니다. 내가 속한 그룹을 알아보려면 관리자에게 문의하세요.
- 나를 지정하거나 포함하는 모든 행의 역할 열을 확인하여 역할 목록에 필요한 역할이 포함되어 있는지 확인합니다.
역할 부여
-
Google Cloud 콘솔에서 IAM 페이지로 이동합니다.
IAM으로 이동 - 프로젝트를 선택합니다.
- 액세스 권한 부여를 클릭합니다.
-
새 주 구성원 필드에 사용자 식별자를 입력합니다. 일반적으로 Google 계정의 이메일 주소입니다.
- 역할 선택을 클릭한 후 역할을 검색합니다.
- 역할을 추가로 부여하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.
- 저장을 클릭합니다.
-
gcloud
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
Google Cloud CLI를 설치합니다.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init -
Google Cloud 프로젝트를 만들거나 선택합니다.
프로젝트를 선택하거나 만드는 데 필요한 역할
- 프로젝트 선택: 프로젝트를 선택하는 데는 특정 IAM 역할이 필요하지 않습니다. 역할이 부여된 프로젝트를 선택하면 됩니다.
-
프로젝트 만들기: 프로젝트를 만들려면
resourcemanager.projects.create권한이 포함된 프로젝트 생성자 역할(roles/resourcemanager.projectCreator)이 필요합니다. 역할 부여 방법 알아보기
-
Google Cloud 프로젝트를 만듭니다.
gcloud projects create PROJECT_ID
PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다. -
생성한 Google Cloud 프로젝트를 선택합니다.
gcloud config set project PROJECT_ID
PROJECT_ID을 Google Cloud 프로젝트 이름으로 바꿉니다.
BigQuery, BigQuery Connection, Vertex AI, Document AI, Cloud Storage API를 사용 설정합니다.
API 사용 설정에 필요한 역할
API를 사용 설정하려면
serviceusage.services.enable권한이 포함된 서비스 사용량 관리자 IAM 역할 (roles/serviceusage.serviceUsageAdmin)이 필요합니다. 역할 부여 방법 알아보기gcloud services enable bigquery.googleapis.com
bigqueryconnection.googleapis.com aiplatform.googleapis.com documentai.googleapis.com storage.googleapis.com -
Google Cloud CLI를 설치합니다.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init -
Google Cloud 프로젝트를 만들거나 선택합니다.
프로젝트를 선택하거나 만드는 데 필요한 역할
- 프로젝트 선택: 프로젝트를 선택하는 데는 특정 IAM 역할이 필요하지 않습니다. 역할이 부여된 프로젝트를 선택하면 됩니다.
-
프로젝트 만들기: 프로젝트를 만들려면
resourcemanager.projects.create권한이 포함된 프로젝트 생성자 역할(roles/resourcemanager.projectCreator)이 필요합니다. 역할 부여 방법 알아보기
-
Google Cloud 프로젝트를 만듭니다.
gcloud projects create PROJECT_ID
PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다. -
생성한 Google Cloud 프로젝트를 선택합니다.
gcloud config set project PROJECT_ID
PROJECT_ID을 Google Cloud 프로젝트 이름으로 바꿉니다.
BigQuery, BigQuery Connection, Vertex AI, Document AI, Cloud Storage API를 사용 설정합니다.
API 사용 설정에 필요한 역할
API를 사용 설정하려면
serviceusage.services.enable권한이 포함된 서비스 사용량 관리자 IAM 역할 (roles/serviceusage.serviceUsageAdmin)이 필요합니다. 역할 부여 방법 알아보기gcloud services enable bigquery.googleapis.com
bigqueryconnection.googleapis.com aiplatform.googleapis.com documentai.googleapis.com storage.googleapis.com -
사용자 계정에 역할을 부여합니다. 다음 IAM 역할마다 다음 명령어를 1회 실행합니다.
roles/storage.admin, roles/documentai.editor, roles/bigquery.admin, roles/resourcemanager.projectIamAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
다음을 바꿉니다.
PROJECT_ID: 프로젝트 ID입니다.USER_IDENTIFIER: 사용자 계정의 식별자입니다. 예를 들면myemail@example.com입니다.ROLE: 사용자 계정에 부여하는 IAM 역할입니다.
데이터 세트 만들기
ML 모델을 저장할 BigQuery 데이터 세트를 만듭니다.
콘솔
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
탐색기 창에서 프로젝트 이름을 클릭합니다.
작업 보기 > 데이터 세트 만들기를 클릭합니다.
데이터 세트 만들기 페이지에서 다음을 수행합니다.
데이터 세트 ID에
bqml_tutorial를 입력합니다.위치 유형에 대해 멀티 리전을 선택한 다음 US를 선택합니다.
나머지 기본 설정은 그대로 두고 데이터 세트 만들기를 클릭합니다.
bq
새 데이터 세트를 만들려면 bq mk --dataset 명령어를 사용합니다.
데이터 위치가
US로 설정된bqml_tutorial데이터 세트를 만듭니다.bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
데이터 세트가 생성되었는지 확인합니다.
bq ls
API
데이터 세트 리소스가 정의된 datasets.insert 메서드를 호출합니다.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
샘플 PDF를 Cloud Storage에 업로드
샘플 PDF를 Cloud Storage에 업로드하려면 다음 단계를 따르세요.
- https://www.federalreserve.gov/publications/files/scf23.pdf로 이동하여 다운로드를 클릭하여
scf23.pdf샘플 PDF를 다운로드합니다. - Cloud Storage 버킷 생성
scf23.pdf파일을 버킷에 업로드합니다.
문서 프로세서 만들기
us 멀티 리전의 레이아웃 파서 프로세서를 기반으로 문서 프로세서를 만듭니다. 다음 섹션에서 사용할 예측 엔드포인트를 프로세서 세부정보 페이지에서 복사합니다.
PDF 파일을 청크로 파싱
AI.PARSE_DOCUMENT 함수와 함께 문서 프로세서를 사용하여 PDF 파일을 청크로 파싱한 다음 해당 콘텐츠를 테이블에 작성합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 쿼리를 실행합니다.
CREATE OR REPLACE TABLE bqml_tutorial.parsed_pdf AS ( SELECT * FROM AI.PARSE_DOCUMENT( ( SELECT OBJ.MAKE_REF("gs://BUCKET/scf23.pdf") AS ref ), endpoint => "PREDICTION_ENDPOINT", chunk_size => 250) );
임베딩 생성
파싱된 PDF 콘텐츠의 임베딩을 생성한 후 테이블에 작성합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 쿼리를 실행합니다.
CREATE OR REPLACE TABLE `bqml_tutorial.embeddings` AS ( SELECT *, AI.EMBED(content, endpoint => 'text-embedding-005') AS embedding FROM bqml_tutorial.parsed_pdf );
벡터 검색 실행하기
파싱된 PDF 콘텐츠에 대해 벡터 검색을 실행합니다.
다음 쿼리는 텍스트 입력을 가져와 AI.EMBED 함수를 사용하여 해당 입력의 임베딩을 만든 다음 VECTOR_SEARCH 함수를 사용하여 입력 임베딩을 가장 유사한 PDF 콘텐츠 임베딩과 일치시킵니다. 결과는 가족 순자산의 변화와 가장 관련성이 높은 상위 10개 PDF 청크입니다.
BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 SQL 문을 실행합니다.
SELECT distance, base.chunk_id, base.start_page, base.end_page, base.content FROM VECTOR_SEARCH( TABLE `bqml_tutorial.embeddings`, 'embedding', query_value => AI.EMBED( 'Did the typical family net worth increase? If so, by how much?', endpoint => 'text-embedding-005').result, top_k => 3, OPTIONS => '{"fraction_lists_to_search": 0.01}') ORDER BY distance DESC;
출력은 다음과 비슷합니다.
+----------+----------+------------+----------+-----------------------------------+ | distance | chunk_id | start_page | end_page | content | +----------+----------+------------+----------+-----------------------------------+ | 0.645685 | 26 | 17 | 18 | 18 Between the first quarter of | | | | | | 2019 and the first quarter of... | +----------+----------+------------+----------+-----------------------------------+ | 0.602665 | 30 | 19 | 21 | ## Net Worth by Family | | | | | | Characteristics... | +----------+----------+------------+----------+-----------------------------------+ | 0.599438 | 24 | 17 | 21 | # Net Worth | | | | | | The net improvements in... | +----------+----------+------------+----------+-----------------------------------+
벡터 검색 결과로 보강된 텍스트 생성
임베딩에 벡터 검색을 실행하여 의미적으로 유사한 PDF 콘텐츠를 식별한 다음, 벡터 검색 결과와 함께 AI.GENERATE_TEXT 함수를 사용하여 프롬프트 입력을 보강하고 텍스트 생성 결과를 개선합니다. 이 경우 쿼리는 PDF 청크의 정보를 사용하여 지난 10년간의 가족 순자산 변화에 관한 질문에 답변합니다.
Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.
쿼리 편집기에서 다음 쿼리를 실행합니다.
SELECT AI.GENERATE( CONCAT('Did the typical family net worth change? How does this compare the SCF survey a decade earlier? Be concise and use the following context:', STRING_AGG(FORMAT("context: %s", base.content), ',\n') ) ).result AS response FROM VECTOR_SEARCH( TABLE `bqml_tutorial.embeddings`, 'embedding', query_value => AI.EMBED( 'Did the typical family net worth increase? If so, by how much?', endpoint => 'text-embedding-005').result, top_k => 3, OPTIONS => '{"fraction_lists_to_search": 0.01}')
출력은 다음과 비슷합니다.
+-------------------------------------------------------------------------+ | response | +-------------------------------------------------------------------------+ | Yes, the typical family net worth changed significantly. | | | | Real median net worth surged 37% between the 2019 and 2022 SCF surveys. | | This contrasts sharply with a decade earlier (2010-2013), when real | | median net worth decreased 2%. | +-------------------------------------------------------------------------+
삭제
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
프로젝트 삭제
Google Cloud 프로젝트를 삭제합니다.
gcloud projects delete PROJECT_ID
다음 단계
-AI.PARSE_DOCUMENT 함수에 대해 자세히 알아보세요.
- 시맨틱 검색 및 RAG 실행에 대해 자세히 알아봅니다.