DEV Community

codemee
codemee

Posted on

Gemini 模型的 tokenizer

Gemini 並沒有提供類似 OpenAI 的 Tokenizer 頁面,方便大家觀察切割 token 的結果,如果你有使用 Vertex AI,則可以透過本文介紹的兩種方式查看。

Vertex AI Studio

在 Vertex AI Studio 中,在輸入框輸入內容時,輸入框下緣會顯示目前的 token 數(Gemini 稱為『詞元』),像是底下的例子就告訴我們『這是什麼奇怪的世界?』會被切割為 5 個詞元:

如果想知道實際切割的結果,只要按一下顯示詞元數量的地方,就會在右側顯示詳細資料:

它會以不同的背景色來標示每一個詞元的涵蓋範圍,你也可以切換頁次,觀察每個詞元對應的編號:

要特別提醒你的是,Vertex AI Studio 和 Google AI Studio 雖然很相似,但這個觀察 token 切割結果的功能就只有 Vertex AI Studio 才有。

透過 Vertex AI API 取得切割結果

如果你需要在程式中即時取得切割詞元的結果,也可以透過 Vertex AI API,在 GenAI SDK 的 Client 類別中,提供有 models.compute_tokens 方法可以取得切割資訊,它的參數和 generate_content 相同,但會傳回 ComputeTokensResponse 類物件,它的 tokens_info 屬性是一個 TokensInfo 類物件的串列,個別代表輸入的 contents 中每個 content 的切結果,其中 token_ids 是詞元編號的串列、tokens 是個別詞元對應的文字段落,role 是發言角色。

以下我們就依據上述結構,設計了一個簡單的 CLI 程式,可以指定文字與模型,輸出切割結果:

from google import genai
from rich.console import Console
import sys
import dotenv
import os

dotenv.load_dotenv()

client_vertex = genai.Client(
    vertexai=True,
    api_key=os.environ.get("VERTEX_API_KEY")
)

color_map = {
    '3': '#ccbfee',
    '2': '#beedc6',
    '1': '#f4d7ab',
    '0': '#f4aeb1',
    # '4': '#a4dcf3',
}

console = Console()

def main():
    if len(sys.argv) < 2:
        console.print("用法:main.py prompt [model_name]", style="bold red")
        return

    prompt = sys.argv[1].encode("utf-8")
    model = sys.argv[2] if len(sys.argv) > 2 else "gemini-3-pro-preview"
    result = client_vertex.models.compute_tokens(
        model=model,
        contents=prompt
    )

    print(f"{len(result.tokens_info[0].token_ids)} 個 token:")
    for i, token in enumerate(result.tokens_info[0].tokens):
        color_index = str(i % len(color_map))
        bg_color = color_map.get(color_index, '#ffffff')
        console.print(
            token.decode("utf-8").replace("\n", "\\n"),
            style=f"on {bg_color}",
            end="",
        )
        console.print(" ", end="")

if __name__ == "__main__":
    main()
Enter fullscreen mode Exit fullscreen mode

你可以像是這樣使用,如果沒有指定模型,預設會是 gemini-3-pro-preview:

➜ uv run main.py "今天是偉大的日子" gemini-2.5-flash
Enter fullscreen mode Exit fullscreen mode

它會比照 Vertex AI Studio 的顏色顯示底色:

我也在 HuggingFace 上部署了一個 Gradio 的版本

再次提醒,models.compute_tokens 只有 Vertex AI API 才能使用,如果你使用 Gemini API,雖然看起來也可以叫用,但是只會傳回錯誤,告訴你這個方法只有 Vertex AI API 才支援。我不知道 Google 到底在想什麼,切割 token 的資訊都要 Vertex AI 才提供,政策沒有變更之前,你就只能透過上述方法取得相關資訊,還好,models.compute_tokens 並不會號用詞元,所以不會產生費用。

Top comments (0)