[如何有效跟踪和管理ChatModels中的Token使用情况]

203 阅读2分钟
# 如何有效跟踪和管理ChatModels中的Token使用情况

随着语言模型(LLM)应用的广泛普及,在应用部署到生产环境时,精确跟踪和管理Token的使用情况变得至关重要。这不仅影响到成本的控制,也有助于优化资源利用率。本文将介绍如何通过LangChain库来实现这一目标,并结合实际代码示例进行说明。

## 引言

Token使用量影响着语言模型的调用成本和性能。掌握如何跟踪这些信息,可以帮助开发者做出更明智的决策,提高应用的稳定性和盈利能力。本文旨在介绍如何通过LangChain模型调用来获取Token使用信息。

## 主要内容

### 使用LangSmith

LangSmith是一款能够帮助开发者追踪LLM应用中Token使用情况的工具。你可以参考[LangSmith快速入门指南](https://langsmith.example.com)来了解详细的设置和使用步骤。

### 使用`AIMessage.usage_metadata`

许多模型提供商会在聊天生成响应中返回Token使用信息。在LangChain中,这些信息会储存在`AIMessage`对象的`usage_metadata`属性中。此属性为一个`UsageMetadata`字典,例如`input_tokens`和`output_tokens`。

#### 示例代码

```python
# !pip install -qU langchain-openai

from langchain_openai import ChatOpenAI

# 使用API代理服务提高访问稳定性
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
openai_response = llm.invoke("hello")
print(openai_response.usage_metadata)

输出示例:

{'input_tokens': 8, 'output_tokens': 9, 'total_tokens': 17}

流式处理中的Token使用

OpenAI支持在流式上下文中返回Token计数元数据。在langchain-openai >= 0.1.9版本中,通过设定stream_usage=True即可启用此功能。

示例代码

llm = ChatOpenAI(model="gpt-3.5-turbo-0125", stream_usage=True)

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)

使用回调管理器跟踪Token使用

一些API提供了特定的回调上下文管理器,允许跨多个调用跟踪Token使用。目前仅对OpenAI API和Bedrock Anthropic API实现。

OpenAI示例

# !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")
    print(cb)

常见问题和解决方案

  1. 网络限制:由于某些地区的网络限制,可能需要考虑使用API代理服务来提高访问稳定性。
  2. 不支持的供应商:目前的解决方案主要适用于OpenAI和Anthropic等供应商,其他供应商可能需要根据其API文档进行自定义修改。

总结和进一步学习资源

通过掌握如何跟踪和管理Token使用,你可以更好地控制成本和优化应用。建议进一步阅读以下资源:

参考资料

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

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


---END---