From f94cee7b54d3825b4021c9fabc44269e308e5485 Mon Sep 17 00:00:00 2001 From: jingrow Date: Fri, 31 Oct 2025 20:10:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96jingrow/ai/pagetype/local=5Fa?= =?UTF-8?q?i=5Fagent/=5F=5Finit=5F=5F.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/pagetype/local_ai_agent/__init__.py | 54 +++++-------------- 1 file changed, 14 insertions(+), 40 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 2545cec..7518306 100644 --- a/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/__init__.py +++ b/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/__init__.py @@ -2,7 +2,6 @@ # License: MIT. See LICENSE import jingrow -import logging from jingrow.utils.jinja import render_template @@ -41,13 +40,9 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs): - condition 支持 Jinja2 表达式 - 使用本地任务队列,避免链式重复触发 """ - logger = logging.getLogger(__name__) # 兼容多种调用方式: pg = pg or page method = event or method or kwargs.get("event") - logger.debug(f"LocalAIAgent.run_agent called: pagetype={getattr(pg,'pagetype',None)}, name={getattr(pg,'name',None)}, method={method}") - - # 简化实现:不使用 flags,始终尝试匹配 ai_agents = _get_all_local_ai_agents() @@ -70,7 +65,8 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs): ma = jingrow.get_module_app(pg_pagetype) if isinstance(ma, dict) and ma.get("success"): module_name = ma.get("module") - except Exception: + except Exception as _e: + jingrow.log_error("get_module_app failed", f"pagetype={pg_pagetype}", exc=_e) module_name = None agents_by_module = [] if module_name: @@ -78,15 +74,13 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs): agents_by_module = ai_agents.get(key, []) or [] # 合并去重 - agents_for_pg = {a.get("name"): a for a in agents_by_pagetype + agents_by_module}.values() - logger.debug( - f"LocalAIAgent groups: pagetype_count={len(agents_by_pagetype)}, module_count={len(agents_by_module)}, merged={len(list(agents_for_pg))}" - ) - if not agents_for_pg: - logger.debug("No Local Ai Agents matched for this page") + merged_agents = list({a.get("name"): a for a in agents_by_pagetype + agents_by_module}.values()) + + if not merged_agents: + jingrow.log_error("LocalAIAgent", "No Local Ai Agents matched for this page") return - # 支持的事件(不依赖 flags) + # 支持的事件 event_list = [ "on_update", "after_insert", @@ -97,7 +91,7 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs): "before_update_after_submit", ] - for agent in agents_for_pg: + for agent in merged_agents: event = method if method in event_list else None if event and (agent.get("event_type") == event): @@ -106,10 +100,8 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs): trigger = True else: try: - # 使用统一的 render_template 进行 Jinja2 条件渲染 cond_tpl = str(agent.get("condition") or "").strip() # 统一从触发记录的 pagetype/name 拉取完整记录,构建渲染上下文 - # 统一基上下文(兼容 dict/object) if isinstance(pg, dict): base_ctx = pg else: @@ -124,35 +116,22 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs): result = render_template(cond_tpl, {"pg": pg_ctx}) if str(result).strip().lower() in ("true", "1", "yes"): trigger = True - except Exception: - logger.warning(f"Condition render error, skip agent: agent={agent.get('name')}") + except Exception as _e: + jingrow.log_error("Condition render error, skip agent", f"agent={agent.get('name')}", exc=_e) trigger = False if trigger: - 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}") - - -def _add_agent_to_queue(agent, pg): - """向后兼容:直接调用入队函数(无本地事务队列)。""" - enqueue_local_ai_agent(pg, agent.get('name')) - def enqueue_local_ai_agent(pg, agent_name): - """后台实际入队执行 Local Ai Agent。 - - 此函数会读取本地智能体配置,调用本地任务创建函数以执行远端/本地智能体。 - """ + """后台实际入队执行 Local Ai Agent。""" try: - # 通过统一 CRUD 获取 Local Ai Agent 详情 - items = jingrow.get_list("Local Ai Agent", filters=[["name", "=", agent_name]], fields=["name", "agent_name"], limit=1) - agent = (items or [None])[0] + agent = jingrow.get_pg("Local Ai Agent", agent_name) + if not agent: + return if not agent: return - # 无 agent_id 字段,统一使用 name 作为标识 agent_id = agent.get("name") agent_name_value = agent.get("agent_name") @@ -168,15 +147,10 @@ def enqueue_local_ai_agent(pg, agent_name): agent_id=str(agent_id), agent_name=agent_name_value, inputs=event_inputs, - # 使用统一的执行路由;会在本地队列处理器里转发 route="jingrow/agents/execute", ) except Exception as e: jingrow.log_error("Local Ai Agent执行失败", f"agent={agent_name}, error={str(e)}") -def clear_local_ai_agent_cache(): - """清空本地智能体缓存(简化实现:无缓存,函数保留占位)。""" - return None -