บทแนะนำนี้จะช่วยคุณในการเริ่มต้นใช้งานการปรับแต่ง Gemini API ที่ใช้ Python SDK หรือ REST API โดยใช้ curl ตัวอย่างแสดงวิธีปรับแต่งโมเดลข้อความ บริการสร้างข้อความ Gemini API
ดูใน ai.google.dev | ลองใช้ Colab Notebook | ดูสมุดบันทึกใน GitHub |
ตั้งค่าการตรวจสอบสิทธิ์
Gemini API ช่วยให้คุณปรับแต่งโมเดลจากข้อมูลของคุณเองได้ เนื่องจากเป็นข้อมูลของคุณและ โมเดลที่คุณปรับแต่งนี้จะใช้การควบคุมการเข้าถึงที่เข้มงวดกว่าคีย์ API
ก่อนที่คุณจะสามารถเรียกใช้บทแนะนำนี้ได้ คุณจะต้องตั้งค่า OAuth สำหรับ โปรเจ็กต์ จากนั้นดาวน์โหลด "รหัสไคลเอ็นต์ OAuth" เป็น "client_secret.json"
คำสั่ง gcloud นี้จะเปลี่ยนไฟล์ client_secret.json
เป็นข้อมูลเข้าสู่ระบบที่
สามารถใช้เพื่อตรวจสอบสิทธิ์กับบริการได้
gcloud auth application-default login \
--client-id-file client_secret.json \
--scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.tuning'
ตั้งค่าตัวแปร
CURL
ตั้งค่าตัวแปรสำหรับค่าที่เกิดขึ้นซ้ำๆ เพื่อใช้กับ REST API ที่เหลือ
โค้ดกำลังใช้ไลบรารี Python os
เพื่อตั้งค่าสภาพแวดล้อม
ตัวแปรที่สามารถเข้าถึงได้ในเซลล์โค้ดทั้งหมด
ระบบนี้ใช้เฉพาะกับสภาพแวดล้อมสมุดบันทึก Colab เท่านั้น โค้ดในอีก เซลล์โค้ดเทียบเท่ากับการเรียกใช้คำสั่งต่อไปนี้ในแบช เครื่องปลายทาง
export access_token=$(gcloud auth application-default print-access-token)
export project_id=my-project-id
export base_url=https://generativelanguage.googleapis.com
import os
access_token = !gcloud auth application-default print-access-token
access_token = '\n'.join(access_token)
os.environ['access_token'] = access_token
os.environ['project_id'] = "[Enter your project-id here]"
os.environ['base_url'] = "https://generativelanguage.googleapis.com"
Python
access_token = !gcloud auth application-default print-access-token
access_token = '\n'.join(access_token)
project = '[Enter your project-id here]'
base_url = "https://generativelanguage.googleapis.com"
นำเข้าไลบรารี requests
import requests
import json
แสดงรายการโมเดลที่ปรับแต่ง
ยืนยันการตั้งค่าการตรวจสอบสิทธิ์โดยแสดงรายการโมเดลที่ปรับแต่งที่พร้อมใช้งาน
CURL
curl -X GET ${base_url}/v1beta/tunedModels \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${access_token}" \
-H "x-goog-user-project: ${project_id}"
Python
headers={
'Authorization': 'Bearer ' + access_token,
'Content-Type': 'application/json',
'x-goog-user-project': project
}
result = requests.get(
url=f'{base_url}/v1beta/tunedModels',
headers = headers,
)
result.json()
สร้างโมเดลที่ปรับแต่ง
หากต้องการสร้างโมเดลที่ปรับแต่ง คุณต้องส่งชุดข้อมูลไปยังโมเดลใน
training_data
สำหรับตัวอย่างนี้ คุณจะปรับแต่งโมเดลเพื่อสร้างตัวเลขถัดไปใน
ตามลำดับ ตัวอย่างเช่น หากอินพุตคือ 1
โมเดลควรแสดงผลเป็น 2
หาก
อินพุตคือ one hundred
เอาต์พุตควรเป็น one hundred one
CURL
curl -X POST $base_url/v1beta/tunedModels \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer ${access_token}" \
-H "x-goog-user-project: ${project_id}" \
-d '
{
"display_name": "number generator model",
"base_model": "models/gemini-1.0-pro-001",
"tuning_task": {
"hyperparameters": {
"batch_size": 2,
"learning_rate": 0.001,
"epoch_count":5,
},
"training_data": {
"examples": {
"examples": [
{
"text_input": "1",
"output": "2",
},{
"text_input": "3",
"output": "4",
},{
"text_input": "-3",
"output": "-2",
},{
"text_input": "twenty two",
"output": "twenty three",
},{
"text_input": "two hundred",
"output": "two hundred one",
},{
"text_input": "ninety nine",
"output": "one hundred",
},{
"text_input": "8",
"output": "9",
},{
"text_input": "-98",
"output": "-97",
},{
"text_input": "1,000",
"output": "1,001",
},{
"text_input": "10,100,000",
"output": "10,100,001",
},{
"text_input": "thirteen",
"output": "fourteen",
},{
"text_input": "eighty",
"output": "eighty one",
},{
"text_input": "one",
"output": "two",
},{
"text_input": "three",
"output": "four",
},{
"text_input": "seven",
"output": "eight",
}
]
}
}
}
}' | tee tunemodel.json
{ "name": "tunedModels/number-generator-model-dzlmi0gswwqb/operations/bvl8dymw0fhw", "metadata": { "@type": "type.googleapis.com/google.ai.generativelanguage.v1beta.CreateTunedModelMetadata", "totalSteps": 38, "tunedModel": "tunedModels/number-generator-model-dzlmi0gswwqb" } } % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2280 0 296 100 1984 611 4098 --:--:-- --:--:-- --:--:-- 4720
Python
operation = requests.post(
url = f'{base_url}/v1beta/tunedModels',
headers=headers,
json= {
"display_name": "number generator",
"base_model": "models/gemini-1.0-pro-001",
"tuning_task": {
"hyperparameters": {
"batch_size": 4,
"learning_rate": 0.001,
"epoch_count":5,
},
"training_data": {
"examples": {
"examples": [
{
'text_input': '1',
'output': '2',
},{
'text_input': '3',
'output': '4',
},{
'text_input': '-3',
'output': '-2',
},{
'text_input': 'twenty two',
'output': 'twenty three',
},{
'text_input': 'two hundred',
'output': 'two hundred one',
},{
'text_input': 'ninety nine',
'output': 'one hundred',
},{
'text_input': '8',
'output': '9',
},{
'text_input': '-98',
'output': '-97',
},{
'text_input': '1,000',
'output': '1,001',
},{
'text_input': '10,100,000',
'output': '10,100,001',
},{
'text_input': 'thirteen',
'output': 'fourteen',
},{
'text_input': 'eighty',
'output': 'eighty one',
},{
'text_input': 'one',
'output': 'two',
},{
'text_input': 'three',
'output': 'four',
},{
'text_input': 'seven',
'output': 'eight',
}
]
}
}
}
}
)
operation
<Response [200]>
operation.json()
{'name': 'tunedModels/number-generator-wl1qr34x2py/operations/41vni3zk0a47', 'metadata': {'@type': 'type.googleapis.com/google.ai.generativelanguage.v1beta.CreateTunedModelMetadata', 'totalSteps': 19, 'tunedModel': 'tunedModels/number-generator-wl1qr34x2py'} }
ตั้งค่าตัวแปรด้วยชื่อโมเดลที่ปรับแต่งเพื่อใช้กับตัวแปรที่เหลือ
name=operation.json()["metadata"]["tunedModel"]
name
'tunedModels/number-generator-wl1qr34x2py'
ค่าที่เหมาะสมที่สุดสำหรับจำนวน Epoch ขนาดกลุ่ม และอัตราการเรียนรู้จะขึ้นอยู่กับ ในชุดข้อมูลและข้อจำกัดอื่นๆ ของ Use Case หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ ค่าเหล่านี้ โปรดดู การตั้งค่าการปรับแต่งขั้นสูงและ ไฮเปอร์พารามิเตอร์
รับสถานะโมเดลที่ปรับแต่ง
สถานะของโมเดลตั้งค่าเป็น CREATING
ระหว่างการฝึกและจะเปลี่ยนเป็น
ACTIVE
เมื่อดำเนินการเสร็จแล้ว
CURL
ด้านล่างนี้เป็นโค้ด Python ที่ใช้แยกวิเคราะห์ชื่อโมเดลที่สร้างขึ้นจาก JSON ด้วยการตอบสนอง หากเรียกใช้ฟีเจอร์นี้ในเทอร์มินัล คุณก็ลองใช้ Bash ได้ โปรแกรมแยกวิเคราะห์ JSON เพื่อแยกวิเคราะห์การตอบกลับ
import json
first_page = json.load(open('tunemodel.json'))
os.environ['modelname'] = first_page['metadata']['tunedModel']
print(os.environ['modelname'])
tunedModels/number-generator-model-dzlmi0gswwqb
ส่งคำขอ GET
อีกรายการที่มีชื่อโมเดลเพื่อรับข้อมูลเมตาของโมเดลซึ่ง
มีฟิลด์รัฐ
curl -X GET ${base_url}/v1beta/${modelname} \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer ${access_token}" \
-H "x-goog-user-project: ${project_id}" | grep state
"state": "ACTIVE", % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 5921 0 5921 0 0 13164 0 --:--:-- --:--:-- --:--:-- 13157
Python
tuned_model = requests.get(
url = f'{base_url}/v1beta/{name}',
headers=headers,
)
tuned_model.json()
โค้ดด้านล่างจะตรวจสอบฟิลด์สถานะทุกๆ 5 วินาทีจนกว่าจะปิดไป
ในสถานะ CREATING
import time
import pprint
op_json = operation.json()
response = op_json.get('response')
error = op_json.get('error')
while response is None and error is None:
time.sleep(5)
operation = requests.get(
url = f'{base_url}/v1/{op_json["name"]}',
headers=headers,
)
op_json = operation.json()
response = op_json.get('response')
error = op_json.get('error')
percent = op_json['metadata'].get('completedPercent')
if percent is not None:
print(f"{percent:.2f}% - {op_json['metadata']['snapshots'][-1]}")
print()
if error is not None:
raise Exception(error)
100.00% - {'step': 19, 'epoch': 5, 'meanLoss': 1.402067, 'computeTime': '2024-03-14T15:11:23.766989274Z'}
เรียกใช้การอนุมาน
เมื่องานการปรับแต่งเสร็จสิ้น คุณจะสามารถใช้งานดังกล่าวเพื่อสร้างข้อความพร้อมข้อความ service.
CURL
ลองป้อนเลขโรมัน เช่น 63 (LXIII):
curl -X POST $base_url/v1beta/$modelname:generateContent \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer ${access_token}" \
-H "x-goog-user-project: ${project_id}" \
-d '{
"contents": [{
"parts": [{
"text": "LXIII"
}]
}]
}' 2> /dev/null
{ "candidates": [ { "content": { "parts": [ { "text": "LXIV" } ], "role": "model" }, "finishReason": "STOP", "index": 0, "safetyRatings": [ { "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "probability": "NEGLIGIBLE" }, { "category": "HARM_CATEGORY_HATE_SPEECH", "probability": "NEGLIGIBLE" }, { "category": "HARM_CATEGORY_HARASSMENT", "probability": "NEGLIGIBLE" }, { "category": "HARM_CATEGORY_DANGEROUS_CONTENT", "probability": "NEGLIGIBLE" } ] } ], "promptFeedback": { "safetyRatings": [ { "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "probability": "NEGLIGIBLE" }, { "category": "HARM_CATEGORY_HATE_SPEECH", "probability": "NEGLIGIBLE" }, { "category": "HARM_CATEGORY_HARASSMENT", "probability": "NEGLIGIBLE" }, { "category": "HARM_CATEGORY_DANGEROUS_CONTENT", "probability": "NEGLIGIBLE" } ] } }
เอาต์พุตจากโมเดลอาจไม่ถูกต้องหรือไม่ถูกต้อง หากโมเดลที่ปรับแต่ง ประสิทธิภาพไม่ดีตามมาตรฐานที่คุณต้องการ คุณอาจลองเพิ่ม ตัวอย่างที่มีคุณภาพ การปรับแต่งไฮเปอร์พารามิเตอร์หรือเพิ่มคำนำใน ตัวอย่าง คุณยังสามารถสร้างอีกโมเดล ที่ปรับแต่งตามรูปแบบแรกที่คุณ สร้าง แล้ว
ดูคู่มือการปรับแต่ง เพื่อดูคําแนะนําเพิ่มเติมเกี่ยวกับการปรับปรุงประสิทธิภาพ
Python
ลองป้อนตัวเลขภาษาญี่ปุ่น เช่น 6 (設):
import time
m = requests.post(
url = f'{base_url}/v1beta/{name}:generateContent',
headers=headers,
json= {
"contents": [{
"parts": [{
"text": "六"
}]
}]
})
import pprint
pprint.pprint(m.json())
{'candidates': [{'content': {'parts': [{'text': '七'}], 'role': 'model'}, 'finishReason': 'STOP', 'index': 0, 'safetyRatings': [{'category': 'HARM_CATEGORY_SEXUALLY_EXPLICIT', 'probability': 'NEGLIGIBLE'}, {'category': 'HARM_CATEGORY_HATE_SPEECH', 'probability': 'NEGLIGIBLE'}, {'category': 'HARM_CATEGORY_HARASSMENT', 'probability': 'LOW'}, {'category': 'HARM_CATEGORY_DANGEROUS_CONTENT', 'probability': 'NEGLIGIBLE'}]}], 'promptFeedback': {'safetyRatings': [{'category': 'HARM_CATEGORY_SEXUALLY_EXPLICIT', 'probability': 'NEGLIGIBLE'}, {'category': 'HARM_CATEGORY_HATE_SPEECH', 'probability': 'NEGLIGIBLE'}, {'category': 'HARM_CATEGORY_HARASSMENT', 'probability': 'NEGLIGIBLE'}, {'category': 'HARM_CATEGORY_DANGEROUS_CONTENT', 'probability': 'NEGLIGIBLE'}]} }
เอาต์พุตจากโมเดลอาจไม่ถูกต้องหรือไม่ถูกต้อง หากโมเดลที่ปรับแต่ง ประสิทธิภาพไม่ดีตามมาตรฐานที่คุณต้องการ คุณอาจลองเพิ่ม ตัวอย่างที่มีคุณภาพ การปรับแต่งไฮเปอร์พารามิเตอร์หรือเพิ่มคำนำใน ตัวอย่าง
บทสรุป
แม้ว่าข้อมูลการฝึกจะไม่ได้อ้างอิงถึงภาษาโรมันหรือญี่ปุ่นก็ตาม ตัวเลข โมเดลก็สามารถกำหนดข้อมูลทั่วไปได้ดีหลังจากปรับแต่ง วิธีนี้จะช่วยให้คุณ จะปรับแต่งรูปแบบให้เหมาะกับกรณีการใช้งานของคุณ
ขั้นตอนถัดไป
หากต้องการดูวิธีใช้บริการปรับแต่งโดยใช้ Python SDK สำหรับ Gemini API โปรดไปที่การเริ่มปรับแต่งอย่างรวดเร็วด้วย Python เพื่อดูวิธี หากต้องการใช้บริการอื่นๆ ใน Gemini API โปรดไปที่การเริ่มต้นใช้งาน REST บทแนะนำ