1. 引言:我为什么开始关注 Cangjie Magic?

说实话,一开始我是抗拒的。

智能体(Agent)开发火了也不是一天两天了,从最早的 AutoGPT 到各种开源框架,社区里吹得天花乱坠,但真要落地到工程项目,几乎都踩过无数坑:

  • 模型说话没个谱,一会要开门一会要关灯;
  • 工具调用全靠 prompt 拼接,调个插件像在玩猜谜游戏;
  • 要串个流程得靠 YAML + Python + 一堆中间件,调试起来堪比折磨。

直到有一天,我刷开了 Cangjie 社区的开源公告,看到了 Cangjie Magic

标题很唬人:

“全球首个基于仓颉语言构建的原生智能体开发平台,支持 DSL 架构、MCP 协议、智能规划。”

我本来是准备翻个白眼关掉的,但架不住我对“Agent DSL”这几个字眼过于敏感,点进去一看——真香了。


智能体开发痛点:不是“调模型”,而是“调行为”

我们团队长期做一些 AI 辅助测试、知识问答和流程自动化的系统,和 LLM 打交道也不是一天两天了,但逐渐我们发现了一个痛点:

我们不是缺一个能聊天的大模型,我们缺的是能“照我说的做事”的 Agent。

传统方案里,Agent 看起来是个聪明的助手,实则是个没脑子的“模型调用管理器”:

  • 所有决策都得靠 prompt 让模型输出命令;
  • 工具的参数校验靠链式规则;
  • 没有全局的“状态感知”能力;
  • 多 Agent 协作根本是拼 API、拼 Webhook,不是设计系统,而是做体力活。

我曾经一度怀疑,是不是我们对“Agent”的理解出了问题。


初识 Cangjie Magic:这可能是我见过最“工程化”的 Agent 框架

Cangjie Magic 解决的问题,不是“怎么让模型回答更准”,而是:

  • 怎么定义 Agent 的行为边界和逻辑结构?
  • 怎么让多个 Agent 能安全通信、可监控地协作?
  • 怎么让系统理解目标,并自动规划执行链?

更关键的是,它用的是一种叫 “仓颉语言” 的 DSL 编程方式,不用 Python,不用前端,不搞那堆破 prompt 拼接,而是让你像写规则引擎一样,写出整个智能体行为。

这让我有点眼前一亮。作为一个写了十几年后端的人,我知道一个系统要长期可维护、多人协作,靠 prompt 是靠不住的。

而 Cangjie Magic,让我第一次感受到:

“Agent 系统也可以有架构、有规范、有边界。”

于是,我们团队决定尝试用它重构一个内部的小项目 —— AI 客服智能体。

后面的故事,就是这篇文章要慢慢展开的内容了。


明白,我们现在继续进入第二节,深入讲讲 Agent DSL 架构 的魅力与实战体验。


2. Agent DSL 架构:第一次见到“写智能体像写业务规则”这么顺

说实话,接触 Cangjie Magic 最打动我的地方,不是 MCP 通信,不是模型效果,而是它那套 Agent DSL 架构

作为一名后端开发,我从来不觉得 DSL 是“玩具语法”。好的 DSL 就像领域建模中的语言规范,它不仅降低沟通成本,还能将业务语义与技术逻辑结合得非常优雅

而 Cangjie Magic 的 Agent DSL,真的让我有点“会心一笑”的感觉——原来写智能体可以这么像在写“流程规则”。


🧠 写智能体,不再是 if-else 拼接,而是建模“感知 - 判断 - 执行”

我们以前写 Agent,基本长这样:

if "退货" in user_query:
    response = handle_return(user_query)
elif "发票" in user_query:
    response = handle_invoice(user_query)
else:
    response = fallback()

灵活归灵活,问题是:

  • 逻辑散乱,谁都能加个 if,但没人能保证改了不会出锅;
  • 没有“意图建模”,只能靠关键词匹配;
  • 没有“状态管理”,一次对话就像一次赌博;
  • 更别提可视化或自动规划了,统统靠人写死流程。

而在 Cangjie Magic 中,这段逻辑可以写成这样:

agent 客服机器人 {
  感知 用户输入
  判断 用户意图 == "退货"
  执行 {
    发送 "请问是要退哪一笔订单呢?"
    启动流程 "退货流程"
  }
}

是不是有点像工作流?没错,它的本质就是将 Agent 的行为流程语义化、结构化,然后通过智能规划引擎调度执行。


