feat: 实现 AgentScope ReAct Runner 两阶段执行并重构事件处理

This commit is contained in:
zl-q
2026-03-16 09:01:01 +08:00
parent 072c09d99d
commit dcceb48d84
51 changed files with 5015 additions and 5663 deletions
+17 -11
View File
@@ -18,6 +18,7 @@ from core.agentscope.tools.tool_config import (
)
from core.agentscope.tools.tool_middleware import register_tool_middlewares
from sqlalchemy.ext.asyncio import AsyncSession
from schemas.agent.system_agent import AgentType
TOOL_FUNCTIONS: dict[str, Any] = {
"calendar_read": calendar_read,
@@ -27,9 +28,9 @@ TOOL_FUNCTIONS: dict[str, Any] = {
}
STAGE_TO_GROUPS: dict[str, set[ToolGroup]] = {
"router": {ToolGroup.READ},
"worker": {ToolGroup.READ, ToolGroup.WRITE},
AGENT_TYPE_TO_GROUPS: dict[AgentType, set[ToolGroup]] = {
AgentType.ROUTER: {ToolGroup.READ},
AgentType.WORKER: {ToolGroup.READ, ToolGroup.WRITE},
}
@@ -61,7 +62,6 @@ def build_toolkit(
groups: set[ToolGroup] | None = None,
enabled_tool_names: set[str] | None = None,
enable_hitl: bool | None = None,
enable_approval_layer: bool = True,
):
toolkit = Toolkit()
enabled_names = _resolve_enabled_tools(
@@ -85,7 +85,7 @@ def build_toolkit(
preset_kwargs=preset_kwargs,
)
approval_enabled = enable_approval_layer if enable_hitl is None else enable_hitl
approval_enabled = enable_hitl if enable_hitl is not None else True
if approval_enabled:
register_tool_middlewares(toolkit=toolkit, config_by_name=TOOL_CONFIGS)
@@ -94,20 +94,26 @@ def build_toolkit(
def build_stage_toolkit(
*,
stage: str,
agent_type: AgentType,
session: AsyncSession,
owner_id: UUID,
enabled_tool_names: set[str] | None = None,
enable_hitl: bool | None = None,
enable_approval_layer: bool = True,
):
groups = STAGE_TO_GROUPS.get(stage)
groups = AGENT_TYPE_TO_GROUPS.get(agent_type)
if groups is None:
raise ValueError(f"unknown stage: {stage}")
raise ValueError(f"unknown agent_type: {agent_type}")
stage_enabled_names = resolve_tool_names_by_groups(set(groups))
selected_names = (
stage_enabled_names
if enabled_tool_names is None
else stage_enabled_names | set(enabled_tool_names)
)
return build_toolkit(
session=session,
owner_id=owner_id,
groups=set(groups),
enabled_tool_names=selected_names,
enable_hitl=enable_hitl,
enable_approval_layer=enable_approval_layer,
)