יצירה וניהול של הטמעות וקטוריות

בדף הזה נסביר איך ליצור ולאחסן הטבעות וקטוריות. סקירה כללית על אחסון של הטמעות וקטוריות

לפני שמתחילים

אם אתם משתמשים ב-Cloud SQL ל-MySQL מגרסה 8.4 ומטה, אתם צריכים מכונת Cloud SQL עם האפשרות cloudsql_vector database flag מופעלת כדי ליצור ולאחסן הטמעות וקטורים.

אם אתם משתמשים ב-Cloud SQL ל-MySQL בגרסה 9.7 ואילך, אתם יכולים ליצור ולאחסן הטמעות וקטוריות בלי להגדיר את האפשרות cloudsql_vector דגל לניהול מסד נתונים במופע של Cloud SQL. עם זאת, אי אפשר ליצור אינדקסים וקטוריים או לבצע חיפושי ANN בנתונים הווקטוריים.

יצירת הטמעות וקטוריות על סמך נתוני שורות

אפשר ליצור הטמעת וקטורים לנתונים בשורה מסוימת באמצעות API להטמעת טקסט, כמו Vertex AI או OpenAI. אפשר להשתמש בכל API להטמעת טקסט עם הטמעות וקטורים ב-Cloud SQL. עם זאת, חובה להשתמש באותו API להטמעת טקסט כדי ליצור וקטורים של מחרוזת שאילתה. אי אפשר לשלב בין ממשקי API שונים כדי לקבל נתוני מקור ווקטוריזציה של שאילתות.

לדוגמה, אתם יכולים ליצור הטבעת וקטור מ-Vertex AI:

from vertexai.language_models import TextEmbeddingModel

def text_embedding() -> list:
    """Text embedding with a Large Language Model."""
    model = TextEmbeddingModel.from_pretrained("text-embedding-004")
    embeddings = model.get_embeddings(["What is life?"])
    for embedding in embeddings:
        vector = embedding.values
        print(f"Length of Embedding Vector: {len(vector)}")
    return vector

if __name__ == "__main__":
    text_embedding()

אחסון של הטמעות וקטוריות

בקטע הזה מופיעות דוגמאות להצהרות לאחסון הטמעות וקטורים ב-Cloud SQL.

יצירת טבלה חדשה עם עמודה של הטמעת וקטור

משתמשים בהצהרה CREATE TABLE עם עמודה שמשתמשת בסוג הנתונים VECTOR.

משתמשים בתחביר הבא כדי ליצור את הטבלה.

ב-Cloud SQL ל-MySQL 8.4 ובגרסאות קודמות, משתמשים בתחביר הבא:

CREATE TABLE TABLE_NAME(
  id INTEGER
  PRIMARY KEY
    AUTO_INCREMENT,
    title VARCHAR(60),
    EMBEDDING_COLUMN_NAME
      VECTOR(VECTOR_DIMENSIONS)
  USING VARBINARY);

מחליפים את הפרמטרים הבאים:

  • TABLE_NAME: השם של הטבלה שבה רוצים לאחסן את ההטמעות.
  • EMBEDDING_COLUMN_NAME: שם העמודה שבה מאוחסן הווקטור.
  • VECTOR_DIMENSIONS: מספר המימדים שבהם ייעשה שימוש להטמעה.

בדוגמה הבאה, לעמודת ההטמעה יש וקטור עם שלושה ממדים. הנתונים שמאוחסנים בעמודה הזו הם מסוג VARBINARY.

CREATE TABLE books(
  id INTEGER PRIMARY KEY AUTO_INCREMENT, title VARCHAR(60), embedding VECTOR(3) USING VARBINARY);

ב-Cloud SQL ל-MySQL 9.7 ואילך, ההצהרה על מילת המפתח VARBINARY היא אופציונלית ונתמכת לצורך תאימות לאחור. אין צורך לציין את המימדים של הווקטור, כי ברירת המחדל היא 2048.

ב-Cloud SQL ל-MySQL 9.7 ואילך, אפשר להשתמש בתחביר הבא:

CREATE TABLE TABLE_NAME(
  id INTEGER
  PRIMARY KEY
    AUTO_INCREMENT,
    title VARCHAR(60),
    EMBEDDING_COLUMN_NAME
      VECTOR([VECTOR_DIMENSIONS])
  [USING VARBINARY]);

מידע נוסף זמין במאמר בנושא סוג הנתונים VECTOR במסמכי התיעוד של MySQL.

הוספת עמודה של הטמעת וקטור לטבלה קיימת

משתמשים בהצהרת ALTER TABLE כדי להוסיף עמודה של הטמעת וקטור לטבלה קיימת. בעמודה צריך להשתמש בסוג הנתונים VECTOR כדי לאחסן את ההטמעה.

בדוגמה הבאה, עמודת הטמעה עם וקטור בעל שלושה ממדים מוכנסת לטבלה.

ALTER TABLE books
ADD COLUMN embedding
  VECTOR(3)
USING VARBINARY;

ל-MySQL 9.7:

ALTER TABLE books
ADD COLUMN embedding
  VECTOR(3);

הוספת הטמעת וקטור

אפשר להשתמש בפונקציה INSERT עם הפונקציה string_to_vector כדי להוסיף ערכי הטמעה של וקטור לטבלה.

בדוגמה הבאה, מוסיפים וקטור עם שלושה ממדים לעמודת ההטמעה.

INSERT INTO books
  (
    title,
    embedding)
VALUES (('book title', string_to_vector('[1,2,3]')));

הוספת כמה הטמעות וקטוריות

משתמשים ב-INSERT עם הפונקציה string_to_vector כדי להוסיף רשימה של הטבעות וקטוריות שמופרדות בפסיקים.

בדוגמה הבאה, שתי הטמעות, שכל אחת מהן מכילה וקטור עם שלושה ממדים, מוכנסות לעמודת ההטמעה.

INSERT INTO books
  (
    title,
    embedding)
VALUES
  (
    (
      'book title',
      string_to_vector('[1,2,3]')),
    ('book title', string_to_vector('[4,5,6]')));

פעולת Upsert של הטמעת וקטור

כדי להוסיף עמודת הטמעת וקטורים, משתמשים בפעולה INSERT או UPDATE בטבלה עם הפונקציה string_to_vector, לפי התחביר הבא.

בדוגמה הבאה, נעשה שימוש בפעולת upsert כדי להוסיף או לעדכן את עמודת ההטמעה בהטמעה שמכילה וקטור עם שלושה ממדים.

INSERT INTO books
  (
    id,
    title,
    embedding)
VALUES
  (
    (
      1,
      'book title',
      string_to_vector('[1,2,3]')))
ON DUPLICATE KEY UPDATE embedding = string_to_vector('[1,2,3]');

עדכון הטמעת וקטורים

כדי לעדכן הטמעת וקטורים, משתמשים בפונקציה UPDATE עם הפונקציה string_to_vector.

בהצהרה הבאה, נעשה שימוש ב-UPDATE כדי לעדכן את עמודת ההטמעה בווקטור עם שלושה ממדים.

UPDATE books
SET embedding = string_to_vector('[7,8,9]')
WHERE id = 1;

אחזור הטמעות וקטורים

כדי לאחזר הטמעות וקטורים, משתמשים בפונקציה vector_to_string של Cloud SQL יחד עם שם ההטמעה.

בהצהרה הבאה, העמודה של ההטמעה מאוחזרת לצפייה.

SELECT vector_to_string(embedding) FROM books WHERE id = 1;

מחיקה של הטמעת וקטורים

אפשר להשתמש בפונקציה DELETE עם string_to_vector כדי להסיר הטמעת וקטורים מטבלה. אם יש אינדקס וקטורי, צריך למחוק אותו קודם. מידע נוסף זמין במאמר בנושא מחיקת אינדקס וקטורי.

במשפט הבא, נעשה שימוש ב-DELETE כדי למחוק את הערך בעמודת ההטמעה.

DELETE FROM books
WHERE embedding = string_to_vector('[1,2,3]');

המאמרים הבאים