From 5de12da59cc27fd8be36a79e0f925e554513f426 Mon Sep 17 00:00:00 2001 From: jingrow Date: Fri, 31 Oct 2025 03:24:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=99=BA=E8=83=BD=E4=BD=93?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E8=A7=A6=E5=8F=91Condition=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E6=B8=B2=E6=9F=93=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, 27 insertions(+), 3 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 e712b27..28eff3b 100644 --- a/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/__init__.py +++ b/apps/jingrow/jingrow/ai/pagetype/local_ai_agent/__init__.py @@ -3,8 +3,9 @@ import jingrow import logging -from jingrow.utils.jinja import render_template -from jingrow.utils.jingrow_api import get_record_list, get_pagetype_module_app +from jinja2 import Environment +from collections import defaultdict +from jingrow.utils.jingrow_api import get_record_list, get_pagetype_module_app, get_record def _get_all_local_ai_agents(): @@ -99,7 +100,30 @@ def run_agent(pg=None, method=None, event=None, page=None, **kwargs): trigger = True else: try: - result = render_template(agent.get("condition"), {"pg": pg}) + # 使用与 ai_content_generation 节点一致的 Jinja2 渲染方式(宽松 undefined) + cond_tpl = str(agent.get("condition") or "").strip() + jenv = Environment() + jtpl = jenv.from_string(cond_tpl) + # 统一从触发记录的 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) + pg_ctx = base_ctx or {} + if _pt and _nm: + api_res = get_record(str(_pt), str(_nm)) + if api_res and api_res.get("success") and isinstance(api_res.get("data"), dict): + pg_ctx = api_res.get("data") + # 将 None 统一视为空字符串;并为缺失键提供空字符串默认值 + pg_coerced = {} + for _k, _v in (pg_ctx or {}).items(): + if _v is None: + pg_coerced[_k] = "" + elif isinstance(_v, str): + pg_coerced[_k] = _v + else: + pg_coerced[_k] = _v + pg_safe = defaultdict(lambda: "", pg_coerced) + result = jtpl.render(pg=pg_safe) if str(result).strip().lower() in ("true", "1", "yes"): trigger = True except Exception: