Kuptoni dhe numëroni shenjat


Gemini dhe modele të tjera gjeneruese të AI përpunojnë hyrjen dhe daljen në një shkallëzim të quajtur token .

Rreth argumenteve

Shenjat mund të jenë karaktere të vetme si z ose fjalë të tëra si cat . Fjalët e gjata ndahen në disa shenja. Grupi i të gjithë shenjave të përdorura nga modeli quhet fjalor, dhe procesi i ndarjes së tekstit në token quhet tokenizimi .

Për modelet Gemini, një shenjë është e barabartë me rreth 4 karaktere. 100 argumente janë të barabarta me rreth 60-80 fjalë angleze.

Kur faturimi është i aktivizuar, kostoja e një telefonate në API të Gemini përcaktohet pjesërisht nga numri i kodeve hyrëse dhe dalëse, kështu që të dish se si të numërosh argumentet mund të jetë e dobishme.

Provoni të numëroni argumentet në një Colab

Mund të provoni të numëroni argumentet duke përdorur një Colab.

Dritaret e kontekstit

Modelet e disponueshme përmes Gemini API kanë dritare konteksti që maten në token. Dritarja e kontekstit përcakton se sa të dhëna mund të jepni dhe sa rezultate mund të gjenerojë modeli. Ju mund të përcaktoni madhësinë e dritares së kontekstit duke thirrur pikën përfundimtare të getModels ose duke parë në dokumentacionin e modeleve .

Në shembullin e mëposhtëm, mund të shihni se modeli gemini-1.5-flash ka një kufi hyrës prej rreth 1,000,000 argumentesh dhe një kufi në dalje prej rreth 8,000 argumentesh, që do të thotë se një dritare kontekstuale është 1,000,000 argumente.

import google.generativeai as genai

model_info = genai.get_model("models/gemini-1.5-flash")

# Returns the "context window" for the model,
# which is the combined input and output token limits.
print(f"{model_info.input_token_limit=}")
print(f"{model_info.output_token_limit=}")
# ( input_token_limit=30720, output_token_limit=2048 )

Numëroni argumentet

Të gjitha hyrjet dhe daljet nga Gemini API janë të tokenizuara, duke përfshirë tekstin, skedarët e imazheve dhe modalitete të tjera jo tekstuale.

Ju mund të numëroni argumentet në mënyrat e mëposhtme:

  • Call count_tokens me hyrjen e kërkesës.
    Kjo kthen numrin total të shenjave vetëm në hyrje . Mund ta bëni këtë telefonatë përpara se të dërgoni hyrjen te modeli për të kontrolluar madhësinë e kërkesave tuaja.

  • Përdorni atributin usage_metadata në objektin response pasi të keni thirrur generate_content .
    Kjo kthen numrin total të argumenteve si në hyrje ashtu edhe në dalje : total_token_count .
    Ai gjithashtu kthen numërimin e shenjave të hyrjes dhe daljes veçmas: prompt_token_count (tokenat hyrëse) dhe candidates_token_count (tokenat e daljes).

Numëroni shenjat e tekstit

Nëse thërrisni count_tokens me një hyrje vetëm me tekst, ai kthen numrin e shenjave të tekstit vetëm në hyrje ( total_tokens ). Mund ta bëni këtë telefonatë përpara se të telefononi generate_content për të kontrolluar madhësinë e kërkesave tuaja.

Një tjetër opsion është thirrja generate_content dhe më pas përdorimi i atributit usage_metadata në objektin response për të marrë sa vijon:

  • Numërimet e veçanta të shenjave të hyrjes ( prompt_token_count ) dhe të daljes ( candidates_token_count )
  • Numri i përgjithshëm i argumenteve si në hyrje ashtu edhe në dalje ( total_token_count )
import google.generativeai as genai

model = genai.GenerativeModel("models/gemini-1.5-flash")

prompt = "The quick brown fox jumps over the lazy dog."

# Call `count_tokens` to get the input token count (`total_tokens`).
print("total_tokens: ", model.count_tokens(prompt))
# ( total_tokens: 10 )

response = model.generate_content(prompt)

# On the response for `generate_content`, use `usage_metadata`
# to get separate input and output token counts
# (`prompt_token_count` and `candidates_token_count`, respectively),
# as well as the combined token count (`total_token_count`).
print(response.usage_metadata)
# ( prompt_token_count: 11, candidates_token_count: 73, total_token_count: 84 )

Numëroni argumentet me shumë kthesa (chat).

Nëse thërrisni count_tokens me historikun e bisedës, ai kthen numrin total të shenjave të tekstit nga secili rol në bisedë ( total_tokens ).

