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 ที่ส่งผ่านข้อมูลจาก Bucket ของ Cloud Storage
- วิธีสร้างปลายทาง HTTP โดยใช้การทำให้ใช้งานได้ตามแหล่งที่มาใน Cloud Run
- วิธีสร้างบัญชีบริการตามหลักการให้สิทธิ์ขั้นต่ำที่สุดสำหรับบริการ Cloud Run เพื่อใช้ในการค้นหาแอป Vertex AI Search
- วิธีเรียกใช้บริการ Cloud Run เพื่อค้นหาแอป Vertex AI Search
2. การตั้งค่าและข้อกำหนด
ข้อกำหนดเบื้องต้น
- คุณเข้าสู่ระบบ Cloud Console แล้ว
- คุณเคยทำให้บริการ Cloud Run ใช้งานได้แล้ว เช่น คุณสามารถทำตามคู่มือเริ่มใช้งานฉบับย่อการทำให้ใช้งานได้บริการเว็บจากซอร์สโค้ดเพื่อเริ่มต้นใช้งาน
เปิดใช้งาน Cloud Shell
- จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell


หากคุณเริ่มใช้ Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอระดับกลางที่อธิบายว่า 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
ก่อนที่จะเริ่มใช้ Vertex AI Search ได้ คุณจะต้องเปิดใช้ API หลายรายการ
ก่อนอื่น Codelab นี้กำหนดให้ใช้ Vertex AI Search and Conversation, BigQuery และ Cloud Storage API คุณเปิดใช้ API เหล่านั้นได้ที่นี่
ประการที่ 2 ให้ทำตามขั้นตอนต่อไปนี้เพื่อเปิดใช้ Vertex AI Search and Conversation API
- ในคอนโซล Google Cloud ให้ไปที่คอนโซล Vertex AI Search and Conversation
- อ่านและยอมรับข้อกำหนดในการให้บริการ จากนั้นคลิก "ดำเนินการต่อ" และเปิดใช้งาน API
4. สร้างแอปค้นหาสำหรับข้อมูลที่ไม่มีโครงสร้างจาก Cloud Storage
- ในคอนโซล Google Cloud ให้ไปที่หน้าการค้นหาและการสนทนา คลิกแอปใหม่
- ในแผงเลือกประเภทแอป ให้เลือก Search
- โปรดตรวจสอบว่าได้เปิดใช้ฟีเจอร์สำหรับองค์กรแล้วเพื่อรับคำตอบที่คัดลอกมาจากเอกสารของคุณโดยตรง
- โปรดตรวจสอบว่าได้เปิดใช้ตัวเลือกฟีเจอร์ LLM ขั้นสูงเพื่อรับข้อมูลสรุปการค้นหา
- ในช่องชื่อแอป ให้ป้อนชื่อแอป รหัสแอปจะปรากฏใต้ชื่อแอป
- เลือกทั่วโลก (Global) เป็นตำแหน่งของแอป แล้วคลิกต่อไป
- ในแผงพื้นที่เก็บข้อมูล ให้คลิกสร้างพื้นที่เก็บข้อมูลใหม่
- ในบานหน้าต่างเลือกแหล่งข้อมูล ให้เลือก Cloud Storage
- ในแผงนำเข้าข้อมูลจาก GCS ให้ตรวจสอบว่าเลือกโฟลเดอร์แล้ว
- ในช่อง gs:// ให้ป้อนค่าต่อไปนี้
cloud-samples-data/gen-app-builder/search/stanford-cs-224Bucket ของ Cloud Storage นี้มีไฟล์ PDF จากโฟลเดอร์ Cloud Storage ที่พร้อมให้บริการแก่สาธารณะเพื่อวัตถุประสงค์ในการทดสอบ - เลือกเอกสารที่ไม่มีโครงสร้าง แล้วคลิกต่อไป
- ในแผงกำหนดค่าที่เก็บข้อมูล ให้เลือกทั่วโลก (Global) เป็นตำแหน่งสำหรับที่เก็บข้อมูล
- ป้อนชื่อสำหรับที่เก็บข้อมูล คุณจะใช้ชื่อนี้ในภายหลังใน Codelab นี้เมื่อติดตั้งใช้งานบริการ Cloud Run คลิกสร้าง
- ในแผงที่เก็บข้อมูล ให้เลือกที่เก็บข้อมูลใหม่ แล้วคลิกสร้าง
- ในหน้าข้อมูลของที่เก็บข้อมูล ให้คลิกแท็บกิจกรรมเพื่อดูสถานะการนำเข้าข้อมูล นำเข้าเสร็จสมบูรณ์จะแสดงในคอลัมน์สถานะเมื่อกระบวนการนำเข้าเสร็จสมบูรณ์
- คลิกแท็บเอกสารเพื่อดูจำนวนเอกสารที่นำเข้า
- ในเมนูการนำทาง ให้คลิกดูตัวอย่างเพื่อทดสอบแอปค้นหา
- ในแถบค้นหา ให้ป้อน
final lab due dateแล้วกด Enter เพื่อดูผลลัพธ์
5. สร้างบริการ Cloud Run
ในส่วนนี้ คุณจะได้สร้างบริการ Cloud Run ที่ยอมรับสตริงการค้นหาสำหรับคำค้นหา บริการนี้จะใช้ไลบรารีของไคลเอ็นต์ Python สำหรับ Discovery Engine API สำหรับรันไทม์อื่นๆ ที่รองรับ คุณสามารถดูรายการได้ที่นี่
สร้างซอร์สโค้ดสำหรับฟังก์ชัน
ก่อนอื่น ให้สร้างไดเรกทอรีแล้วใช้คำสั่ง cd เพื่อไปยังไดเรกทอรีนั้น
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 ที่ส่งผ่านข้อมูลจาก Bucket ของ 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 Console ของ Cloud Function ที่ https://console.cloud.google.com/functions/ แล้วลบฟังก์ชัน imagen_vqa (หรือ $FUNCTION_NAME ในกรณีที่คุณใช้ชื่ออื่น)
หากเลือกที่จะลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่พร้อมใช้งานได้โดยเรียกใช้ gcloud projects list