ai.google.dev'de görüntüleyin | Google Colab'de çalıştır | Kaynağı GitHub'da görüntüleyin |
Bu not defterinde, Gemini API'yi çağırmak için curl komutlarını veya Python request API'yi kullanarak Gemini API ayarlama hizmetini nasıl kullanmaya başlayacağınızı öğreneceksiniz. Burada, Gemini API'nin metin oluşturma hizmetinin temelindeki metin modelini nasıl ayarlayabileceğinizi öğreneceksiniz.
Kurulum
Kimliği doğrula
Gemini API, modelleri kendi verilerinize göre ayarlamanıza olanak tanır. Söz konusu olan sizin verileriniz ve hassaslaştırılmış modelleriniz olduğu için bu, API Anahtarlarının sağlayabileceğinden daha sıkı erişim denetimleri gerektirir.
Bu eğiticiyi çalıştırmadan önce projeniz için OAuth'u kurmanız gerekir.
Colab'de kurulumun en kolay yolu, client_secret.json
dosyanızın içeriğini CLIENT_SECRET
gizli adıyla Colab'ın "Secrets Manager"ına (sol paneldeki anahtar simgesinin altında) kopyalamaktır.
Bu gcloud komutu, client_secret.json
dosyasını hizmetle kimlik doğrulamak amacıyla kullanılabilecek kimlik bilgilerine dönüştürür.
try:
from google.colab import userdata
import pathlib
pathlib.Path('client_secret.json').write_text(userdata.get('CLIENT_SECRET'))
# Use `--no-browser` in colab
!gcloud auth application-default login --no-browser --client-id-file client_secret.json --scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.tuning'
except ImportError:
!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'
You are authorizing client libraries without access to a web browser. Please run the following command on a machine with a web browser and copy its output back here. Make sure the installed gcloud version is 372.0.0 or newer. gcloud auth application-default login --remote-bootstrap="https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=87071151422-n1a3cb6c7fvkfg4gmhdtmn5ulol2l4be.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgenerative-language.tuning&state=QIyNibWSaTIsozjmvZEkVBo6EcoW0G&access_type=offline&code_challenge=76c1ZiGvKN8cvlYfj3BmbCwE4e7tvrlwaX3REUX25gY&code_challenge_method=S256&token_usage=remote" Enter the output of the above command: https://localhost:8085/?state=QIyNibWSaTIsozjmvZEkVBo6EcoW0G&code=4/0AeaYSHBKrY911S466QjKQIFODoOPXlO1mWyTYYdrbELIDV6Hw2DKRAyro62BugroSvIWsA&scope=https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/generative-language.tuning Credentials saved to file: [/content/.config/application_default_credentials.json] These credentials will be used by any library that requests Application Default Credentials (ADC).
CURL ile REST API çağırma
Bu bölümde, REST API'yi çağırmak için örnek curl ifadeleri verilmiştir. İnce ayar işi oluşturmayı, işin durumunu kontrol etmeyi ve tamamlandığında çıkarım çağrısı yapmayı öğreneceksiniz.
Değişkenleri ayarla
Geri kalan REST API çağrılarında kullanmak üzere yinelenen değerler için değişkenler ayarlayın. Bu kod, tüm kod hücrelerinden erişilebilen ortam değişkenlerini ayarlamak için Python os
kitaplığını kullanır.
Bu durum Colab not defteri ortamına özeldir. Sonraki kod hücresinde yer alan kod, aşağıdaki komutları bir bash terminalinde çalıştırmaya eşdeğerdir.
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"
Hassaslaştırılmış modelleri listeleme
Mevcut hassaslaştırılmış modelleri listeleyerek kimlik doğrulama ayarlarınızı doğrulayın.
curl -X GET ${base_url}/v1beta/tunedModels \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${access_token}" \
-H "x-goog-user-project: ${project_id}"
Hassaslaştırılmış model oluşturun
Hassaslaştırılmış model oluşturmak için veri kümenizi training_data
alanında modele iletmeniz gerekir.
Bu örnekte, dizideki bir sonraki sayıyı oluşturmak için bir modeli ayarlayacaksınız. Örneğin, giriş 1
ise modelin çıkışı 2
olmalıdır. Giriş one hundred
ise çıkış one hundred one
olmalıdır.
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
Hassas model durumunu alma
Modelin durumu, eğitim sırasında CREATING
olarak ayarlanır ve tamamlandığında ACTIVE
olarak değişir.
Oluşturulan model adını yanıt JSON dosyasından ayırmak için bir Python kodu aşağıda verilmiştir. Bunu bir terminalde çalıştırıyorsanız yanıtı ayrıştırmak için bir bash JSON ayrıştırıcı kullanmayı deneyebilirsiniz.
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
Durum alanını içeren model meta verilerini almak için model adıyla başka bir GET
isteği yapın.
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
Çıkarımı çalıştır
İnce ayar işiniz bittikten sonra, metin hizmetiyle metin oluşturmak için bu işi kullanabilirsiniz. Bir Roma rakamı girin, örneğin 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" } ] } }
Modelinizden elde edilen çıkış doğru olabilir veya olmayabilir. Hassaslaştırılmış model, gerekli standartlarınızı karşılamıyorsa daha fazla yüksek kaliteli örnek eklemeyi, hiperparametrelerde ince ayar yapmayı veya örneklerinize önsöz eklemeyi deneyebilirsiniz. Hatta oluşturduğunuz ilk modeli temel alarak başka bir hassaslaştırılmış model de oluşturabilirsiniz.
Performansı artırma konusunda daha fazla bilgi için ayarlama kılavuzuna bakın.
Python istekleriyle REST API'yi çağırma
Rest API'sini, http istekleri göndermenize olanak tanıyan herhangi bir kitaplıkla çağırabilirsiniz. Sonraki örnek grubunda Python istek kitaplığı kullanılır ve daha gelişmiş özelliklerden bazıları gösterilmektedir.
Değişkenleri ayarla
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
kitaplığını içe aktarın.
import requests
import json
Hassaslaştırılmış modelleri listeleme
Mevcut hassaslaştırılmış modelleri listeleyerek kimlik doğrulama ayarlarınızı doğrulayın.
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()
Hassaslaştırılmış model oluşturun
Curl örneğinde olduğu gibi, veri kümesini training_data
alanı üzerinden geçirirsiniz.
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'} }
Diğer çağrılarda kullanmak üzere, hassaslaştırılmış modelinizin adını taşıyan bir değişken ayarlayın.
name=operation.json()["metadata"]["tunedModel"]
name
'tunedModels/number-generator-wl1qr34x2py'
Hassas model durumunu alma
Durum alanını kontrol ederek ayarlama işinizin ilerleme durumunu kontrol edebilirsiniz. CREATING
ayarlama işinin devam ettiği, ACTIVE
ise trenlerin tamamlandığı ve hassaslaştırılmış modelin kullanıma hazır olduğu anlamına gelir.
tuned_model = requests.get(
url = f'{base_url}/v1beta/{name}',
headers=headers,
)
tuned_model.json()
Aşağıdaki kod, durum alanını CREATING
durumundan çıkana kadar her 5 saniyede bir kontrol eder.
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'}
Çıkarımı çalıştır
İnce ayar işi bittikten sonra, temel metin modelini kullandığınız şekilde metin oluşturmak için bu işi kullanabilirsiniz. Japonca bir rakam girmeyi deneyin; örneğin, 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'}]} }
Modelinizden elde edilen çıkış doğru olabilir veya olmayabilir. Hassaslaştırılmış model, gerekli standartlarınızı karşılamıyorsa daha fazla yüksek kaliteli örnek eklemeyi, hiperparametrelerde ince ayar yapmayı veya örneklerinize önsöz eklemeyi deneyebilirsiniz.
Sonuç
Eğitim verileri Romen veya Japon rakamlarına herhangi bir referans içermese de model, ince ayar yapıldıktan sonra iyi bir genelleme yapabildi. Böylece, modellerde ince ayar yaparak kullanım alanlarınıza uygun hale getirebilirsiniz.
Sonraki adımlar
Gemini API için Python SDK yardımıyla ayar hizmetinin nasıl kullanılacağını öğrenmek isterseniz Python ile ince ayar hızlı başlangıç kılavuzunu ziyaret edin. Gemini API'deki diğer hizmetleri nasıl kullanacağınızı öğrenmek için Python hızlı başlangıç kılavuzunu ziyaret edin.