最近在用 Gemini 的时候,发现它生成一段 7 行的小红书文案用了 4000 多个 token ,而我用它生成一段 20 行的数学题解析时,却只用了 1000 多个 token 。有没有人知道 Gemini 的 token 到底是怎么算的?
1
mumbler 7 天前
直接问 Gemini
|
2
yinmin 7 天前 via Android
thinking 模型是会产生中间思考阶段的 token 的,总 token=input token+thinking token+output token
|
3
pike0002 7 天前
基本的公式:统计分词后得到的所有 Token 的总数,包含:
* 单词或子词 * 空格(如果分词器将空格视为 Token ) * 标点符号 * 特殊控制标记(例如 <start>、<end> 等) 对于中文的话,也是差不多,只是分词的规则不是太一样。比如基于单字的方式,那就是一个汉字,一个标点都算一个。还有基于单词(有意思的单词)。 一般大家会用一些计算工具看一下它大概是多少。比如 Gemimi 就提供了接口可以本地计算。例子: https://www.pixelstech.net/article/1735013847-calculating-token-count-for-claude-api-using-go%3a-a-step-by-step-guide?lang=chinese 也有现成的工具: https://www.pixelstech.net/application/tokencalculator |
4
pike0002 7 天前
@pike0002 给错例子了。应该是
package gemini import ( "context" "log" "cloud.google.com/go/vertexai/genai" "cloud.google.com/go/vertexai/genai/tokenizer" ) // CalculateToken calculates the number of tokens in a given content using a specified encoding model. func CalculateToken(ctx context.Context, content string, encoding string) (int, error) { client, err := tokenizer.New(encoding) if err != nil { log.Printf("Failed to get encoding: %v", err) return 0, err } resp, err := client.CountTokens(genai.Text(content)) if err != nil { log.Printf("Failed to count tokens: %v", err) return 0, err } return int(resp.TotalTokens), nil } |