iBizModeling Studio 内置AI建模助手 — 用户使用手册

iBizModeling Studio 内置AI建模助手 --- 用户使用手册

1. 概述

iBizModeling Studio 建模助手是一个智能建模辅助工具,集成于 iBizModeling Studio 中。它能够帮助您完成以下工作:

  • 查询模型信息 --- 检索系统中已建立的模型数据
  • 获取模型架构定义 --- 了解 iBizModel 各模型对象的属性、枚举、关系
  • 生成 DSL 代码 --- 根据业务需求生成合规的 iBizModelDSL 代码
  • 编译与构建模型 --- 编译 DSL 代码并构建到系统中
  • 运行时校验 --- 获取运行时模型,进行完整校验
  • 模型变更(更新/补丁/删除) --- 对现有模型进行修改

点击开启建模助手:


2. 核心概念

2.1 iBizModel 模型体系

iBizModel 模型名称固定以 PS 前缀开头。模型分为两类:

类型 说明 示例
主模型 独立定义、可检索、有独立生命周期 PSDATAENTITY(实体)、PSDEFIELD(属性)、PSDER(关系)、PSDEFORM(表单)
嵌套模型 必须定义在主模型内部 PSDEFORMDETAIL(表单成员)、PSCODEITEM(代码表项)

dsl_id 是模型的唯一标记,格式为 parent.dsl_id + "." + self.id,如 Base.DICTIONARY。系统根模型 PSSYSTEM 的 dsl_id 为 ""

2.2 模型组织体系

#mermaid-svg-sVxD5vh8XPx1xHV4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-sVxD5vh8XPx1xHV4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-sVxD5vh8XPx1xHV4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-sVxD5vh8XPx1xHV4 .error-icon{fill:#552222;}#mermaid-svg-sVxD5vh8XPx1xHV4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sVxD5vh8XPx1xHV4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-sVxD5vh8XPx1xHV4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sVxD5vh8XPx1xHV4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sVxD5vh8XPx1xHV4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-sVxD5vh8XPx1xHV4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sVxD5vh8XPx1xHV4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sVxD5vh8XPx1xHV4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sVxD5vh8XPx1xHV4 .marker.cross{stroke:#333333;}#mermaid-svg-sVxD5vh8XPx1xHV4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sVxD5vh8XPx1xHV4 p{margin:0;}#mermaid-svg-sVxD5vh8XPx1xHV4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-sVxD5vh8XPx1xHV4 .cluster-label text{fill:#333;}#mermaid-svg-sVxD5vh8XPx1xHV4 .cluster-label span{color:#333;}#mermaid-svg-sVxD5vh8XPx1xHV4 .cluster-label span p{background-color:transparent;}#mermaid-svg-sVxD5vh8XPx1xHV4 .label text,#mermaid-svg-sVxD5vh8XPx1xHV4 span{fill:#333;color:#333;}#mermaid-svg-sVxD5vh8XPx1xHV4 .node rect,#mermaid-svg-sVxD5vh8XPx1xHV4 .node circle,#mermaid-svg-sVxD5vh8XPx1xHV4 .node ellipse,#mermaid-svg-sVxD5vh8XPx1xHV4 .node polygon,#mermaid-svg-sVxD5vh8XPx1xHV4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sVxD5vh8XPx1xHV4 .rough-node .label text,#mermaid-svg-sVxD5vh8XPx1xHV4 .node .label text,#mermaid-svg-sVxD5vh8XPx1xHV4 .image-shape .label,#mermaid-svg-sVxD5vh8XPx1xHV4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-sVxD5vh8XPx1xHV4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-sVxD5vh8XPx1xHV4 .rough-node .label,#mermaid-svg-sVxD5vh8XPx1xHV4 .node .label,#mermaid-svg-sVxD5vh8XPx1xHV4 .image-shape .label,#mermaid-svg-sVxD5vh8XPx1xHV4 .icon-shape .label{text-align:center;}#mermaid-svg-sVxD5vh8XPx1xHV4 .node.clickable{cursor:pointer;}#mermaid-svg-sVxD5vh8XPx1xHV4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-sVxD5vh8XPx1xHV4 .arrowheadPath{fill:#333333;}#mermaid-svg-sVxD5vh8XPx1xHV4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-sVxD5vh8XPx1xHV4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-sVxD5vh8XPx1xHV4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sVxD5vh8XPx1xHV4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-sVxD5vh8XPx1xHV4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sVxD5vh8XPx1xHV4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-sVxD5vh8XPx1xHV4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sVxD5vh8XPx1xHV4 .cluster text{fill:#333;}#mermaid-svg-sVxD5vh8XPx1xHV4 .cluster span{color:#333;}#mermaid-svg-sVxD5vh8XPx1xHV4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-sVxD5vh8XPx1xHV4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-sVxD5vh8XPx1xHV4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-sVxD5vh8XPx1xHV4 .icon-shape,#mermaid-svg-sVxD5vh8XPx1xHV4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-sVxD5vh8XPx1xHV4 .icon-shape p,#mermaid-svg-sVxD5vh8XPx1xHV4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-sVxD5vh8XPx1xHV4 .icon-shape .label rect,#mermaid-svg-sVxD5vh8XPx1xHV4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-sVxD5vh8XPx1xHV4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-sVxD5vh8XPx1xHV4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-sVxD5vh8XPx1xHV4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} PSSYSTEM
模型组
模块
子系统引用
实体
代码表
...
属性
关系
处理逻辑
表单
表格
列表


