@@ -355,7 +355,20 @@ async def generate_reply(
355
355
fail_reason = None
356
356
current_retry_counter = 0
357
357
is_success = True
358
- while current_retry_counter < self .max_retry_count :
358
+ force_retry = False
359
+ while force_retry or current_retry_counter < self .max_retry_count :
360
+ # Action force_retry 强制重试的处理: Action中明确指定需要进行重试,重试的消息按以下规则重新生成
361
+ # - 重新生成消息,保留上一轮的Action,并增加Rounds
362
+ # - 将上一轮的Action的Content作为当前输入消息
363
+ if force_retry :
364
+ received_message .content = reply_message .action_report .content
365
+ received_message .rounds = reply_message .rounds + 1
366
+ reply_message = self ._init_reply_message (
367
+ received_message = received_message ,
368
+ rely_messages = rely_messages ,
369
+ )
370
+
371
+ # 普通重试的处理
359
372
if current_retry_counter > 0 :
360
373
retry_message = self ._init_reply_message (
361
374
received_message = received_message ,
@@ -468,6 +481,20 @@ async def generate_reply(
468
481
469
482
question : str = received_message .content or ""
470
483
ai_message : str = llm_reply or ""
484
+
485
+ # force_retry means this reply do not complete, should reentry and do more things
486
+ force_retry = False
487
+ if act_out is not None and act_out .force_retry :
488
+ await self .write_memories (
489
+ question = question ,
490
+ ai_message = ai_message ,
491
+ action_output = act_out ,
492
+ check_pass = check_pass ,
493
+ check_fail_reason = fail_reason ,
494
+ )
495
+ force_retry = True
496
+ continue
497
+
471
498
# 5.Optimize wrong answers myself
472
499
if not check_pass :
473
500
if not act_out .have_retry :
0 commit comments