@@ -236,12 +236,40 @@ async def run_ingest(context: TaskContext):
236236 await context .set_progress (progress , f"正在处理第 { idx } /{ total } 个文档" )
237237
238238 # 处理单个文档
239- result = await knowledge_base .add_content (db_id , [item ], params = params )
240- processed_items .extend (result )
239+ try :
240+ result = await knowledge_base .add_content (db_id , [item ], params = params )
241+ processed_items .extend (result )
242+ except Exception as doc_error :
243+ # 处理单个文档处理的所有异常(包括超时)
244+ logger .error (f"Document processing failed for { item } : { doc_error } " )
245+
246+ # 判断是否是超时异常
247+ error_type = "timeout" if isinstance (doc_error , TimeoutError ) else "processing_error"
248+ error_msg = "处理超时" if isinstance (doc_error , TimeoutError ) else "处理失败"
249+
250+ processed_items .append ({
251+ "item" : item ,
252+ "status" : "failed" ,
253+ "error" : f"{ error_msg } : { str (doc_error )} " ,
254+ "error_type" : error_type
255+ })
241256
242257 except asyncio .CancelledError :
243258 await context .set_progress (100.0 , "任务已取消" )
244259 raise
260+ except Exception as task_error :
261+ # 处理整体任务的其他异常(如内存不足、网络错误等)
262+ logger .exception (f"Task processing failed: { task_error } " )
263+ await context .set_progress (100.0 , f"任务处理失败: { str (task_error )} " )
264+ # 将所有未处理的文档标记为失败
265+ for item in items [len (processed_items ):]:
266+ processed_items .append ({
267+ "item" : item ,
268+ "status" : "failed" ,
269+ "error" : f"任务失败: { str (task_error )} " ,
270+ "error_type" : "task_failed"
271+ })
272+ raise
245273
246274 item_type = "URL" if content_type == "url" else "文件"
247275 failed_count = len ([_p for _p in processed_items if _p .get ("status" ) == "failed" ])
0 commit comments