概述

本文展示了一套基于 Multi-Swarm 协作架构的零代码平台 DSL 标准框架完整实现。该框架通过"业务需求 Swarm"与"工程实施 Swarm"的双向握手协议,结合 DPO(直接偏好优化)机器学习闭环,实现了从自然语言需求到飞书多维表格物理部署的全链路自动化闭环。

核心设计理念:Logical-DSL 作为平台无关的统一契约,将业务概念层与物理实现层彻底解耦,使得同一份逻辑模型可以编译到不同平台(飞书、Notion、Airtable 等)。

架构全景

框架由六大核心模块组成,覆盖从需求建模到机器学习自演进的完整生命周期:

  • 一、契约定义层(Logical DSL Standard Schema)— 定义平台无关的数据模型标准
  • 二、业务需求 Swarm(Concept Layer Agent)— 解析自然语言,生成 Logical-DSL
  • 三、工程实施 Swarm(Realization Layer Agent)— 将 DSL 编译为飞书物理 API/CLI 操作
  • 四、遥测与反向握手桥接层(Telemetry & P2L Handshake Bridge)— 捕获用户手动修改,逆向翻译为 Logical-Diff
  • 五、机器学习闭环演进层(ML Feedback & DPO Generator)— 自动生成 DPO 训练样本对
  • 六、全链路五步验证运行(Executing the Loop)— 端到端演示完整流程

关键设计亮点

1. 拓扑排序解决建表依赖

工程实施 Swarm 内置拓扑排序算法,自动计算物理建表的依赖顺序。在 ONE_TO_MANY 关系中(如合同 → 付款记录),系统能正确推导出先建合同表、再建付款表的顺序。

2. P2L 反向握手协议

当用户在飞书 UI 上手动修改字段类型时(如将"付款金额"从 STRING 改为 DECIMAL),系统通过 Webhook 事件捕获这一变更,将其"逆向编译"为与平台无关的 Logical-Diff,回传给设计端。

3. DPO 自演进闭环

系统自动将"AI 原始输出(rejected)"与"用户纠偏后的版本(chosen)"拼装为 DPO 训练样本对,反哺大模型实现自我进化,持续提升 DSL 生成的准确性。

4. 五步闭环验证流程

  1. STEP 1-2(L2P 正向):业务需求 → Logical-DSL → 飞书物理部署
  2. STEP 3-4(P2L 反向):用户 UI 微调 → Webhook 捕获 → Logical-Diff
  3. STEP 5(ML 闭环):DPO 偏好对生成 → RLHF 训练管线归档

完整代码实现

以下是基于 Pydantic 的完整 Python 实现,包含所有六大模块,可直接运行验证:

import json
import logging
from typing import List, Dict, Any, Optional
from pydantic import BaseModel, Field

# 初始化日志
logging.basicConfig(level=logging.INFO, format="%(asctime)s - [%(levelname)s] - %(message)s")
logger = logging.getLogger("MultiSwarmFramework")

# =====================================================================
# 一、 契约定义层 (The Logical DSL Standard Schema)
# =====================================================================

class PropertyDSL(BaseModel):
    id: str
    label: str
    type: str  # STRING, DECIMAL, DATE, USER, SELECT
    required: bool = False
    options: Optional[List[str]] = None  # 用于 SELECT 类型

class EntityDSL(BaseModel):
    id: str
    label: str
    properties: List[PropertyDSL]

class RelationDSL(BaseModel):
    from_entity: str = Field(..., alias="from")
    to_entity: str = Field(..., alias="to")
    relation_type: str  # ONE_TO_MANY, ONE_TO_ONE
    label: str

class LogicalDSL(BaseModel):
    """
    统一逻辑契约 (Logical-DSL):业务需求 Swarm 产出的唯一标准,平台强无关。
    """
    app_name: str
    version: str
    entities: List[EntityDSL]
    relations: List[RelationDSL]

    class Config:
        populate_by_name = True

# =====================================================================
# 二、 业务需求 Swarm (The Concept Layer Agent)
# =====================================================================

