精确追踪LLM的Token使用:从入门到精通

164 阅读2分钟

引言

在将语言模型(LLMs)应用部署到生产环境时,跟踪token使用和计算成本是非常重要的一环。了解token的使用情况不仅能帮助优化应用性能,还能监控运行成本。在这篇文章中,我们将介绍如何通过LangChain和LangSmith来获取token使用的信息,并通过简单明确的代码示例来说明。

主要内容

使用LangSmith来跟踪Token使用

LangSmith是一个强大的工具,可帮助开发者在LLM应用中跟踪token使用。它提供了一些API特定的回调上下文管理器,可以用来追踪多个调用中的token使用。

使用回调

如果你的模型已经提供了这样的集成,可以直接使用这些callback context managers。但如果没有提供,你可以通过调整OpenAI回调管理器的实现来创建自定义的回调管理器。

OpenAI的使用示例

接下来,我们来看一个简单的示例,如何为单次Chat模型调用跟踪token使用。

from langchain_community.callbacks import get_openai_callback
from langchain_openai import OpenAI

llm = OpenAI(model_name="gpt-3.5-turbo-instruct")

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

单次及多次调用追踪

单次调用

通过获取OpenAI的回调,在上下文管理器内的任何调用都会被跟踪。例如上面代码中,我们在调用llm.invoke时,使用了get_openai_callback来记录token信息。

多次调用

对于需要在链中进行多个调用的应用,这种方法同样适用。

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

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

常见问题和解决方案

流数据Token计数支持

当前的回调管理器并不支持流数据context中的token计数。如果需要在流数据context中准确计数tokens,可以考虑以下方法:

  • 使用chat模型,如本指南中所述;
  • 实现使用适当tokenizers的自定义回调处理器;
  • 使用监测平台如LangSmith。

注意,当使用旧版语言模型进行流式处理时,token计数不会更新。

总结和进一步学习资源

了解如何跟踪token使用对优化应用和管理成本至关重要。通过LangChain和LangSmith,你可以轻松实现这一点。虽然在流数据context中支持有待增强,但现有方法已经为我们提供了强大的支持。为了进一步学习,你可以查阅以下资料:

参考资料

  1. LangChain
  2. LangSmith
  3. OpenAI API Documentation

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

---END---