gpt4 book ai didi

node.js - 在进行 api 调用之前如何计算 token ?

转载 作者:行者123 更新时间:2023-12-02 22:47:05 26 4
gpt4 key购买 nike

import { Configuration, OpenAIApi } from "openai"
import { readFile } from './readFile.js'

// Config OpenAI API
const configuration = new Configuration({
organization: "xyx......",
apiKey: "abc.......",
});

// OpenAI API instance
export const openai = new OpenAIApi(configuration);


const generateAnswer = async (conversation, userMessage) => {
try {
const dataset = await readFile();
const dataFeed = { role: 'system', content: dataset };
const prompt = conversation ? [...conversation?.messages, dataFeed, userMessage] : [dataFeed, userMessage];
const completion = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: prompt
})

const aiMessage = completion.data.choices[0].message;
console.log(completion.data.usage)
return aiMessage
} catch (e) {
console.log(e)
}
}
export { generateAnswer };

我正在尝试创建聊天机器人,其中我在开始时提供数据馈送,这是聊天 api 的业务信息和对话历史记录我想在进行 api 调用之前计算对话的 token 并在超出限制时减少提示我尝试过使用 gpt3 编码器来计算 token ,但我的对象数组不是提示中的字符串

最佳答案

确切方法

精确的方法是使用 tiktoken ,它是一个 python 库。摘自openAI cookbook:

    import tiktoken
encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
num_tokens = len(encoding.encode("Look at all them pretty tokens"))
print(num_tokens)

更一般地,您可以使用

encoding = tiktoken.get_encoding("cl100k_base")

where cl100k_base 用于 gpt-4、gpt-3.5-turbo、text-embedding-ada-002;p50k_base 用于 Codex 模型、text-davinci-002、text-davinci-003; r50k_base 是 gpt2 和 davinci 等 GPT-3 模型中使用的内容。 r50k_basep50k_base 通常(但并非总是)给出相同的结果。

近似方法

您通常只是希望程序不会因超出 token 限制而崩溃,并且只需要一个字符计数截止,这样您就不会超出 token 限制。使用 tiktoken 进行的测试表明,代币计数通常是线性的,特别是对于较新的模型,并且 1/e 似乎是一个稳健的保守比例常数。因此,我们可以编写一个简单的方程来保守地将标记与字符相关联:

'#tokens

哪里

主要近似结果

现在反转此操作以获得适合 token 限制的最大字符数:

'max_characters = (#tokens_limit - safety_margin) * e'

其中 e = 2.7182818284590...现在您已经有了一个即时的、独立于语言和平台且无依赖性的解决方案,可以不超过 token 限制。

展示您的作品

带有一段英文

对于带有英文文本的模型 cl100k_base,#tokens = #chars0.2016568976249748 + -5.277472848558375对于带有英文文本的模型 p50k_base,#tokens = #chars0.20820463015644564 + -4.697668008159241对于带有英文文本的模型 r50k_base,#tokens = #chars*0.20820463015644564 + -4.697668008159241

Tokens vs character count for English text 1/e approximation underestimate

带有一段Lorem ipsum

对于具有 Lorem ipsum 的模型 cl100k_base,#tokens = #chars0.325712437966849 + -5.186204883743613对于具有 Lorem ipsum 的模型 p50k_base,#tokens = #chars0.3622005352481815 + 2.4256199405020595对于具有 Lorem ipsum 的模型 r50k_base,#tokens = #chars*0.3622005352481815 + 2.4256199405020595

Tokens vs character count for Lorem ipsum text lorep ipsum approx worst case

用一段python代码:

对于带有sampletext2的模型cl100k_base,#tokens = #chars0.2658446137873485 + -0.9057612056294033对于带有sampletext2的模型p50k_base,#tokens = #chars0.3240730228908291 + -5.740016444496973对于带有sampletext2的模型r50k_base,#tokens = #chars*0.3754121847018643 + -19.96012603693265

python token vs char underestimate python

关于node.js - 在进行 api 调用之前如何计算 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76216113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com