class BusinessDemandSwarm:
    """
    业务需求 Swarm 模拟器:
    解析用户自然语言,进行概念层建模,并向消息总线广播 L-DSL。
    """
    def __init__(self):
        logger.info("BusinessDemandSwarm (概念设计层) 初始化完毕...")

    def design_system(self, natural_language_prompt: str) -> LogicalDSL:
        logger.info(f"收到用户原始需求:'{natural_language_prompt}'")
        logger.info("开始进行概念设计:识别实体、提取属性、规划关联关系...")
        
        # 模拟 AI Agent 推理后输出的高质量 L-DSL
        mock_dsl_data = {
            "app_name": "企业合同与付款管理系统",
            "version": "1.0.0",
            "entities": [
                {
                    "id": "contract",
                    "label": "合同基本信息",
                    "properties": [
                        {"id": "code", "label": "合同编号", "type": "STRING", "required": True},
                        {"id": "amount", "label": "合同金额", "type": "DECIMAL", "required": True}
                    ]
                },
                {
                    "id": "payment",
                    "label": "付款记录",
                    "properties": [
                        {"id": "pay_date", "label": "付款日期", "type": "DATE", "required": True},
                        {"id": "pay_amount", "label": "付款金额", "type": "STRING"} # 注意:AI 初始误生成为 STRING
                    ]
                }
            ],
            "relations": [
                {
                    "from": "contract",
                    "to": "payment",
                    "relation_type": "ONE_TO_MANY",
                    "label": "合同关联付款"
                }
            ]
        }
        
        # 校验并解析为强类型对象
        l_dsl = LogicalDSL.model_validate(mock_dsl_data)
        logger.info(f"概念层 L-DSL 构造成功!包含 {len(l_dsl.entities)} 个实体, {len(l_dsl.relations)} 组关联。")
        return l_dsl

# =====================================================================
# 三、 工程实施 Swarm (The Realization Layer Agent)
# =====================================================================

class FeishuEngineeringSwarm:
    """
    工程实施 Swarm (飞书适配器):
    不干涉业务对错,只负责将 L-DSL 编译为特定平台的物理 API/CLI 操作序列。
    包含“拓扑排序(Topological Sort)”,自动计算建表顺序以解决依赖关系。
    """
    def __init__(self, app_token: str = "mock_bitable_token_abc123"):
        self.app_token = app_token
        # 飞书字段类型物理映射表 (1: 文本, 2: 数字, 5: 日期, 11: 用户, 18: 关联)
        self.type_mapping = {
            "STRING": 1,
            "DECIMAL": 2,
            "DATE": 5,
            "USER": 11,
            "LINK": 18
        }
        logger.info("FeishuEngineeringSwarm (工程实施层) 初始化完毕...")

    def _resolve_build_order(self, dsl: LogicalDSL) -> List[str]:
        """
        拓扑排序:计算物理建表依赖。
        例如:ONE_TO_MANY 关系中,多端(Payment)需要引用一端(Contract)。
        建表顺序应为:Contract -> Payment。
        """
        dependency_graph = {entity.id: set() for entity in dsl.entities}
        for relation in dsl.relations:
            # Payment (to) 依赖 Contract (from)
            dependency_graph[relation.to_entity].add(relation.from_entity)

        # 简单的拓扑排序逻辑
        build_order = []
        visited = set()
        
        def visit(node):
            if node in visited:
                return
            for dep in dependency_graph[node]:
                visit(dep)
            visited.add(node)
            build_order.append(node)

        for entity_id in dependency_graph:
            visit(entity_id)
            
        return build_order

    def compile_and_execute(self, dsl: LogicalDSL) -> List[str]:
        logger.info(f"工程端接单,开始编译逻辑模型为飞书物理配置...")
        build_order = self._resolve_build_order(dsl)
        logger.info(f"计算得出的物理建表依赖顺序为:{ ' -> '.join(build_order) }")
        
        cli_commands = []
        
        # 模拟 1. 创建多维表格 App
        cli_commands.append(f"lark-cli base +create --title '{dsl.app_name}'")
        
        # 模拟 2. 依次按拓扑顺序创建 Table 和 Fields
        for entity_id in build_order:
            entity = next(e for e in dsl.entities if e.id == entity_id)
            cli_commands.append(
                f"lark-cli base table create --app-token '{self.app_token}' --table-name '{entity.label}'"
            )
            
            # 创建普通字段
            for prop in entity.properties:
                feishu_type = self.type_mapping.get(prop.type, 1) # 默认 TEXT
                field_data = {
                    "field_name": prop.label,
                    "type": feishu_type
                }
                cli_commands.append(
                    f"lark-cli base field create --app-token '{self.app_token}' --table-name '{entity.label}' --data '{json.dumps(field_data, ensure_ascii=False)}'"
                )
        
        # 模拟 3. 创建关系(飞书 Link 字段)
        for relation in dsl.relations:
            link_field_data = {
                "field_name": relation.label,
                "type": 18, # 关联字段
                "property": {
                    "table_id": relation.from_entity, # 关联目标表
                    "multiple": True
                }
            }
            cli_commands.append(
                f"lark-cli base field create --app-token '{self.app_token}' --table-name '{relation.to_entity}' --data '{json.dumps(link_field_data, ensure_ascii=False)}'"
            )

        # 执行命令模拟输出
        logger.info("飞书物理实体编排脚本编译成功!开始模拟执行 CLI 调用...")
        for cmd in cli_commands:
            print(f" [EXE] > {cmd}")
        
        logger.info("飞书端物理实体发布上线成功!应用当前已可正常运行。")
        return cli_commands

