Skip to content
LlamaIndex 文档版本 跟随上游 源快照 1ff5d117 更新于 2026-10-15

概念

每次调用 LLM 都会产生一定费用——比如 OpenAI 的 gpt-3.5-turbo 是每 1k token 0.002 美元。构建索引与查询的成本取决于:

  • 所用的 LLM 类型
  • 所用的数据结构类型
  • 构建时使用的参数
  • 查询时使用的参数

每个索引的构建与查询费用,在参考文档里仍标注为待补充。在此之前,我们提供以下信息:

  1. 各类索引成本结构的高层概览。
  2. 一个可以直接在 LlamaIndex 里使用的 token 预测器!

成本结构概览

不产生 LLM 调用的索引

下面这些索引在构建阶段完全不需要 LLM 调用(成本为 0):

  • SummaryIndex
  • SimpleKeywordTableIndex —— 用正则关键词抽取器从每个文档中抽取关键词
  • RAKEKeywordTableIndex —— 用 RAKE 关键词抽取器从每个文档中抽取关键词

需要 LLM 调用的索引

下面这些索引在构建阶段确实需要 LLM 调用:

  • TreeIndex —— 用 LLM 对文本做层级式摘要,从而构建这棵树
  • KeywordTableIndex —— 用 LLM 从每个文档中抽取关键词

查询阶段

查询阶段必定会有至少 1 次 LLM 调用,用来合成最终回答。有些索引在「构建」与「查询」之间存在成本上的取舍。比如 SummaryIndex 构建是免费的,但在摘要索引上跑一次查询(不做过滤或嵌入检索)会调用 LLM N 次。

以下是关于各类索引的一些说明:

  • SummaryIndex:默认需要 N 次 LLM 调用,N 为节点数量。
  • TreeIndex:默认需要 log(N) 次 LLM 调用,N 为叶子节点数量。
    • 把 child_branch_factor=2 会比默认的 child_branch_factor=1 贵得多(多项式对数级差别),因为每个父节点要遍历 2 个子节点而不是 1 个。
  • KeywordTableIndex:默认需要一次 LLM 调用来抽取查询关键词。
    • 也可以用 index.as_retriever(retriever_mode="simple") 或 index.as_retriever(retriever_mode="rake"),对你的查询文本改用正则/RAKE 关键词抽取器。
  • VectorStoreIndex:默认每次查询需要一次 LLM 调用。如果你调大 similarity_top_k 或 chunk_size,或更换 response_mode,这个次数就会上升。

使用方式

LlamaIndex 提供了 token 预测器,可以预测 LLM 调用与嵌入调用的 token 用量。这让你在 1) 构建索引和 2) 查询索引时,能在相应 LLM 调用真正发生之前就估算出成本。

token 的计数由 TokenCountingHandler 回调完成。配置细节见示例 notebook。

使用 MockLLM

要预测 LLM 调用的 token 用量,请按下面的方式导入并实例化 MockLLM。max_tokens 参数用作“最坏情况”预测,即每次 LLM 回答都恰好包含那么多个 token;如果不指定 max_tokens,它就简单地按提示词本身的量来回推。

from llama_index.core.llms import MockLLM
from llama_index.core import Settings

# use a mock llm globally
Settings.llm = MockLLM(max_tokens=256)

随后你就可以在索引构建和查询两处都用上这个预测器。

使用 MockEmbedding

嵌入调用的 token 用量同样可以用 MockEmbedding 来预测。

from llama_index.core import MockEmbedding
from llama_index.core import Settings

# use a mock embedding globally
Settings.embed_model = MockEmbedding(embed_dim=1536)

使用方式

更多细节请阅读完整使用方式!

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。