harmonyos-agent-dsl-comparison.md 14 KB

鸿蒙 Agent DSL vs lambdagent Agent DSL 对比分析

鸿蒙 Agent DSL: HarmonyOS 6 引入,基于仓颉 (Cangjie) 语言,面向端侧原生 AI 应用 lambdagent DSL: 基于 λA 类型化 Lambda 演算,面向服务端 Agent 编排和安全保障

Sources:


一、定位对比

维度 鸿蒙 Agent DSL lambdagent DSL
定位 端侧原生 AI 应用开发 服务端 Agent 编排 + 静态安全
目标平台 HarmonyOS 设备 (手机/IoT) 服务器 / 本地 / PaaS
宿主语言 仓颉 (Cangjie) Python
理论基础 无形式化理论 λA 类型化 Lambda 演算 (三篇论文)
核心价值 降低端侧 AI 开发门槛 编译时保证 Agent 组合安全
LLM 定位 端侧推理 (盘古/小模型) 多 Provider (Cloud + Local)
开源状态 华为生态内闭源 BSL 开源

本质区别: 鸿蒙 Agent DSL 是面向应用开发者的 SDK(怎么快速写出 AI 功能);lambdagent DSL 是面向 Agent 工程师的安全工具(怎么保证 Agent 不出错)。


1.5、CangjieMagic — 仓颉原生 Agent 开发框架

2025年3月开源,首个基于仓颉编程语言原生构建的 LLM Agent 平台 项目地址: https://gitcode.com/Cangjie-TPC/CangjieMagic

维度 CangjieMagic
定位 仓颉原生 LLM Agent 开发框架
语言 仓颉 (Cangjie) — eDSL(嵌入式 DSL)
核心特性 Agent DSL + MCP 原生支持 + 智能调度引擎
平台 HarmonyOS / Windows / macOS / Linux(Q3 计划移动端)
模型 多 Provider:OpenAI / Ollama / SiliconFlow / DashScope
协议 MCP (Model Context Protocol) — 二进制高效传输,延迟降低 ~40%

三大核心技术

  1. Agent DSL: 声明式 Agent 定义,代码编译为仓颉再由仓颉编译器编译
  2. MCP 通信协议: 二进制传输 + 自描述 Schema + 多模态(文本/图片/音频)
  3. 智能调度引擎: 自动任务分解 → 最优执行路径生成

CangjieMagic 代码示例

// 完整 Agent 定义 — @agent 装饰器
@agent[
    model: "deepseek:deepseek-chat",
    executor: "react:5",
    tools: [weatherTool, searchTool],
    memory: true,
    temperature: 0.7
]
class WeatherAssistant {
    @prompt[pattern: APE](
        action: "提供精准的天气查询与出行建议",
        purpose: "帮助用户规划行程并避免天气影响",
        expectation: "输出包含温度、降水概率和建议的结构化回复"
    )

    @tool[description: "获取指定城市的天气数据",
          parameters: { city: "城市名称" }]
    private func queryWeather(city: String): String {
        // 调用天气 API
    }
}
// 多 Agent 路由调度
@agent[model: "openai:gpt-4o"]
class PrimaryAgent { }

@agent[model: "ollama:llama3"]
class SecondaryAgent { }

// DispatchAgent 根据任务复杂度自动路由
let routerAgent = DispatchAgent(model: "deepseek:deepseek-chat") <=[
    PrimaryAgent(),
    SecondaryAgent()
]
// 多 Agent MCP 通信
agent CustomerService {
  plan HandleRiskInquiry {
    step SendMessage(to: "RiskControlAgent", type: "async",
                     content: {question: user_question})
    step WhenMessageReceived(from: "RiskControlAgent")
         -> GenerateResponse()
  }
}

CangjieMagic vs lambdagent 关键差异

维度 CangjieMagic lambdagent
@agent 装饰器 @agent[model, executor, tools] Lam(name, prompt)
@prompt 模式 ✅ APE/ERA/CRISPE 等标准模式 自由文本 systemPrompt
@tool 声明 ✅ 内联工具定义 Tool(name, fn) + MCP
多 Agent 路由 DispatchAgent <=[ ] Route + Handoff
MCP 支持 ✅ 原生二进制 MCP ✅ MCP 2025-11-25
T-Compose 类型检查 ❌ 无 ✅ output(f) <: input(g)
成本预测 ❌ 无 ✅ 分级类型 (p,t,l,m)
终止性证明 ❌ 无 ✅ 定理 5.4
并行安全 ❌ 无 ✅ store independence
lint 规则 ❌ 无 ✅ 26 条

结论: CangjieMagic 在开发体验上比原始 Agent DSL 更完善(@agent/@prompt/@tool 三件套 + MCP + 多模型路由),但仍然没有形式化安全保障(类型检查、成本预测、终止性、并行安全)。这正是 lambdagent 的差异化价值。


