Hướng dẫn này sẽ giúp bạn bắt đầu điều chỉnh Gemini API dịch vụ bằng SDK Python hoặc REST API sử dụng curl. Các ví dụ cho thấy cách điều chỉnh mô hình văn bản dịch vụ tạo văn bản Gemini API.
Xem trên ai.google.dev | Dùng thử sổ tay Colab | Xem sổ tay trên GitHub |
Thiết lập tính năng xác thực
Gemini API cho phép bạn điều chỉnh các mô hình bằng dữ liệu của riêng mình. Vì đó là dữ liệu của bạn và các mô hình được điều chỉnh của bạn sử dụng các kiểm soát truy cập nghiêm ngặt hơn so với các khoá API có thể cung cấp.
Trước khi chạy hướng dẫn này, bạn cần thiết lập OAuth cho dự án rồi tải xuống "Mã ứng dụng OAuth" ở dạng "client_secret.json".
Lệnh gcloud này chuyển tệp client_secret.json
thành thông tin đăng nhập
có thể được sử dụng để xác thực với dịch vụ.
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'
Đặt biến
URL C
Đặt biến cho các giá trị định kỳ để sử dụng cho phần còn lại của API REST
cuộc gọi. Mã này sử dụng thư viện os
Python để thiết lập môi trường
các biến có thể truy cập được trong tất cả các ô chứa mã.
Chế độ này dành riêng cho môi trường sổ tay Colab. Mã trong phần tiếp theo ô chứa mã tương đương với việc chạy các lệnh sau trong bash thiết bị đầu cuối.
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"
Nhập thư viện requests
.
import requests
import json
Liệt kê các mô hình được điều chỉnh
Xác minh chế độ xác thực của bạn bằng cách liệt kê các mô hình đã được điều chỉnh và hiện có.
URL C
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()
Tạo mô hình được điều chỉnh
Để tạo một mô hình được điều chỉnh, bạn cần truyền tập dữ liệu vào mô hình trong
Trường training_data
.
Trong ví dụ này, bạn sẽ điều chỉnh một mô hình để tạo số tiếp theo trong
trình tự. Ví dụ: nếu đầu vào là 1
thì mô hình sẽ xuất ra 2
. Nếu
đầu vào là one hundred
, thì đầu ra phải là one hundred one
.
URL C
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'} }
Đặt biến có tên của mô hình được điều chỉnh để sử dụng cho phần còn lại của cuộc gọi.
name=operation.json()["metadata"]["tunedModel"]
name
'tunedModels/number-generator-wl1qr34x2py'
Các giá trị tối ưu cho số lượng thời gian bắt đầu của hệ thống, kích thước lô và tốc độ học là phụ thuộc trên tập dữ liệu và các hạn chế khác trong trường hợp sử dụng của bạn. Để tìm hiểu thêm về các giá trị này, xem Cài đặt chỉnh nâng cao và Siêu tham số.
Nhận trạng thái mô hình được điều chỉnh
Trạng thái của mô hình này được đặt thành CREATING
trong quá trình huấn luyện và sẽ thay đổi thành
ACTIVE
sau khi hoàn tất.
URL C
Dưới đây là một đoạn mã Python để phân tích cú pháp tên mô hình đã tạo từ JSON phản hồi. Nếu đang chạy lệnh này trong thiết bị đầu cuối, bạn có thể thử sử dụng bash Trình phân tích cú pháp JSON để phân tích cú pháp phản hồi.
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
Thực hiện một yêu cầu GET
khác với tên mô hình để lấy siêu dữ liệu của mô hình
bao gồm trường trạng thái.
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()
Đoạn mã bên dưới kiểm tra trường trạng thái 5 giây một lần cho đến khi trường đó không còn nữa
ở trạng thái 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'}
Chạy dự đoán
Sau khi công việc điều chỉnh hoàn tất, bạn có thể sử dụng công việc đó để tạo văn bản có văn bản .
URL C
Thử nhập một chữ số La Mã, giả sử 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" } ] } }
Kết quả từ mô hình có thể có hoặc không chính xác. Nếu mô hình được điều chỉnh đang không hoạt động theo tiêu chuẩn bắt buộc, bạn có thể thử thêm các ví dụ về chất lượng, tinh chỉnh các siêu tham số hoặc thêm phần mở đầu vào ví dụ. Bạn thậm chí có thể tạo một mô hình được điều chỉnh khác dựa trên mô hình đầu tiên bạn đã tạo.
Xem hướng dẫn điều chỉnh để được hướng dẫn thêm về cách cải thiện hiệu suất.
Python
Thử nhập một chữ số tiếng Nhật, chẳng hạn như 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'}]} }
Kết quả từ mô hình có thể có hoặc không chính xác. Nếu mô hình được điều chỉnh đang không hoạt động theo tiêu chuẩn bắt buộc, bạn có thể thử thêm các ví dụ về chất lượng, tinh chỉnh các siêu tham số hoặc thêm phần mở đầu vào ví dụ.
Kết luận
Mặc dù dữ liệu huấn luyện không chứa bất kỳ tham chiếu nào đến tiếng La Mã hoặc tiếng Nhật chữ số, nên mô hình này có thể khái quát hoá tốt sau khi tinh chỉnh. Bằng cách này, bạn có thể tinh chỉnh các mô hình cho phù hợp với trường hợp sử dụng của mình.
Các bước tiếp theo
Để tìm hiểu cách sử dụng dịch vụ điều chỉnh với sự trợ giúp của SDK Python cho Gemini API, hãy xem phần bắt đầu nhanh điều chỉnh với Python. Để tìm hiểu cách làm để sử dụng các dịch vụ khác trong Gemini API, hãy truy cập vào trang hướng dẫn bắt đầu REST hướng dẫn.