🛠 DSL 的几个设计亮点

初看 Cangjie Magic 的 DSL 会觉得“语法简单”,但越用越觉得它“用得深”。

几个关键设计让我印象深刻:

特性 描述
agent 关键字 明确了智能体边界,避免逻辑交叉污染
感知 代表输入源,可以是用户语句、API 响应、其他 Agent 消息
判断 支持多种条件逻辑,包括意图判断、上下文状态、用户属性等
执行 可声明式调用动作、工具、子流程,还支持嵌套执行结构
DSL 可组合性强 Agent 内部可以引用其他模块(如流程模板、对话块)实现模块化复用
状态管理天然支持 内置上下文变量,无需自己做 session 管理

而且这些 DSL 代码不是死文本,系统会自动把它编译成可视化流程图,还能 debug 每一步的执行状态,对于多人协作和产品验收来说,简直是生产力神器。


🔁 我们实际用了它做什么?

我们团队在试点中,选了一个“AI 客服”的模块改造:

以前我们用的是自定义 Webhook + LLM prompt + 手写状态机,现在改为:

  • 用 DSL 定义每个客服场景(退货、查快递、开发票等);
  • 用感知语句自动匹配意图(通过 LLM + 正则混合判定);
  • 用执行块串联动作(查库、发消息、调用流程工具);
  • MCP 路由器将这些 DSL 自动部署到多个 Agent 节点上,按场景分发。

效果非常不错:

  • 模块边界更清晰,出问题能快速回溯;
  • 逻辑变更只需改 DSL,不需要改 Python;
  • 新同事 onboarding 速度提升一倍,基本只用看 DSL 就能理解业务流。

好的,我们继续撰写第三节内容,深入解构 MCP 通信协议 —— Cangjie Magic 的第二把技术利剑。


3. MCP 通信协议:智能体不再靠“Web API 贴胶水”维生了

在传统智能体系统中,一个 Agent 想和另一个 Agent “说话”是非常痛苦的。

你得自己决定用哪种通信协议:HTTP?WebSocket?MQ?然后还得自己封装消息格式、处理回调、做状态同步,最后写一堆 glue code 把这些东西“拼”起来——看起来是协同,实则是耦合灾难。

Cangjie Magic 的 MCP 协议(Message Coordination Protocol),就是为了解决这个**“智能体之间沟通混乱”**的问题而生的。


🧩 背景:多智能体协作,是 Agent 系统工程化的必经之路

一个足够复杂的 LLM Agent 系统,往往不会只有一个大脑,而是多个“能力单元”的组合:

  • 意图识别器:从用户输入中识别意图;
  • 知识库查找器:判断是否需要文档查询;
  • 动作调度器:执行发货、退款、流程流转;
  • 对话管理器:控制上下文与话术生成;
  • 审计记录器:记录敏感操作与决策路径。

我们试过用 REST API 让这些模块交互,结果:

  • 消息格式乱七八糟,每个模块都有自己的 schema;
  • 模型执行是异步的,REST 没法很好支持;
  • 日志追踪困难,出了问题根本找不到消息流转路径;
  • 工程复杂度指数级上升,尤其多人协作时,接口频繁改动就会整死团队。

所以问题不是“怎么让智能体执行任务”,而是:

“怎么让多个智能体高效、低耦合、可追踪地协作。”


🌐 MCP 是什么?它做了哪些设计选择?

MCP(Message Coordination Protocol)是 Cangjie Magic 原生设计的智能体通信协议,具备以下特征:

特性 描述
协议模型 发布-订阅 / 点对点混合模型
消息语义结构 支持结构化语义字段,如 from, to, intent, payload, trace_id
消息传输 可适配本地 Channel、WebSocket、gRPC 等底层协议
路由机制 支持 Agent 动态注册与服务发现,支持基于意图、角色、能力的智能路由
异步与链式执行支持 Agent 可响应消息,也可转发或链式调用下游 Agent
状态追踪 每条消息携带 trace_id,支持分布式链路追踪
安全机制(可选) 可扩展认证、签名机制,确保 Agent 之间通信可控可信

说人话就是:

MCP 像是智能体世界里的“服务网格 + 消息总线 + 跟踪引擎”,它让所有 Agent 都讲同一种“语言”,还能让开发者知道“谁说了什么、什么时候说的、说的有没有听进去”。


🔧 我们项目中如何部署 MCP 网络?

