Spaces:
Paused
Paused
File size: 4,653 Bytes
52f92a4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
"""
临时修复超时问题的脚本
在 Colab 中运行此脚本来增加超时时间
"""
import sys
import os
# 确保路径正确
sys.path.insert(0, '/content/drive/MyDrive/adaptive_RAG')
print("🔧 修复超时问题...")
print("="*60)
# 方案 1: 修改 entity_extractor 的超时设置
print("\n📝 方案 1: 增加超时时间和重试次数")
print("-"*60)
# 重新导入并修改
from entity_extractor import EntityExtractor, EntityDeduplicator
from graph_indexer import GraphRAGIndexer
# 创建自定义的 GraphRAG 索引器,使用更长的超时
class GraphRAGIndexerWithLongerTimeout(GraphRAGIndexer):
"""增加超时时间的 GraphRAG 索引器"""
def __init__(self, timeout=180, max_retries=5):
"""
初始化索引器,使用更长的超时时间
Args:
timeout: 超时时间(秒),默认180秒(3分钟)
max_retries: 最大重试次数,默认5次
"""
print(f"🚀 初始化GraphRAG索引器(超时: {timeout}秒, 重试: {max_retries}次)...")
# 使用更长的超时初始化实体提取器
self.entity_extractor = EntityExtractor(
timeout=timeout,
max_retries=max_retries
)
self.entity_deduplicator = EntityDeduplicator()
# 导入其他必要的类
from knowledge_graph import KnowledgeGraph, CommunitySummarizer
self.knowledge_graph = KnowledgeGraph()
self.community_summarizer = CommunitySummarizer()
self.indexed = False
print("✅ GraphRAG索引器初始化完成")
# 方案 2: 提供快速重启脚本
print("\n📝 方案 2: 重启 Ollama 服务")
print("-"*60)
print("运行以下命令:")
print(" !pkill -9 ollama")
print(" !sleep 2")
print(" !nohup ollama serve > /tmp/ollama.log 2>&1 &")
print(" !sleep 5")
print(" !curl http://localhost:11434/api/tags")
# 方案 3: 跳过当前文档
print("\n📝 方案 3: 跳过问题文档并继续")
print("-"*60)
print("如果某个文档持续失败,可以跳过它:")
print("""
# 示例:从文档 #57 开始继续处理
problem_doc_index = 55 # 文档 #56 的索引
doc_splits_filtered = doc_splits[:problem_doc_index] + doc_splits[problem_doc_index+1:]
# 使用过滤后的文档列表
graph = indexer.index_documents(
documents=doc_splits_filtered,
batch_size=3
)
""")
# 使用示例
print("\n" + "="*60)
print("✅ 修复方案准备完成")
print("="*60)
print("\n💡 推荐的使用方法:")
print("-"*60)
usage_example = """
# 1. 导入修复后的索引器
from fix_timeout_issue import GraphRAGIndexerWithLongerTimeout
# 2. 使用更长的超时时间(3分钟)创建索引器
indexer = GraphRAGIndexerWithLongerTimeout(
timeout=180, # 3分钟超时
max_retries=5 # 5次重试
)
# 3. 减小批次大小,继续处理
# 如果已经处理了部分文档,可以跳过它们
processed_count = 55 # 已处理到文档 #55
remaining_docs = doc_splits[processed_count:]
graph = indexer.index_documents(
documents=remaining_docs,
batch_size=3, # 更小的批次
save_path="/content/drive/MyDrive/knowledge_graph.pkl"
)
# 4. 如果还是超时,考虑跳过问题文档
# problem_indices = [55] # 文档 #56 的索引
# remaining_docs_filtered = [doc for i, doc in enumerate(doc_splits[processed_count:])
# if (processed_count + i) not in problem_indices]
"""
print(usage_example)
print("\n" + "="*60)
print("🎯 立即执行的步骤:")
print("="*60)
print("""
1️⃣ 首先重启 Ollama 服务:
!pkill -9 ollama && sleep 2 && nohup ollama serve > /tmp/ollama.log 2>&1 & && sleep 5
2️⃣ 然后使用更长的超时时间继续:
from fix_timeout_issue import GraphRAGIndexerWithLongerTimeout
indexer = GraphRAGIndexerWithLongerTimeout(timeout=180, max_retries=5)
3️⃣ 从文档 #56 继续处理(减小批次大小):
remaining_docs = doc_splits[55:] # 从文档 #56 开始
graph = indexer.index_documents(remaining_docs, batch_size=3)
4️⃣ 如果文档 #56 仍然超时,跳过它:
remaining_docs = doc_splits[56:] # 跳过文档 #56,从 #57 开始
graph = indexer.index_documents(remaining_docs, batch_size=3)
""")
print("\n⚠️ 注意:")
print(" • 超时通常说明文档内容复杂或 Ollama 负载过重")
print(" • 重启 Ollama 通常能解决负载问题")
print(" • 增加超时时间(180秒)能处理复杂文档")
print(" • 减小批次大小(3个文档/批次)能减轻负载")
print(" • 如果某个文档持续失败,可以考虑跳过它")
|