如何追蹤 LLM 的 Token 使用量
追蹤 token 使用量以計算成本是將您的應用程式投入生產的重要環節。本指南將介紹如何從您的 LangChain 模型呼叫中取得此資訊。
先決條件
本指南假設您熟悉以下概念
使用 LangSmith
您可以使用 LangSmith 來協助追蹤 LLM 應用程式中的 token 使用量。請參閱 LangSmith 快速入門指南。
使用回呼
有些 API 特定的回呼情境管理器可讓您追蹤跨多個呼叫的 token 使用量。您需要檢查您的特定模型是否提供此類整合。
如果您的模型未提供此類整合,您可以透過調整 OpenAI 回呼管理器的實作來建立自訂回呼管理器。
OpenAI
讓我們先來看一個非常簡單的範例,說明如何追蹤單次聊天模型呼叫的 token 使用量。
危險
回呼處理常式目前不支援舊版語言模型(例如 langchain_openai.OpenAI
)的串流 token 計數。如需串流環境中的支援,請參閱此處聊天模型的對應指南 here。
單次呼叫
from langchain_community.callbacks import get_openai_callback
from langchain_openai import OpenAI
llm = OpenAI(model_name="gpt-3.5-turbo-instruct")
with get_openai_callback() as cb:
result = llm.invoke("Tell me a joke")
print(result)
print("---")
print()
print(f"Total Tokens: {cb.total_tokens}")
print(f"Prompt Tokens: {cb.prompt_tokens}")
print(f"Completion Tokens: {cb.completion_tokens}")
print(f"Total Cost (USD): ${cb.total_cost}")
API 參考:get_openai_callback | OpenAI
Why don't scientists trust atoms?
Because they make up everything.
---
Total Tokens: 18
Prompt Tokens: 4
Completion Tokens: 14
Total Cost (USD): $3.4e-05
多次呼叫
情境管理器內的所有內容都會被追蹤。以下範例說明如何使用它來追蹤鏈中多個循序呼叫。這也適用於可能使用多個步驟的代理程式。
from langchain_community.callbacks import get_openai_callback
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI
llm = OpenAI(model_name="gpt-3.5-turbo-instruct")
template = PromptTemplate.from_template("Tell me a joke about {topic}")
chain = template | llm
with get_openai_callback() as cb:
response = chain.invoke({"topic": "birds"})
print(response)
response = chain.invoke({"topic": "fish"})
print("--")
print(response)
print()
print("---")
print(f"Total Tokens: {cb.total_tokens}")
print(f"Prompt Tokens: {cb.prompt_tokens}")
print(f"Completion Tokens: {cb.completion_tokens}")
print(f"Total Cost (USD): ${cb.total_cost}")
Why did the chicken go to the seance?
To talk to the other side of the road!
--
Why did the fish need a lawyer?
Because it got caught in a net!
---
Total Tokens: 50
Prompt Tokens: 12
Completion Tokens: 38
Total Cost (USD): $9.400000000000001e-05
串流
危險
請注意,在串流環境中使用舊版語言模型時,token 計數不會更新
from langchain_community.callbacks import get_openai_callback
from langchain_openai import OpenAI
llm = OpenAI(model_name="gpt-3.5-turbo-instruct")
with get_openai_callback() as cb:
for chunk in llm.stream("Tell me a joke"):
print(chunk, end="", flush=True)
print(result)
print("---")
print()
print(f"Total Tokens: {cb.total_tokens}")
print(f"Prompt Tokens: {cb.prompt_tokens}")
print(f"Completion Tokens: {cb.completion_tokens}")
print(f"Total Cost (USD): ${cb.total_cost}")
API 參考:get_openai_callback | OpenAI
Why don't scientists trust atoms?
Because they make up everything!
Why don't scientists trust atoms?
Because they make up everything.
---
Total Tokens: 0
Prompt Tokens: 0
Completion Tokens: 0
Total Cost (USD): $0.0