我们在“AI 客服”项目中,用到了如下 Agent 节点:

  • InputAgent:接收用户输入;
  • NLPAgent:负责语义识别与意图分类;
  • FAQAgent:负责查询知识库;
  • ActionAgent:执行具体业务逻辑(发票、退货等);
  • LoggerAgent:记录所有交互信息与链路信息。

每个 Agent 都通过 MCP 注册为节点,并声明自己支持的能力(capabilities):

agent_id: faq_agent
capabilities:
  - query_knowledge
topics:
  - "intent=查询&topic=FAQ"

当用户输入一句“我想查查上次的订单发票”,消息流如下:

  1. InputAgent 发布一条消息 用户语句=...
  2. NLPAgent 接收并解析出 intent=查询发票
  3. MCP 根据意图匹配到 ActionAgent
  4. ActionAgent 执行发票流程,并转发确认消息给 LoggerAgent

整个流程中,我们没有一行 REST 接口代码,消息全部由 MCP 处理,而且每一条消息都带有 trace_id,可以在 Web 控制台完整追踪消息链路。


📊 使用体验总结

MCP 带来的最大变化是:

  1. Agent 之间再也不需要“记住对方的 URL 和 schema”
  2. 只需声明自己会做什么,系统就会自动调度你上场
  3. 出了问题,你能像调试微服务一样去追踪每一步的消息流转
  4. DSL 中声明行为即可自动映射为 MCP 消息,无需写 glue code

这和传统“Agent 开发=写 API + 拼 prompt”的方式完全是两个时代的产物。


4. 智能规划机制:从任务列表到行为链,我不再当调度中心

我们以前在写智能体时有个非常真实的感受:

“大模型很聪明,但你得一直喂它指令;你不喂,它就发呆。”

就像你雇了一个超强的实习生,理解能力一流,但你必须写好操作手册+逐行交代任务+盯着进度。否则它要么停在那里,要么做偏了方向。

而 Cangjie Magic 引入的智能规划机制(Smart Planner),让我们第一次可以把“调度中心”的帽子摘下来,让 Agent 自己规划任务链、调度工具和执行逻辑,真正做到“告诉它目标,它自己搞定路径”。


🤯 传统智能体的痛点:没有规划,只有指令堆砌

来看一个我们之前真实经历的例子:

目标:让智能体帮用户“完成退货流程”。

我们原本的方式是:

  1. prompt 引导模型提取出用户订单信息;
  2. 调用退货接口(需参数校验);
  3. 根据接口返回值判断是否成功;
  4. 如果失败,要 fallback 到人工客服;
  5. 失败信息还要记录到日志;

每一个步骤都写在后端逻辑中,代码长、逻辑散、修改困难。

而且一旦流程变了,比如:

  • 多了一个“退货原因选择”;
  • 或者“特殊订单不能自动退货”;

就需要重新堆代码、改 prompt、改后端校验流程。

说白了,这不是“智能”,而是“人肉流程外包”。


🎯 什么是智能规划机制?

Cangjie Magic 的智能规划器核心理念只有一句话:

“给我目标,我来推演出行为链。”

它基于三部分支撑:

  1. 意图识别与目标建模
    将用户输入/上层系统需求抽象为“目标(Goal)”与“约束(Constraints)”;
  2. 行为模块建模
    所有 Agent 的动作都已通过 DSL 描述,系统可自动分析依赖与前后置条件;
  3. 动态规划引擎
    基于行为图(Behavior Graph)与任务树(Task Tree),生成最优行为路径,包含 fallback、retry、用户反馈调整等机制。

最终产物是:一条 Agent 行为链,每个节点知道自己该干啥、谁提供前置条件、谁接收下游结果。


🧪 实例还原:退货流程的智能规划

用户说了一句:

“这个耳机有杂音,我想退货。”

系统执行路径如下:

  1. 意图识别出 退货,构建目标:

    {
      "goal": "发起退货流程",
      "constraints": {
        "订单存在": true,
        "非特殊订单": true
      }
    }
    
  2. 规划器生成行为链:

    感知 用户输入
    判断 用户意图 == "退货"
    执行 {
      查找订单
      校验订单条件
      提交退货申请
      记录日志
      反馈退货进度
    }
    
  3. 过程中,如果查找订单失败,会触发:

    fallback {
      提示 "未找到订单,请提供订单编号"
      记录异常
    }
    
  4. 整个链路不需要开发者写任何流程代码,全部由规划器自动生成,并交由 DSL + MCP 去调度执行。