3. 应用场景与操作指南

场景 1:查询系统基本信息

💡 提问示例

  • "帮我看看当前系统有哪些模块?"
  • "查询系统中所有模块的信息"
  • "系统有哪些模型组?"
  • "当前系统有几个模块?分别是什么?"

目标:了解当前系统的模块、实体、代码表等基础信息。

操作示例:查询当前系统的所有模块

复制代码
fetch_model_info --model PSMODULE --cond_file "modules.json" --desc "查询系统模块"

真实系统返回示例(当前系统共有 9 个模块):

模块名称 dsl_id 说明
系统管理 ibizsysmgr.ibizsysmgr 部门及人员业务实体映射
ebsx系统管理 ebsx.ebsx ebsx部门及人员业务实体映射
智能 ai AI相关业务
模型扩展 extension 模型扩展类实体
全文检索 FTR 全文检索相关业务实体
知识管理 Wiki 知识空间相关业务实体
效能度量 Insight 效能度量相关业务实体
meta meta 元数据管理
基础管理 Base 基础类、通用类业务实体

场景 2:查询实体信息

💡 提问示例

  • "帮我看看Base模块下有哪些实体?"
  • "查询基础管理模块的所有实体信息"
  • "系统中有哪些和用户相关的实体?"
  • "帮我查一下名称包含'DICT'的实体"
  • "Base模块下有没有叫DICTIONARY的实体?"

目标:了解指定模块下的所有实体。

操作示例:查询基础管理模块(Base)下的所有实体

复制代码
fetch_model_info --model PSDATAENTITY --cond_file "entities.json" --desc "查询Base模块实体"

条件文件内容:

json 复制代码
{
  "searchconds": [{
    "condtype": "DEFIELD",
    "fieldname": "psmoduleid",
    "condop": "eq",
    "value": "Base"
  }]
}

真实系统返回示例(Base 模块共 33 个实体,部分列出):

实体名称 dsl_id 说明
DICTIONARY Base.DICTIONARY 数据字典,用于记录基础数据字典
USER Base.USER 企业用户,记录使用系统的用户信息
DEPARTMENT Base.DEPARTMENT 部门,管理企业部门信息
ORGANIZATION Base.ORGANIZATION 组织,管理企业组织信息
ATTENTION Base.ATTENTION 关注,允许用户标记重要项目
COMMENT Base.COMMENT 评论,存储用户发布的评论
CATEGORY Base.CATEGORY 类别,分类存储其他实体的容器
MEMBER Base.MEMBER 成员,公共成员实体
ROLE Base.ROLE 角色,系统角色管理
ATTACHMENT Base.ATTACHMENT 附件,关联文件提供额外信息

