如何跟踪 LLM 的 Token 使用情况
跟踪 token 使用情况以计算成本是将您的应用程序投入生产的重要部分。本指南介绍了如何从您的 LangChain 模型调用中获取此信息。
先决条件
本指南假设您熟悉以下概念
使用 LangSmith
您可以使用 LangSmith 来帮助跟踪您的 LLM 应用程序中的 token 使用情况。请参阅 LangSmith 快速入门指南。
使用回调
有一些 API 特定的回调上下文管理器允许您跟踪多次调用中的 token 使用情况。您需要检查您的特定模型是否提供了此类集成。
如果您的模型没有提供此类集成,您可以通过调整 OpenAI 回调管理器 的实现来创建自定义回调管理器。
OpenAI
让我们首先看一个跟踪单个 Chat 模型调用的 token 使用情况的非常简单的示例。
危险
回调处理程序目前不支持传统语言模型(例如,langchain_openai.OpenAI
)的流式 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:
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