Një tjetër opsion është thirrja e send_message dhe më pas përdorimi i atributit usage_metadata në objektin response për të marrë sa vijon:

  • Numërimet e veçanta të shenjave të hyrjes ( prompt_token_count ) dhe të daljes ( candidates_token_count )
  • Numri i përgjithshëm i argumenteve si në hyrje ashtu edhe në dalje ( total_token_count )

Për të kuptuar se sa e madhe do të jetë radha juaj e radhës në bisedë, duhet ta bashkëngjitni atë në histori kur telefononi count_tokens .

import google.generativeai as genai

model = genai.GenerativeModel("models/gemini-1.5-flash")

chat = model.start_chat(
    history=[
        {"role": "user", "parts": "Hi my name is Bob"},
        {"role": "model", "parts": "Hi Bob!"},
    ]
)
# Call `count_tokens` to get the input token count (`total_tokens`).
print(model.count_tokens(chat.history))
# ( total_tokens: 10 )

response = chat.send_message(
    "In one sentence, explain how a computer works to a young child."
)

# On the response for `send_message`, use `usage_metadata`
# to get separate input and output token counts
# (`prompt_token_count` and `candidates_token_count`, respectively),
# as well as the combined token count (`total_token_count`).
print(response.usage_metadata)
# ( prompt_token_count: 25, candidates_token_count: 21, total_token_count: 46 )

from google.generativeai.types.content_types import to_contents

# You can call `count_tokens` on the combined history and content of the next turn.
print(model.count_tokens(chat.history + to_contents("What is the meaning of life?")))
# ( total_tokens: 56 )

Numëroni shenjat multimodale

Të gjitha hyrjet në Gemini API janë tokenizuar, duke përfshirë tekstin, skedarët e imazhit dhe modalitete të tjera jo tekstuale. Vini re pikat kryesore të mëposhtme të nivelit të lartë në lidhje me tokenizimin e hyrjes multimodale gjatë përpunimit nga Gemini API:

  • Me Gemini 2.0, hyrjet e imazhit me të dy dimensionet <=384 piksele llogariten si 258 shenja. Imazhet më të mëdha në një ose të dy dimensionet priten dhe shkallëzohen sipas nevojës në pllaka prej 768x768 pikselësh, secila e llogaritur si 258 shenja. Përpara Gemini 2.0, imazhet përdornin 258 shenja fikse.

  • Skedarët video dhe audio konvertohen në token me normat e mëposhtme fikse: video me 263 token për sekondë dhe audio me 32 argumente për sekondë.

Skedarët e imazhit

Nëse thërrisni count_tokens me një hyrje tekst-dhe-imazh, ai kthen numrin e kombinuar të shenjave të tekstit dhe imazhit vetëm në hyrje ( total_tokens ). Mund ta bëni këtë telefonatë përpara se të telefononi generate_content për të kontrolluar madhësinë e kërkesave tuaja. Ju gjithashtu mund të telefononi opsionalisht count_tokens në tekst dhe skedar veç e veç.

Një tjetër opsion është thirrja generate_content dhe më pas përdorimi i atributit usage_metadata në objektin response për të marrë sa vijon:

  • Numërimet e veçanta të shenjave të hyrjes ( prompt_token_count ) dhe të daljes ( candidates_token_count )
  • Numri i përgjithshëm i argumenteve si në hyrje ashtu edhe në dalje ( total_token_count )

Shembull që përdor një imazh të ngarkuar nga File API:

import google.generativeai as genai

model = genai.GenerativeModel("models/gemini-1.5-flash")

prompt = "Tell me about this image"
your_image_file = genai.upload_file(path=media / "organ.jpg")

# Call `count_tokens` to get the input token count
# of the combined text and file (`total_tokens`).
# An image's display or file size does not affect its token count.
# Optionally, you can call `count_tokens` for the text and file separately.
print(model.count_tokens([prompt, your_image_file]))
# ( total_tokens: 263 )

response = model.generate_content([prompt, your_image_file])
response.text
# On the response for `generate_content`, use `usage_metadata`
# to get separate input and output token counts
# (`prompt_token_count` and `candidates_token_count`, respectively),
# as well as the combined token count (`total_token_count`).
print(response.usage_metadata)
# ( prompt_token_count: 264, candidates_token_count: 80, total_token_count: 345 )

Shembull që ofron imazhin si të dhëna inline:

import google.generativeai as genai

import PIL.Image

model = genai.GenerativeModel("models/gemini-1.5-flash")

prompt = "Tell me about this image"
your_image_file = PIL.Image.open(media / "organ.jpg")

