LLM ของ SQL เท่านั้นพร้อม BigQuery ML ที่ใช้ Vertex AI PaLM API

1. บทนำ

ในโค้ดแล็บนี้ ฉันได้แสดงขั้นตอนในการสรุปซอร์สโค้ดจากที่เก็บ GitHub และการระบุภาษาของการเขียนโปรแกรมในที่เก็บ โดยใช้โมเดลภาษาขนาดใหญ่ของ Vertex AI สำหรับการสร้างข้อความ ( text-bison) เป็นฟังก์ชันระยะไกลที่โฮสต์ใน BigQuery เรามีสแนปชอตที่สมบูรณ์ของที่เก็บ GitHub แบบโอเพนซอร์สกว่า 2.8 ล้านรายการในชุดข้อมูลสาธารณะของ Google BigQuery แล้วในตอนนี้ ต้องขอขอบคุณ Archive Project ของ GitHub รายการบริการที่ใช้มีดังนี้

  1. BigQuery ML
  2. Vertex AI PaLM API

สิ่งที่คุณจะสร้าง

คุณจะสร้าง

  • ชุดข้อมูล BigQuery ที่มีโมเดล
  • โมเดล BigQuery ที่โฮสต์ Vertex AI PaLM API เป็นฟังก์ชันระยะไกล
  • การเชื่อมต่อภายนอกเพื่อสร้างการเชื่อมต่อระหว่าง BigQuery กับ Vertex AI

2. ข้อกำหนด

  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน

3. ก่อนเริ่มต้น

  1. ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
  2. ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าโปรเจ็กต์เปิดใช้การเรียกเก็บเงินแล้วหรือไม่
  3. ตรวจสอบว่าได้เปิดใช้ API ที่จำเป็นทั้งหมด (BigQuery API, Vertex AI API, BigQuery Connection API) แล้ว
  4. คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud และมาพร้อมกับ bq ที่โหลดไว้ล่วงหน้า ดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ

จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell ที่มุมขวาบน

51622c00acec2fa.png

หากไม่ได้ตั้งค่าโปรเจ็กต์ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งค่า

gcloud config set project <YOUR_PROJECT_ID>
  1. ไปที่คอนโซล BigQuery โดยตรงโดยป้อน URL ต่อไปนี้ในเบราว์เซอร์ https://console.cloud.google.com/bigquery

4. กำลังเตรียมข้อมูล

ในกรณีการใช้งานนี้ เราใช้เนื้อหาซอร์สโค้ดจากชุดข้อมูล github_repos ในชุดข้อมูลสาธารณะของ Google BigQuery หากต้องการใช้ฟีเจอร์นี้ ให้ค้นหา "github_repos" ในคอนโซล BigQuery แล้วกด Enter คลิกดาวข้างชุดข้อมูลที่แสดงเป็นผลการค้นหา จากนั้นคลิกตัวเลือก "แสดงเฉพาะรายการที่ติดดาว" เพื่อดูเฉพาะชุดข้อมูลนั้นจากชุดข้อมูลสาธารณะ

dc6bf1e2fa6bba8a.png

ขยายตารางในชุดข้อมูลเพื่อดูสคีมาและตัวอย่างข้อมูล เราจะใช้ sample_contents ซึ่งมีเพียงตัวอย่าง (10%) ของข้อมูลทั้งหมดในตารางเนื้อหา ตัวอย่างข้อมูลมีดังนี้

e021c689c56abf22.png

5. การสร้างชุดข้อมูล BigQuery

ชุดข้อมูล BigQuery คือคอลเล็กชันของตาราง ตารางทั้งหมดในชุดข้อมูลจะจัดเก็บไว้ในตำแหน่งข้อมูลเดียวกัน นอกจากนี้ คุณยังแนบการควบคุมการเข้าถึงที่กำหนดเองเพื่อจำกัดการเข้าถึงชุดข้อมูลและตารางของชุดข้อมูลได้ด้วย

สร้างชุดข้อมูลในภูมิภาค "สหรัฐอเมริกา" (หรือภูมิภาคใดก็ได้ที่เราต้องการ) ชื่อ bq_llm

c67e9f929629739a.png

ชุดข้อมูลนี้จะเก็บโมเดล ML ที่เราจะสร้างในขั้นตอนถัดไป โดยปกติแล้ว เราจะจัดเก็บข้อมูลที่ใช้ในแอปพลิเคชัน ML ไว้ในตารางในชุดข้อมูลนี้ด้วย แต่ในกรณีการใช้งานของเรา ข้อมูลอยู่ในชุดข้อมูลสาธารณะของ BigQuery อยู่แล้ว เราจึงจะอ้างอิงข้อมูลดังกล่าวโดยตรงจากชุดข้อมูลที่สร้างขึ้นใหม่ตามที่จำเป็น หากต้องการทำโปรเจ็กต์นี้ในชุดข้อมูลของคุณเองที่อยู่ใน CSV (หรือไฟล์อื่นๆ) คุณสามารถโหลดข้อมูลลงในชุดข้อมูล BigQuery ลงในตารางได้โดยเรียกใช้คำสั่งด้านล่างจากเทอร์มินัล Cloud Shell

bq load --source_format=CSV --skip_leading_rows=1 bq_llm.table_to_hold_your_data \
./your_file.csv \ text:string,label:string

6. สร้างการเชื่อมต่อภายนอก

