Fique com uma dúvida na resposta informada como correta, então eu gostaria de colocar uma sugestão
arquivo_csv = "./dados/lista_de_compras_100_clientes.csv"
dados_usuario = carrega(arquivo_csv)
lista_tokens = codificador.encode(dados_usuario)
numero_tokens = len(lista_tokens)
modelo = "GPT-3.5-turbo" if numero_tokens < 4096 else "GPT-4"
Ele não deveria ter na condicional um numero menor que 4096? Eu entendo que na verdade a metade dele, porque dentro do limite da versão GPT-3.5-turbo, deve-se considerar a quantidade de token do envio + retorno. No exercío se o a quantidade de tokens da chamada form de 4095 ele vai rodar mas não vai retornar nada, ou somente 1 token porque terá estourado o limete de 4096. Meu entendimento está correto?
Então, seguindo as boas práticas, eu gostaria de sugerir uma melhoria no código do exercício, porque não faz sentido mandar uma prompt para o Chat GPT que não poderá receber uma resposta, como é o do meu exemplo.
O cenário ideal seria garantir que sempre haja espaço para a resposta, e não apenas a garantia de envio do prompt, da forma como está, pode levar a essa situação problemática.
Sugestão de correção:
import tiktoken
def carrega(nome_do_arquivo):
try:
with open(nome_do_arquivo, "r") as arquivo:
dados = arquivo.read()
return dados
except IOError as e:
print(f"Erro: {e}")
return None
def escolher_modelo(dados_usuario):
"""
Escolhe o modelo adequado com base no número de tokens do prompt do usuário,
garantindo espaço para uma resposta razoável dentro do limite de tokens.
"""
codificador = tiktoken.encoding_for_model("gpt-3.5-turbo")
lista_tokens = codificador.encode(dados_usuario)
numero_tokens = len(lista_tokens)
tamanho_esperado_saida = 1024 # Estimar o tamanho da resposta
limite_gpt3_5 = 4096 - tamanho_esperado_saida
if numero_tokens < limite_gpt3_5:
return "gpt-3.5-turbo"
else:
return "gpt-4"
Uso do código
arquivo_csv = "./dados/lista_de_compras_100_clientes.csv"
dados_usuario = carrega(arquivo_csv)
if dados_usuario:
modelo_escolhido = escolher_modelo(dados_usuario)
print(f"Modelo escolhido: {modelo_escolhido}")
else:
print("Não foi possível carregar os dados do usuário.")