场景 3:查看模型详细 DSL 定义

💡 提问示例

  • "帮我看看实体 Base.DICTIONARY 的完整建模代码"
  • "查询 DICTIONARY 实体的 DSL 定义,包括所有属性"
  • "我想看 Base.USER 实体的完整定义"
  • "获取 Base.DICTIONARY 实体的建模DSL代码"

目标:获取某个模型的完整 DSL 代码,包括其成员模型。

操作示例:查看数据字典实体(Base.DICTIONARY)的完整 DSL,包括属性

复制代码
get_model_dsl --id "PSDATAENTITY|Base.DICTIONARY" --subtype PSDEFIELD --desc "查询数据字典实体建模代码"

返回结果示例(部分 DSL 代码):

groovy 复制代码
psdataentity(name: "DICTIONARY", codename: "dictionary_data", detype: 1, ...){
  psdefield(name: "ID", codename: "id", ...)
  psdefield(name: "NAME", codename: "name", ...)
  psdefield(name: "TYPE", codename: "type", ...)
  psdefield(name: "VAL", codename: "val", ...)
  psdefield(name: "CATALOG", codename: "catalog", ...)
  // ... 更多属性
}

场景 4:查询模型架构定义

💡 提问示例

  • "PSDATAENTITY 模型是怎么定义的?有哪些属性?"
  • "实体模型有哪些属性是必填的?"
  • "我想了解 PSMODULE 的架构定义"
  • "PSDEFIELD 属性模型有哪些枚举值?"
  • "帮我查一下 PSDER 关系模型的属性定义"

目标:了解某个模型类型的属性、枚举值、成员模型等信息,为编写 DSL 做准备。

操作示例:查询实体(PSDATAENTITY)的架构定义

复制代码
get_psmodel_info --id "PSDATAENTITY" --desc "获取实体模型定义模板"

返回内容包含

  • 所有可用的属性及其控制标志(M=必填创建,C=可创建,U=可更新)
  • 枚举值定义(如实体类型、存储类型等)
  • 父模型引用关系
  • 成员模型列表
  • DSL 编写示例

场景 5:新建模块和实体

💡 提问示例

  • "帮我在Base模块下新建一个叫TAG的实体,包含ID、NAME、COLOR三个属性"
  • "我想创建一个新的业务模块,应该怎么做?"
  • "请帮我生成一个'产品'实体的DSL代码"
  • "在系统中新建一个'订单'实体,包含订单号、客户名称、金额等字段"

目标:在系统中创建新的业务模块和实体。

流程

  1. 查询 PSMODULE、PSDATAENTITY 架构定义
  2. 检查是否已存在同名模型
  3. 生成 DSL 代码
  4. 编译验证
  5. 构建模型

示例:在基础管理模块下新建一个"标签"实体

groovy 复制代码
//iBizModelDSL建模指令,目标:在Base模块下建立标签实体
psdataentity(
  name: "TAG"
  ,codename: "tag"
  ,logicname: "标签"
  ,detype: 1
  ,psmoduleid: "Base"
){
  psdefield(
    name: "ID"
    ,codename: "id"
    ,logicname: "标识"
    ,pkey: 1
    ,psdatatypeid: "GUID"
  )
  psdefield(
    name: "NAME"
    ,codename: "name"
    ,logicname: "名称"
    ,majorfield: 1
    ,psdatatypeid: "TEXT"
    ,length: 100
    ,allowempty: 0
  )
  psdefield(
    name: "COLOR"
    ,codename: "color"
    ,logicname: "颜色"
    ,psdatatypeid: "TEXT"
    ,length: 50
  )
}

