仓颉造字,亦可造AI代理
CangjieMagic入门教程
本文将为您提供一份关于CangjieMagic代码库的详细入门教程,CangjieMagic托管于GitCode - 全球开发者的开源社区,开源代码托管平台。这是一个基于仓颉编程语言的LLM(大语言模型)Agent开发平台,具有独特的Agent DSL架构、原生支持MCP通信协议以及智能规划能力。本教程包含可运行的代码示例,帮助您快速上手。由于我无法直接访问代码库,代码示例将是基于Agent开发常见模式和搜索结果中描述的假设性示例,旨在说明概念而非精确语法。请参考官方文档获取准确的实现细节。
目录
- CangjieMagic简介
- 搭建开发环境
- 理解Agent DSL
- 使用MCP通信协议
- CangjieMagic中的智能规划
- 运行和测试您的Agent
- 进阶主题
- 总结
CangjieMagic简介
CangjieMagic是一个突破性的LLM Agent开发平台,基于仓颉编程语言构建。作为首款此类平台,它引入了新颖的Agent DSL(领域特定语言)架构、原生支持MCP(可能是“Magic Communication Protocol”)通信协议,以及高级智能规划功能。CangjieMagic于2025年3月开源,标志着智能Agent开发领域的一次重大飞跃,为开发者提供了一个强大而灵活的框架,用于创建复杂的AI驱动应用。
为何选择CangjieMagic?
近年来,LLM Agent因其利用大语言模型执行复杂任务的能力而备受关注。然而,开发这些Agent通常需要处理复杂的代码库和管理多个组件之间的通信。CangjieMagic通过其Agent DSL提供了一个简化的高层接口,使得Agent开发更加直观和高效。
在仓颉生态中的意义
CangjieMagic是仓颉生态系统的一部分,而仓颉是一种面向全场景智能的新一代编程语言,以原生智能、高性能和强安全性著称。它特别适用于HarmonyOS NEXT等场景。CangjieMagic利用这些优势,为构建跨场景运行的智能Agent提供了坚实的基础,涵盖从简单自动化任务到复杂决策系统的各种应用。
主要特性与优势
- Agent DSL架构:简化Agent的定义和配置,减少样板代码,让开发者专注于Agent逻辑。
- MCP通信协议:实现Agent间的无缝通信,支持高效的消息传递和数据共享。
- 智能规划:赋予Agent自主决定实现目标的最佳行动序列的能力。
- 原生集成:直接基于仓颉语言构建,确保最佳性能和安全性。
本教程将深入探讨这些特性,并通过示例带您逐步掌握CangjieMagic。
搭建开发环境
在开始使用CangjieMagic之前,您需要搭建开发环境。本节将指导您安装必要的工具并克隆代码库。
前提条件
确保您的系统中已安装以下工具:
- 仓颉编程语言:版本X.X或更高。请访问仓颉官方网站下载并安装适用于您操作系统的版本。
- Git:用于克隆代码库。如果尚未安装Git,可从git-scm.com下载。
- 代码编辑器或IDE:可选,但推荐使用支持仓颉语法高亮的编辑器以提升开发体验。
安装仓颉语言
- 前往仓颉官方网站,下载适用于您操作系统的安装包。
- 按照网站上的安装说明进行操作。
- 安装完成后,打开终端或命令提示符,运行以下命令验证安装:
这将显示已安装的仓颉版本号。cangjie --version
克隆CangjieMagic代码库
准备好环境后,从GitCode克隆CangjieMagic代码库:
git clone https://gitcode.com/Cangjie-TPC/CangjieMagic.git
cd CangjieMagic
这将在您的本地机器上创建代码库的副本,您可以开始探索代码并运行示例。
验证环境
进入代码库目录后,您可以检查是否存在自述文件或其他文档(例如README.md),了解进一步的安装步骤或依赖项。由于具体细节可能因版本而异,请参考代码库中的官方说明。
理解Agent DSL
CangjieMagic的核心是其Agent DSL,这是一种专为定义和配置Agent设计的语言,旨在让开发过程更直观高效。DSL通过抽象化Agent开发的底层复杂性,让您专注于实现Agent的行为逻辑。
Agent DSL基础
Agent DSL采用声明式语法,定义Agent及其组件。主要元素包括:
agent:定义一个具有唯一名称的新Agent。name和description:Agent的元数据。action:定义Agent的具体行为或功能。input和output:指定动作的输入和输出数据类型。implementation:包含动作执行时的具体代码。
编写简单Agent
以下是一个假设性示例,展示如何使用Agent DSL定义Agent。注意:这是说明性示例,实际语法请参考官方文档。
agent MyFirstAgent {name: "MyFirstAgent"description: "一个简单的问候Agent"action greet {input: String nameoutput: String greetingimplementation: {greeting = "你好," + name + "!"}}
}
在此示例中:
- 定义了一个名为"MyFirstAgent"的Agent,并附上描述。
- Agent包含一个"greet"动作,接受字符串输入"name",生成字符串输出"greeting"。
- 实现逻辑将“你好,”与输入的姓名拼接并添加感叹号。
运行此Agent后,调用greet动作并传入"Alice",可能输出:
你好,Alice!
语法与关键概念
- Agent定义:每个Agent必须有唯一名称,可通过描述提供额外上下文。
- 动作(Action):动作是Agent行为的基本单位,定义其输入、输出及处理逻辑。
- 实现(Implementation):动作的具体逻辑在此处定义,可以是简单的字符串操作,也可以涉及复杂计算或LLM调用。
扩展Agent功能
您可以为Agent添加多个动作以增强其功能。例如,添加一个告别动作:
agent MyFirstAgent {name: "MyFirstAgent"description: "一个支持问候和告别的Agent"action greet {input: String nameoutput: String greetingimplementation: {greeting = "你好," + name + "!"}}action farewell {input: String nameoutput: String messageimplementation: {message = "再见," + name + "。祝你愉快!"}}
}
现在,"MyFirstAgent"可以根据调用的动作问候或告别用户,例如:
- 调用
greet "Bob"输出:你好,Bob! - 调用
farewell "Bob"输出:再见,Bob。祝你愉快!
使用MCP通信协议
MCP(Magic Communication Protocol)是CangjieMagic生态系统中专为Agent间通信设计的高效协议。它支持Agent间交换消息、共享数据和协调行动。
MCP是什么?
MCP负责消息的序列化、传输和反序列化,确保Agent间通信可靠且高效。它支持同步和异步消息传递模式,适应不同应用需求。
Agent通信示例
以下是一个假设性示例,展示两个Agent如何通过MCP通信。注意:这是说明性示例,实际语法请参考官方文档。
// 在Agent A中
send_message(target: "AgentB", message: "来自Agent A的问候")// 在Agent B中
on_message_received(source: "AgentA", message: String) {print("收到来自Agent A的消息:" + message)
}
在此示例中:
- Agent A 使用
send_message函数向Agent B发送消息,指定目标Agent和消息内容。 - Agent B 通过
on_message_received处理器监听消息,并在收到时打印。
运行后,Agent B的输出可能是:
收到来自Agent A的消息:来自Agent A的问候
MCP的工作原理
虽然具体实现细节未公开,但MCP可能提供以下功能:
- 消息队列:确保即使目标Agent暂时不可用,消息也能被传递。
- 类型安全:强制消息格式符合预期,减少错误。
- 异步通信:允许Agent在等待响应时继续处理其他任务。
扩展通信能力
MCP支持传递复杂数据结构,例如对象或列表。示例:
// 发送结构化消息
send_message(target: "AgentB", message: { type: "request", data: { task: "计算", params: [1, 2, 3] } })// 接收并处理消息
on_message_received(source: "AgentA", message: Object) {if (message.type == "request") {print("处理请求:" + message.data.task)}
}
此示例展示如何发送包含任务请求的消息,并在接收端处理,输出:
处理请求:计算
CangjieMagic中的智能规划
CangjieMagic的智能规划功能是其一大亮点,使Agent能够根据当前状态和可用资源,自主决定实现目标的最佳行动序列。
规划能力概述
智能规划允许Agent:
- 定义表示期望状态或结果的目标。
- 指定可改变世界状态的动作。
- 使用规划器找到从当前状态到目标状态的动作序列。
定义目标与动作
以下是一个假设性示例,展示规划的实现方式。注意:这是说明性示例,实际语法请参考官方文档。
goal AchieveTask {condition: task_completed == true
}action PerformStep {precondition: step_ready == trueeffect: step_completed = true
}planner MyPlanner {goals: [AchieveTask]actions: [PerformStep]
}
在此示例中:
AchieveTask目标在task_completed == true时达成。PerformStep动作需满足step_ready == true,执行后设置step_completed = true。MyPlanner规划器寻找满足目标的动作序列(此处为PerformStep)。
规划场景演示
考虑一个复杂的场景,例如准备一顿饭,涉及多个步骤:
goal MealReady {condition: meal_prepared == true
}action ChopVegetables {precondition: vegetables_available == trueeffect: vegetables_chopped = true
}action Cook {precondition: vegetables_chopped == true && stove_on == trueeffect: food_cooked = true
}action PlateFood {precondition: food_cooked == trueeffect: meal_prepared = true
}planner MealPlanner {goals: [MealReady]actions: [ChopVegetables, Cook, PlateFood]
}
规划器将按顺序执行:ChopVegetables → Cook → PlateFood,确保每个步骤的前提条件都满足,最终实现meal_prepared == true。
运行和测试您的Agent
定义好Agent后,您可以使用CangjieMagic工具链构建和部署它。本节介绍运行和测试的基本步骤。
构建与部署
具体命令可能有所不同,但通常如下:
cangjie build MyFirstAgent.cj
cangjie run MyFirstAgent
cangjie build:将Agent定义编译为可执行格式。cangjie run:启动Agent,使其准备好接受输入并执行动作。
与Agent交互
部署后,您可以通过以下方式与Agent交互:
- 命令行界面(CLI):直接从终端发送命令。
- Web API:若已配置,Agent可暴露远程交互端点。
- 集成应用:将Agent嵌入更大应用中。
例如,使用CLI调用"greet"动作:
cangjie invoke MyFirstAgent greet --name "Alice"
输出:
你好,Alice!
调试技巧
CangjieMagic可能提供调试工具,例如:
- 日志记录:添加打印语句或使用内置日志函数跟踪Agent活动。
- 状态检查:使用调试工具检查Agent的内部状态。
- 消息追踪:监控MCP发送和接收的消息。
熟悉这些工具可帮助您快速解决问题。
进阶主题
若想进一步提升CangjieMagic技能,可探索以下领域:
与其他仓颉组件集成
CangjieMagic是仓颉生态的一部分,可与第三方库(如Cangjie-TPC)集成,扩展Agent功能,例如连接数据库或外部API。
性能优化
随着Agent复杂性增加,性能优化变得重要。学习如何分析Agent性能,识别瓶颈并优化代码。
Agent开发最佳实践
研究设计模式和架构原则,确保Agent系统健壮且易于维护,例如模块化逻辑和优雅处理错误。
总结
本教程带您全面了解了CangjieMagic,从核心概念到编写和部署您的首个智能Agent。其创新的Agent DSL、无缝的MCP通信和强大的规划能力,使开发者能够以前所未有的方式创建智能交互Agent。继续探索这个平台时,建议参与仓颉社区,分享经验并为生态系统贡献力量。智能Agent开发的未来已来临,而CangjieMagic让您站在前沿。
相关文章:
仓颉造字,亦可造AI代理
CangjieMagic入门教程 本文将为您提供一份关于CangjieMagic代码库的详细入门教程,CangjieMagic托管于GitCode - 全球开发者的开源社区,开源代码托管平台。这是一个基于仓颉编程语言的LLM(大语言模型)Agent开发平台,具有独特的Age…...
进阶篇 第 6 篇:时间序列遇见机器学习与深度学习
进阶篇 第 6 篇:时间序列遇见机器学习与深度学习 (图片来源: Tara Winstead on Pexels) 在上一篇中,我们探讨了如何通过精心的特征工程,将时间序列预测问题转化为机器学习可以处理的监督学习任务。我们学习了如何创建滞后特征、滚动统计特征…...
【音视频】音频解码实战
音频解码过程 ⾳频解码过程如下图所示: FFmpeg流程 关键函数 关键函数说明: avcodec_find_decoder:根据指定的AVCodecID查找注册的解码器。av_parser_init:初始化AVCodecParserContext。avcodec_alloc_context3:为…...
DOCA介绍
本文分为两个部分: DOCA及BlueField介绍如何运行DOCA应用,这里以DNS_Filter为例子做大致介绍。 DOCA及BlueField介绍: 现代企业数据中心是软件定义的、完全可编程的基础设施,旨在服务于跨云、核心和边缘环境的高度分布式应用工作…...
# 利用迁移学习优化食物分类模型:基于ResNet18的实践
利用迁移学习优化食物分类模型:基于ResNet18的实践 在深度学习的众多应用中,图像分类一直是一个热门且具有挑战性的领域。随着研究的深入,我们发现利用预训练模型进行迁移学习是一种非常有效的策略,可以显著提高模型的性能&#…...
洗车小程序系统前端uniapp 后台thinkphp
洗车小程序系统 前端uniapp 后台thinkphp 支持多门店 分销 在线预约 套餐卡等...
HCIP(综合实验2)
1.实验拓补图 2.实验要求 1.根据提供材料划分VLAN以及IP地址,PC1/PC2属于生产一部员工划分VLAN10,PC3属于生产二部划分VLAN20 2.HJ-1HJ-2交换机需要配置链路聚合以保证业务数据访问的高带宽需求 3.VLAN的放通遵循最小VLAN透传原则 4.配置MSTP生成树解决二层环路问题…...
Linux mmp文件映射补充(自用)
addr一般为NULL由OS指明,length所需长度(4kb对齐),prot(权限,一般O_RDWR以读写), flag(MAP_SHARED(不刷新到磁盘上,此进程独有)和MAP_PRIVATE(刷新…...
单元测试学习笔记(一)
自动化测试 通过测试工具/编程模拟手动测试步骤,全自动半自动执行测试用例,对比预期输出和实际输出,记录并统计测试结果,减少重复的工作量。 单元测试 针对最小的单元测试,Java中就是一个一个的方法就是一个一个的单…...
【深度学习新浪潮】新视角生成的研究进展调研报告(2025年4月)
新视角生成(Novel View Synthesis)是计算机视觉与图形学领域的核心技术,旨在从单张或稀疏图像中生成任意视角的高保真图像,突破传统多视角数据的限制,实现对三维场景的自由探索。作为计算机视觉与图形学的交叉领域,近新视角生成年来在算法创新、应用落地和工具生态上均取…...
OpenHarmony OS 5.0与Android 13显示框架对比
1. 架构概述 1.1 OpenHarmony OS 5.0架构 OpenHarmony OS 5.0采用分层架构设计,图形显示系统从底层到顶层包括: 应用层:ArkUI应用和第三方应用框架层:ArkUI框架、窗口管理API系统服务层:图形合成服务、窗口管理服务…...
[Java] 泛型
目录 1、初识泛型 1.1、泛型类的使用 1.2、泛型如何编译的 2、泛型的上界 3、通配符 4、通配符上界 5、通配符下界 1、初识泛型 泛型:就是将类型进行了传递。从代码上讲,就是对类型实现了参数化。 泛型的主要目的:就是指定当前的容器…...
Vue3 项目中零成本接入 AI 能力(以图搜图、知识问答、文本匹配)...
以下是在 Vue3 项目中零成本接入 AI 能力(以图搜图、知识问答、文本匹配)的完整解决方案,结合免费 API 和开源工具实现,无需服务器或付费服务: 一、以图搜图(基于 Hugging Face CLIP 模型) 核心思路 通过 Hugging Face Inference API 调用 CLIP 模型,将图片转换为向…...
Spark–steaming
实验项目: 找出所有有效数据,要求电话号码为11位,但只要列中没有空值就算有效数据。 按地址分类,输出条数最多的前20个地址及其数据。 代码讲解: 导包和声明对象,设置Spark配置对象和SparkContext对象。 使用Spark S…...
【目标检测】对YOLO系列发展的简单理解
目录 1.YOLOv12.YOLOv23.YOLOv34.YOLOv45.YOLOv66.YOLOv77.YOLOv9 YOLO系列文章汇总: 【论文#目标检测】You Only Look Once: Unified, Real-Time Object Detection 【论文#目标检测】YOLO9000: Better, Faster, Stronger 【论文#目标检测】YOLOv3: An Incremental …...
前端框架的“快闪“时代:我们该如何应对技术迭代的洪流?
引言:前端开发者的"框架疲劳" “上周刚学完Vue 3的组合式API,这周SolidJS又火了?”——这恐怕是许多前端开发者2023年的真实心声。前端框架的迭代速度已经达到了令人目眩的程度,GitHub每日都有新框架诞生,n…...
深度学习训练中的显存溢出问题分析与优化:以UNet图像去噪为例
最近在训练一个基于 Tiny-UNet 的图像去噪模型时,我遇到了经典但棘手的错误: RuntimeError: CUDA out of memory。本文记录了我如何从复现、分析,到逐步优化并成功解决该问题的全过程,希望对深度学习开发者有所借鉴。 训练数据&am…...
Python爬虫实战:获取优志愿专业数据
一、引言 在信息爆炸的当下,数据成为推动各领域发展的关键因素。优志愿网站汇聚了丰富的专业数据,对于教育研究、职业规划等领域具有重要价值。然而,为保护自身数据和资源,许多网站设置了各类反爬机制。因此,如何高效、稳定地从优志愿网站获取计算机专业数据成为一个具有…...
2025.4.22学习日记 JavaScript的常用事件
在 JavaScript 里,事件是在文档或者浏览器窗口中发生的特定交互瞬间,例如点击按钮、页面加载完成等等。下面是一些常用的事件以及案例: 1. click 事件 当用户点击元素时触发 const button document.createElement(button); button.textCo…...
如何修复WordPress中“您所关注的链接已过期”的错误
几乎每个管理WordPress网站的人都可能遇到过“您关注的链接已过期”的错误,尤其是在上传插件或者主题的时候。本文将详细解释该错误出现的原因以及如何修复,帮助您更好地管理WordPress网站。 为什么会出现“您关注的链接已过期”的错误 为了防止资源被滥…...
从零开始搭建Django博客①--正式开始前的准备工作
本文主要在Ubuntu环境上搭建,为便于研究理解,采用SSH连接在虚拟机里的ubuntu-24.04.2-desktop系统搭建的可视化桌面,涉及一些文件操作部分便于通过桌面化进行理解,最后的目标是在本地搭建好系统后,迁移至云服务器并通过…...
健身房管理系统(springboot+ssm+vue+mysql)含运行文档
健身房管理系统(springbootssmvuemysql)含运行文档 健身房管理系统是一个全面的解决方案,旨在帮助健身房高效管理其运营。系统提供多种功能模块,包括会员管理、员工管理、会员卡管理、教练信息管理、解聘管理、健身项目管理、指导项目管理、健身器材管理…...
Java从入门到“放弃”(精通)之旅——继承与多态⑧
Java从入门到“放弃”(精通)之旅🚀——继承与多态⑧ 一、继承:代码复用的利器 1.1 为什么需要继承? 想象一下我们要描述狗和猫这两种动物。如果不使用继承,代码可能会是这样: // Dog.java pu…...
DeepSeek开源引爆AI Agent革命:应用生态迎来“安卓时刻”
开源低成本:AI应用开发进入“全民时代” 2025年初,中国AI领域迎来里程碑事件——DeepSeek开源模型的横空出世,迅速在全球开发者社区掀起热潮。其R1和V3模型以超低API成本(仅为GPT-4o的2%-10%)和本地化部署能力&#x…...
使用 LangChain + Higress + Elasticsearch 构建 RAG 应用
RAG(Retrieval Augmented Generation,检索增强生成) 是一种结合了信息检索与生成式大语言模型(LLM)的技术。它的核心思想是:在生成模型输出内容之前,先从外部知识库或数据源中检索相关信息&…...
深入解析C++ STL List:双向链表的特性与高级操作
一、引言 在C STL容器家族中,list作为双向链表容器,具有独特的性能特征。本文将通过完整代码示例,深入剖析链表的核心操作,揭示其底层实现机制,并对比其他容器的适用场景。文章包含4000余字详细解析,适合需…...
Uniapp:pages.json页面路由
目录 一、pages二、style 一、pages uni-app 通过 pages 节点配置应用由哪些页面组成,pages 节点接收一个数组,数组每个项都是一个对象,其属性值如下: 属性类型默认值描述pathString配置页面路径styleObject配置页面窗口表现nee…...
Self-Ask:LLM Agent架构的思考模式 | 智能体推理框架与工具调用实践
作为程序员,我们习惯将复杂问题分解为可管理的子任务,这正是递归和分治算法的核心思想。那么,如何让AI模型也具备这种结构化思考能力?本文深入剖析Self-Ask推理模式的工作原理、实现方法与最佳实践,帮助你构建具有清晰…...
【前端】【业务场景】【面试】在网页开发中,如何优化图片以提高页面加载速度?解决不同设备屏幕适配问题
📌 问题 1:在网页开发中,如何优化图片以提高页面加载速度? 🔍 一、关键词总结 关键词说明图片压缩借助 TinyPNG、ImageOptim 等工具,无损减小图片文件大小格式选择JPEG(照片类)、P…...
Git Flow分支模型
经典分支模型(Git Flow) 由 Vincent Driessen 提出的 Git Flow 模型,是管理 main(或 master)和 dev 分支的经典方案: main 用于生产发布,保持稳定; dev 用于日常开发,合并功能分支(feature/*); 功能开发在 feature 分支进行,完成后合并回 dev; 预发布分支(rele…...
