菜单

Token管理和成本跟踪

相关源文件

本页面介绍了 MetaGPT 的 Token 管理和成本跟踪系统,这些系统是处理大型语言模型(LLM)的关键组件。这些系统负责 Token 计数、成本计算、消息压缩以及跨不同 LLM 提供商的使用跟踪。

如果您正在寻找关于 LLM 提供商集成的通用信息,请参阅 LLM 集成;如果您需要有关缓存响应的内存系统的信息,请参阅 经验池

概述

MetaGPT 的 Token 管理和成本跟踪系统提供了:

  1. Token 计数 - 精确衡量输入和输出的 Token 使用量
  2. 成本计算 - 基于 Token 使用量的提供商特定定价计算
  3. Token 管理 - 消息压缩以保持在 Token 限制内
  4. 成本跟踪 - 跨多个 API 调用的成本汇总

来源: metagpt/provider/base_llm.py1-411 metagpt/utils/token_counter.py1-542

Token 计数系统

Token 计数系统能够跨不同的 LLM 提供商和模型精确地测量 Token 使用量。这对于成本跟踪和确保消息不超过 Token 限制至关重要。

Token 成本数据

MetaGPT 维护着各种 LLM 提供商的全面定价信息

Token 成本数据包含来自不同提供商的数百个模型的定价信息,结构为一个字典,以模型名称作为键,定价信息作为值。

来源: metagpt/utils/token_counter.py18-116 metagpt/utils/token_counter.py123-169 metagpt/utils/token_counter.py176-223 metagpt/utils/token_counter.py226-239 metagpt/utils/token_counter.py354-401

Token 限制数据

每个模型都有最大的 Token 限制,这些限制存储在 TOKEN_MAX 字典中

来源: metagpt/utils/token_counter.py242-349

Token 计数函数

Token 计数模块提供了几个关键函数:

  1. count_message_tokens(messages, model) - 计算输入消息的 Token 数
  2. count_output_tokens(string, model) - 计算输出文本的 Token 数
  3. get_max_completion_tokens(messages, model, default) - 计算可用于完成的最大剩余 Token 数

这些函数根据模型处理不同的 Token 化方法,并对 Claude 模型进行特殊处理,对不支持的模型提供回退机制。

来源: metagpt/utils/token_counter.py412-541

成本管理器

CostManager 类用于跟踪和计算跨多个 API 调用的 Token 使用量相关的成本。

CostManager 初始化时需要 Token 成本数据,并维护以下运行计数:

  • 处理的总 Prompt Tokens
  • 生成的总 Completion Tokens
  • 累积的总成本(美元)

来源: metagpt/utils/token_counter.py1-542 metagpt/provider/base_llm.py122-143

Token 管理和消息压缩

当消息超出 Token 限制时,MetaGPT 可以应用不同的压缩策略来确保消息适合允许的限制。

压缩类型

该系统支持多种压缩策略,定义为一个枚举

这些策略决定了消息在超出 Token 限制时如何被压缩。

  1. NO_COMPRESS - 不压缩(如果超出 Token 限制可能会失败)
  2. PRE_CUT_BY_TOKEN - 保留系统消息 + 最早的用户/助手消息,如果需要则截断内容
  3. PRE_CUT_BY_MSG - 保留系统消息 + 最早的用户/助手消息,如果需要则删除整个消息
  4. POST_CUT_BY_TOKEN - 保留系统消息 + 最新的用户/助手消息,如果需要则截断内容
  5. POST_CUT_BY_MSG - 保留系统消息 + 最新的用户/助手消息,如果需要则删除整个消息

压缩过程

压缩过程始终保留系统消息,因为它们为 LLM 提供了关键的指令。

来源: metagpt/provider/base_llm.py338-410

与 LLM 提供商集成

Token 管理和成本跟踪系统通过 BaseLLM 类与所有 LLM 提供商集成。

特定于提供商的实现

每个 LLM 提供商都实现了以下方面的特定逻辑:

  1. Token 计数 - 像 OpenAI 这样的提供商有专门的 Token 计数方法
  2. 使用量提取 - 不同的提供商以不同的格式报告使用量
  3. 成本计算 - 提供商有不同的定价结构

例如

  • OpenAI 从响应对象中提取使用量,并使用 tiktoken 进行专门的 Token 计数
  • Anthropic 适应 Claude 特定的 Token 计数和使用量报告
  • Bedrock 从响应的 HTTP 头中提取使用量信息
  • QianFanDashScope 具有提供商特定的使用量计算和成本跟踪

来源: metagpt/provider/openai_api.py57-326 metagpt/provider/anthropic_api.py40-42 metagpt/provider/bedrock_api.py160-169 metagpt/provider/qianfan_api.py99-104 metagpt/provider/dashscope_api.py1-233

使用示例

基本用法

Token 管理和成本跟踪系统在使用任何 LLM 提供商时都能自动工作。

消息压缩

要启用消息压缩来处理长对话

来源: metagpt/provider/base_llm.py177-208 metagpt/provider/base_llm.py338-410

结论

MetaGPT 的 Token 管理和成本跟踪系统提供了:

  1. 准确的 Token 计数,跨不同 LLM 提供商
  2. 透明的成本跟踪,提供详细的使用信息
  3. 自动消息压缩,以处理 Token 限制
  4. 特定于提供商的适配,以实现最佳性能

这些功能使得在 MetaGPT 框架内高效且经济地使用 LLM 成为可能。