🧩 智能规划带来的“开发方式切换”

传统方式 智能规划方式
写一个个函数 + 调用链 声明目标 + 配置模块
每变一次业务逻辑都要改代码 规划器自动调整行为路径
人工串联各模块 系统自行决策任务链
无法动态适配用户反馈 可动态 replanning(重新规划)

换句话说,从“写执行流程”变成了“写行为组件 + 声明目标”,你作为开发者的角色,从“流程调度器”变成了“组件设计师”。


🚀 为什么这对智能体开发意义重大?

因为随着需求越来越复杂,Agent 不可能靠死板流程应对所有变化。

我们要的不是“完成某个 API 调用的能力”,而是“具备面对复杂任务,自主规划和适应能力的系统”。

Cangjie Magic 的规划机制正是通往这个目标的关键桥梁。

而且别忘了,这一切:

  • 不依赖云服务
  • 不依赖外部 orchestrator
  • 完全本地执行、全程可控

对我们来说,这种架构转变,远远超出了“工具层的提升”,而是开发哲学的跃迁


5. 实际应用案例:我们如何用它构建了一个轻量级 AI 客服系统

🧭 项目背景:一个“不那么智能”的客服系统

我们所在的是一家偏向技术的企业服务公司,内部有不少售后支持需求。

最初我们的“AI 客服”是基于传统问答系统搭建的——对接了大模型,能回答一些简单问题,但一旦涉及“操作”或“流程”,比如:

  • 查询发票
  • 发起退货
  • 修改订单
  • 投诉反馈

就开始力不从心:

  • prompt 需要频繁调优
  • 状态缺失严重,一个会话里信息经常丢
  • 模块协作靠 REST API 硬拼,难维护
  • 没有复用机制,多个意图几乎是复制+修改

于是我们决定用 Cangjie Magic 重构这个系统,目标是:

实现一个轻量级、多模块协作、具备目标导向行为能力的智能体客服系统。


🧩 模块拆分:从单智能体到“多智能体微服务”

在新架构中,我们拆分出以下 Agent:

Agent 名称 主要职责
InputAgent 接收用户输入,统一进入点
NLPAgent 执行意图识别、关键词提取
FAQAgent 查询 FAQ 与知识库
OrderAgent 查询/校验/操作订单
InvoiceAgent 查询开票状态
ActionAgent 调度子任务、分配子 Agent
LogAgent 审计和记录用户行为路径
PlannerAgent 规划执行链,重构行为流程

每个 Agent 都是一个仓颉 DSL 文件 + MCP 注册逻辑,DSL 文件内定义其能力和行为结构。


✍️ 关键技术实践回顾

✅ DSL 构建智能体行为逻辑

以退货流程为例,我们的 DSL 如下:

agent 退货智能体 {
  感知 用户输入
  判断 意图 == "退货"
  执行 {
    调用 OrderAgent.查找订单
    判断 订单状态 == "已签收"
    执行 {
      调用 OrderAgent.发起退货流程
      调用 LogAgent.记录("用户发起退货")
      发送 "您的退货请求已受理,请等待短信通知"
    }
    fallback {
      发送 "当前订单暂不支持退货,请联系客服"
    }
  }
}

这样写的好处是:

  • 每一步都有语义结构,日志与行为一一对应;
  • 可视化查看行为链,不用看代码猜流程;
  • 可通过 Planner 自动生成或动态调整执行步骤;
✅ MCP 协调消息调度

所有 Agent 都是 MCP 节点。Planner 生成行为链后,消息自动流经各 Agent:

  1. InputAgent 收到用户输入
  2. NLPAgent 确认是“退货”
  3. PlannerAgent 下发任务链
  4. OrderAgent 查询订单
  5. ActionAgent 分发退货任务
  6. LogAgent 记录行为

这一切开发者不用再写 glue code,只需声明行为,MCP 会自动完成路由、调度和追踪。

✅ 智能规划应对多种异常

如果用户未登录、订单不存在、退货不合规,Planner 会根据规则自动选择 fallback 分支,比如:

fallback {
  调用 ActionAgent.转人工处理
  发送 "我这边处理不了,给您转接人工客服"
}

从而避免了流程断裂,保障用户体验。


📊 效果反馈:Agent 不再是黑盒,而是可调的“规则工作流”

