如何跟踪大型语言模型的令牌使用情况
将使用情况跟踪 token 以计算成本是将您的应用程序投入生产的重要部分。本指南将介绍如何从您的 LangChain 模型调用中获取此信息。
先决条件
本指南假定读者熟悉以下概念:
使用 LangSmith
您可以使用 LangSmith 来帮助跟踪您的大语言模型应用中的令牌使用情况。参见 LangSmith 快速入门指南。
使用回调
有一些特定于 API 的回调上下文管理器,可帮助您跟踪多次调用之间的令牌使用情况。您需要检查您的特定模型是否支持此类集成。
如果您的模型没有可用的集成,您可以参照 OpenAI 回调管理器 的实现,创建一个自定义回调管理器。
OpenAI
让我们首先来看一个非常简单的示例,展示如何跟踪单次聊天模型调用的令牌使用情况。
危险
回调处理程序目前不支持对旧版语言模型(例如 langchain_openai.OpenAI)的流式标记计数。如需在流式上下文中获得支持,请参阅相应的聊天模型指南 此处。
单次调用
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
流式传输
危险
请注意,当在流式处理上下文中使用旧版语言模型时,标记数量不会更新:
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