# 掌握聊天模型的令牌使用情况:轻松跟踪成本
在将您的应用推向生产环境时,跟踪令牌使用情况以计算成本是一个重要的步骤。本文将指导您如何从LangChain模型调用中获取此信息,并提供实用的代码示例和解决方案建议。
## 引言
在使用聊天模型进行开发时,了解令牌使用情况不仅有助于优化模型使用效率,还能帮助您准确估算API的调用成本。在某些地区,网络限制可能会阻碍API的正常访问,为此,开发者可以考虑使用API代理服务进行稳定访问。本文将介绍如何使用LangChain库的功能来追踪令牌使用。
## 使用LangSmith进行跟踪
[LangSmith](https://www.langsmith.com/)是一个帮助跟踪您LLM应用内令牌使用情况的强大工具。您可以参考其[快速入门指南](https://www.langsmith.com/docs/quickstart)以更好地掌握其使用方法。
## 利用`AIMessage.usage_metadata`
许多模型提供商在聊天生成响应中返回令牌使用信息。当可用时,此信息将包含在由相应模型生成的`AIMessage`对象中。
以下是如何获取和使用这些信息的示例:
### 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 示例
# 使用API代理服务提高访问稳定性
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}
常见问题和解决方案
如何在流式传输时跟踪令牌
在使用流式传输时,某些提供商支持在消息流结束时返回令牌使用信息。以OpenAI为例,您可以通过设置stream_usage=True来启用此功能:
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
aggregate = None
for chunk in llm.stream("hello", stream_usage=True):
print(chunk)
aggregate = chunk if aggregate is None else aggregate + chunk
print(aggregate.content)
print(aggregate.usage_metadata)
总结和进一步学习资源
了解和监控令牌使用是优化应用的重要一步。您可以通过阅读LangChain文档和OpenAI API文档来进一步扩展您的知识。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---