高效计量:如何跟踪和计算LLM的Token使用量

417 阅读2分钟

高效计量:如何跟踪和计算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}")

常见问题和解决方案

  1. 回调不支持流式处理:可以使用聊天模型或自定义回调处理器来处理流式Token计数。
  2. 某些地区的网络限制:建议使用API代理服务以提高访问稳定性。

总结和进一步学习资源

本文为您介绍了如何使用LangChain工具跟踪LLM应用中的Token使用情况。理解这些细节有助于优化成本,为应用程序提供稳定的服务。对于希望深入学习的读者,可以参考以下资源:

参考资料

  1. LangSmith 文档
  2. OpenAI API 参考

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

---END---