成本分析#
概念#
每次调用 LLM 都会产生一定的费用 - 例如,OpenAI 的 gpt-3.5-turbo 的费用为每 1 千个标记 $0.002。构建索引和查询的成本取决于
- 所使用的 LLM 类型
- 所使用的数据结构类型
- 构建过程中使用的参数
- 查询过程中使用的参数
构建和查询每个索引的成本在参考文档中有待补充。与此同时,我们提供以下信息:
- 索引成本结构的高级概述。
- 您可以直接在 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_k
或chunk_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)
使用模式#
阅读有关完整使用模式的更多详细信息!