1. บทนำ
ภาพรวม
Vertex AI Search and Conversation (เดิมชื่อ Generative AI App Builder) ช่วยให้นักพัฒนาแอปได้ใช้ประโยชน์จากโมเดลพื้นฐาน ความเชี่ยวชาญด้านการค้นหา และเทคโนโลยี AI แบบสนทนาของ Google เพื่อสร้างแอปพลิเคชัน Generative AI ระดับองค์กร Codelab นี้มุ่งเน้นการใช้ Vertex AI Search ที่ให้คุณสร้างแอปค้นหาคุณภาพระดับ Google โดยใช้ข้อมูลของคุณเองและฝังแถบค้นหาไว้ในหน้าเว็บหรือแอปของคุณได้
Cloud Run เป็นแพลตฟอร์มคำนวณที่มีการจัดการซึ่งให้คุณเรียกใช้คอนเทนเนอร์ได้โดยตรงบนโครงสร้างพื้นฐานที่รองรับการปรับขนาดของ Google คุณทำให้โค้ดที่เขียนขึ้นในภาษาโปรแกรมใดก็ได้บน Cloud Run (ที่นำไปใส่ในคอนเทนเนอร์ได้) โดยใช้ตัวเลือกการติดตั้งใช้งานตามแหล่งที่มา
ใน Codelab นี้ คุณจะต้องสร้างบริการ Cloud Run โดยใช้การทำให้ใช้งานได้ตามต้นทางเพื่อเรียกข้อมูลผลการค้นหาสำหรับเนื้อหาที่ไม่มีโครงสร้างในไฟล์ PDF ในที่เก็บข้อมูล Cloud Storage ดูข้อมูลเพิ่มเติมเกี่ยวกับการนำเข้าเนื้อหาที่ไม่มีโครงสร้างได้ที่นี่
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างแอป Vertex AI Search สำหรับข้อมูลที่ไม่มีโครงสร้างในรูปแบบ PDF ที่นำเข้าจากที่เก็บข้อมูล Cloud Storage
- วิธีสร้างปลายทาง HTTP โดยใช้การติดตั้งใช้งานตามแหล่งที่มาใน Cloud Run
- วิธีสร้างบัญชีบริการโดยทำตามหลักการให้สิทธิ์ขั้นต่ำสำหรับบริการ Cloud Run เพื่อใช้ในการค้นหาแอป Vertex AI Search
- วิธีเรียกใช้บริการ Cloud Run เพื่อค้นหาแอป Vertex AI Search
2. การตั้งค่าและข้อกำหนด
ข้อกำหนดเบื้องต้น
- คุณเข้าสู่ระบบ Cloud Console แล้ว
- คุณได้ทำให้บริการ Cloud Run ใช้งานได้ก่อนหน้านี้ ตัวอย่างเช่น คุณทำตามวิธีทำให้บริการเว็บใช้งานได้จากการเริ่มต้นอย่างรวดเร็วสำหรับซอร์สโค้ดเพื่อเริ่มต้นใช้งาน
เปิดใช้งาน Cloud Shell
- คลิกเปิดใช้งาน Cloud Shell จาก Cloud Console
หากเริ่มต้นใช้งาน Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอตรงกลางที่อธิบายว่านี่คืออะไร หากระบบแสดงหน้าจอตรงกลาง ให้คลิกต่อไป
การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที
เครื่องเสมือนนี้โหลดด้วยเครื่องมือการพัฒนาทั้งหมดที่จำเป็น โดยมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์
เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นข้อความตรวจสอบสิทธิ์และโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์แล้ว
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list
เอาต์พุตจากคำสั่ง
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้เกี่ยวกับโปรเจ็กต์ของคุณ
gcloud config list project
เอาต์พุตจากคำสั่ง
[core] project = <PROJECT_ID>
หากไม่ใช่ ให้ตั้งคำสั่งด้วยคำสั่งนี้
gcloud config set project <PROJECT_ID>
เอาต์พุตจากคำสั่ง
Updated property [core/project].
3. เปิดใช้ API
คุณต้องเปิดใช้ API หลายรายการก่อนจึงจะเริ่มใช้ Vertex AI Search ได้
ก่อนอื่น Codelab นี้ต้องใช้ Vertex AI Search and Conversation, BigQuery และ Cloud Storage API คุณเปิดใช้ API เหล่านั้นได้ที่นี่
ขั้นตอนที่ 2 ให้ทําตามขั้นตอนต่อไปนี้เพื่อเปิดใช้ Vertex AI Search and Conversation API
- ในคอนโซล Google Cloud ให้ไปที่คอนโซลการค้นหาและการสนทนาของ Vertex AI
- อ่านและยอมรับข้อกำหนดในการให้บริการ จากนั้นคลิก ดำเนินการต่อและเปิดใช้งาน API
4. สร้างแอปการค้นหาสำหรับข้อมูลที่ไม่มีโครงสร้างจาก Cloud Storage
- ในคอนโซล Google Cloud ให้ไปที่ส่วน Search และ หน้าการสนทนา คลิกแอปใหม่
- ในแผงเลือกประเภทแอป ให้เลือกค้นหา
- ตรวจสอบว่าฟีเจอร์สำหรับองค์กรเปิดใช้อยู่เพื่อรับคำตอบที่ดึงมาแบบคำต่อคำจากเอกสาร
- ตรวจสอบว่าได้เปิดใช้ตัวเลือกฟีเจอร์ LLM ขั้นสูงเพื่อรับการสรุปการค้นหาแล้ว
- ในช่องชื่อแอป ให้ป้อนชื่อแอป รหัสแอปจะแสดงใต้ชื่อแอป
- เลือกทั่วโลก (ทั่วโลก) เป็นตําแหน่งสําหรับแอป แล้วคลิกต่อไป
- ในแผงพื้นที่เก็บข้อมูล ให้คลิกสร้างพื้นที่เก็บข้อมูลใหม่
- ในแผงเลือกแหล่งข้อมูล ให้เลือก Cloud Storage
- ในแผงนำเข้าข้อมูลจาก GCS ให้ตรวจสอบว่าเลือกโฟลเดอร์แล้ว
- ในช่อง gs:// ให้ป้อนค่าต่อไปนี้
cloud-samples-data/gen-app-builder/search/stanford-cs-224
ที่เก็บข้อมูล Cloud Storage นี้ประกอบด้วยไฟล์ PDF จากโฟลเดอร์ Cloud Storage ที่เผยแพร่ต่อสาธารณะเพื่อวัตถุประสงค์ในการทดสอบ - เลือกเอกสารที่ไม่มีโครงสร้าง แล้วคลิกต่อไป
- ในแผงกำหนดค่าพื้นที่เก็บข้อมูลของคุณ ให้เลือกส่วนกลาง (ส่วนกลาง) เป็นตำแหน่งสำหรับพื้นที่เก็บข้อมูลของคุณ
- ป้อนชื่อพื้นที่เก็บข้อมูล คุณจะใช้ชื่อนี้ใน Codelab นี้ภายหลังเมื่อทำให้บริการ Cloud Run ใช้งานได้ คลิกสร้าง
- ในแผงพื้นที่เก็บข้อมูล ให้เลือกพื้นที่เก็บข้อมูลใหม่ แล้วคลิกสร้าง
- ในหน้าข้อมูลของพื้นที่เก็บข้อมูล ให้คลิกแท็บกิจกรรมเพื่อดูสถานะของการนำเข้าข้อมูล การนำเข้าเสร็จสมบูรณ์จะแสดงในคอลัมน์สถานะเมื่อกระบวนการนำเข้าเสร็จสมบูรณ์
- คลิกแท็บเอกสารเพื่อดูจำนวนเอกสารที่นำเข้า
- ในเมนูการนำทาง ให้คลิกแสดงตัวอย่างเพื่อทดสอบแอปการค้นหา
- ในแถบค้นหา ให้ป้อน
final lab due date
แล้วกด Enter เพื่อดูผลการค้นหา
5. สร้างบริการ Cloud Run
ในส่วนนี้ คุณจะสร้างบริการ Cloud Run ที่ยอมรับสตริงคำค้นหาสำหรับข้อความค้นหาของคุณ บริการนี้จะใช้ไลบรารีของไคลเอ็นต์ Python สำหรับ Discovery Engine API สำหรับรันไทม์อื่นๆ ที่รองรับ คุณจะดูรายการได้ที่นี่
สร้างซอร์สโค้ดสำหรับฟังก์ชัน
ขั้นแรก ให้สร้างไดเรกทอรีและซีดีลงในไดเรกทอรีนั้น
mkdir docs-search-service-python && cd $_
จากนั้นสร้างไฟล์ requirements.txt
ที่มีเนื้อหาต่อไปนี้
blinker==1.6.3 cachetools==5.3.1 certifi==2023.7.22 charset-normalizer==3.3.0 click==8.1.7 Flask==3.0.0 google-api-core==2.12.0 google-auth==2.23.3 google-cloud-discoveryengine==0.11.2 googleapis-common-protos==1.61.0 grpcio==1.59.0 grpcio-status==1.59.0 idna==3.4 importlib-metadata==6.8.0 itsdangerous==2.1.2 Jinja2==3.1.2 MarkupSafe==2.1.3 numpy==1.26.1 proto-plus==1.22.3 protobuf==4.24.4 pyasn1==0.5.0 pyasn1-modules==0.3.0 requests==2.31.0 rsa==4.9 urllib3==2.0.7 Werkzeug==3.0.1 zipp==3.17.0
จากนั้นสร้างไฟล์ต้นฉบับ main.py
ที่มีเนื้อหาต่อไปนี้
from typing import List import json import os from flask import Flask from flask import request app = Flask(__name__) from google.api_core.client_options import ClientOptions from google.cloud import discoveryengine_v1 as discoveryengine project_id = os.environ.get('PROJECT_ID') location = "global" # Values: "global", "us", "eu" data_store_id = os.environ.get('SEARCH_ENGINE_ID') print(project_id) print(data_store_id) @app.route("/") def search_storage(): search_query = request.args.get("searchQuery") result = search_sample(project_id, location, data_store_id, search_query) return result def search_sample( project_id: str, location: str, data_store_id: str, search_query: str, ) -> str: # For more information, refer to: # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store client_options = ( ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com") if location != "global" else None ) # Create a client client = discoveryengine.SearchServiceClient(client_options=client_options) # The full resource name of the search engine serving config # e.g. projects/{project_id}/locations/{location}/dataStores/{data_store_id}/servingConfigs/{serving_config_id} serving_config = client.serving_config_path( project=project_id, location=location, data_store=data_store_id, serving_config="default_config", ) # Optional: Configuration options for search # Refer to the `ContentSearchSpec` reference for all supported fields: # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest.ContentSearchSpec content_search_spec = discoveryengine.SearchRequest.ContentSearchSpec( # For information about snippets, refer to: # https://cloud.google.com/generative-ai-app-builder/docs/snippets snippet_spec=discoveryengine.SearchRequest.ContentSearchSpec.SnippetSpec( return_snippet=True ), # For information about search summaries, refer to: # https://cloud.google.com/generative-ai-app-builder/docs/get-search-summaries summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec( summary_result_count=5, include_citations=True, ignore_adversarial_query=True, ignore_non_summary_seeking_query=True, ), ) # Refer to the `SearchRequest` reference for all supported fields: # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest request = discoveryengine.SearchRequest( serving_config=serving_config, query=search_query, page_size=10, content_search_spec=content_search_spec, query_expansion_spec=discoveryengine.SearchRequest.QueryExpansionSpec( condition=discoveryengine.SearchRequest.QueryExpansionSpec.Condition.AUTO, ), spell_correction_spec=discoveryengine.SearchRequest.SpellCorrectionSpec( mode=discoveryengine.SearchRequest.SpellCorrectionSpec.Mode.AUTO ), ) response = client.search(request) return response.summary.summary_text if __name__ == "__main__": app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
ตั้งค่าตัวแปรสภาพแวดล้อม
ในโค้ดนี้ คุณจะสร้างตัวแปรสภาพแวดล้อม 2-3 รายการเพื่อให้คำสั่ง gcloud
อ่านได้ง่ายขึ้นใน Codelab นี้
PROJECT_ID=$(gcloud config get-value project) SERVICE_NAME="search-storage-pdfs-python" SERVICE_REGION="us-central1" # update with your data store name SEARCH_ENGINE_ID=<your-data-store-name>
สร้างบัญชีบริการ
Codelab นี้จะแสดงวิธีสร้างบัญชีบริการสำหรับบริการ Cloud Run เพื่อใช้เข้าถึง Vertex AI Search API
SERVICE_ACCOUNT="cloud-run-vertex-ai-search" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run Vertex AI Search service account" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role='roles/discoveryengine.editor'
ทำให้บริการ Cloud Run ใช้งานได้
ตอนนี้คุณสามารถใช้การทำให้ใช้งานได้ตามแหล่งที่มาเพื่อสร้างคอนเทนเนอร์สำหรับบริการ Cloud Run โดยอัตโนมัติแล้ว
gcloud run deploy $SERVICE_NAME \ --region=$SERVICE_REGION \ --source=. \ --service-account $SERVICE_ACCOUNT \ --update-env-vars SEARCH_ENGINE_ID=$SEARCH_ENGINE_ID,PROJECT_ID=$PROJECT_ID \ --no-allow-unauthenticated
จากนั้นคุณสามารถบันทึก URL ของ Cloud Run เป็นตัวแปรสภาพแวดล้อมไว้ใช้ในภายหลังได้
ENDPOINT_URL="$(gcloud run services describe $SERVICE_NAME --region=$SERVICE_REGION --format='value(status.url)')"
6. เรียกใช้บริการ Cloud Run
ตอนนี้คุณเรียกใช้บริการ Cloud Run ด้วยสตริงการค้นหาเพื่อถาม What is the final lab due date?
ได้แล้ว
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" "$ENDPOINT_URL?searchQuery=what+is+the+final+lab+due+date"
ผลลัพธ์ควรมีลักษณะคล้ายกับตัวอย่างเอาต์พุตด้านล่าง
The final lab is due on Tuesday, March 21 at 4:30 PM [1].
7. ยินดีด้วย
ขอแสดงความยินดีที่เรียน Codelab จนจบ
เราขอแนะนำให้ดูเอกสารประกอบเกี่ยวกับ Vertex AI Search และ Cloud Run
หัวข้อที่ครอบคลุม
- วิธีสร้างแอป Vertex AI Search สำหรับข้อมูลที่ไม่มีโครงสร้างในรูปแบบ PDF ที่นำเข้าจากที่เก็บข้อมูล Cloud Storage
- วิธีสร้างปลายทาง HTTP โดยใช้การติดตั้งใช้งานตามแหล่งที่มาใน Cloud Run
- วิธีสร้างบัญชีบริการโดยทำตามหลักการให้สิทธิ์ขั้นต่ำสำหรับบริการ Cloud Run เพื่อใช้ในการค้นหาแอป Vertex AI Search
- วิธีเรียกใช้บริการ Cloud Run เพื่อค้นหาแอป Vertex AI Search
8. ล้างข้อมูล
เพื่อหลีกเลี่ยงการเรียกเก็บเงินที่ไม่ตั้งใจ (เช่น หากมีการเรียกใช้ Cloud Function โดยไม่ได้ตั้งใจมากกว่าการจัดสรรการเรียกใช้ Cloud Function รายเดือนในระดับฟรี) คุณจะลบ Cloud Function หรือลบโปรเจ็กต์ที่คุณสร้างในขั้นตอนที่ 2 ก็ได้
หากต้องการลบ Cloud Function ให้ไปที่ Cloud Function ใน Cloud Console ที่ https://console.cloud.google.com/functions/ แล้วลบฟังก์ชัน imagen_vqa (หรือ $FUNCTION_NAME ในกรณีที่คุณใช้ชื่ออื่น)
หากเลือกลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่คุณสร้างในขั้นตอนที่ 2 แล้วเลือกลบ หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณสามารถดูรายการโปรเจ็กต์ที่ใช้ได้ทั้งหมดโดยเรียกใช้ gcloud projects list