场景 6:建立实体关系(1:N)

💡 提问示例

  • "帮我给TAG实体建立一个到DICTIONARY实体的1:N关系"
  • "如何为两个实体建立一对多关系?"
  • "我想让ORDER实体关联到CUSTOMER实体,该怎么做?"
  • "请生成一个DER1N关系的DSL代码示例"

目标:为实体建立一对多关系。

示例:为 TAG 实体建立与 DICTIONARY 实体的 1:N 关系

groovy 复制代码
psdataentity(
  name: "TAG"
  ,codename: "tag"
  ,logicname: "标签"
  ,detype: 1
  ,psmoduleid: "Base"
){
  // 关系定义必须在连接属性前面
  psder(
    codename: "dictionary"
    ,dertype: "DER1N"
    ,majorpsdeid: "Base.DICTIONARY"
    ,derfieldname: "DICTIONARYID"
  )
  // 外键值属性
  psdefield(
    name: "DICTIONARY_ID"
    ,codename: "dictionary_id"
    ,logicname: "数据字典标识"
    ,deftype: 1
    ,psdatatypeid: "PICKUP"
    ,psderid: "Base.TAG.dictionary"
    ,derpsdefid: "Base.DICTIONARY.ID"
  )
  // 外键值显示文本
  psdefield(
    name: "DICTIONARY_NAME"
    ,codename: "dictionary_name"
    ,logicname: "数据字典名称"
    ,deftype: 3
    ,psdatatypeid: "PICKUPTEXT"
    ,psderid: "Base.TAG.dictionary"
    ,derpsdefid: "Base.DICTIONARY.NAME"
  )
}

场景 7:创建代码表

💡 提问示例

  • "帮我在Base模块下创建一个'订单状态'的静态代码表"
  • "我想建一个代码表,包含'待审核、已通过、已驳回'三个枚举项"
  • "如何创建一个动态代码表?"
  • "查询Base模块下有哪些代码表"
  • "帮我生成一个性别代码表的DSL代码"

目标:定义静态或动态的枚举/数据字典。

操作示例:创建一个标签颜色的静态代码表

groovy 复制代码
//iBizModelDSL建模指令,目标:在Base模块下建立标签颜色代码表
pscodelist(
  name: "标签颜色"
  ,codename: "tag_color"
  ,cltype: "STATIC"
  ,numberitem: 0
  ,psmoduleid: "Base"
){
  pscodeitem(id: "RED", name: "红色", codename: "RED", codeitemvalue: "red", defaultflag: 0)
  pscodeitem(id: "BLUE", name: "蓝色", codename: "BLUE", codeitemvalue: "blue", defaultflag: 0)
  pscodeitem(id: "GREEN", name: "绿色", codename: "GREEN", codeitemvalue: "green", defaultflag: 1)
  pscodeitem(id: "YELLOW", name: "黄色", codename: "YELLOW", codeitemvalue: "yellow", defaultflag: 0)
}

真实系统参考:当前系统 Base 模块下有 21 个代码表,如:

  • Base.dictionary_type(字典项类型,静态)
  • Base.background_style(背景样式,静态)
  • Base.position(职位,动态)
  • Base.dept(部门,动态)

场景 8:创建处理逻辑

💡 提问示例

  • "帮我在DICTIONARY实体上创建一个处理逻辑"
  • "我想为ORDER实体创建一个'订单审核'处理逻辑"
  • "处理逻辑有哪些类型?DELOGIC和VIEWLOGIC有什么区别?"
  • "请生成一个包含开始节点、结束节点和参数的处理逻辑DSL"

目标:为实体定义业务处理逻辑。

操作示例:为 DICTIONARY 实体创建一个简单的处理逻辑

