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

1. บทนำ

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

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

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

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 และเพิ่มบัญชีบริการที่คุณคัดลอกหลังจากสร้างการเชื่อมต่อภายนอกเป็นผู้หลักและเลือก "ผู้ใช้ 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 ที่มีทั้งแอตทริบิวต์เนื้อหาและความปลอดภัย ก. เนื้อหาแสดงผลลัพธ์ข้อความที่สร้างขึ้น b. แอตทริบิวต์ความปลอดภัยจะแสดงตัวกรองเนื้อหาในตัวที่มีเกณฑ์แบบปรับได้ซึ่งเปิดใช้ใน Vertex AI Palm API เพื่อหลีกเลี่ยงการตอบสนองที่ไม่คาดคิดหรือคาดไม่ถึงจากโมเดลภาษาขนาดใหญ่ โดยการตอบกลับจะถูกบล็อกหากละเมิดเกณฑ์ความปลอดภัย

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

CONCAT จะเพิ่มคำสั่ง PROMPT และบันทึกฐานข้อมูล

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

Temperature คือพารามิเตอร์พรอมต์เพื่อควบคุมการสุ่มคำตอบ โดยยิ่งให้คำตอบน้อยก็จะยิ่งดีกว่าในแง่ของความเกี่ยวข้อง

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. ขอแสดงความยินดี

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