在生产环境中,计算应用程序成本的关键在于跟踪Token使用情况。在这篇文章中,我们将展示如何从LangChain模型调用中获取这个信息。

技术背景介绍

大语言模型(LLMs)的使用在许多应用中都涉及到成本核算,而成本主要由模型使用的Token数量决定。LangChain是一个广泛使用的框架,提供了便捷的方式来调用大语言模型并进行结果处理。然而,当应用上线时,监控其Token使用情况以估算费用就显得尤为重要。我们将使用LangSmith来帮助跟踪这些Token使用。

核心原理解析

在LangChain中,Token使用可以通过回调函数(Callback)进行跟踪。这些回调函数能够在多次调用中累积Token使用数据,并计算总的使用成本。

代码实现演示

单次调用Token跟踪

让我们看看一个如何跟踪单次大语言模型调用的简单示例:

from langchain_community.callbacks import get_openai_callback
from langchain_openai import OpenAI

# 使用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(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跟踪

对于多次调用的情景,我们可以使用相同的回调函数来跟踪累积的Token使用,如下所示:

from langchain_community.callbacks import get_openai_callback
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI

# 初始化OpenAI模型和Prompt模板
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(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

对于流式数据的处理,当前的回调管理器尚不支持Token计数。为此,我们可以使用其他解决方案,例如使用自定义回调处理程序或监控平台如LangSmith。

应用场景分析

在大语言模型被用于如互动问答系统、自动内容生成或其他高频调用的场景中,跟踪Token使用不仅可以帮助控制成本,还能优化模型调用策略。

实践建议

  1. 在应用初期进行详细的Token使用分析,以便选择合适的模型和调用策略。
  2. 定期复查Token使用情况,以识别可能的优化点。
  3. 利用监控工具,如LangSmith,持续追踪和优化应用程序的成本效益。

如果遇到问题欢迎在评论区交流。
—END—

更多推荐