运行EmbedChain代码时,如何计算读取网页等资源的Token消耗?
EmbedChain 资源读取与查询的Token消耗分析
一、资源嵌入阶段(add方法)的Token消耗
调用add添加网页、YouTube视频时,Token消耗核心在嵌入向量生成环节:
- 工具会先自动提取网页内容、将YouTube视频转成文字,这一步不消耗OpenAI Token;
- 提取出的内容会被分割成固定大小的文本块(默认500Token),再调用OpenAI嵌入模型(默认
text-embedding-ada-002)生成向量,每块内容的Token数都会计入消耗。
你的示例资源预估消耗:
- 维基百科Elon Musk页面:内容量大,预估8000-12000 Token
- Tesla官网Elon Musk页面:内容精简,预估500-1000 Token
- 目标YouTube视频(约10分钟):转文字后预估3000-5000 Token
- 总嵌入Token消耗约11500-18000 Token,对应
text-embedding-ada-002的成本约0.00115-0.0018美元(按$0.0001/1k Token计算)
二、查询阶段(query方法)的Token消耗
查询时的Token消耗来自三个部分:
- 查询语句的嵌入Token:把问题转成嵌入向量,消耗少量Token(你的问题约10 Token)
- 匹配文本块的Token:从向量库召回相关文本块(默认top5),这些内容会拼接到Prompt里,预估几百Token
- LLM生成回答的Token:GPT-3.5-turbo生成回答的Token数(你的示例回答约30 Token)
你的示例查询预估消耗:
总消耗约300-500 Token,对应gpt-3.5-turbo的成本约0.0003-0.0005美元(按$0.001/1k Token计算)
三、节约成本的实用技巧
- 调整文本块大小:初始化App时设置
chunk_size=300,减少单块内容的Token数(注意可能影响回答准确性) - 替换低成本嵌入模型:改用
text-embedding-3-small,成本是ada-002的一半,嵌入效果差异不大 - 减少召回文本块数量:查询时设置
elon_bot.query("问题", num_documents=3),减少Prompt中的Token总量 - 精简嵌入资源:YouTube视频只嵌入关键片段的文字,网页可提前过滤无关内容
- 利用缓存机制:重复添加相同资源时,EmbedChain会自动跳过嵌入,避免重复消耗
示例代码
import os from embedchain import App # Create a bot instance os.environ["OPENAI_API_KEY"] = "YOUR API KEY" elon_bot = App() # Embed online resources elon_bot.add("web_page", "https://en.wikipedia.org/wiki/Elon_Musk") elon_bot.add("web_page", "https://tesla.com/elon-musk") elon_bot.add("youtube_video", "https://www.youtube.com/watch?v=MxZpaJK74Y4") # Query the bot elon_bot.query("How many companies does Elon Musk run?") # Answer: Elon Musk runs four companies: Tesla, SpaceX, Neuralink, and The Boring Company
内容的提问来源于stack exchange,提问作者shantanuo
相关产品推荐
相关产品推荐

