代码之家  ›  专栏  ›  技术社区  ›  zangs

OPENAI调用中代币定价的计算

  •  0
  • zangs  · 技术社区  · 1 年前

    我正试图为调用OPENAI时使用的代币定价。我有一个上传到Qdrant的纯文本txt文件。当我问以下问题时:

    迈克尔·乔丹是谁?

    并使用 get_openai_callback 跟踪令牌数量和操作价格的函数,输出中的信息键之一对我来说没有意义。

    Tokens Used: 85
        Prompt Tokens: 68
        Completion Tokens: 17
    Successful Requests: 1
    Total Cost (USD): $0.00013600000000000003
    

    为什么 提示令牌 值与输入值不同?输入文本中的令牌数量(即我所理解的Prompt Token)为:

    query = 'Who is Michael Jordan'
    
    encoding = tiktoken.encoding_for_model('gpt-3.5-turbo-instruct')
    print(f"Tokens: {len(encoding.encode(query))}")
    
    4
    

    ,但响应中的输出类似于68。我认为Prompt Tokens是添加到问题令牌中的基本令牌(txt文件)的总和,但数学并不合适。

    txt文件中的令牌数量: 17

    Arquivo文本: 迈克尔·杰弗里·乔丹是一位美国商人,前篮球运动员,曾担任得分后卫

    查询+文件令牌 : 21 (4+17)

    有人能帮我理解定价计算吗?

    我试图搜索OPENAI自己的文档、github和其他论坛,但我认为很难找到信息,也不认为它对公众开放。我想知道我是否遗漏了什么,或者这是用户无法访问的计算。

    更新 对于其他用户将来的任何问题:

    import langchain 
    langchain.debug = True
    

    跑吧 get_openai_callback() 功能,并看到整个日志显示在屏幕上。的价值 “提示” key是一个包含字符串的列表,该字符串是关于如何给出响应的指令。此提示的令牌数是提示令牌中显示的值。

    1 回复  |  直到 1 年前
        1
  •  1
  •   mbmateen    1 年前

    提示令牌包括您的问题和提供的任何上下文,以及API添加的其他系统消息和格式。在响应中生成的完成令牌。

    在您的示例中:

    可见的问题:谁是迈克尔·乔丹?(4个代币) 来自文件的文字:迈克尔·杰弗里·乔丹是一名美国商人和前篮球运动员,曾担任得分后卫(17个代币) 预期:4+17=21 4+17=21个代币。

    但是,您会看到68个提示令牌,因为API为角色、指令和其他元数据添加了令牌。要了解确切的令牌计数,您可以记录完整的请求有效负载或使用OpenAI的令牌计数工具。 这个额外的上下文解释了为什么提示令牌计数高于预期。