# =====================================================================
# 四、 遥测与反向握手对齐层 (Telemetry & P2L Handshake Bridge)
# =====================================================================

class FeishuTelemetryBridge:
    """
    反向握手桥接器:
    捕获飞书端用户在 UI 界面手动对表结构做出的“微调事件(Webhook Payload)”,
    将其“逆向编译”为与平台无关的通用 Logical-Diff,回传给设计端。
    """
    def __init__(self):
        # 飞书物理类型反向映射逻辑字典
        self.reverse_type_mapping = {
            1: "STRING",
            2: "DECIMAL",
            5: "DATE",
            11: "USER",
            18: "LINK"
        }
        logger.info("FeishuTelemetryBridge (反向握手网关) 初始化完毕...")

    def translate_physical_event(self, webhook_payload: Dict[str, Any]) -> Dict[str, Any]:
        """
        接收飞书开放平台事件,翻译为通用语义 Logical-Diff
        """
        event_type = webhook_payload.get("type")
        event_data = webhook_payload.get("data", {})
        
        logger.info(f"捕获飞书底层 Webhook 事件: '{event_type}'")
        
        if event_type == "bitable.table.field.updated_v1":
            field_name = event_data.get("field_name")
            table_id = event_data.get("table_id")
            new_physical_type = event_data.get("new_type")
            
            logical_type = self.reverse_type_mapping.get(new_physical_type, "STRING")
            
            logical_diff = {
                "action": "UPDATE_PROPERTY",
                "target_entity": table_id,
                "property_id": field_name, # 物理映射到逻辑
                "update_payload": {
                    "type": logical_type
                }
            }
            logger.info(f"【P2L 翻译成功】飞书 Field 变更事件 -> 通用逻辑 Delta: {logical_diff}")
            return logical_diff
        
        return {}

# =====================================================================
# 五、 机器学习闭环演进层 (ML Feedback & DPO Generator)
# =====================================================================

class MLFeedbackEvolver:
    """
    机器学习演进器:
    收集 Logical-Diff(人类专家的纠偏动作),自动拼装 DPO(直接偏好优化)数据集对,
    反哺给大模型,实现 Agent 底座的“自我进化”。
    """
    def __init__(self):
         logger.info("MLFeedbackEvolver (偏好对齐引擎) 初始化完毕...")

    def generate_dpo_pair(self, prompt: str, original_dsl: LogicalDSL, logical_diff: Dict[str, Any]) -> Dict[str, Any]:
        """
        将“AI 曾经犯的错 (original)”与“用户教 AI 改正的结果 (live)”拼装成强化学习偏好对数据。
        """
        logger.info("开始生成机器学习 DPO 进化语料...")
        
        # 1. 坏样本 (AI 原生生成的错误模型格式)
        bad_response = original_dsl.model_dump_json(indent=2)
        
        # 2. 演进机制:根据用户修改,局部修改初始 DSL,得到好样本 (Human Preferred)
        good_dsl = original_dsl.model_copy(deep=True)
        for entity in good_dsl.entities:
            if entity.id == logical_diff["target_entity"]:
                for prop in entity.properties:
                    # 将字段修正(这里模拟把付款金额的 STRING 修改为用户期望的 DECIMAL)
                    if prop.id == "pay_amount":
                        prop.type = logical_diff["update_payload"]["type"]
        
        good_response = good_dsl.model_dump_json(indent=2)
        
        # 3. 构造 DPO Pair
        dpo_pair = {
            "prompt": f"请针对该业务需求设计一套零代码 DSL。需求:{prompt}",
            "rejected_output": bad_response, # 被打回的低分回答 (STRING)
            "chosen_output": good_response   # 用户纠错后的高分回答 (DECIMAL)
        }
        
        logger.info("★ DPO 偏好对齐样本提取成功!语料对已自动归档至 RLHF 训练管线。")
        return dpo_pair

