首页 新闻 会员 周边

如何通过 C# 代码 prompt 对应的 token 数量

0
悬赏园豆:30 [已解决问题] 解决于 2024-02-23 08:18

想在将 prompt 发给大模型之前用 C# 代码计算对应的 token 数量,请问如何计算?

问题补充:

通过下面的基于 Semantic Kernel 的代码可以拿到 OpenAI 计算出来的 prompt tokens,对于博客园是什么网站提示词,token 数量是 29

var builder = Kernel.CreateBuilder();
builder.AddOpenAIChatCompletion("gpt-3.5-turbo", "******");
var kernel = builder.Build();

var result = await kernel.InvokePromptAsync("博客园是什么网站");
if (result.Metadata?.TryGetValue("Usage", out var value) == true &&
    value is CompletionsUsage usage)
{
    Console.WriteLine("Prompt tokens: " + usage.PromptTokens);
}

OpenAI 计算出来的 token 数量怎么这么多?使用阿里云 DashScope + 通义千问 qwen-max 计算出来的 token 只有 4

下面是通过 Semantic Kernel 获取 DashScope 基于通义千问 qwen-max 模型计算出来的 token 数量

var builder = Kernel.CreateBuilder();
builder.AddDashScopeChatCompletion("qwen-max", "sk-xxxxxx");
var kernel = builder.Build();

var result = await kernel.InvokePromptAsync("博客园是什么网站");
if (result.Metadata?.TryGetValue("Usage", out var value) == true &&
    value is ChatTokenUsage usage)
{
    Console.WriteLine("Prompt tokens: " + usage.InputTokens);
}

Console.WriteLine(result);

注:需要安装 nuget 包 Cnblogs.SemanticKernel.Connectors.DashScope

使用 one-api + DashScope + qwen-max,计算出来的 token 变成了 11

dudu的主页 dudu | 高人七级 | 园豆:30994
提问于:2024-02-21 15:36
< >
分享
最佳答案
0

通过这篇博文 Microsoft Semantic Kernel – Some Tips & Tricks To Get Prompt & Completion Tokens 发现一个开源库 Tiktoken

Tiktoken 计算出来的 token 数量是 11gpt-3.5-turbogpt=4 都是这个结果

var tokenCount = Tiktoken.Encoding.ForModel("gpt-3.5-turbo").CountTokens("博客园是什么网站");
dudu | 高人七级 |园豆:30994 | 2024-02-21 20:55
其他回答(1)
0

在调用 OpenAI 的 API 时,返回的 token 数量可能会受到多个因素的影响,包括使用的模型、输入的 prompt 的复杂度等。不同的 API 和模型可能会采用不同的计算方式来确定 token 的数量。而且,不同的 API 提供商可能会在计算 token 数量时使用不同的标准。

在你的示例中,你使用了不同的 API(OpenAI 和阿里云)以及不同的模型(OpenAI 的 gpt-3.5-turbo 和阿里云的 qwen-max),这就解释了为什么得到的 token 数量不同。

针对你的问题,如果想在调用 OpenAI 的 API 之前计算 prompt 对应的 token 数量,你可以采用以下步骤:

确定使用的模型和 API。
编写代码,在发送 prompt 给模型之前对其进行分词或者其他方式的处理,以确定 token 数量。
根据 API 提供商的文档和规范,确保你的代码和 API 之间的交互满足其要求。
具体来说,你可以使用 C# 中的字符串处理方法来对 prompt 进行分词,然后计算分词后的 token 数量。例如,你可以根据空格将 prompt 分割成单词,然后统计单词的数量。注意,这只是一种简单的方法,具体的实现可能会因为模型的要求而有所不同。

另外,确保在与 API 交互时,按照 API 提供商的文档传递正确的参数,并处理返回结果。

收获园豆:30
Technologyforgood | 园豆:5675 (大侠五级) | 2024-02-21 20:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册