From 6644227dd89ff08041afa1a95c560e654b8cf70b Mon Sep 17 00:00:00 2001 From: jingrow Date: Fri, 31 Oct 2025 19:31:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=87=8D=E6=9E=84Page?= =?UTF-8?q?=E7=B1=BB=E5=90=8E=E6=99=BA=E8=83=BD=E4=BD=93=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E6=97=A0=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/pagetype/local_ai_agent/__init__.py | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/__init__.py b/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/__init__.py index f9f40f1..ad6ca7a 100644 --- a/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/__init__.py +++ b/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/__init__.py @@ -54,13 +54,22 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs): ai_agents = _get_all_local_ai_agents() # pagetype 分组 - agents_by_pagetype = ai_agents.get(pg.pagetype, []) or [] + # 兼容 dict 或对象:统一读取 pagetype + def _get_pg_field(obj, key): + if isinstance(obj, dict): + return obj.get(key) + return getattr(obj, key, None) + + pg_pagetype = _get_pg_field(pg, "pagetype") + pg_name = _get_pg_field(pg, "name") + + agents_by_pagetype = ai_agents.get(pg_pagetype, []) or [] # module 分组 # 获取 pagetype 所属 module(通过 API 获取 module/app) module_name = None try: - ma = get_pagetype_module_app(pg.pagetype) + ma = get_pagetype_module_app(pg_pagetype) if ma.get("success"): module_name = ma.get("module") except Exception: @@ -102,9 +111,13 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs): # 使用统一的 render_template 进行 Jinja2 条件渲染 cond_tpl = str(agent.get("condition") or "").strip() # 统一从触发记录的 pagetype/name 拉取完整记录,构建渲染上下文 - base_ctx = pg.as_dict() if hasattr(pg, "as_dict") else getattr(pg, "__dict__", {}) - _pt = base_ctx.get("pagetype") or getattr(pg, "pagetype", None) - _nm = base_ctx.get("name") or getattr(pg, "name", None) + # 统一基上下文(兼容 dict/object) + if isinstance(pg, dict): + base_ctx = pg + else: + base_ctx = pg.as_dict() if hasattr(pg, "as_dict") else getattr(pg, "__dict__", {}) + _pt = base_ctx.get("pagetype") or _get_pg_field(pg, "pagetype") + _nm = base_ctx.get("name") or _get_pg_field(pg, "name") pg_ctx = base_ctx or {} if _pt and _nm: api_res = get_record(str(_pt), str(_nm)) @@ -118,7 +131,7 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs): trigger = False if trigger: - logger.info(f"Run Local Ai Agent: agent={agent.get('name')}, event={event}, page={pg.pagetype}:{pg.name}") + logger.info(f"Run Local Ai Agent: agent={agent.get('name')}, event={event}, page={pg_pagetype}:{pg_name}") enqueue_local_ai_agent(pg, agent.get('name')) else: logger.debug(f"Condition not met, skip agent: agent={agent.get('name')}, event={event}") @@ -148,7 +161,10 @@ def enqueue_local_ai_agent(pg, agent_name): from .local_ai_agent import create_agent_job # 将触发上下文透传为执行参数的一部分(由下游路由读取) - event_inputs = {"pagetype": getattr(pg, 'pagetype', None), "name": getattr(pg, 'name', None)} if (hasattr(pg, 'pagetype') and hasattr(pg, 'name')) else {} + if isinstance(pg, dict): + event_inputs = {"pagetype": pg.get("pagetype"), "name": pg.get("name")} + else: + event_inputs = {"pagetype": getattr(pg, 'pagetype', None), "name": getattr(pg, 'name', None)} if (hasattr(pg, 'pagetype') and hasattr(pg, 'name')) else {} _ = create_agent_job( agent_id=str(agent_id),