# =====================================================================
# 六、 全链路五步验证运行 (Executing the Loop)
# =====================================================================

if __name__ == "__main__":
    print("\n" + "="*60)
    print("      双 Swarm 协作 & 机器学习双向握手闭环 PoC 演示运行")
    print("="*60 + "\n")

    # 1. 实例化核心组件
    demand_swarm = BusinessDemandSwarm()
    feishu_swarm = FeishuEngineeringSwarm()
    telemetry_bridge = FeishuTelemetryBridge()
    ml_evolver = MLFeedbackEvolver()

    # --- 步骤 1 & 2: 正向搭建与部署运行 (L2P) ---
    print("\n[STEP 1 & 2: 正向业务建模与物理编排]")
    prompt = "我需要一个合同及付款管理系统,合同包含编号和金额,付款记录需要关联到合同中,记录付款金额和日期。"
    
    # 业务端建模,输出 Logical-DSL
    logical_dsl = demand_swarm.design_system(prompt)
    
    # 工程端认领,翻译并生成飞书 CLI 指令
    feishu_swarm.compile_and_execute(logical_dsl)

    # --- 步骤 3 & 4: 用户手动微调与遥测捕获 (P2L) ---
    print("\n[STEP 3 & 4: 用户界面微调与遥测捕获]")
    print(" >>> 模拟用户行为:在飞书 UI 界面上,用户发现‘付款金额’字段被 AI 设成了单行文本(STRING)很不爽。")
    print(" >>> 用户手动在多维表格界面将该字段配置改成了‘数字(NUMBER, 即飞书底层 Type 2)格式’。")
    
    # 模拟飞书 Webhook 抛出的底层事件 payload
    mock_webhook_payload = {
        "type": "bitable.table.field.updated_v1",
        "data": {
            "table_id": "payment",
            "field_name": "pay_amount",
            "new_type": 2 # 2 表示物理层数字(Number/Decimal)
        }
    }
    
    # 遥测端捕捉并解析出 Logical-Diff
    logical_diff = telemetry_bridge.translate_physical_event(mock_webhook_payload)

    # --- 步骤 5: 机器学习闭环自演进 (ML Loop) ---
    print("\n[STEP 5: 机器学习自演进]")
    dpo_pair = ml_evolver.generate_dpo_pair(prompt, logical_dsl, logical_diff)
    
    print("\n>>> DPO 训练样本预览 (The Generated DPO Data Pair):")
    print(json.dumps(dpo_pair, indent=2, ensure_ascii=False))
    print("\n" + "="*60)
    print("      闭环全流程演示顺利结束!系统已成功完成偏好数据自捕获。")
    print("="*60 + "\n")

运行说明

直接执行即可看到完整的五步闭环演示输出:

  • BusinessDemandSwarm 初始化并解析自然语言需求
  • FeishuEngineeringSwarm 计算拓扑排序并生成飞书 CLI 命令
  • 模拟用户在飞书 UI 上手动修改字段类型
  • FeishuTelemetryBridge 捕获 Webhook 事件并翻译为 Logical-Diff
  • MLFeedbackEvolver 生成 DPO 训练样本对

与飞书 Bitable 的深度集成

本框架通过飞书多维表格(Bitable)的 CLI 接口实现物理层的自动化部署:

  • lark-cli base +create — 创建多维表格应用
  • lark-cli base table create — 创建数据表
  • lark-cli base field create — 创建字段(支持文本、数字、日期、用户、关联等类型)

类型映射表完整覆盖了飞书 Bitable 的五种核心字段类型(STRING=1, DECIMAL=2, DATE=5, USER=11, LINK=18)。

总结

这套 Multi-Swarm Framework DSL Schema 实现了零代码平台的核心能力闭环:从自然语言需求理解,到平台无关的逻辑建模,再到特定平台的物理部署,以及基于用户反馈的机器学习自演进。Logical-DSL 作为中间契约层,确保了业务逻辑与平台实现的有效解耦,为多平台适配和持续优化奠定了坚实基础。