# 掌握ChatModels中的Token使用追踪:提高应用成本管理的秘诀
在使用大语言模型(LLM)构建聊天应用时,追踪token的使用量是一个关键任务。这不仅有助于优化模型的性能,还能有效控制成本。本文将介绍如何通过LangChain库在ChatModels中追踪token使用。
## 引言
随着生成式AI的普及,开发者利用聊天模型构建应用变得越来越普遍。然而,随之而来的API调用和token使用成本也成为了一个不容忽视的问题。本篇文章将指导大家如何在LangChain环境中追踪token使用,为应用上线做好准备。
## 主要内容
### 1. 使用LangSmith
LangSmith提供了一个便捷的方式来追踪LLM应用中的token使用。其快速指南可以帮助您快速上手。
### 2. 使用AIMessage中的`usage_metadata`
许多模型提供商都会在聊天生成响应中返回token使用信息。在LangChain中,这些信息会包含在`AIMessage`对象的`usage_metadata`属性中。例如:
```python
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-3.5-turbo-0125") # 使用API代理服务提高访问稳定性
response = llm.invoke("hello")
print(response.usage_metadata)
# 输出示例: {'input_tokens': 8, 'output_tokens': 9, 'total_tokens': 17}
这一功能支持包括OpenAI和Anthropic等多家模型提供商。
3. 使用回调功能
对于OpenAI API和Anthropic API,目前还提供了专门的回调上下文管理器来追踪多次调用中的token使用。如下所示:
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
# Successful Requests: 1
# Total Cost (USD): $2.95e-05
4. 支持流式处理
一些提供商支持在流式处理上下文中提供token计数元数据。例如,在OpenAI中,可以设置stream_usage=True以启用此功能:
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", stream_usage=True)
aggregate = None
for chunk in llm.stream("hello"):
aggregate = chunk if aggregate is None else aggregate + chunk
print(aggregate.usage_metadata)
# 输出示例: {'input_tokens': 8, 'output_tokens': 9, 'total_tokens': 17}
常见问题和解决方案
- 网络访问问题:由于某些地区的网络限制,使用API代理服务可以提高访问稳定性。
- 多次调用成本过高:使用回调上下文管理器可以帮助您追踪和优化多次调用中的token使用。
总结和进一步学习资源
通过本文的介绍,您将能够更好地管理和优化ChatModels中的token使用,从而有效控制应用上线后的运行成本。想要深入了解,请查看以下资源:
参考资料
- LangChain 官方文档
- OpenAI 官方指南
- Anthropic 模型说明
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---