成本分析#
概念#
每次调用LLM都会产生一定费用——例如OpenAI的gpt-3.5-turbo模型每1000个token收费0.002美元。构建索引和查询的成本取决于:
- 使用的LLM类型
- 使用的数据结构类型
- 构建时使用的参数
- 查询时使用的参数
各索引构建和查询的具体成本在参考文档中标记为TODO。目前我们提供以下信息:
- 索引成本结构的高层概述
- 可直接在LlamaIndex中使用的token预测器!
成本结构概述#
无需LLM调用的索引#
以下索引在构建时完全不需要LLM调用(零成本):
SummaryIndexSimpleKeywordTableIndex- 使用正则表达式关键词提取器从每个文档提取关键词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提供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)
使用模式#
查看完整使用模式获取更多细节!