跳转到内容

成本分析

每次调用大型语言模型都会产生一定费用 - 例如,OpenAI的gpt-3.5-turbo模型每千个标记收费0.002美元。构建索引和查询的成本取决于

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

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

  1. 指数成本结构的高层次概览。
  2. 一个您可以直接在LlamaIndex中使用的令牌预测器!

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

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

以下索引在构建期间确实需要调用LLM:

  • TreeIndexTreeIndex - 使用LLM对文本进行分层摘要以构建树结构
  • KeywordTableIndexKeywordTableIndex - 使用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 更昂贵(多项式与对数复杂度对比),因为我们对每个父节点遍历2个子节点而非仅1个。
  • KeywordTableIndex: 默认需要通过LLM调用来提取查询关键词。
    • 可以执行index.as_retriever(retriever_mode="simple")index.as_retriever(retriever_mode="rake")来同时使用正则表达式/RAKE关键词提取器处理您的查询文本。
  • VectorStoreIndex: 默认情况下,每个查询需要一次LLM调用。如果增加similarity_top_kchunk_size,或更改response_mode,则此数量将会增加。

LlamaIndex 提供令牌预测器来预测LLM和嵌入调用的令牌使用量。 这使您能够在进行任何相应的LLM调用之前,在1)索引构建和2)索引查询过程中估算成本。

令牌计数使用 TokenCountingHandler 回调函数完成。有关设置详情请参阅示例笔记本

要预测LLM调用的令牌使用量,请按如下所示导入并实例化MockLLM。max_tokens参数用作“最坏情况”预测,其中每个LLM响应将恰好包含该数量的令牌。如果未指定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 来预测嵌入调用的令牌使用量。

from llama_index.core import MockEmbedding
from llama_index.core import Settings
# use a mock embedding globally
Settings.embed_model = MockEmbedding(embed_dim=1536)

阅读完整使用模式了解更多详情!