引言
在将您的应用部署到生产环境时,追踪大语言模型(LLM)的Token使用量和计算费用是一个重要的环节。这份指南将引导您如何从LangChain模型调用中获取此信息。了解这些使用数据有助于更好地管理资源并优化成本。
主要内容
1. 先决条件
本指南假设您已经熟悉以下概念:
- 大语言模型(LLMs)
- 使用LangSmith进行监控
您可以通过LangSmith追踪LLM应用中的Token使用情况,更多信息请参考LangSmith快速入门指南。
2. 使用回调
在某些API中,有特定的回调上下文管理器允许您在多次调用中追踪Token使用情况。您需要确认是否有适合您模型的集成可用。
如果没有现成的集成,您可以通过适配OpenAI回调管理器的实现来创建自定义回调管理器。
3. OpenAI的例子
单次调用追踪
我们先来看一个追踪单次聊天模型调用的简单例子。
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}")
请注意,这个回调处理器当前不支持流式Token计数。
多次调用追踪
任何在上下文管理器内的代码都会被追踪。这是一个用于顺序调用链的例子。这种方法同样适用于可能使用多步的Agent。
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")
# 使用API代理服务提高访问稳定性
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}")
流式调用
由于回调处理器不支持流式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:
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}")
常见问题和解决方案
-
模型不支持流式Token计数怎么办?
- 您可以实现自定义回调处理程序,或使用如LangSmith这样的监控平台。
-
如何处理API调用的网络限制?
- 考虑使用API代理服务来提高访问稳定性,特别是在某些地区的网络限制下。
总结和进一步学习资源
本指南介绍了如何追踪LLM的Token使用情况。为了深入学习,您可以参考以下资源:
参考资料
- LangChain Documentation
- OpenAI Documentation
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---