# Call `count_tokens` to get the input token count
# of the combined text and file (`total_tokens`).
# An image's display or file size does not affect its token count.
# Optionally, you can call `count_tokens` for the text and file separately.
print(model.count_tokens([prompt, your_image_file]))
# ( total_tokens: 263 )

response = model.generate_content([prompt, your_image_file])

# On the response for `generate_content`, use `usage_metadata`
# to get separate input and output token counts
# (`prompt_token_count` and `candidates_token_count`, respectively),
# as well as the combined token count (`total_token_count`).
print(response.usage_metadata)
# ( prompt_token_count: 264, candidates_token_count: 80, total_token_count: 345 )

Skedarët video ose audio

Audio dhe video konvertohen secila në token me tarifat fikse të mëposhtme:

  • Video: 263 argumente në sekondë
  • Audio: 32 shenja në sekondë

Nëse thërrisni count_tokens me një hyrje text-and-video/audio, ai kthen numrin e kombinuar të tokenit të tekstit dhe skedarit video/audio vetëm në hyrje ( total_tokens ). Mund ta bëni këtë telefonatë përpara se të telefononi generate_content për të kontrolluar madhësinë e kërkesave tuaja. Ju gjithashtu mund të telefononi opsionalisht count_tokens në tekst dhe skedar veç e veç.

Një tjetër opsion është thirrja generate_content dhe më pas përdorimi i atributit usage_metadata në objektin response për të marrë sa vijon:

  • Numërimet e veçanta të shenjave të hyrjes ( prompt_token_count ) dhe të daljes ( candidates_token_count )
  • Numri i përgjithshëm i argumenteve si në hyrje ashtu edhe në dalje ( total_token_count )
import google.generativeai as genai

import time

model = genai.GenerativeModel("models/gemini-1.5-flash")

prompt = "Tell me about this video"
your_file = genai.upload_file(path=media / "Big_Buck_Bunny.mp4")

# Videos need to be processed before you can use them.
while your_file.state.name == "PROCESSING":
    print("processing video...")
    time.sleep(5)
    your_file = genai.get_file(your_file.name)

# Call `count_tokens` to get the input token count
# of the combined text and video/audio file (`total_tokens`).
# A video or audio file is converted to tokens at a fixed rate of tokens per second.
# Optionally, you can call `count_tokens` for the text and file separately.
print(model.count_tokens([prompt, your_file]))
# ( total_tokens: 300 )

response = model.generate_content([prompt, your_file])

# On the response for `generate_content`, use `usage_metadata`
# to get separate input and output token counts
# (`prompt_token_count` and `candidates_token_count`, respectively),
# as well as the combined token count (`total_token_count`).
print(response.usage_metadata)
# ( prompt_token_count: 301, candidates_token_count: 60, total_token_count: 361 )

Udhëzimet dhe mjetet e sistemit

Udhëzimet dhe mjetet e sistemit llogariten gjithashtu në numrin total të shenjave për hyrjen.

Nëse përdorni udhëzimet e sistemit, numri total_tokens rritet për të pasqyruar shtimin e system_instruction .

import google.generativeai as genai

model = genai.GenerativeModel(model_name="gemini-1.5-flash")

prompt = "The quick brown fox jumps over the lazy dog."

print(model.count_tokens(prompt))
# total_tokens: 10

model = genai.GenerativeModel(
    model_name="gemini-1.5-flash", system_instruction="You are a cat. Your name is Neko."
)

# The total token count includes everything sent to the `generate_content` request.
# When you use system instructions, the total token count increases.
print(model.count_tokens(prompt))
# ( total_tokens: 21 )

Nëse përdorni thirrjen e funksionit, numri total_tokens rritet për të pasqyruar shtimin e tools .

import google.generativeai as genai

model = genai.GenerativeModel(model_name="gemini-1.5-flash")

prompt = "I have 57 cats, each owns 44 mittens, how many mittens is that in total?"

print(model.count_tokens(prompt))
# ( total_tokens: 22 )

def add(a: float, b: float):
    """returns a + b."""
    return a + b

def subtract(a: float, b: float):
    """returns a - b."""
    return a - b

def multiply(a: float, b: float):
    """returns a * b."""
    return a * b

def divide(a: float, b: float):
    """returns a / b."""
    return a / b

model = genai.GenerativeModel(
    "models/gemini-1.5-flash-001", tools=[add, subtract, multiply, divide]
)

# The total token count includes everything sent to the `generate_content` request.
# When you use tools (like function calling), the total token count increases.
print(model.count_tokens(prompt))
# ( total_tokens: 206 )