בדף הזה מוסבר איך לקשר את מאגר המידע של RAG למסד הנתונים של Pinecone.
אפשר גם לעקוב אחרי ההוראות באמצעות המחברת הזו: RAG Engine with Pinecone.
אתם יכולים להשתמש במופע של מסד הנתונים של Pinecone עם RAG Engine כדי ליצור אינדקס ולבצע חיפוש דמיון שמבוסס על וקטורים. חיפוש דמיון הוא דרך למצוא קטעי טקסט שדומים לטקסט שמחפשים, ונדרש שימוש במודל הטמעה. מודל ההטמעה יוצר נתוני וקטור לכל קטע טקסט שמושווה. החיפוש לפי דמיון משמש להארקה של הקשרים סמנטיים כדי להחזיר את התוכן הכי מדויק מ-LLM.
בעזרת RAG Engine, אתם יכולים להמשיך להשתמש במופע של מסד נתונים וקטורי בניהול מלא, שאתם אחראים להקצאה שלו. מנוע RAG משתמש במסד הנתונים הווקטורי שלכם לאחסון, לניהול אינדקסים ולחיפוש.
כדאי לשקול אם להשתמש ב-Pinecone עם RAG Engine
כדי להחליט אם השימוש במסד הנתונים של Pinecone הוא הבחירה הטובה ביותר לאפליקציית RAG, כדאי לעיין בפרטים הבאים:
אתם צריכים ליצור, להגדיר ולנהל את ההרחבה של מופע מסד הנתונים של Pinecone.
מנוע RAG משתמש במרחב השמות שמוגדר כברירת מחדל באינדקס. מוודאים ששום דבר אחר לא יכול לשנות את מרחב השמות הזה.
צריך לספק מפתח Pinecone API, שמאפשר ל-RAG Engine ליצור אינטראקציה עם מסד הנתונים של Pinecone. מנוע RAG לא מאחסן את מפתח ה-API של Pinecone ולא מנהל אותו. במקום זאת, צריך לבצע את הפעולות הבאות:
- מאחסנים את המפתח ב-Secret Manager. Google Cloud
- מעניקים לחשבון השירות של הפרויקט הרשאות גישה לסוד.
- נותנים למנוע RAG גישה לשם המשאב של הסוד.
כשאתם מבצעים אינטראקציה עם מאגר המידע של RAG, מנוע RAG ניגש למשאב הסודי באמצעות חשבון השירות שלכם.
יש מיפוי של אחד לאחד בין מאגר הנתונים של RAG לבין אינדקס Pinecone. השיוך הזה מתבצע כחלק מהשיטה
ragCorpora.createאו מהשיטהragCorpora.patch.
יצירת אינדקס ב-Pinecone
כדי ליצור אינדקס ב-Pinecone, צריך לפעול לפי השלבים הבאים:
במדריך למתחילים של Pinecone מוסבר איך להגדיר את האינדקס כדי שיהיה תואם למאגר המידע של RAG.
אתם רוצים לוודא שהמיקום של אינדקס Pinecone זהה למיקום שבו אתם משתמשים ב-RAG Engine או קרוב אליו, מהסיבות הבאות:
- אתם רוצים לשמור על זמני אחזור נמוכים.
- אתם רוצים לעמוד בדרישות בנוגע למיקום הנתונים שנקבעו בחוקים הרלוונטיים.
במהלך יצירת אינדקס Pinecone, מציינים את ממד ההטמעה שבו רוצים להשתמש עם RAG Engine. בטבלה הזו מפורטים הגדלים של המאפיינים או המיקום של הגדלים של המאפיינים:
דגם גודל המאפיין שממית צד ראשון 768 Gecko מותאם אישית לדומיין של המפרסם 768 E5 איך משתמשים במודלים להטמעה של OSS בוחרים אחד ממדדי המרחק הנתמכים הבאים:
cosinedotproducteuclidean
אופציונלי: כשיוצרים אינדקס מבוסס-pod, צריך לציין את
file_idבשדהpod.metadata_config.indexed. מידע נוסף זמין במאמר בנושא הוספה סלקטיבית של מטא-נתונים לאינדקס.
יצירת מפתח API של Pinecone
מנוע RAG יכול להתחבר לאינדקס Pinecone רק באמצעות מפתח ה-API שלכם לצורך אימות והרשאה. כדי להגדיר אימות מבוסס מפתח API בפרויקט Pinecone, צריך לפעול לפי המדריך הרשמי של Pinecone לאימות.
אחסון מפתח ה-API ב-Secret Manager
מפתח API מכיל פרטים אישיים מזהים רגישים (SPII), שחלים עליהם דרישות משפטיות. אם נתוני ה-SPII ייחשפו או שגורמים לא רצויים יקבלו גישה אליהם או יעשו בהם שימוש לרעה, אותו אדם עלול להיפגע או שעלול להיגרם לו נזק. כדי לצמצם את הסיכונים לאדם פרטי בזמן השימוש ב-RAG Engine, אל תשמרו את מפתח ה-API ואל תנהלו אותו, והימנעו משיתוף של מפתח ה-API הלא מוצפן.
כדי להגן על פרטי מידע אישי רגישים, צריך לבצע את הפעולות הבאות:
מאחסנים את מפתח ה-API ב-Secret Manager.
מעניקים לחשבון השירות של מנוע ה-RAG הרשאות לסיסמאות הסודיות, ומנהלים את בקרת הגישה ברמת משאב הסיסמה הסודית.
עוברים אל ההרשאות של הפרויקט.
מפעילים את האפשרות Include Google-provided role grants (הכללת תפקידים שניתנו על ידי Google).
מוצאים את חשבון השירות, שמופיע בפורמט הבא:
service-{project number}@gcp-sa-vertex-rag.iam.gserviceaccount.comעורכים את חשבונות המשתמשים של חשבון השירות.
מוסיפים את התפקיד
Secret Manager Secret Accessorלחשבון השירות.
במהלך היצירה או העדכון של מאגר המידע של RAG, מעבירים את שם משאב הסוד ל-RAG Engine ושומרים את שם משאב הסוד.
כשמבצעים בקשות API לאינדקסים של Pinecone, RAG Engine משתמש בכל חשבון שירות כדי לקרוא את מפתח ה-API שמתאים למשאבים הסודיים ב-Secret Manager מהפרויקטים.
הקצאת חשבון השירות של RAG Engine
כשיוצרים את מאגר המידע הראשון של RAG בפרויקט, RAG Engine יוצר חשבון שירות ייעודי. אפשר למצוא את חשבון השירות בדף ניהול הזהויות והרשאות הגישה של הפרויקט.
חשבון השירות הוא בפורמט הקבוע הבא:
service-{project number}@gcp-sa-vertex-rag.iam.gserviceaccount.com
לדוגמה,
service-123456789@gcp-sa-vertex-rag.iam.gserviceaccount.com
הכנת קורפוס RAG
כדי להשתמש באינדקס Pinecone עם RAG Engine, צריך לשייך את האינדקס למאגר RAG בשלב היצירה שלו. אחרי שיוצרים את השיוך, הקישור הזה הוא קבוע למשך משך החיים של מאגר המידע של RAG. אפשר לבצע את השיוך באמצעות CreateRagCorpus או UpdateRagCorpus API.
כדי שהשיוך ייחשב להשלמה, צריך להגדיר שלושה שדות מרכזיים במאגר המידע של RAG:
rag_vector_db_config.pinecone: בשדה הזה מגדירים את מסד הנתונים הווקטורי שרוצים לשייך למאגר המידע של RAG. צריך להגדיר אותו במהלך הקריאה ל-APICreateRagCorpus. אם לא מוגדרת בחירה, מסד נתוני הווקטורים שמוגדר כברירת מחדלRagManagedDbמוקצה לקורפוס של RAG.
rag_vector_db_config.pinecone.index_name: זה השם שמשמש ליצירת אינדקס Pinecone שמשמש עם מאגר המידע של RAG. אפשר להגדיר את השם במהלךCreateRagCorpusהשיחה, או לציין את השם כשמתקשרים אלUpdateRagCorpusAPI.
rag_vector_db_config.api_auth.api_key_config.api_key_secret_version: זהו שם המשאב המלא של הסוד שמאוחסן ב-Secret Manager, שמכיל את מפתח ה-API של Pinecone. אפשר להגדיר את השם במהלך השיחהCreateRagCorpusאו לציין את השם כשמתקשרים ל-API שלUpdateRagCorpus. עד שתציינו את השדה הזה, לא תוכלו לייבא נתונים למאגר המידע של RAG.הפורמט של השדה הזה צריך להיות:
projects/{PROJECT_NUMBER}/secrets/{SECRET_ID}/versions/{VERSION_ID}
יצירת קורפוס RAG
אם יש לכם גישה לשם האינדקס של Pinecone ולשם המשאב הסודי עם ההרשאות שהוגדרו, תוכלו ליצור את מאגר המידע של RAG ולשייך אותו לאינדקס של Pinecone, כמו שמוצג בקוד לדוגמה זה.
כשיוצרים מאגר RAG בפעם הראשונה, פרטי חשבון השירות לא מוכנים. עם זאת, השדות הם אופציונליים ואפשר לשייך אותם למאגר המידע של RAG באמצעות UpdateRagCorpus API.
דוגמה לאופן יצירת מאגר RAG בלי לספק את פרטי חשבון השירות מופיעה במאמר יצירת מאגר RAG בלי שם אינדקס או מפתח API.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonההוראות להגדרה במאמר מדריך למתחילים של Agent Platform באמצעות ספריות לקוח.
כדי לבצע אימות ב-Agent Platform, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
REST
# Set your project ID under which you want to create the corpus
PROJECT_ID = "YOUR_PROJECT_ID"
# Choose a display name for your corpus
CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME
# Set your Pinecone index name
PINECONE_INDEX_NAME=YOUR_INDEX_NAME
# Set the full resource name of your secret. Follows the format
# projects/{PROJECT_NUMER}/secrets/{SECRET_ID}/versions/{VERSION_ID}
SECRET_RESOURCE_NAME=YOUR_SECRET_RESOURCE_NAME
# Call CreateRagCorpus API with all the Vector DB information.
# You can also add the embedding model choice or set other RAG corpus parameters on
# this call per your choice.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora -d '{
"display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
"rag_vector_db_config" : {
"pinecone": {"index_name": '\""${PINECONE_INDEX_NAME}"\"'},
"api_auth": {"api_key_config":
{"api_key_secret_version": '\""${SECRET_RESOURCE_NAME}"\"'}
}
}
}'
# To poll the status of your RAG corpus creation, get the operation_id returned in
# response of your CreateRagCorpus call.
OPERATION_ID="YOUR_OPERATION_ID"
# Poll Operation status until done = true in the response.
# The response to this call will contain the ID for your created RAG corpus
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/${OPERATION_ID}
יצירת מאגר RAG ללא שם אינדקס או מפתח API
אם זהו מאגר ה-RAG הראשון שלכם ואין לכם גישה לפרטים של חשבון השירות, או שלא השלמתם את שלבי ההקצאה של אינדקס Pinecone, עדיין תוכלו ליצור את מאגר ה-RAG. אחר כך אפשר לקשר את מאגר המידע של RAG להגדרה ריקה של Pinecone ולהוסיף את הפרטים מאוחר יותר.
חשוב לקחת בחשבון את הנקודות הבאות:
אם לא מספקים את שם האינדקס ואת שם הסוד של מפתח ה-API, אי אפשר לייבא קבצים אל מאגר ה-RAG.
אם בוחרים ב-Pinecone כמסד הנתונים הווקטורי של מאגר ה-RAG, אי אפשר לעבור בהמשך למסד נתונים אחר.
בדוגמת הקוד הזו מוצג איך ליצור מאגר מידע של RAG באמצעות Pinecone בלי לספק שם של אינדקס Pinecone או שם של סוד API. משתמשים ב-API UpdateRagCorpus כדי לציין את המידע החסר מאוחר יותר.
Python
import vertexai
from vertexai.preview import rag
# Set Project
PROJECT_ID = "YOUR_PROJECT_ID"
vertexai.init(project=PROJECT_ID, location="us-central1")
# Configure the Pinecone vector DB information
vector_db = rag.Pinecone()
# Name your corpus
DISPLAY_NAME = "YOUR_CORPUS_NAME"
rag_corpus = rag.create_corpus(display_name=DISPLAY_NAME, vector_db=vector_db)
REST
# Set your project ID under which you want to create the corpus
PROJECT_ID = "YOUR_PROJECT_ID"
# Choose a display name for your corpus
CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME
# Call CreateRagCorpus API with all the Vector DB information.
# You can also add the embedding model choice or set other RAG corpus parameters on
# this call per your choice.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora -d '{
"display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
"rag_vector_db_config" : {
"pinecone": {}
}
}'
# To poll the status of your RAG corpus creation, get the operation_id returned in
# response of your CreateRagCorpus call.
OPERATION_ID="YOUR_OPERATION_ID"
# Poll Operation status until done = true in the response.
# The response to this call will contain the ID for your created RAG corpus
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/${OPERATION_ID}
עדכון מאגר המידע של RAG
UpdateRagCorpus API מאפשר לכם לעדכן את ההגדרה של מסד הנתונים הווקטורי.
אם לא הגדרתם קודם את שם האינדקס של Pinecone ואת הגרסה הסודית של מפתח ה-API, תוכלו להשתמש ב-Pinecone API כדי לעדכן את השדות. אי אפשר לעדכן את הבחירה של מסד נתונים וקטורי. אפשר לספק את הסוד של מפתח ה-API, אבל זה לא חובה. עם זאת, אם לא מציינים את הסוד של מפתח ה-API, אפשר לייבא נתונים למאגר המידע של RAG.
| שדה | יכולת שינוי | חובה או אופציונלי |
|---|---|---|
rag_vector_db_config.vector_db |
אי אפשר לשנות את הבחירה הזו בהמשך. | חובה |
rag_vector_db_config.pinecone.index_name |
אי אפשר לשנות את ההגדרה אחרי שמגדירים את השדה במאגר המידע של RAG. | חובה |
rag_vector_db_config.api_auth.api_key_config.api_key_secret_version |
ניתן לשינוי. אחרי שמגדירים את מפתח ה-API, אי אפשר להסיר אותו. | אופציונלי |
Python
import vertexai
from vertexai.preview import rag
# Set Project
PROJECT_ID = "YOUR_PROJECT_ID"
vertexai.init(project=PROJECT_ID, location="us-central1")
# Configure the Pinecone vector DB information
vector_db = rag.Pinecone(index_name=)
# Name your corpus
DISPLAY_NAME = "YOUR_CORPUS_NAME"
rag_corpus = rag.create_corpus(display_name=DISPLAY_NAME, vector_db=vector_db)
REST
# Set your project ID for the corpus that you want to create.
PROJECT_ID = "YOUR_PROJECT_ID"
# Set your Pinecone index name
PINECONE_INDEX_NAME=YOUR_INDEX_NAME
# Set the full resource name of your secret. Follows the format
# projects/{PROJECT_NUMER}/secrets/{SECRET_ID}/versions/{VERSION_ID}
SECRET_RESOURCE_NAME=YOUR_SECRET_RESOURCE_NAME
# Call UpdateRagCorpus API with the Vector DB information.
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora -d '{
"rag_vector_db_config" : {
"pinecone": {"index_name": '\""${PINECONE_INDEX_NAME}"\"'},
"api_auth": {"api_key_config":
{"api_key_secret_version": '\""${SECRET_RESOURCE_NAME}"\"'}
}
}
}'
# To poll the status of your RAG corpus creation, get the operation_id returned in
# response of your CreateRagCorpus call.
OPERATION_ID="YOUR_OPERATION_ID"
# Poll Operation status until done = true in the response.
# The response to this call will contain the ID for your created RAG corpus
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/${OPERATION_ID}