二、语法对比

鸿蒙 Agent DSL — 装饰器 + 行为描述

@agent class Planner {
    @prompt[pattern=PlanTrip] (
        action: "根据用户需求制定旅行计划",
        purpose: "满足用户旅行期望",
        expectation: "生成包含景点、时间、预算的旅行计划"
    )
    func planTrip(userRequest: String): String {
        let parsed = parseRequest(userRequest)
        let plan = optimizePlan(parsed)
        return plan
    }
}

@agent class TransportAgent {
    @prompt[pattern=BookTransport] (
        action: "根据行程预订交通",
        purpose: "提供最优交通方案",
        expectation: "返回交通预订确认"
    )
    func bookTransport(plan: String): String {
        // ...
    }
}

// 多智能体协作: 顺序管道
let plan = Planner().planTrip("北京3日游")
let transport = TransportAgent().bookTransport(plan)
let hotel = HotelAgent().bookHotel(plan)

特点:

  • @agent 装饰器声明智能体类
  • @prompt[pattern=...] 用 action/purpose/expectation 描述行为
  • 函数签名定义输入输出类型
  • 多智能体通过函数调用串联

lambdagent DSL — Lambda 项 + YAML 配置

# Python DSL
planner = Lam("planner", "根据用户需求制定旅行计划")
transport = Lam("transport", "根据行程预订交通")
hotel = Lam("hotel", "根据行程预订酒店")

# 组合: 管道
pipeline = planner >> Pair(transport, hotel)  # 规划 → 并行(交通 + 酒店)

# 带验证
validated = Guard(pipeline, validator=lambda r: "确认" in str(r), retry=2)
# YAML 配置
agentId: travel-planner
type: chain
chain:
  steps:
    - name: planner
      systemPrompt: "根据用户需求制定旅行计划"
    - name: transport-hotel
      type: parallel
      agents:
        - { name: transport, systemPrompt: "预订交通" }
        - { name: hotel, systemPrompt: "预订酒店" }

runtime:
  engine: cek
  costBudget: 5.00

特点:

  • Lam 是 Lambda 抽象(LLM 调用)
  • >> 是函数组合(管道)
  • Pair 是并行对
  • Guard 是输出验证
  • YAML 是声明式编排(可选)
  • 每个构造有对应的 λA 形式化定义

三、核心机制逐项对比

3.1 Agent 定义

| | 鸿蒙 Agent DSL | lambdagent DSL | |--|---------------|---------------| | 定义方式 | @agent class + @prompt[pattern] | Lam(name, prompt) 或 YAML | | 行为描述 | action/purpose/expectation 三元组 | systemPrompt 自由文本 | | 强类型 | 仓颉静态类型 (String → String) | Paper III 类型系统 (Str →^{llm} Str) | | 效果标注 | 无 | llm(m) / io / state(s) / pure | | 编译检查 | 仓颉编译器基础类型检查 | T-Compose + 26 条 lint + 成本预测 |

鸿蒙优势: @prompt[pattern] 的 action/purpose/expectation 三元组比自由文本 prompt 更结构化,可以被 IDE 解析。

lambdagent 优势: 有效果系统(区分 llm/io/state/pure),有成本分级,有 26 条 lint 规则。鸿蒙 Agent DSL 没有这些。

3.2 多智能体协作

| | 鸿蒙 Agent DSL | lambdagent DSL | |--|---------------|---------------| | 顺序 | 函数调用链 | Compose (>>) + pipeline Pattern | | 并行 | 未公开 | Pair / Par / AsyncPar + 汇合定理 | | 路由 | 未公开 | Route (case 分派) + Handoff (动态委托) | | 循环 | 未公开 | Loop (Y 组合子) + 终止性定理 | | 审查 | 未公开 | Guard (验证重试) + review Pattern | | GroupChat | 未公开 | GroupChat (π-演算 N 智能体讨论) | | 通信 | 未公开 | Channel + Send + Receive (π-演算) |

鸿蒙目前只展示了顺序管道。lambdagent 有 11 个核心构造 + 5 个多智能体构造 + 6 个协作模式,覆盖面远超鸿蒙。

3.3 工具调用

| | 鸿蒙 Agent DSL | lambdagent DSL | |--|---------------|---------------| | 定义方式 | 类方法 (func bookTransport(...)) | Tool(name, fn) | | 协议 | 未公开 | MCP (Model Context Protocol) | | 输入验证 | 仓颉类型检查 | ValidatedTool + JSON Schema | | 权限控制 | 未公开 | GatedTool + ToolGateway (60+ 危险命令检测) | | 内置工具数 | 未公开 | 52 个 |

3.4 安全保障