groovy 复制代码
//iBizModelDSL建模指令,目标:为数据字典实体创建处理逻辑
psdelogic(
  logictype: "DELOGIC"
  ,codename: "check_dict_usage"
  ,name: "检查字典使用情况"
  ,psdeid: "Base.DICTIONARY"
){
  psdelogicparam(globalparam: 0, name: "Default", defaultparam: 1, id: "default", parampsdeid: "Base.DICTIONARY", logicname: "传入变量")
  psdelogicparam(globalparam: 0, name: "dict", id: "dict", parampsdeid: "Base.DICTIONARY", logicname: "字典对象")
  psdelogicnode(leftpos: 100, codename: "Begin", name: "开始", id: "Begin", logicnodetype: "BEGIN", toppos: 200)
  psdelogicnode(leftpos: 100, codename: "END_01", name: "结束", id: "END_01", logicnodetype: "END", toppos: 300)
  psdelogiclink(ordervalue: 100, name: "开始到结束", srcpsdelogicnodeid: "Begin", dstpsdelogicnodeid: "END_01")
}

真实系统参考:当前系统 DICTIONARY 实体已有两个处理逻辑:

  • Base.DICTIONARY.judge_column_state --- 判断操作列是否禁用(视图逻辑)
  • Base.DICTIONARY.nothing --- 无操作逻辑(实体处理逻辑)

场景 9:变更模型(更新)

💡 提问示例

  • "帮我更新 DICTIONARY 实体的逻辑名称和备注"
  • "我想修改 Base.USER 实体的描述信息"
  • "如何更新一个已存在的实体模型?"
  • "请帮我将 ORDER 实体的逻辑名称改为'订单主表'"

目标:对现有模型进行更新操作。

操作方式 :在主模型节点设置 srf_model_action: "update",仅需指定要更新的属性。

示例:更新 DICTIONARY 实体的描述和逻辑名称

groovy 复制代码
//iBizModelDSL建模指令,系统ID`xxx`,目标:更新数据字典实体
psdataentity(
  dsl_id: "Base.DICTIONARY"
  ,srf_model_action: "update"
  ,logicname: "数据字典(更新)"
  ,memo: "用于记录基础数据字典,包含类型、颜色、样式等配置信息"
)

场景 10:变更模型(补丁/局部更新)

💡 提问示例

  • "帮我在 DICTIONARY 实体的处理逻辑中附加一个新参数"
  • "我想给 ORDER 实体的处理逻辑删除一个已有参数"
  • "如何替换处理逻辑中的某个节点?"
  • "请帮我更新处理逻辑中某个节点的名称"
  • "我想在逻辑参数列表的第一个位置插入一个新参数"

目标:对现有模型的嵌套成员进行局部增删改。

操作方式 :在主模型设置 srf_model_action: "patch",嵌套成员使用 srf_patch_action

srf_patch_action 支持的操作:

操作 说明
append 附加新成员,支持 srf_append_pos 指定位置
replace 整体替换指定成员(含子成员)
delete 删除指定成员
update 更新指定成员属性

好的,继续完成剩余的内容:


示例:为 DICTIONARY 实体的处理逻辑附加一个新参数

groovy 复制代码
//iBizModelDSL建模指令,目标:为处理逻辑附加参数
psdelogic(
  name: "检查字典使用情况"
  ,codename: "check_dict_usage"
  ,psdeid: "Base.DICTIONARY"
  ,srf_model_action: "patch"
){
  psdelogicparam(
    srf_patch_action: "append"
    ,srf_append_pos: "last"
    ,id: "usageCount"
    ,name: "usageCount"
    ,defaultparam: 0
    ,globalparam: 10
    ,logicname: "使用次数"
    ,stddatatype: 9
  )
}

场景 11:删除模型

💡 提问示例

  • "帮我把 Base.TAG 实体删除掉"
  • "我想删除一个不再需要的代码表"
  • "如何删除一个实体模型?"
  • "请帮我删除 ORDER 实体的某个处理逻辑"
  • "我想删除 Base 模块下的某个实体,该怎么做?"

目标:删除系统中不再需要的模型。

注意事项:删除模型必须经过用户确认!