สร้างการเชื่อมต่อภายนอก (เปิดใช้ BQ Connection API หากยังไม่ได้ดำเนินการ) และจดรหัสบัญชีบริการจากรายละเอียดการกำหนดค่าการเชื่อมต่อ

  1. คลิกปุ่ม +เพิ่ม ในแผง BigQuery Explorer (ทางด้านซ้ายของคอนโซล BigQuery) แล้วคลิก "การเชื่อมต่อกับแหล่งข้อมูลภายนอก" ในแหล่งข้อมูลยอดนิยมที่แสดง
  2. เลือกประเภทการเชื่อมต่อเป็น "ฟังก์ชัน BigLake และฟังก์ชันระยะไกล" และระบุ "llm-conn" เป็นรหัสการเชื่อมต่อ

6b75042881eaec5f.png

  1. เมื่อสร้างการเชื่อมต่อแล้ว ให้จดบันทึกบัญชีบริการที่สร้างขึ้นจากรายละเอียดการกำหนดค่าการเชื่อมต่อ

7. ให้สิทธิ์

ในขั้นตอนนี้ เราจะให้สิทธิ์แก่บัญชีบริการเพื่อเข้าถึงบริการ Vertex AI

เปิด IAM แล้วเพิ่มบัญชีบริการที่คุณคัดลอกหลังจากสร้างการเชื่อมต่อภายนอกเป็น Principal แล้วเลือกบทบาท "ผู้ใช้ Vertex AI"

ff8e1d730879f972.png

8. สร้างโมเดล ML ระยะไกล

สร้างโมเดลระยะไกลที่แสดงถึงโมเดลภาษาขนาดใหญ่ของ Vertex AI ที่โฮสต์ไว้

CREATE OR REPLACE MODEL bq_llm.llm_model
  REMOTE WITH CONNECTION `us.llm-conn`
  OPTIONS (remote_service_type = 'CLOUD_AI_LARGE_LANGUAGE_MODEL_V1');

โดยจะสร้างโมเดลชื่อ llm_model ในชุดข้อมูล bq_llm ซึ่งใช้ประโยชน์จาก CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 API ของ Vertex AI เป็นฟังก์ชันระยะไกล ซึ่งอาจใช้เวลาหลายวินาทีจึงจะเสร็จสมบูรณ์

9. สร้างข้อความโดยใช้โมเดล ML

เมื่อสร้างโมเดลแล้ว ให้ใช้โมเดลเพื่อสร้าง สรุป หรือจัดหมวดหมู่ข้อความ

SELECT
  ml_generate_text_result['predictions'][0]['content'] AS generated_text,
  ml_generate_text_result['predictions'][0]['safetyAttributes']
    AS safety_attributes,
  * EXCEPT (ml_generate_text_result)
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
    ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens));

**คำอธิบาย:

ml_generate_text_result** คือการตอบกลับจากโมเดลการสร้างข้อความในรูปแบบ JSON ซึ่งมีทั้งแอตทริบิวต์เนื้อหาและความปลอดภัย ดังนี้ ก. เนื้อหาแสดงผลลัพธ์ข้อความที่สร้างขึ้น ข แอตทริบิวต์ความปลอดภัยแสดงถึงตัวกรองเนื้อหาในตัวที่มีเกณฑ์ที่ปรับได้ซึ่งเปิดใช้ใน Vertex AI Palm API เพื่อหลีกเลี่ยงการตอบกลับที่ไม่ตั้งใจหรือไม่คาดคิดจากโมเดลภาษาขนาดใหญ่ โดยระบบจะบล็อกการตอบกลับหากละเมิดเกณฑ์ความปลอดภัย

ML.GENERATE_TEXT คือโครงสร้างที่คุณใช้ใน BigQuery เพื่อเข้าถึง LLM ของ Vertex AI เพื่อทำงานสร้างข้อความ

CONCAT จะต่อท้ายข้อความ PROMPT และระเบียนฐานข้อมูล

github_repos คือชื่อชุดข้อมูล และ sample_contents คือชื่อของตารางที่เก็บข้อมูลที่เราจะใช้ในการออกแบบพรอมต์

อุณหภูมิคือพารามิเตอร์พรอมต์ที่ใช้ควบคุมความสุ่มของคำตอบ โดยยิ่งน้อยยิ่งดีในแง่ของความเกี่ยวข้อง

Max_output_tokens คือจำนวนคำที่คุณต้องการในคำตอบ

การตอบกลับการค้นหาจะมีลักษณะดังนี้

1156f6eecb548cd5.png

10. ทำให้ผลการค้นหาแบนราบ

มาทำให้ผลลัพธ์แบนราบเพื่อที่เราจะได้ไม่ต้องถอดรหัส JSON อย่างชัดเจนในคำค้นหา

SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
        ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

**คำอธิบาย:

Flatten_json_output** แสดงค่าบูลีน ซึ่งหากตั้งค่าเป็นจริงจะแสดงข้อความที่เข้าใจได้ง่ายซึ่งดึงมาจากคำตอบ JSON

การตอบกลับการค้นหาจะมีลักษณะดังนี้

3b662ef7d3ba9263.png

11. ล้างข้อมูล

โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
  2. ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
  3. ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์

12. ขอแสดงความยินดี

ยินดีด้วย คุณใช้ LLM การสร้างข้อความของ Vertex AI โดยอัตโนมัติเพื่อทำการวิเคราะห์ข้อความในข้อมูลโดยใช้เฉพาะการค้นหา SQL ได้สำเร็จ ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่มีได้ในเอกสารประกอบของผลิตภัณฑ์ LLM ของ Vertex AI