TokenUsage 回调函数概述
TokenUsage 是 LangChain 提供的实用回调函数,专门用于追踪和记录语言模型调用过程中的 token 消耗情况。可以帮助开发者:
- 精确监控 API 调用成本
- 优化提示词设计
- 分析模型使用效率
核心功能
TokenUsage 回调主要记录三类 token 数据:
- 输入 token (prompt_tokens): 计算发送给模型的提示词 token 数量
- 输出 token (completion_tokens): 计算模型返回结果的 token 数量
- 总 token (total_tokens): 前两者的总和
实现方法
基础使用示例
from langchain.callbacks import TokenUsage
from langchain.llms import OpenAI
# 初始化回调
token_usage = TokenUsage()
# 创建LLM实例时传入回调
llm = OpenAI(
temperature=0,
callbacks=[token_usage]
)
# 执行查询
response = llm("请介绍一下Python语言")
# 获取token使用情况
print(f"输入token: {token_usage.prompt_tokens}")
print(f"输出token: {token_usage.completion_tokens}")
print(f"总token: {token_usage.total_tokens}")
链式调用中的使用
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
# 创建提示模板
prompt = PromptTemplate(
input_variables=["topic"],
template="请用中文详细解释以下主题: {topic}"
)
# 创建链
chain = LLMChain(
llm=llm,
prompt=prompt,
callbacks=[token_usage]
)
# 执行链
result = chain.run(topic="机器学习")
高级应用场景
批量处理监控
topics = ["深度学习", "神经网络", "自然语言处理"]
total_tokens = 0
for topic in topics:
chain.run(topic=topic)
total_tokens += token_usage.total_tokens
token_usage.reset() # 重置计数器
print(f"批量处理总token消耗: {total_tokens}")
成本估算工具
def estimate_cost(total_tokens):
# 假设使用GPT-3.5模型,每1000个token收费$0.002
return total_tokens / 1000 * 0.002
cost = estimate_cost(total_tokens)
print(f"预计API调用成本: ${cost:.4f}")
注意事项
- 多回调组合:可以与其他回调(如StdOutCallback)同时使用
- 异步环境:在异步调用中需要确保回调函数的线程安全
- 重置机制:长时间运行的应用程序应定期重置计数器
- 模型差异:不同模型的token计算方式可能略有不同
最佳实践建议
- 在开发环境始终启用TokenUsage回调
- 为关键业务操作设置token消耗警报
- 定期分析历史token使用数据
- 根据token消耗优化提示词结构
- 考虑将token使用情况记录到监控系统
安装依赖
pip install -qU langchain-core langchain-openai
get_openai_callback 使用
get_openai_callback 是 LangChain 框架内置封装的实用工具,可以提供:
- 总 token 消耗量(包括输入和输出)
- 总 API 调用次数
- 预估的费用消耗
- 每次调用的详细记录
使用示例
from langchain.callbacks import get_openai_callback
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-3.5-turbo",
)
with get_openai_callback() as cb:
result = llm.invoke("Tell me a joke")
print(cb)
运行结果
Tokens Used: 26
Prompt Tokens: 12
Completion Tokens: 14
Successful Requests: 1
Total Cost (USD): $4.6e-05