我已经设置了Azure OpenAI on my data,并使用Chat with Azure OpenAI models using your own data。我的目标是减少每次请求中的token使用量。
然而,我注意到即使我在没有发送任何提示的情况下发送用户内容时,也会出现额外的prompt_token
使用。例如,如果我只发送文本hello there
,结果总共使用了2628个tokens,而实际上应该只有24个。如果提供更长的文本(7个单词)且没有提示,结果总共约为3.4k个tokens。
示例:
[{'role': 'system', 'content': ''}, {'role': 'user', 'content': 'hello there'}]total_tokens: {'completion_tokens': 24, 'prompt_tokens': 2604, 'total_tokens': 2628}----------------------------------------------------[{'role': 'system', 'content': ''},{'role': 'user', 'content': 'I worked overtime what should I do?'}]total_tokens: {'completion_tokens': 52, 'prompt_tokens': 3334, 'total_tokens': 3386}
如您所见,在总token下,我看到prompt_token
的使用接近3.5k。既然我没有提供任何提示或系统消息,prompt_token
的使用从何而来?使用Azure OpenAI模型与您自己的数据的整个目的是不是为了减少token的使用?每次请求额外的3.5k token非常昂贵。这会影响我的账单吗?prompt_token
会被视为输入tokens的一部分吗?
Pricing/details/cognitive-services/openai-service/指出,Input (Per 1,000 tokens)
的费用为$0.0025
,那么我理解为4,000 tokens
的费用应为$0.01
。
回答:
当他们“使用你的数据”时,确实有一些神奇的事情在发生;这基本上是检索增强生成(Retrieval Augmented Generation,简称RAG)。基本上,除了你的提示文本之外,还有几个额外的步骤。
他们在这里解释得很清楚:
总共,对模型进行了两次调用:
用于处理意图:意图提示的token估计包括用户问题、对话历史以及发送给模型用于生成意图的指令的token。
用于生成响应:生成提示的token估计包括用户问题、对话历史、检索到的文档块列表、角色信息以及发送给模型用于生成的指令的token。