Я хотел бы подсчитать токены моего запроса API OpenAI в R перед его отправкой (version gpt-3.5-turbo). Поскольку OpenAI API имеет ограничения скорости, мне это кажется важным.
Пример:
Функция, которую я использую для отправки запросов:
ask_chatgpt <- function(prompt) {
response <- POST(
url = "https://api.openai.com/v1/chat/completions",
add_headers(Authorization = paste("Bearer", api_key)),
content_type_json(),
encode = "json",
body = list(
model = "gpt-3.5-turbo",
messages = list(list(
role = "user",
content = prompt
))
)
)
str_trim(content(response)$choices[[1]]$message$content)
}
Пример
api_key <- "your_openai_api_key"
library(httr)
library(tidyverse)
#Calls the ChatGPT API with the given prompt and returns the answer
ask_chatgpt <- function(prompt) {
response <- POST(
url = "https://api.openai.com/v1/chat/completions",
add_headers(Authorization = paste("Bearer", api_key)),
content_type_json(),
encode = "json",
body = list(
model = "gpt-3.5-turbo",
messages = list(list(
role = "user",
content = prompt
))
)
)
str_trim(content(response)$choices[[1]]$message$content)
}
prompt <- "how do I count the token in R for gpt-3.45-turbo?"
ask_chatgpt(prompt)
#> [1] "As an AI language model, I am not sure what you mean by \"count the token in R for gpt-3.5-turbo.\" Please provide more context or clarification so that I can better understand your question and provide an appropriate answer."
Created on 2023-04-24 with reprex v2.0.2
Я хотел бы рассчитать / оценить, сколько жетонов prompt потребуется с gtp-3.5-turbo
Есть похожий вопрос для gtp-3 и python, где рекомендуется библиотека tiktoken. Однако я не смог найти подобную библиотеку в R.
OpenAI также рекомендует пакет tiktoken или gpt-3-encoder для JavaScript.





У OpenAI есть собственный токенизатор, поэтому вы, вероятно, не сможете его воспроизвести. Вместо этого я бы просто рекомендовал использовать их API Python через пакет reticulate.
Сначала установите пакет tiktoken через командную строку, используя:
pip install tiktoken
Затем в Р
library(reticulate)
tiktoken <- import("tiktoken")
encoding <- tiktoken$encoding_for_model("gpt-3.5-turbo")
prompt <- "how do I count the token in R for gpt-3.45-turbo?"
length(encoding$encode(prompt))
# [1] 19