במדריך הזה נראה איך לשלב אפליקציה של מודל שפה גדול (LLM) שמבוססת על יצירה משולבת-אחזור (RAG) עם קובצי PDF שמעלים לקטגוריה של Cloud Storage.
במדריך הזה נעשה שימוש במסד נתונים כמנוע אחסון וחיפוש סמנטי שמכיל את הייצוגים (הטמעות) של המסמכים שהועלו. אתם משתמשים ב-Langchain framework כדי לבצע פעולות בהטמעות, ובמודלים של Gemini שזמינים דרך Vertex AI.
Langchain היא מסגרת פופולרית של Python בקוד פתוח שמפשטת הרבה משימות של למידת מכונה, ויש לה ממשקים לשילוב עם מסדי נתונים שונים של וקטורים ושירותי AI.
המדריך הזה מיועד למנהלים ולארכיטקטים של פלטפורמות ענן, למהנדסי ML ולמומחי MLOps (DevOps) שרוצים לפרוס אפליקציות RAG LLM ב-GKE וב-Cloud Storage.
מטרות
במדריך הזה תלמדו איך:
- ליצור ולפרוס אפליקציה כדי ליצור הטמעות של מסמכים ולאחסן אותן במסד נתונים וקטורי.
- מגדירים את האפליקציה כך שתעלה מסמכים חדשים באופן אוטומטי לקטגוריה של Cloud Storage.
- פורסים אפליקציית צ'אט-בוט שמשתמשת בחיפוש סמנטי כדי לענות על שאלות על סמך תוכן המסמך.
ארכיטקטורת פריסה
במדריך הזה תיצרו קטגוריה של Cloud Storage, טריגר Eventarc ואת השירותים הבאים:
-
embed-docs: טריגר של Eventarc מפעיל את השירות הזה בכל פעם שמשתמש מעלה מסמך חדש לקטגוריה של Cloud Storage. השירות מתחיל Kubernetes Job שיוצר הטמעות למסמך שהועלה ומכניס את ההטמעות למסד נתונים וקטורי. -
chatbot: השירות הזה עונה על שאלות בשפה טבעית לגבי המסמכים שהועלו באמצעות חיפוש סמנטי ו-Gemini API.
בתרשים הבא מוצג תהליך ההעלאה וההפיכה לווקטורים של מסמכים:
בתרשים, המשתמש מעלה קבצים לקטגוריה של Cloud Storage.
Eventarc נרשם לאירועי אובייקט metadataUpdated של הקטגוריה ומשתמש במעביר האירועים של Eventarc, שהוא עומס עבודה של Kubernetes, כדי להפעיל את שירות embed-docs כשמעלים מסמך חדש. השירות יוצר הטבעות למסמך שהועלה. embed-docs
השירות מאחסן את ההטמעות במסד נתונים וקטורי באמצעות מודל ההטמעה של Vertex AI.
בתרשים הבא מוצג התהליך של שאילת שאלות לגבי תוכן המסמך שהועלה באמצעות שירות chatbot:
המשתמשים יכולים לשאול שאלות בשפה טבעית, והצ'אטבוט יוצר תשובות שמבוססות רק על התוכן של הקבצים שהועלו. צ'אטבוט מאחזר הקשר ממסד הנתונים הווקטורי באמצעות חיפוש סמנטי, ואז שולח את השאלה וההקשר ל-Gemini.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
בעזרת מחשבון העלויות אתם יכולים להעריך את העלויות בהתאם לשימוש הצפוי.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
במדריך הזה משתמשים ב-Cloud Shell כדי להריץ פקודות. Cloud Shell היא סביבת מעטפת לניהול משאבים שמתארחים ב- Google Cloud. ב-Cloud Shell מותקנים מראש כלי שורת הפקודה Google Cloud CLI, kubectl ו-Terraform. אם אתם לא משתמשים ב-Cloud Shell, תצטרכו להתקין את Google Cloud CLI.
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- בחירת פרויקט: כדי לבחור פרויקט לא נדרש תפקיד IAM ספציפי – אתם יכולים לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים פרויקט ב- Google Cloud :
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את Vertex AI, Cloud Build, Eventarc ו-Artifact Registry APIs, אם הם עדיין לא מופעלים:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable aiplatform.googleapis.com
cloudbuild.googleapis.com eventarc.googleapis.com artifactregistry.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- בחירת פרויקט: כדי לבחור פרויקט לא נדרש תפקיד IAM ספציפי – אתם יכולים לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים פרויקט ב- Google Cloud :
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את Vertex AI, Cloud Build, Eventarc ו-Artifact Registry APIs, אם הם עדיין לא מופעלים:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable aiplatform.googleapis.com
cloudbuild.googleapis.com eventarc.googleapis.com artifactregistry.googleapis.com -
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
eventarc.admingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
יצירת אשכול
יצירת אשכול Qdrant, Elasticsearch או Postgres:
Qdrant
פועלים לפי ההוראות במאמר פריסת מסד נתונים של וקטורים של Qdrant ב-GKE כדי ליצור אשכול Qdrant שפועל במצב Autopilot או במצב Standard באשכול GKE.
Elasticsearch
פועלים לפי ההוראות במאמר פריסת מסד נתונים וקטורי של Elasticsearch ב-GKE כדי ליצור אשכול Elasticsearch שפועל באשכול GKE במצב Autopilot או במצב Standard.
PGVector
פועלים לפי ההוראות במאמר פריסת מסד נתונים של וקטורים ב-PostgreSQL ב-GKE כדי ליצור אשכול Postgres עם PGVector שפועל במצב Autopilot או במצב רגיל של אשכול GKE.
Weaviate
פועלים לפי ההוראות לפריסת מסד נתונים וקטורי של Weaviate ב-GKE כדי ליצור אשכול Weaviate שפועל באשכול GKE במצב Autopilot או במצב רגיל.
מגדירים את הסביבה
מגדירים את הסביבה באמצעות Cloud Shell:
מגדירים משתני סביבה לפרויקט:
Qdrant
export PROJECT_ID=PROJECT_ID export KUBERNETES_CLUSTER_PREFIX=qdrant export CONTROL_PLANE_LOCATION=us-central1 export REGION=us-central1 export DB_NAMESPACE=qdrantמחליפים את
PROJECT_IDבמזהה הפרויקט ב-Google Cloud .Elasticsearch
export PROJECT_ID=PROJECT_ID export KUBERNETES_CLUSTER_PREFIX=elasticsearch export CONTROL_PLANE_LOCATION=us-central1 export REGION=us-central1 export DB_NAMESPACE=elasticמחליפים את
PROJECT_IDבמזהה הפרויקט ב-Google Cloud .PGVector
export PROJECT_ID=PROJECT_ID export KUBERNETES_CLUSTER_PREFIX=postgres export CONTROL_PLANE_LOCATION=us-central1 export REGION=us-central1 export DB_NAMESPACE=pg-nsמחליפים את
PROJECT_IDבמזהה הפרויקט ב-Google Cloud .Weaviate
export PROJECT_ID=PROJECT_ID export KUBERNETES_CLUSTER_PREFIX=weaviate export CONTROL_PLANE_LOCATION=us-central1 export REGION=us-central1 export DB_NAMESPACE=weaviateמחליפים את
PROJECT_IDבמזהה הפרויקט ב-Google Cloud .מוודאים שקלאסטר GKE פועל:
gcloud container clusters list --project=${PROJECT_ID} --location=${CONTROL_PLANE_LOCATION}הפלט אמור להיראות כך:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS [KUBERNETES_CLUSTER_PREFIX]-cluster us-central1 1.30.1-gke.1329003 <EXTERNAL IP> e2-standard-2 1.30.1-gke.1329003 6 RUNNINGמשכפלים את מאגר המקורות של הקוד לדוגמה מ-GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesמנווטים לספרייה
databases:cd kubernetes-engine-samples/databases
הכנת התשתית
יוצרים מאגר ב-Artifact Registry, יוצרים קובצי אימג' של Docker ומעבירים אותם בדחיפה ל-Artifact Registry:
יוצרים מאגר ב-Artifact Registry:
gcloud artifacts repositories create ${KUBERNETES_CLUSTER_PREFIX}-images \ --repository-format=docker \ --location=${REGION} \ --description="Vector database images repository" \ --asyncמגדירים את ההרשאות
storage.objectAdminו-artifactregistry.adminבחשבון השירות של Compute Engine כדי להשתמש ב-Cloud Build לבנייה ולדחיפה של קובצי אימג' של Docker לשירותיםembed-docsו-chatbot.export PROJECT_NUMBER=PROJECT_NUMBER gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --role="roles/storage.objectAdmin" gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --role="roles/artifactregistry.admin"מחליפים את
PROJECT_NUMBERבמספר הפרויקט ב-Google Cloud .יצירת קובצי אימג' של Docker לשירותים
embed-docsו-chatbot. האימג'embed-docsמכיל קוד Python גם לאפליקציה שמקבלת בקשות מהמעביר של Eventarc וגם למשימת ההטמעה.Qdrant
export DOCKER_REPO="${REGION}-docker.pkg.dev/${PROJECT_ID}/${KUBERNETES_CLUSTER_PREFIX}-images" gcloud builds submit qdrant/docker/chatbot --region=${REGION} \ --tag ${DOCKER_REPO}/chatbot:1.0 --async gcloud builds submit qdrant/docker/embed-docs --region=${REGION} \ --tag ${DOCKER_REPO}/embed-docs:1.0 --asyncElasticsearch
export DOCKER_REPO="${REGION}-docker.pkg.dev/${PROJECT_ID}/${KUBERNETES_CLUSTER_PREFIX}-images" gcloud builds submit elasticsearch/docker/chatbot --region=${REGION} \ --tag ${DOCKER_REPO}/chatbot:1.0 --async gcloud builds submit elasticsearch/docker/embed-docs --region=${REGION} \ --tag ${DOCKER_REPO}/embed-docs:1.0 --asyncPGVector
export DOCKER_REPO="${REGION}-docker.pkg.dev/${PROJECT_ID}/${KUBERNETES_CLUSTER_PREFIX}-images" gcloud builds submit postgres-pgvector/docker/chatbot --region=${REGION} \ --tag ${DOCKER_REPO}/chatbot:1.0 --async gcloud builds submit postgres-pgvector/docker/embed-docs --region=${REGION} \ --tag ${DOCKER_REPO}/embed-docs:1.0 --asyncWeaviate
export DOCKER_REPO="${REGION}-docker.pkg.dev/${PROJECT_ID}/${KUBERNETES_CLUSTER_PREFIX}-images" gcloud builds submit weaviate/docker/chatbot --region=${REGION} \ --tag ${DOCKER_REPO}/chatbot:1.0 --async gcloud builds submit weaviate/docker/embed-docs --region=${REGION} \ --tag ${DOCKER_REPO}/embed-docs:1.0 --asyncמאמתים את התמונות:
gcloud artifacts docker images list $DOCKER_REPO \ --project=$PROJECT_ID \ --format="value(IMAGE)"הפלט אמור להיראות כך:
$REGION-docker.pkg.dev/$PROJECT_ID/${KUBERNETES_CLUSTER_PREFIX}-images/chatbot $REGION-docker.pkg.dev/$PROJECT_ID/${KUBERNETES_CLUSTER_PREFIX}-images/embed-docsפריסת חשבון שירות של Kubernetes עם הרשאות להפעלת משימות של Kubernetes:
Qdrant
sed "s/<PROJECT_ID>/$PROJECT_ID/;s/<CLUSTER_PREFIX>/$KUBERNETES_CLUSTER_PREFIX/" qdrant/manifests/05-rag/service-account.yaml | kubectl -n qdrant apply -f -Elasticsearch
sed "s/<PROJECT_ID>/$PROJECT_ID/;s/<CLUSTER_PREFIX>/$KUBERNETES_CLUSTER_PREFIX/" elasticsearch/manifests/05-rag/service-account.yaml | kubectl -n elastic apply -f -PGVector
sed "s/<PROJECT_ID>/$PROJECT_ID/;s/<CLUSTER_PREFIX>/$KUBERNETES_CLUSTER_PREFIX/" postgres-pgvector/manifests/03-rag/service-account.yaml | kubectl -n pg-ns apply -f -Weaviate
sed "s/<PROJECT_ID>/$PROJECT_ID/;s/<CLUSTER_PREFIX>/$KUBERNETES_CLUSTER_PREFIX/" weaviate/manifests/04-rag/service-account.yaml | kubectl -n weaviate apply -f -כשמשתמשים ב-Terraform כדי ליצור את אשכול GKE והערך של
create_service_accountמוגדר כ-true, נוצר חשבון שירות נפרד שמשמש את האשכול והצמתים. צריך להקצות את התפקידartifactregistry.serviceAgentלחשבון השירות הזה של Compute Engine כדי שהצמתים יוכלו לשלוף תמונה מ-Artifact Registry שנוצר עבורembed-docsו-chatbot.export CLUSTER_SERVICE_ACCOUNT=$(gcloud container clusters describe ${KUBERNETES_CLUSTER_PREFIX}-cluster \ --location=${CONTROL_PLANE_LOCATION} \ --format="value(nodeConfig.serviceAccount)") gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${CLUSTER_SERVICE_ACCOUNT}" \ --role="roles/artifactregistry.serviceAgent"אם לא תעניקו גישה לחשבון השירות, יכול להיות שהצמתים שלכם ייתקלו בבעיית הרשאה כשמנסים לשלוף תמונה מ-Artifact Registry כשפורסים את שירותי
embed-docsו-chatbot.פורסים Kubernetes Deployment לשירותים
embed-docsו-chatbot. פריסה היא אובייקט Kubernetes API שמאפשר להפעיל כמה עותקים של Pods שמפוזרים בין הצמתים באשכול.Qdrant
sed "s|<DOCKER_REPO>|$DOCKER_REPO|" qdrant/manifests/05-rag/chatbot.yaml | kubectl -n qdrant apply -f - sed "s|<DOCKER_REPO>|$DOCKER_REPO|" qdrant/manifests/05-rag/docs-embedder.yaml | kubectl -n qdrant apply -f -Elasticsearch
sed "s|<DOCKER_REPO>|$DOCKER_REPO|" elasticsearch/manifests/05-rag/chatbot.yaml | kubectl -n elastic apply -f - sed "s|<DOCKER_REPO>|$DOCKER_REPO|" elasticsearch/manifests/05-rag/docs-embedder.yaml | kubectl -n elastic apply -f -PGVector
sed "s|<DOCKER_REPO>|$DOCKER_REPO|" postgres-pgvector/manifests/03-rag/chatbot.yaml | kubectl -n pg-ns apply -f - sed "s|<DOCKER_REPO>|$DOCKER_REPO|" postgres-pgvector/manifests/03-rag/docs-embedder.yaml | kubectl -n pg-ns apply -f -Weaviate
sed "s|<DOCKER_REPO>|$DOCKER_REPO|" weaviate/manifests/04-rag/chatbot.yaml | kubectl -n weaviate apply -f - sed "s|<DOCKER_REPO>|$DOCKER_REPO|" weaviate/manifests/04-rag/docs-embedder.yaml | kubectl -n weaviate apply -f -מפעילים טריגרים של Eventarc ל-GKE:
gcloud eventarc gke-destinations initכשתופיע בקשה, כותבים
y.פורסים את קטגוריית Cloud Storage ויוצרים טריגר Eventarc באמצעות Terraform:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token) terraform -chdir=vector-database/terraform/cloud-storage init terraform -chdir=vector-database/terraform/cloud-storage apply \ -var project_id=${PROJECT_ID} \ -var region=${REGION} \ -var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX} \ -var db_namespace=${DB_NAMESPACE}כשמופיעה בקשה, מקלידים
yes. יכול להיות שיחלפו כמה דקות עד שהפקודה תסתיים.Terraform יוצר את המשאבים הבאים:
- קטגוריה של Cloud Storage להעלאת המסמכים
- טריגר של Eventarc
- Google Cloud חשבון שירות בשם
service_account_eventarc_nameעם הרשאה להשתמש ב-Eventarc. - Google Cloud חשבון שירות בשם
service_account_bucket_nameעם הרשאה לקרוא את הקטגוריה ולגשת למודלים של Vertex AI.
הפלט אמור להיראות כך:
... # Several lines of output omitted Apply complete! Resources: 15 added, 0 changed, 0 destroyed. ... # Several lines of output omitted
טעינת מסמכים והרצת שאילתות בצ'אט בוט
מעלים את מסמכי ההדגמה ומריצים שאילתות כדי לחפש במסמכי ההדגמה באמצעות הצ'אט בוט:
מעלים את מסמך ה-
carbon-free-energy.pdfלדוגמה לקטגוריה:gcloud storage cp vector-database/documents/carbon-free-energy.pdf gs://${PROJECT_ID}-${KUBERNETES_CLUSTER_PREFIX}-training-docsמוודאים שהמשימה של הטמעת המסמך הושלמה בהצלחה:
kubectl get job -n ${DB_NAMESPACE}הפלט אמור להיראות כך:
NAME COMPLETIONS DURATION AGE docs-embedder1716570453361446 1/1 32s 71sמאתרים את כתובת ה-IP החיצונית של מאזן העומסים:
export EXTERNAL_IP=$(kubectl -n ${DB_NAMESPACE} get svc chatbot --output jsonpath='{.status.loadBalancer.ingress[0].ip}') echo http://${EXTERNAL_IP}:80פותחים את כתובת ה-IP החיצונית בדפדפן האינטרנט:
http://EXTERNAL_IPהצ'אט בוט משיב בהודעה שדומה לזו:
How can I help you?לשאול שאלות על התוכן של המסמכים שהועלו. אם הצ'אט בוט לא מוצא כלום, הוא עונה
I don't know. לדוגמה, אפשר לשאול את השאלות הבאות:You: Hi, what are Google plans for the future?פלט לדוגמה מהצ'אטבוט:
Bot: Google intends to run on carbon-free energy everywhere, at all times by 2030. To achieve this, it will rely on a combination of renewable energy sources, such as wind and solar, and carbon-free technologies, such as battery storage.שואלים את הצ'אט בוט שאלה שלא קשורה למסמך שהועלה. לדוגמה, אתם יכולים לשאול:
You: What are Google plans to colonize Mars?הפלט לדוגמה מהצ'אט בוט דומה לזה:
Bot: I don't know. The provided context does not mention anything about Google's plans to colonize Mars.
מידע על קוד האפליקציה
בקטע הזה מוסבר איך קוד האפליקציה פועל. יש שלושה סקריפטים בתוך קובצי האימג' של Docker:
-
endpoint.py: מקבל אירועי Eventarc בכל העלאת מסמך ומפעיל את משימות Kubernetes כדי לעבד אותם. -
embedding-job.py: מוריד מסמכים מהמאגר, יוצר הטמעות ומכניס אותן למסד הנתונים הווקטורי. -
chat.py: מריץ שאילתות על התוכן של מסמכים מאוחסנים.
בתרשים מוצג תהליך יצירת התשובות באמצעות נתוני המסמכים:
בתרשים, האפליקציה טוענת קובץ PDF, מפצלת את הקובץ למקטעים, ואז לוקטורים, ואז שולחת את הווקטורים למסד נתונים וקטורי. בהמשך, משתמש שואל שאלה בצ'אט בוט. שרשרת ה-RAG משתמשת בחיפוש סמנטי כדי לחפש במסד הנתונים הווקטורי, ואז מחזירה את ההקשר יחד עם השאלה ל-LLM. מודל ה-LLM עונה על השאלה ושומר אותה בהיסטוריית הצ'אט.
מידע על endpoint.py
הקובץ הזה מעבד הודעות מ-Eventarc, יוצר משימת Kubernetes להטמעת המסמך ומקבל בקשות מכל מקום ביציאה 5001.
Qdrant
Elasticsearch
PGVector
Weaviate
מידע על embedding-job.py
הקובץ הזה מעבד מסמכים ושולח אותם למסד הנתונים של הווקטורים.
Qdrant
Elasticsearch
PGVector
Weaviate
מידע על chat.py
הקובץ הזה מגדיר את המודל כך שיענה על שאלות רק באמצעות ההקשר והתשובות הקודמות שסופקו. אם ההקשר או היסטוריית השיחה לא תואמים לנתונים כלשהם, המודל מחזיר את הערך I don't know.
Qdrant
Elasticsearch
PGVector
Weaviate
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
הדרך הכי קלה להימנע מחיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
אם מחקתם את הפרויקט, סיימתם את הניקוי. אם לא מחקתם את הפרויקט, צריך למחוק את המשאבים בנפרד.
מחיקת משאבים בודדים
מחיקת מאגר Artifact Registry:
gcloud artifacts repositories delete ${KUBERNETES_CLUSTER_PREFIX}-images \ --location=${REGION} \ --asyncכשמופיעה בקשה, כותבים
y.מחיקת קטגוריית Cloud Storage והטריגר של Eventarc:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token) terraform -chdir=vector-database/terraform/cloud-storage destroy \ -var project_id=${PROJECT_ID} \ -var region=${REGION} \ -var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX} \ -var db_namespace=${DB_NAMESPACE}כשמופיעה בקשה, מקלידים
yes.כדי להשתמש ב-Eventarc, צריך להגדיר יעד נקודת קצה תקף גם בזמן היצירה וגם בזמן המחיקה.