操作方式 :在主模型节点设置 srf_model_action: "delete"

groovy 复制代码
//iBizModelDSL建模指令,目标:删除指定实体
psdataentity(
  dsl_id: "Base.TAG"
  ,srf_model_action: "delete"
)

场景 12:编译与构建模型

💡 提问示例

  • "帮我编译刚才生成的 DSL 代码"
  • "编译一下 TAG 实体的 DSL,看看有没有错误"
  • "DSL 编译通过了,帮我构建到系统中"
  • "构建完成后帮我确认一下实体是否生效"
  • "帮我编译并构建这段 DSL 代码"

目标:将编写的 DSL 代码编译并构建到系统中。

流程

  1. 先编译验证(--build False
  2. 编译无错误后构建(--build True
  3. 调用 get_model_dsl 确认生效

操作示例

bash 复制代码
# 第一步:仅编译验证
compile_model_dsl --dsl_file "modeling/tag_entity.dsl" --build False
# 第二步:编译通过后构建
compile_model_dsl --dsl_file "modeling/tag_entity.dsl" --build True
# 第三步:确认生效
get_model_dsl --id "PSDATAENTITY|Base.TAG" --desc "确认实体建模DSL是否生效"

场景 13:运行时模型校验

💡 提问示例

  • "帮我做一次运行时模型校验"
  • "获取运行时模型,检查是否有错误"
  • "运行一下 get_model_runtime,看看系统模型有没有问题"
  • "帮我做一次完整的模型校验"

目标:触发系统模型的完整校验,检查运行时模型是否正确。

操作

bash 复制代码
get_model_runtime

说明:DSL 编译通过不代表运行时模型没有问题。运行时模型发布是一个最终过程,会产生更多模型、更多校验规则。建议每隔一段时间执行一次运行时校验。


场景 14:查询示例辅助设计

💡 提问示例

  • "有没有虚拟实体的建模示例?"
  • "我想参考一下处理逻辑的示例代码"
  • "帮我查一下实体关系的建模示例"
  • "有没有关于代码表的示例可以参考?"
  • "如何定义一个虚拟实体?有示例吗?"

目标:在编写 DSL 前参考建模示例。

操作示例:查询虚拟实体的建模示例

复制代码
fetch_psmodel_samples --query "虚拟实体"

4. 工作流程总结

4.1 新建模型的标准流程

#mermaid-svg-ai387yNSw0qBJBrt{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ai387yNSw0qBJBrt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ai387yNSw0qBJBrt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ai387yNSw0qBJBrt .error-icon{fill:#552222;}#mermaid-svg-ai387yNSw0qBJBrt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ai387yNSw0qBJBrt .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ai387yNSw0qBJBrt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ai387yNSw0qBJBrt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ai387yNSw0qBJBrt .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ai387yNSw0qBJBrt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ai387yNSw0qBJBrt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ai387yNSw0qBJBrt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ai387yNSw0qBJBrt .marker.cross{stroke:#333333;}#mermaid-svg-ai387yNSw0qBJBrt svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ai387yNSw0qBJBrt p{margin:0;}#mermaid-svg-ai387yNSw0qBJBrt .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ai387yNSw0qBJBrt .cluster-label text{fill:#333;}#mermaid-svg-ai387yNSw0qBJBrt .cluster-label span{color:#333;}#mermaid-svg-ai387yNSw0qBJBrt .cluster-label span p{background-color:transparent;}#mermaid-svg-ai387yNSw0qBJBrt .label text,#mermaid-svg-ai387yNSw0qBJBrt span{fill:#333;color:#333;}#mermaid-svg-ai387yNSw0qBJBrt .node rect,#mermaid-svg-ai387yNSw0qBJBrt .node circle,#mermaid-svg-ai387yNSw0qBJBrt .node ellipse,#mermaid-svg-ai387yNSw0qBJBrt .node polygon,#mermaid-svg-ai387yNSw0qBJBrt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ai387yNSw0qBJBrt .rough-node .label text,#mermaid-svg-ai387yNSw0qBJBrt .node .label text,#mermaid-svg-ai387yNSw0qBJBrt .image-shape .label,#mermaid-svg-ai387yNSw0qBJBrt .icon-shape .label{text-anchor:middle;}#mermaid-svg-ai387yNSw0qBJBrt .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ai387yNSw0qBJBrt .rough-node .label,#mermaid-svg-ai387yNSw0qBJBrt .node .label,#mermaid-svg-ai387yNSw0qBJBrt .image-shape .label,#mermaid-svg-ai387yNSw0qBJBrt .icon-shape .label{text-align:center;}#mermaid-svg-ai387yNSw0qBJBrt .node.clickable{cursor:pointer;}#mermaid-svg-ai387yNSw0qBJBrt .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ai387yNSw0qBJBrt .arrowheadPath{fill:#333333;}#mermaid-svg-ai387yNSw0qBJBrt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ai387yNSw0qBJBrt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ai387yNSw0qBJBrt .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ai387yNSw0qBJBrt .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ai387yNSw0qBJBrt .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ai387yNSw0qBJBrt .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ai387yNSw0qBJBrt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ai387yNSw0qBJBrt .cluster text{fill:#333;}#mermaid-svg-ai387yNSw0qBJBrt .cluster span{color:#333;}#mermaid-svg-ai387yNSw0qBJBrt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ai387yNSw0qBJBrt .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ai387yNSw0qBJBrt rect.text{fill:none;stroke-width:0;}#mermaid-svg-ai387yNSw0qBJBrt .icon-shape,#mermaid-svg-ai387yNSw0qBJBrt .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ai387yNSw0qBJBrt .icon-shape p,#mermaid-svg-ai387yNSw0qBJBrt .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ai387yNSw0qBJBrt .icon-shape .label rect,#mermaid-svg-ai387yNSw0qBJBrt .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ai387yNSw0qBJBrt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ai387yNSw0qBJBrt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ai387yNSw0qBJBrt :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是

需求分析
查询架构定义

get_psmodel_info
检查是否已存在

fetch_model_info
查询示例

fetch_psmodel_samples
生成DSL代码
编译验证

compile_model_dsl
有错误?
修复DSL
构建模型

compile_model_dsl --build True
确认生效

get_model_dsl

💡 提问示例

  • "我想新建一个实体,完整的流程是怎样的?"
  • "帮我在系统中新建一个'产品'实体,按标准流程走一遍"
  • "新建模块需要哪些步骤?"

4.2 变更模型的标准流程

#mermaid-svg-HySsbB5ObkzrHQd3{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-HySsbB5ObkzrHQd3 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-HySsbB5ObkzrHQd3 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-HySsbB5ObkzrHQd3 .error-icon{fill:#552222;}#mermaid-svg-HySsbB5ObkzrHQd3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HySsbB5ObkzrHQd3 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-HySsbB5ObkzrHQd3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HySsbB5ObkzrHQd3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HySsbB5ObkzrHQd3 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-HySsbB5ObkzrHQd3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HySsbB5ObkzrHQd3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HySsbB5ObkzrHQd3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HySsbB5ObkzrHQd3 .marker.cross{stroke:#333333;}#mermaid-svg-HySsbB5ObkzrHQd3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HySsbB5ObkzrHQd3 p{margin:0;}#mermaid-svg-HySsbB5ObkzrHQd3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-HySsbB5ObkzrHQd3 .cluster-label text{fill:#333;}#mermaid-svg-HySsbB5ObkzrHQd3 .cluster-label span{color:#333;}#mermaid-svg-HySsbB5ObkzrHQd3 .cluster-label span p{background-color:transparent;}#mermaid-svg-HySsbB5ObkzrHQd3 .label text,#mermaid-svg-HySsbB5ObkzrHQd3 span{fill:#333;color:#333;}#mermaid-svg-HySsbB5ObkzrHQd3 .node rect,#mermaid-svg-HySsbB5ObkzrHQd3 .node circle,#mermaid-svg-HySsbB5ObkzrHQd3 .node ellipse,#mermaid-svg-HySsbB5ObkzrHQd3 .node polygon,#mermaid-svg-HySsbB5ObkzrHQd3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-HySsbB5ObkzrHQd3 .rough-node .label text,#mermaid-svg-HySsbB5ObkzrHQd3 .node .label text,#mermaid-svg-HySsbB5ObkzrHQd3 .image-shape .label,#mermaid-svg-HySsbB5ObkzrHQd3 .icon-shape .label{text-anchor:middle;}#mermaid-svg-HySsbB5ObkzrHQd3 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-HySsbB5ObkzrHQd3 .rough-node .label,#mermaid-svg-HySsbB5ObkzrHQd3 .node .label,#mermaid-svg-HySsbB5ObkzrHQd3 .image-shape .label,#mermaid-svg-HySsbB5ObkzrHQd3 .icon-shape .label{text-align:center;}#mermaid-svg-HySsbB5ObkzrHQd3 .node.clickable{cursor:pointer;}#mermaid-svg-HySsbB5ObkzrHQd3 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-HySsbB5ObkzrHQd3 .arrowheadPath{fill:#333333;}#mermaid-svg-HySsbB5ObkzrHQd3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-HySsbB5ObkzrHQd3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-HySsbB5ObkzrHQd3 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HySsbB5ObkzrHQd3 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-HySsbB5ObkzrHQd3 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HySsbB5ObkzrHQd3 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-HySsbB5ObkzrHQd3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-HySsbB5ObkzrHQd3 .cluster text{fill:#333;}#mermaid-svg-HySsbB5ObkzrHQd3 .cluster span{color:#333;}#mermaid-svg-HySsbB5ObkzrHQd3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-HySsbB5ObkzrHQd3 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-HySsbB5ObkzrHQd3 rect.text{fill:none;stroke-width:0;}#mermaid-svg-HySsbB5ObkzrHQd3 .icon-shape,#mermaid-svg-HySsbB5ObkzrHQd3 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HySsbB5ObkzrHQd3 .icon-shape p,#mermaid-svg-HySsbB5ObkzrHQd3 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-HySsbB5ObkzrHQd3 .icon-shape .label rect,#mermaid-svg-HySsbB5ObkzrHQd3 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HySsbB5ObkzrHQd3 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-HySsbB5ObkzrHQd3 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-HySsbB5ObkzrHQd3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 更新主模型
局部补丁
删除
获取现有DSL

get_model_dsl
确定变更内容
变更类型
srf_model_action: update
srf_model_action: patch
srf_model_action: delete
编译验证
构建
确认生效

💡 提问示例

  • "我想修改一个已存在的实体,流程是什么?"
  • "如何更新实体的属性?"
  • "变更模型后怎么确认是否生效?"

5 常用速查

你想做什么 提问方式
查系统模块 "系统有哪些模块?"
查模块实体 "Base模块下有哪些实体?"
查实体详情 "帮我看看 Base.DICTIONARY 的建模代码"
查架构定义 "PSDATAENTITY 是怎么定义的?"
新建实体 "帮我在Base模块下新建一个TAG实体"
新建代码表 "帮我创建一个订单状态的静态代码表"
建实体关系 "给TAG实体建立到DICTIONARY的关系"
创建处理逻辑 "为ORDER实体创建一个审核处理逻辑"
更新模型 "帮我更新DICTIONARY实体的描述"
补丁更新 "给处理逻辑附加一个新参数"
删除模型 "帮我把Base.TAG实体删除"
编译构建 "帮我编译并构建这段DSL代码"
运行时校验 "帮我做一次运行时模型校验"
查示例 "有没有虚拟实体的建模示例?"

以上示例数据来自iBizAIFactory开源项目,可直接访问Modeling尝试AI助手