高效计量:如何跟踪和计算LLM的Token使用量
在将应用程序投入生产时,准确跟踪和计算大型语言模型(LLM)的Token使用量对控制成本至关重要。这篇指南将介绍如何通过LangChain模型调用获取Token使用信息。
引言
在使用大型语言模型构建应用时,理解Token使用情况和相应的成本是关键的一步。本文将引导您如何使用LangChain的工具跟踪Token使用,并提供实用的代码示例。
主要内容
前提条件
本文假设您已经熟悉以下概念:
- LLM:大型语言模型
- LangSmith:用来帮助跟踪LLM应用中Token使用的工具。请参阅LangSmith快速入门指南。
使用回调
一些API提供了特定的回调上下文管理器,允许您跨多个调用跟踪Token使用。您需要检查特定模型是否支持这种集成。
如果没有这种集成,您可以通过调整OpenAI回调管理器的实现来创建自定义回调管理器。
OpenAI示例
首先,我们来看一个简单的例子,追踪单次模型调用的Token使用。
from langchain_community.callbacks import get_openai_callback
from langchain_openai import OpenAI
# 使用API代理服务提高访问稳定性
llm = OpenAI(model_name="gpt-3.5-turbo-instruct")
with get_openai_callback() as cb:
result = llm.invoke("Tell me a joke")
print(result)
print("---")
print()
print(f"Total Tokens: {cb.total_tokens}")
print(f"Prompt Tokens: {cb.prompt_tokens}")
print(f"Completion Tokens: {cb.completion_tokens}")
print(f"Total Cost (USD): ${cb.total_cost}")
多次调用
在上下文管理器内的所有调用均会被跟踪。以下是追踪链中多次调用的示例。这也适用于可能使用多步骤的代理。
from langchain_community.callbacks import get_openai_callback
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI
llm = OpenAI(model_name="gpt-3.5-turbo-instruct")
template = PromptTemplate.from_template("Tell me a joke about {topic}")
chain = template | llm
with get_openai_callback() as cb:
response = chain.invoke({"topic": "birds"})
print(response)
response = chain.invoke({"topic": "fish"})
print("--")
print(response)
print()
print("---")
print(f"Total Tokens: {cb.total_tokens}")
print(f"Prompt Tokens: {cb.prompt_tokens}")
print(f"Completion Tokens: {cb.completion_tokens}")
print(f"Total Cost (USD): ${cb.total_cost}")
流式处理
get_openai_callback目前不支持流式处理令牌计数。如果需要在流式上下文中计数,可以使用特定的聊天模型或者实现自定义回调处理器。
from langchain_community.callbacks import get_openai_callback
from langchain_openai import OpenAI
llm = OpenAI(model_name="gpt-3.5-turbo-instruct")
with get_openai_callback() as cb:
for chunk in llm.stream("Tell me a joke"):
print(chunk, end="", flush=True)
print("---")
print()
print(f"Total Tokens: {cb.total_tokens}")
print(f"Prompt Tokens: {cb.prompt_tokens}")
print(f"Completion Tokens: {cb.completion_tokens}")
print(f"Total Cost (USD): ${cb.total_cost}")
常见问题和解决方案
- 回调不支持流式处理:可以使用聊天模型或自定义回调处理器来处理流式Token计数。
- 某些地区的网络限制:建议使用API代理服务以提高访问稳定性。
总结和进一步学习资源
本文为您介绍了如何使用LangChain工具跟踪LLM应用中的Token使用情况。理解这些细节有助于优化成本,为应用程序提供稳定的服务。对于希望深入学习的读者,可以参考以下资源:
参考资料
- LangSmith 文档
- OpenAI API 参考
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---