注意成本管理

管理 OpenAI API 使用成本的第一步是隨時了解您的使用情況。OpenAI 提供的儀表板在 使用 選項卡下,詳細展示了每日 API 調用次數、消耗的代幣(tokens)以及相關成本。通過定期監控這些數據,您可以識別潛在的浪費并采取措施減少不必要的開支。


清點代幣使用情況

了解代幣的使用情況是控制成本的關鍵。以下是一個 Python 示例代碼,用于計算輸入文本的代幣數量:

import tiktoken

def get_number_of_tokens(prompt_text, model_name):

# 獲取模型的編碼方式
 encoding = tiktoken.encoding_for_model('gpt-4o-mini')

# 將文本編碼為代幣列表
 list_of_tokens = encoding.encode(prompt_text)
 return len(list_of_tokens)

注意隱藏代幣

  1. 函數調用
    使用 OpenAI API 時,所有函數名稱、描述和額外參數都會計入輸入代幣。如果使用多個函數,累積的代幣使用量可能會顯著增加。OpenAI 提供了 代碼示例 來幫助統計這些輸入代幣。

  2. 內存機制
    像 LangChain 這樣的框架通常內置內存機制,會收集先前調用的上下文信息。這些上下文雖然有助于提高模型的連貫性,但也會增加代幣使用量。為了控制成本,可以通過 緩沖、摘要選擇性保留 等策略來管理內存。

  3. 推理代幣
    新一代模型(如 gpt-4o 和 gpt-4o-mini)會使用內部推理代幣。這些代幣雖然不會出現在用戶的輸出中,但仍然會計入成本。

檢查實際使用數據

API 調用的使用數據可以提供詳細的成本分解,包括輸入代幣、緩存代幣和推理代幣。以下是一個示例代碼:

def create_chat_completion_object(query):
 response = client.chat.completions.create(
 model="gpt-4o-mini",
 messages=[
 {"role": "system", "content": "You are a helpful assistant."},
 {"role": "user", "content": f"{query}"}
 ],
 )
 return response

# 示例調用
chat_object = create_chat_completion_object("What is the capital of India?")
print('Response:', chat_object.choices[0].message.content)
print('Usage:', chat_object.usage)

輸出示例:

Response: The capital of India is New Delhi.
Usage: CompletionUsage(completion_tokens=8, prompt_tokens=24, total_tokens=32)

使用緩存優化成本

緩存是一種強大的功能,可以優化涉及大上下文的 API 調用。例如,當需要對一篇長文進行多次提問時,可以通過緩存復用初始上下文,從而降低成本。

緩存的工作原理

注意事項:

更多詳情請參考 OpenAI 的 Prompt Caching 指南。


使用批處理降低成本

批處理允許您同時發送多個請求,從而顯著降低每次請求的成本。OpenAI 對批處理任務的輸入和輸出代幣提供 50% 的折扣。

應用場景

  1. 批量嵌入(Batch Embedding)
    適用于大規模數據的高效處理。具體優化指南可以參考 批量嵌入教程。

  2. 批量聊天請求(Batch Chat Requests)
    使用 OpenAI 的框架,可以高效處理批量聊天任務。更多信息請參考 OpenAI 的 批處理指南。


限制輸入代幣:上下文過濾

在處理大文本時,許多信息可能是無關的,直接使用會增加成本并降低性能。以下是兩種常見的上下文過濾策略:

  1. 基于嵌入的過濾

  2. 基于廉價模型的判斷過濾


限制輸出代幣:結構化輸出

輸出代幣的成本是輸入代幣的三倍,因此減少輸出代幣是優化成本的關鍵。通過結構化輸出,可以確保 API 僅生成所需的信息,從而避免不必要的代幣浪費。

結構化輸出的應用場景

  1. 分類/驗證任務
    當需要對數據進行分類或驗證時,結構化輸出可以減少冗余代幣。

  2. 數據提取
    如果目標是提取特定信息(如數值),結構化輸出可以確保僅返回所需數據。

  3. 模型鏈式調用
    在多步驟流程中,結構化輸出可以確保輸出的兼容性并減少開銷。

以下是一個使用結構化輸出的示例代碼:

from pydantic import BaseModel

class custom_output(BaseModel):
 a: list[bool]

completion = client.beta.chat.completions.parse(
 model="gpt-4o-mini",
 messages=[
 {"role": "system", "content": "You will receive a list of animals, for each animal return True if they are a mammal, else return False, output as a list of booleans nothing else."},
 {"role": "user", "content": "Lion, Eagle, Dolphin, Crocodile, Elephant, Snake, Kangaroo, Frog, Tiger, Penguin, Whale, Shark, Giraffe, Octopus, Bear, Turtle, Deer, Lizard, Rabbit, Butterfly"}
 ],
 response_format=custom_output,
)

result = completion.choices[0].message.parsed
print(result.a)
print(completion.usage)

輸出示例:

[True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False, True, False]
CompletionUsage(completion_tokens=24, prompt_tokens=138, total_tokens=162)

通過以上策略,您可以有效地管理 OpenAI API 的使用成本,同時確保實現預期的功能和性能。


原文鏈接: https://medium.com/@mikehpg/controlling-cost-when-using-openai-api-fd5a038fa391

上一篇:

第三方api:最大化潛力與管理風險
最后一篇
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費