1. מבוא
סקירה כללית
Vertex AI Search and Conversation (לשעבר Generative AI App Builder) מאפשר למפתחים ליהנות מהיכולות של המודלים הבסיסיים, מומחיות החיפוש וטכנולוגיות ה-AI בממשק שיחה של Google כדי ליצור אפליקציות של בינה מלאכותית גנרטיבית ברמה שמתאימה לארגונים. ה-Codelab הזה מתמקד בשימוש ב-Vertex AI Search, שבו אתם יכולים לפתח על הנתונים שלכם אפליקציית חיפוש באיכות של Google ולהטמיע סרגל חיפוש בדפי האינטרנט או באפליקציה שלכם.
Cloud Run היא פלטפורמת מחשוב מנוהלת שמאפשרת להריץ קונטיינרים ישירות על גבי התשתית של Google הניתנת להתאמה. אפשר לפרוס ב-Cloud Run קוד שנכתב בכל שפת תכנות (שאפשר לשים בתוך קונטיינר) באמצעות האפשרות של פריסה מבוססת מקור.
ב-Codelab הזה תיצרו שירות של Cloud Run באמצעות פריסה מבוססת המקור, כדי לאחזר תוצאות חיפוש של תוכן לא מובנה בקובצי PDF בקטגוריה של Cloud Storage. מידע נוסף על הטמעת תוכן לא מובנה
מה תלמדו
- איך יוצרים אפליקציית חיפוש של Vertex AI לנתונים לא מובנים כקובצי PDF שהוטמעו מקטגוריה של Cloud Storage
- איך ליצור נקודת קצה (endpoint) HTTP באמצעות פריסה מבוססת-מקור ב-Cloud Run
- איך יוצרים חשבון שירות בהתאם לעקרון של הרשאות מינימליות שישמשו את שירות Cloud Run לשליחת שאילתות לאפליקציית Vertex AI Search
- איך להפעיל את שירות Cloud Run כדי לשלוח שאילתה לאפליקציית Vertex AI Search
2. הגדרה ודרישות
דרישות מוקדמות
- אתם מחוברים למסוף Cloud.
- פרסתם בעבר שירות של Cloud Run. לדוגמה, אפשר להיעזר במדריך למתחילים לפריסת שירות אינטרנט מקוד מקור כדי להתחיל בעבודה.
הפעלת Cloud Shell
- במסוף Cloud, לוחצים על Activate Cloud Shell .
אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים שמתוארת בו. אם הוצג לכם מסך ביניים, לוחצים על המשך.
ההקצאה וההתחברות ל-Cloud Shell נמשכת כמה דקות.
במכונה הווירטואלית הזו נמצאים כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-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, יש כמה ממשקי API שתצטרכו להפעיל.
קודם כל, ה-Codelab הזה מחייב שימוש בממשקי ה-API של Vertex AI Search and Conversation, BigQuery ו-Cloud Storage. תוכלו להפעיל את ממשקי ה-API האלה כאן.
לאחר מכן, מבצעים את השלבים הבאים כדי להפעיל את Vertex AI Search and Conversation API:
- במסוף Google Cloud, עוברים אל Vertex AI Search and Conversation console.
- קוראים את התנאים וההגבלות ומאשרים אותם, ולוחצים על 'המשך' ומפעילים את ה-API.
4. יצירה של אפליקציית חיפוש לנתונים לא מובנים מ-Cloud Storage
- במסוף Google Cloud, נכנסים אל Search & דף שיחה. לוחצים על אפליקציה חדשה.
- בחלונית בחירת סוג האפליקציה בוחרים באפשרות חיפוש.
- כדי לקבל תשובות שנשלפו מהמסמכים, צריך לוודא שתכונות Enterprise מופעלות.
- מוודאים שהאפשרות תכונות מתקדמות של LLM מופעלת כדי לקבל סיכום של תוצאות החיפוש.
- בשדה שם האפליקציה, מזינים שם לאפליקציה. מזהה האפליקציה מופיע מתחת לשם האפליקציה.
- בוחרים באפשרות גלובלי (גלובלי) בתור מיקום האפליקציה ולוחצים על המשך.
- בחלונית מאגרי נתונים לוחצים על יצירת מאגר נתונים חדש.
- בחלונית Select a data source (בחירת מקור נתונים), בוחרים באפשרות Cloud Storage.
- בחלונית Import data from GCS (ייבוא נתונים מ-GCS), מוודאים שהאפשרות Folder מסומנת.
- בשדה gs://, מזינים את הערך הבא:
cloud-samples-data/gen-app-builder/search/stanford-cs-224
הקטגוריה הזו של Cloud Storage מכילה קובצי PDF מתיקייה של Cloud Storage שזמינה למטרות בדיקה. - בוחרים באפשרות מסמכים לא מובנים ולוחצים על המשך.
- בחלונית הגדרת מאגר הנתונים, בוחרים באפשרות גלובלי (גלובלי) בתור המיקום של מאגר הנתונים.
- מזינים שם למאגר הנתונים. השם הזה ישמש אתכם בהמשך ב-Codelab הזה בעת פריסת שירות Cloud Run. לוחצים על Create.
- בחלונית מאגרי נתונים, בוחרים את מאגר הנתונים החדש ולוחצים על יצירה.
- בדף נתונים של מאגר הנתונים, לוחצים על הכרטיסייה פעילות כדי לראות את הסטטוס של הטמעת הנתונים. כאשר תהליך הייבוא מסתיים, הכיתוב הייבוא הושלם מוצג בעמודה 'סטטוס'.
- לוחצים על הכרטיסייה מסמכים כדי לראות את מספר המסמכים שיובאו.
- בתפריט הניווט, לוחצים על תצוגה מקדימה כדי לבדוק את אפליקציית החיפוש.
- בסרגל החיפוש, מזינים
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)))
הגדרה של משתני סביבה
בקוד הזה אפשר ליצור כמה משתני סביבה כדי לשפר את הקריאות של פקודות 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>
יצירה של חשבון שירות.
בשיעור הזה תלמדו איך ליצור חשבון שירות לשירות 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 לנתונים לא מובנים כקובצי PDF שהוטמעו מקטגוריה של Cloud Storage
- איך ליצור נקודת קצה (endpoint) HTTP באמצעות פריסה מבוססת-מקור ב-Cloud Run
- איך יוצרים חשבון שירות בהתאם לעקרון של הרשאות מינימליות שישמשו את שירות Cloud Run לשליחת שאילתות לאפליקציית Vertex AI Search.
- איך להפעיל את שירות Cloud Run כדי לשלוח שאילתה לאפליקציית Vertex AI Search
8. הסרת המשאבים
כדי להימנע מחיובים לא מכוונים (לדוגמה, אם הפונקציה של Cloud Functions הופעלה בטעות יותר פעמים מההקצאה החודשית של הפונקציה של Cloud Functions בתוכנית ללא תשלום), אפשר למחוק את הפונקציה של Cloud Functions או למחוק את הפרויקט שיצרתם בשלב 2.
כדי למחוק את הפונקציה של Cloud Functions, נכנסים אל מסוף הפונקציה של Cloud Functions בכתובת https://console.cloud.google.com/functions/ ומוחקים את הפונקציה imagen_vqa (או את הפונקציה $FUNCTION_NAME אם השתמשתם בשם אחר).
אם בוחרים למחוק את הפרויקט כולו, נכנסים לכתובת https://console.cloud.google.com/cloud-resource-manager, בוחרים את הפרויקט שיצרתם בשלב 2 ובוחרים באפשרות 'מחיקה'. אם תמחקו את הפרויקט, יהיה צריך לבצע שינויים בפרויקטים ב-Cloud SDK. כדי להציג את הרשימה של כל הפרויקטים הזמינים, אפשר להריץ את הפקודה gcloud projects list
.