跳到主要内容
Open In ColabOpen on GitHub

如何跟踪LLM的token使用情况

跟踪 token 使用量以计算成本是将您的应用投入生产的重要一环。本指南将介绍如何从您的 LangChain 模型调用中获取此信息。

先决条件

本指南假定您熟悉以下概念

使用 LangSmith

您可以使用 LangSmith 来帮助跟踪您的 LLM 应用中的 token 使用量。请参阅 LangSmith 快速入门指南

使用回调

有一些特定于 API 的回调上下文管理器,允许您跨多个调用跟踪 token 使用量。您需要检查您的特定模型是否提供了此类集成。

如果您的模型没有此类集成,您可以通过调整 OpenAI 回调管理器 的实现来创建自定义回调管理器。

OpenAI

我们首先来看一个极其简单的示例,了解如何跟踪单个聊天模型调用的 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}")


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

流式传输

警告

get_openai_callback 目前不支持传统语言模型(例如 langchain_openai.OpenAI)的流式 token 计数。如果您想在流式上下文中正确计数 token,有以下几种选择:

请注意,在流式上下文中使用传统语言模型时,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}")


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