{"body":"","images":null,"summary":"","tdk":{"title":"智能输出自动匹配模板系统自定义输出规则开发","description":"可以按“规则引擎 + 模板引擎 + 智能匹配排序”来开发。核心目标是:业务人员通过可视化或 DSL 自定义规则,系统根据输入上下文自动匹配模板,并渲染成指定格式输出。\n\n## 1. 核心模型\n\n| 对象 | 作用 |\n|---|---|\n| Template 模板 | 定义输出内容、格式、变量占位符,如 Markdown、HTML、邮件、JSON |\n| Rule 规则 | 定义“什么条件下,用哪个模板,如何映射变量” |\n| RuleSet 规则集 | 按业务场景组织规则,如订单通知、工单回复、报表生成 |\n| RenderContext 上下文 | 输入数据,如 `event.type`、`order.amount`、`user.name` |\n| RenderResult 结果 | 匹配到的规则、模板、最终内容、耗时、traceId |\n\n## 2. 自定义规则 DSL 示例\n\n建议用 YAML/JSON 定义规则,前端可视化编辑器生成同样的结构。\n\n```yaml\nruleSet: notification\nrules:\n - id: order_paid_premium\n name: 订单支付高级通知\n priority: 100\n enabled: true\n when:\n all:\n - { field: event.type, op: eq, value: order.paid }\n - { field: order.amount, op: gte, value: 100 }\n template: order_paid_premium\n output:\n format: markdown\n mapping:\n customerName: user.name\n orderId: order.id\n amount: order.amount\n```\n\n模板示例:\n\n```jinja\n尊敬的{{ customerName }},您的订单{{ orderId }}已支付{{ amount }}元。\n```\n\n支持的条件操作符:`eq / neq / gt / gte / lt / lte / contains / regex / exists / in`。 \n支持条件组:`all`、`any`、嵌套组合。\n\n## 3. 匹配与渲染流程\n\n```text\n输入上下文\n -\u003e 上下文归一化\n -\u003e 规则索引过滤,如按 event.type 过滤\n -\u003e 条件表达式评估\n -\u003e 候选规则评分排序\n -\u003e 选择最高分规则\n -\u003e 变量映射\n -\u003e 模板渲染\n -\u003e 格式后处理\n -\u003e 输出结果\n```\n\n评分建议:\n\n```text\nscore = priority * 0.5\n + conditionCount * 0.2 # 条件越多越精确\n + exactMatchWeight * 0.2\n + semanticSimilarity * 0.1 # 智能匹配加分\n```\n\n同分时按优先级、更新时间、灰度权重决定。无命中时走兜底模板。\n\n## 4. 最小核心代码示例\n\n```python\nfrom jinja2 import Template\n\ndef get_by_path(data, path):\n cur = data\n for p in path.split(\".\"):\n if isinstance(cur, dict) and p in cur:\n cur = cur[p]\n else:\n return None\n return cur\n\ndef eval_condition(cond, ctx):\n if \"all\" in cond:\n return all(eval_condition(c, ctx) for c in cond[\"all\"])\n if \"any\" in cond:\n return any(eval_condition(c, ctx) for c in cond[\"any\"])\n\n actual = get_by_path(ctx, cond[\"field\"])\n op = cond[\"op\"]\n value = cond.get(\"value\")\n\n if op == \"eq\": return actual == value\n if op == \"neq\": return actual != value\n if op == \"gte\": return actual is not None and actual \u003e= value\n if op == \"lte\": return actual is not None and actual \u003c= value\n if op == \"contains\": return value in (actual or \"\")\n if op == \"exists\": return actual is not None\n return False\n\ndef match_rule(rules, ctx):\n hits = []\n for r in rules:\n if r[\"enabled\"] and eval_condition(r[\"when\"], ctx):\n hits.append(r)\n hits.sort(key=lambda r: r[\"priority\"], reverse=True)\n return hits[0] if hits else None\n\ndef render(rule, template_str, ctx):\n variables = {\n name: get_by_path(ctx, path)\n for name, path in rule[\"output\"][\"mapping\"].items()\n }\n return Template(template_str).render(**variables)\n```\n\n调用示例:\n\n```python\nctx = {\n \"event\": {\"type\": \"order.paid\"},\n \"user\": {\"name\": \"张三\"},\n \"order\": {\"id\": \"A001\", \"amount\": 299}\n}\n\nrule = match_rule(rules, ctx)\ncontent = render(rule, \"尊敬的{{ customerName }},您的订单{{ orderId }}已支付{{ amount }}元。\", ctx)\nprint(content)\n# 尊敬的张三,您的订单A001已支付299元。\n```\n\n## 5. 推荐技术选型\n\n| 模块 | 推荐 |\n|---|---|\n| 后端 | Java Spring Boot / Node.js NestJS / Python FastAPI |\n| 规则引擎 | JsonLogic、CEL、Aviator、EasyRules、Drools |\n| 模板引擎 | Jinja2、Freemarker、Handlebars、Mustache |\n| 存储 | PostgreSQL JSONB + Redis |\n| 管理端 | React + Monaco Editor + Ant Design |\n| 智能匹配 | Embedding + pgvector/Milvus,或 LLM 做兜底推荐 |\n| 监控 | OpenTelemetry + Prometheus + Grafana |\n\n## 6. 开发步骤\n\n1. 定义规则 JSON Schema 和模板元数据格式。\n2. 实现规则 CRUD API 与规则集管理。\n3. 实现条件解析器和安全表达式执行器,禁止直接 `eval`。\n4. 实现模板管理、版本管理、变量校验。\n5. 实现匹配评分器、规则索引、兜底策略。\n6. 实现渲染 API:`POST /api/render`。\n7. 开发管理后台:可视化条件编辑、模板编辑、预览测试。\n8. 加入日志、traceId、命中分析、灰度发布。\n9. 进阶:加入向量检索和 LLM 辅助匹配。\n\n## 7. 关键注意点\n\n- 规则必须版本化、可回滚、可灰度。\n- 表达式必须沙箱执行,变量白名单,防模板注入。\n- 支持预览:输入样例上下文,显示命中规则、评分、渲染结果。\n- 缓存规则 AST、模板编译结果,按场景建索引。\n- 记录每次命中的规则和评分,方便排查“为什么选了这个模板”。\n- 对业务人员暴露简洁 DSL,对开发人员暴露完整 JSON Schema。\n\n如果你需要,我可以继续给出:数据库 DDL、Spring Boot/Node.js 完整项目结构、规则 DSL JSON Schema、前端可视化规则编辑器实现。","keyword":"智能输出自动匹配模板系统自定义输出规则开发"},"title":"智能输出自动匹配模板系统自定义输出规则开发"}