Skip to content

成本分析#

概念#

每次调用LLM都会产生一定费用——例如OpenAI的gpt-3.5-turbo模型每1000个token收费0.002美元。构建索引和查询的成本取决于:

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

各索引构建和查询的具体成本在参考文档中标记为TODO。目前我们提供以下信息:

  1. 索引成本结构的高层概述
  2. 可直接在LlamaIndex中使用的token预测器!

成本结构概述#

无需LLM调用的索引#

以下索引在构建时完全不需要LLM调用(零成本):

  • 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提供token预测器来预测LLM和嵌入调用的token使用量。这使您可以在以下操作前预估成本: 1) 索引构建 2) 索引查询

token计数通过TokenCountingHandler回调实现。详见示例笔记本了解设置细节。

使用MockLLM#

要预测LLM调用的token使用量,请按以下方式导入并实例化MockLLM。max_tokens参数作为"最坏情况"预测值,每个LLM响应将恰好包含该数量的token。若未指定max_tokens,则直接返回提示词长度预测。

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

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

该预测器可用于索引构建和查询阶段。

使用MockEmbedding#

也可通过MockEmbedding预测嵌入调用的token使用量。

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

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

使用模式#

查看完整使用模式获取更多细节!