| | 鸿蒙 Agent DSL | lambdagent DSL | |--|---------------|---------------| | 编译时类型检查 | 仓颉基础类型 | T-Compose: output(f) <: input(g) | | 编译时成本预测 | | 分级类型 (p, t, l, m) | | 终止性保证 | | 定理 5.4: fix_n 在 n 步终止 | | 并行安全 | | 命题 30: Pair 汇合 + store independence | | lint 规则 | | 26 条结构规则 | | 效果隔离 | | ProductionHandler / TestHandler / TraceHandler | | 成本熔断 | | CEK Yield 逐步监控 |

这是最大的差距: 鸿蒙 Agent DSL 没有任何形式化安全保障。lambdagent 的整个类型系统、成本预测、终止性证明,都是鸿蒙不具备的。

3.5 运行时

| | 鸿蒙 Agent DSL | lambdagent DSL | |--|---------------|---------------| | 运行位置 | 端侧 (手机/IoT 设备) | 服务端 / 本地 | | 执行引擎 | HarmonyOS Agent Runtime | 双引擎 (Recursive / CEK / Adaptive) | | 暂停/恢复 | 未公开 | CEK 状态序列化 | | 沙箱 | HarmonyOS 系统沙箱 | 进程隔离 + Git Worktree | | 设备协同 | 分布式能力 (跨设备迁移) | 无 | | IoT 集成 | 原生支持 (传感器/设备控制) | 通过 MCP/Tool 间接支持 |

鸿蒙优势: 端侧运行 + 分布式设备协同 + IoT 原生支持。这是鸿蒙 Agent DSL 最核心的差异化——在手机和 IoT 设备上跑 Agent,lambdagent 做不到。


四、本质差异

鸿蒙 Agent DSL:
  面向: 应用开发者 (写 HarmonyOS App)
  问题: 怎么在手机/IoT 上快速写出 AI 功能
  方法: 装饰器 + 行为描述 → 降低门槛
  生态: HarmonyOS 独占,绑定盘古模型
  类比: 像 SwiftUI 的 AI 版 (声明式 UI → 声明式 Agent)

lambdagent DSL:
  面向: Agent 工程师 (构建/运维 Agent 系统)
  问题: 怎么保证 Agent 组合不出错、不超支、能终止
  方法: 类型系统 + 成本预测 + 终止性证明
  生态: 跨平台、多 LLM Provider、MCP 协议
  类比: 像 TypeScript (给 Agent 加类型安全)

五、可以互相学习的

从鸿蒙学

鸿蒙的做法 lambdagent 可以借鉴
@prompt[pattern] 结构化行为描述 当前 systemPrompt 是自由文本,可以加 action/purpose/expectation 结构
IDE 自动生成 Agent 代码 可以做 VS Code 插件从注释生成 YAML
端侧运行 暂不需要(不同赛道)
IoT Agent (传感器 → 决策 → 设备控制) 通过 MCP 工具可以间接支持

鸿蒙可以从 lambdagent 学

lambdagent 的做法 鸿蒙目前缺少
T-Compose 类型检查 Agent 组合的编译时验证
成本预测 Agent 执行的 token/延迟/费用上界
终止性定理 循环 Agent 的停机保证
并行安全 多 Agent 并行的 store independence
6 个 Pattern 可复用的协作模式库
CEK Machine 暂停/恢复/成本熔断
LLM Wiki 知识编译而非 RAG
跨框架 lint 检查其他框架的 Agent 配置

六、竞争关系分析

结论: 不是竞品,是不同赛道。

鸿蒙 Agent DSL 的赛道:
  手机 App + IoT 设备 + 华为生态
  → 在手机上跑一个能控制空调的 Agent
  → 在手表上跑一个能推荐路线的 Agent
  → 华为设备之间协同(手机 → 大屏 → 音箱)

lambdagent DSL 的赛道:
  服务端 + 企业级 + 跨平台
  → 在服务器上跑一个处理 1326 份法规的 Wiki Agent
  → 在 CI/CD 里检查 100 个 Agent 配置的类型安全
  → 给 LangChain/CrewAI/AutoGen 做安全审计

两者的交集:
  几乎为零。鸿蒙面向 C 端设备,lambdagent 面向 B 端服务。

但如果鸿蒙 Agent DSL 未来扩展到服务端(企业级 Agent 编排),那 lambdagent 的类型系统和安全保障就是差异化壁垒——华为可以做运行平台,但形式化证明不是一朝一夕能补的。


七、一句话总结

鸿蒙 Agent DSL 是"怎么在手机上快速写 AI",lambdagent DSL 是"怎么保证 Agent 不出错"。 一个降低开发门槛(让更多人能写 Agent),一个提高安全底线(让写出来的 Agent 可靠)。目前不在同一个赛道竞争,但共同验证了一个趋势:Agent 需要自己的 DSL,不能靠通用编程语言硬写

Sources: