Skip to content

Commit 426f708

Browse files
authored
Merge pull request #681 from AnguseZhang/fix/only-one-plan
fix: 多轮计划未生成新计划 & 计划生成失败重试兜底
2 parents 5a377e8 + be6d975 commit 426f708

2 files changed

Lines changed: 37 additions & 22 deletions

File tree

agents/matmaster_agent/flow_agents/agent.py

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@
120120
toolchain_from_examples,
121121
)
122122
from agents.matmaster_agent.services.questions import get_random_questions
123-
from agents.matmaster_agent.state import EXPAND, MULTI_PLANS, UPLOAD_FILE
123+
from agents.matmaster_agent.state import EXPAND, MULTI_PLANS, PLAN, UPLOAD_FILE
124124
from agents.matmaster_agent.sub_agents.mapping import (
125125
AGENT_CLASS_MAPPING,
126126
ALL_AGENT_TOOLS_LIST,
@@ -541,13 +541,14 @@ async def _run_plan_make_agent(
541541
yield update_state_event(ctx, state_delta={'multi_plans': update_multi_plans})
542542

543543
# 检查是否应该跳过用户确认步骤
544-
if should_bypass_confirmation(ctx):
544+
if plan_make_count == 1 and should_bypass_confirmation(ctx):
545545
# 自动设置计划确认状态
546546
yield update_state_event(
547547
ctx,
548548
state_delta={
549549
'plan_confirm': {
550550
'flag': True,
551+
'selected_plan_id': 0,
551552
'reason': 'Auto confirmed for single bypass tool',
552553
}
553554
},
@@ -690,32 +691,35 @@ async def _run_research_flow(
690691
if check_plan(ctx) == FlowStatusEnum.COMPLETE or not ctx.session.state[
691692
'plan_confirm'
692693
].get('flag', False):
694+
# 清空 Plan 和 MULTI_PLANS
695+
if check_plan(ctx) == FlowStatusEnum.COMPLETE:
696+
yield update_state_event(ctx, state_delta={PLAN: {}, MULTI_PLANS: {}})
697+
693698
async for _plan_confirm_event in self._run_plan_confirm_agent(ctx):
694699
yield _plan_confirm_event
695700

696-
plan_confirm = ctx.session.state['plan_confirm'].get('flag', False)
697-
698-
# 制定计划(1. 无计划;2. 计划未通过;3. 计划已完成;4. 用户未确认计划)
699-
if (
700-
check_plan(ctx)
701-
in [
702-
FlowStatusEnum.NO_PLAN,
703-
FlowStatusEnum.COMPLETE,
704-
FlowStatusEnum.FAILED,
705-
]
706-
or not plan_confirm
707-
):
701+
# 制定计划(1. 无计划;2. 计划已完成;3. 计划失败;4. 用户未确认计划)
702+
if check_plan(ctx) in [
703+
FlowStatusEnum.NO_PLAN,
704+
FlowStatusEnum.COMPLETE,
705+
FlowStatusEnum.FAILED,
706+
] or not ctx.session.state['plan_confirm'].get('flag', False):
708707
async for _plan_make_event in self._run_plan_make_agent(
709708
ctx, UPDATE_USER_CONTENT, TOOLCHAIN_EXAMPLES_PROMPT
710709
):
711710
yield _plan_make_event
712711

713-
# 确定选择某个计划
712+
# 从 MultiPlans 中选择某个计划
714713
logger.info(f'{ctx.session.id} check_plan = {check_plan(ctx)}')
715-
if plan_confirm and check_plan(ctx) in [FlowStatusEnum.NEW_PLAN]:
714+
if ctx.session.state['plan_confirm'].get('flag', False) and check_plan(ctx) in [
715+
FlowStatusEnum.NEW_PLAN
716+
]:
716717
selected_plan_id = ctx.session.state['plan_confirm']['selected_plan_id']
717718
selected_plan = ctx.session.state[MULTI_PLANS]['plans'][selected_plan_id]
718-
yield update_state_event(ctx, state_delta={'plan': selected_plan})
719+
yield update_state_event(ctx, state_delta={PLAN: selected_plan})
720+
logger.info(
721+
f'{ctx.session.id} Reset Plan, plan = {ctx.session.state[PLAN]}'
722+
)
719723

720724
# 计划未确认,暂停往下执行
721725
if ctx.session.state['plan_confirm']['flag']:

agents/matmaster_agent/flow_agents/plan_make_agent/agent.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
DisallowTransferAndContentLimitSchemaAgent,
1010
)
1111
from agents.matmaster_agent.logger import PrefixFilter
12+
from agents.matmaster_agent.state import MULTI_PLANS
1213
from agents.matmaster_agent.utils.event_utils import update_state_event
1314

1415
logger = logging.getLogger(__name__)
@@ -19,12 +20,22 @@
1920
class PlanMakeAgent(DisallowTransferAndContentLimitSchemaAgent):
2021
@override
2122
async def _run_events(self, ctx: InvocationContext) -> AsyncGenerator[Event, None]:
22-
async for event in super()._run_events(ctx):
23-
yield event
23+
for _ in range(2):
24+
async for event in super()._run_events(ctx):
25+
yield event
2426

25-
logger.info(
26-
f'{ctx.session.id} multi_plans = {ctx.session.state["multi_plans"]}'
27-
)
27+
if ctx.session.state.get(MULTI_PLANS):
28+
logger.info(
29+
f'{ctx.session.id} multi_plans = {ctx.session.state[MULTI_PLANS]}'
30+
)
31+
break
32+
else:
33+
logger.error(f'{ctx.session.id} Multi Plans Generate Error, Retry')
34+
35+
if not ctx.session.state.get(MULTI_PLANS):
36+
raise RuntimeError(
37+
f'{ctx.session.id} After Retry, Multi Plans Generate Still Error!!'
38+
)
2839

2940
# 计算 feasibility
3041
update_multi_plans = ctx.session.state['multi_plans']

0 commit comments

Comments
 (0)