LangChain调用LLM遇Token超限RateLimitError,求解决方案
解决GPT-4 Token超限(429错误)的方案
问题根源
你代码里的核心错误是query = f"{hwp_to_txt}to English "——hwp_to_txt是所有分割后的文档对象列表,直接把它拼进查询会一次性把所有文本内容塞进LLM请求,瞬间超过GPT-4每分钟10000Token的限制。
具体解决方法
1. 修正向量数据库的使用逻辑
向量数据库的作用是检索相关文本片段,而非把所有内容丢给LLM。如果你的需求是翻译文档里的特定内容,应该把查询改成明确的翻译指令,让向量DB自动检索对应片段后再翻译:
# 修正查询逻辑:只传翻译指令,向量DB会自动检索相关内容 query = "Translate the retrieved content to English" result = chain({"question": query, "chat_history": []})
2. 批量翻译整个文档(如果需要全译)
如果目标是翻译完整文档,不要用ChatVectorDBChain,直接遍历每个分割后的文档块,逐个调用LLM翻译,同时添加限流控制:
import time from langchain.llms import OpenAI llm = OpenAI(model_name="gpt-4") translated_results = [] # 遍历每个文档块,逐个翻译 for doc in hwp_to_txt: # 构造翻译请求,只传当前文档的内容 prompt = f"Translate the following text to English:\n{doc.page_content}" try: translation = llm(prompt) translated_results.append(translation) # 控制请求频率,避免超TPM限制:按10000Token/分钟估算,每次请求用~1200Token的话,间隔7秒左右 time.sleep(7) except Exception as e: print(f"翻译出错:{e}") time.sleep(30) # 出错后延长间隔 # 把翻译结果合并成完整文本 full_translation = "\n".join(translated_results)
3. 额外优化建议
- 调小文本块大小:把
chunk_size从1000降到700-800,减少单次请求的Token占用 - 切换模型:如果翻译精度要求不高,改用gpt-3.5-turbo,它的TPM限制更高,能大幅降低超限概率
- 动态限流:可以用
tiktoken库统计每次请求的Token数量,精准控制请求间隔,确保每分钟总Token不超过10000
内容的提问来源于stack exchange,提问作者TREVI
相关产品推荐
相关产品推荐

