Skip to content

成本分析#

概念#

每次调用 LLM 都会产生一定的费用 - 例如,OpenAI 的 gpt-3.5-turbo 的费用为每 1 千个标记 $0.002。构建索引和查询的成本取决于

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

构建和查询每个索引的成本在参考文档中有待补充。与此同时,我们提供以下信息:

  1. 索引成本结构的高级概述。
  2. 您可以直接在 LlamaIndex 中使用的标记预测器!

成本结构概述#

无需 LLM 调用的索引#

以下索引在构建过程中根本不需要 LLM 调用(成本为 0):

  • SummaryIndex
  • SimpleKeywordTableIndex - 使用正则表达式关键词提取器从每个文档中提取关键词
  • RAKEKeywordTableIndex - 使用 RAKE 关键词提取器从每个文档中提取关键词

需要 LLM 调用的索引#

以下索引在构建过程中需要 LLM 调用:

  • TreeIndex - 使用 LLM 对文本进行层级总结以构建树
  • KeywordTableIndex - 使用 LLM 从每个文档中提取关键词

查询时间#

在查询过程中,始终会有 >= 1 次 LLM 调用,以合成最终答案。 一些索引在构建和查询之间存在成本权衡。例如,SummaryIndex 在构建过程中是免费的,但在对摘要索引进行查询(无需过滤或嵌入查找)时,将调用 LLM {math}N 次。

以下是关于每个索引的一些注意事项:

  • SummaryIndex:默认情况下需要 {math}N 次 LLM 调用,其中 N 是节点数。
  • TreeIndex:默认情况下需要 {math}\log (N) 次 LLM 调用,其中 N 是叶节点数。
  • 设置 child_branch_factor=2 将比默认的 child_branch_factor=1 更昂贵(多项式 vs 对数),因为我们需要遍历每个父节点的 2 个子节点,而不仅仅是 1 个。
  • KeywordTableIndex:默认情况下需要 1 次 LLM 调用来提取查询关键词。
  • 可以使用 index.as_retriever(retriever_mode="simple")index.as_retriever(retriever_mode="rake"),在查询文本上也使用正则表达式/RAKE 关键词提取器。
  • VectorStoreIndex:默认情况下,每个查询需要 1 次 LLM 调用。如果增加 similarity_top_kchunk_size,或更改 response_mode,则此次数将增加。

使用模式#

LlamaIndex 提供了标记预测器,用于预测 LLM 和嵌入调用的标记使用情况。 这使您能够在 1) 构建索引和 2) 查询索引之前估算成本,而无需进行任何相应的 LLM 调用。

使用 TokenCountingHandler 回调来计算标记。有关设置详细信息,请参阅示例笔记本

使用 MockLLM#

要预测 LLM 调用的标记使用情况,请按照下面的示例导入并实例化 MockLLM。max_tokens 参数用作“最坏情况”预测,其中每个 LLM 响应将包含确切数量的标记。如果未指定 max_tokens,则它将简单地预测回提示。

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

# 全局使用模拟 llm
Settings.llm = MockLLM(max_tokens=256)

然后您可以在索引构建和查询过程中使用此预测器。

使用 MockEmbedding#

您还可以使用 MockEmbedding 预测嵌入调用的标记使用情况。

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

# 全局使用模拟嵌入
Settings.embed_model = MockEmbedding(embed_dim=1536)

使用模式#

阅读有关完整使用模式的更多详细信息!