เกี่ยวกับ Codelab นี้
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