上线两周,我们团队的直接反馈如下:

  • 📉 prompt 调整次数减少了 60%;
  • 🧠 问题定位效率提升了约 2 倍(可视化链路调试 + trace_id);
  • 🧩 Agent 能力复用显著,比如发票查询、状态查询模块多场景共享;
  • 👥 新人 onboarding 成本大降,只需看 DSL 文件即可理解逻辑;
  • 💬 用户满意度提升显著,“连续对话不中断”体验更流畅。

一句话总结就是:

以前我们写的是“能说话”的工具,现在我们构建的是“能做事”的智能体。


好的,接下来是最后一节内容:


6. 结束语:Cangjie Magic 改变了我的智能体开发范式

用完 Cangjie Magic 两个月后,如果要我用一句话概括我的感受,那就是:

“从堆代码变成了建模型,从调 API 变成了定义行为,从写工具变成了构建智能体。”

这不是一句夸张的口号,而是真切体会到的开发范式转变。


🧠 三项核心技术,重塑智能体开发三观

1. Agent DSL 架构:智能体也值得拥有“工程级表达力”

传统 Agent 开发靠 Python + prompt 搭配,灵活但混乱。而 DSL 架构把智能体“写法”从代码堆叠上升到了“语义建模”:

  • 能快速让团队理解智能体在干嘛;
  • 能复用行为模板、可视化流程;
  • 能调试每个逻辑分支,而不是调 prompt 拼运气。

说实话,这比我见过的大多数“低代码”平台更靠谱,因为它不试图屏蔽逻辑,而是以更可维护的方式表达逻辑

2. MCP 协议:从接口森林到有机智能网络

过去我们做 Agent 协作,像在拼一座没有图纸的房子,到处是自定义接口和 REST glue。

而 MCP 把这一切抽象成了语义化的通信协议:

  • 每个 Agent 宣告自己的能力;
  • 消息有 trace_id、有 intent、有上下文;
  • 多 Agent 协同像是神经元放电,系统本身变得更像“活的网络”。

而最牛的一点是:**MCP 不强制用某种传输协议,它是传输协议之上的“智能通信语义层”。**这让我们有了更多的架构选择自由。

3. 智能规划机制:让系统具备目标导向的“调度智能”

我一直觉得,把 LLM 用作执行单元只是“半自动化”。

只有系统能根据目标自己构造任务路径、回退分支、行为重组,才是“真正的智能”。

Cangjie Magic 的 Planner 让我看到了这种可能:

  • 用户说“我想退货”,系统能从意图出发构造完整行为链;
  • 条件不满足时,系统会 fallback 或请求补充信息,而不是直接失败;
  • 行为链的执行是解释式的、可插拔的,支持优化、演化。

对于我们这些习惯用流程编排工具搞自动化的开发者来说,这几乎就是 LLM 时代的“下一代工作流引擎”。


🔭 我希望未来 Cangjie Magic 能更进一步

虽然目前功能已能覆盖大部分场景,但作为使用者,我仍然有几点小期待:

🔧 更强的开发工具链支持
  • VS Code 插件,支持 DSL 智能补全、语法高亮、行为预览;
  • 图形化调试工具:调试 DSL 逻辑像调试状态机一样;
  • 本地模拟器:无需部署即可测试完整行为链。
🧱 更丰富的内置行为模块 & 第三方集成
  • 能力模块标准化,如通用 FAQ 检索器、OAuth 校验器等;
  • 内置模型管理支持,可选切换本地/远程 LLM;
  • 插件生态更开放,如自定义 DSL 模块库或“Agent 商店”。
👥 社区协作机制
  • 基于 DSL 的行为共享仓库;
  • Agent 能力集市(比如一个“知识摘要 Agent”,大家可以拿来即用);
  • 模块评分与评论机制,让优秀模块被更多人复用。

🧩 写在最后:Cangjie Magic 不是“更复杂”的工具,而是“更清晰”的方法论

作为一个在智能体方向踩过不少坑的技术人,我其实很早就意识到:

智能体系统的最大问题不是“技术不够”,而是“结构不清”。

Cangjie Magic 没有试图给你一堆炫技的新技术,而是从结构、语言、通信、行为建模等底层做起,让智能体开发这件事更有边界,更透明,更可控

用完之后我最大的感受是:
这不是另一个 AI 框架,这是一次智能体开发范式的“语言层重构”。

而这,恰恰是未来所有工程师都应该重视的趋势。


Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