CangjieMagic 智能体框架嵌入式系统实测:以树莓派 4B 为例

article/2025/6/25 9:28:17

目录

引言

CangjieMagic 对嵌入式开发板的要求

编译环境准备

本地编译

交叉编译

实战测试

程序编写

对cjpm.toml文件的修改

运行结果

结束语


引言

在人工智能与物联网技术飞速发展的今天,嵌入式系统作为连接物理世界与数字世界的桥梁,承担着越来越重要的角色。智能体与嵌入式系统紧密相连、相互赋能。智能体为嵌入式系统注入 “智慧”,使其具备自主决策与交互能力;嵌入式系统则为智能体提供运行载体,二者结合极大拓展了应用边界。

CangjieMagic 智能体框架凭借其高效、灵活的特点,成为众多开发者在嵌入式场景下实现智能应用的有力工具。本文将以树莓派 4B 为硬件平台,带领大家深入体验 CangjieMagic 智能体框架在嵌入式系统中的实战应用。

CangjieMagic 对嵌入式开发板的要求

CangjieMagic 智能体框架是基于仓颉编程语言构建的 LLM Agent 开发框架,其主要特点包括:Agent DSL、支持 MCP 协议,支持模块化调用,支持任务智能规划。Cangjie Agent DSL 是一个用于定义和管理 Agent 的专用语言。它允许开发人员通过结构化的系统提示词、工具和各类协作策略来增强 Agent 的功能。

目前CangjieMagic 主要还是在x86、鸿蒙、苹果电脑等几个平台进行开发和测试,开发者缺少对嵌入式开发板的测试。由于Cangjie的runtime没有开源,且只支持x86_64的Linux和Windows,以及AARCH64的Linux和鸿蒙,以及MacOS这几个平台,所以目前还无法在RISC-V平台上运行。本文主要讨论AARCH64的Linux平台,这个也是目前在嵌入式开发板中最多的平台之一。

Cangjie编译器主要支持Ubuntu 18.0以上版本,所以其支持的AARCH64的GCC编译器是7.5以上版本,GLIBC是2.27。所以开发板的系统不应低于这个标准,比如我测试了米尔的TH507开发板,由于其自带镜像的GLIBC是2.25,除非升级镜像中的库文件,否则没法运行Cangjie的代码。测试中还发现,Cangjie编译器cjc对Ubuntu的AARCH64的GCC比较友好,而一些第三方的编译器可能不能很好适配。

我的测试基于树莓派 4B,这是一款性能强劲、功能丰富且价格亲民的单板计算机,配备四核 64 位 ARM Cortex-A72 处理器、最高 8GB 内存,支持千兆以太网、USB 3.0、双频 Wi-Fi 等多种接口。它的优点是镜像不断更新升级,所以适配CangjieMagic要容易些。

编译环境准备

本地编译

Cangjie是可以在树莓派4B上实现本地编译的。需要先从仓颉语言的网站上下载SDK:下载中心-仓颉编程语言官网。在其中选择AARCH64版本的编译器。

下载后解压安装包,然后运行evsetup脚本设置环境变量。

source cangjie/envsetup.sh

先编写了一个简单的 “Hello World” 仓颉程序,存放在名为 “hello_world” 的目录下,源文件为 “hello.cj”。

// hello.cj
main() {println("你好,仓颉")
}

然后使用下面的命令生成可执行文件main:

cjc hello.cj

 编译完成后,会生成可执行文件main。直接运行这个文件,就可以打印"你好,仓颉",这就说明当前的开发板是支持仓颉语言的。

 CangjieMagic也是可以本地编译的,但是并不建议这么做,因为CangjieMagic太复杂了,本地编译会非常慢,也可能会因为内存不够崩溃,所以还是建议交叉编译CangjieMagic。

交叉编译

首先需要再x86_64的Ubuntu中安装AARCH64的编译器:

sudo apt install gcc-aarch64-linux-gnu

然后需要拷贝aarch64开发包中以下三个目录的文件到x86_64的Linux软件包的对应目录:

  • cangjie/runtime/lib/linux_aarch64_llvm/
  • cangjie/modules/linux_aarch64_llvm/
  • cangjie/lib/linux_aarch64_llvm/

交叉编译Cangjie程序至少需要以下5个文件:

  •  Scrt1.o、crti.o和crtn.o文件在/usr/aarch64-linux-gnu/lib/目录下。
  • crtbeginS.o和crtendS.o' '文件在/usr/lib/gcc-cross/aarch64-linux-gnu/11目录下( 路径有可能因为操作系统的不同而不同)。

此时需要使用--toolchain <value>或者-B <value>指定编译工具链中,二进制文件存放的路径。二进制文件包括:编译器、链接器、工具链等提供的 C 运行时目标文件(例如 crt0.o、 crti.o等)。在准备好编译工具链后,可以在将其存放在一个自定义路径,然后通过 --toolchain <value> 向编译器传入该路径,即可让编译器调用到该路径下的二进制文件进行交叉编译。

 可以对前面的hello.cj进行一下交叉编译:

cjc hello.cj --target aarch64-unknown-linux-gnu -B /usr/aarch64-linux-gnu/lib/ -B /usr/lib/gcc-cross/aarch64-linux-gnu/11

编译完成后,会生成可执行文件main。 使用file命令检查一下确实生成了aarch64的文件。 

developer@developer:~/IDEProjects$ file main
main: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, not stripped

实战测试

程序编写

先建立一个demo目录,然后使用下面的命令创建工程:

cjpm init

添加对本项目的依赖,需要修改新建项目的 cjpm.toml

[dependencies]magic = { git = "https://gitcode.com/Cangjie-TPC/CangjieMagic.git", branch = "dev" }

拷贝如下代码至 main.cj 中,并在代码中设置大语言模型服务商的 API key。这里使用的是华为云的DeepSeek服务,有关设置可以参考:在CangjieMagic智能体框架中集成华为云的DeepSeek服务-CSDN博客

package demoimport magic.dsl.*
import magic.prelude.*
import magic.config.Config@agent[model: "deepseek:DeepSeek-R1"]
class BlackCatAssistant {@prompt("你是黑猫警长的助手""当接到群众通知后,你需要唱起黑猫警长的专属 BGM 并安抚群众情绪")
}main() {Config.env["DEEPSEEK_API_KEY"] = "xxxx-s0EOCKOlxbfhJBU_V2KVHw57BBDnRD759eF6didZRS9HD2KhKS36y5s9Q7bMuPRQE0NC6v5bkOdA"Config.env["DEEPSEEK_BASE_URL"] = "https://maas-cn-southwest-2.modelarts-maas.com/v1/infers/8a062fd4-7367-4ab4-a936-5eeb8fb821c4/v1/"let agent = BlackCatAssistant()let result = agent.chat("一只耳来啦")println(result)
}

对cjpm.toml文件的修改

如果直接对工程实施cjpm build,会出现如下错误:

error: conditional compilation have not supported this condition: 'ohos'
==> /home/developer/.cjpm/git/magic/b7cfcb0216ae48e896f16c20592a7c94689fc380/src/log/log_utils_ohos.cj:8:7:
|
8 | @When[ohos == "true"]
| ^
|1 error generated, 1 error printed.

这是因为有几个文件只能在ohos下进行编译,所以修改cjpm.toml文件,设置ohos为false。在文件中加入如下代码:

[target.aarch64-unknown-linux-gnu]compile-option = "--cfg \"ohos=false\""

如果是交叉编译,还需要加入-B选项以指定启动文件的位置:

[target.aarch64-unknown-linux-gnu]compile-option = "-B /usr/aarch64-linux-gnu/lib/ -B /usr/lib/gcc-cross/aarch64-linux-gnu/11 --cfg \"ohos=false\""

上面的路径有可能因为操作系统的不同而不同。  

一共有两个cjpm.toml要修改,一个是/home/developer/.cjpm/git/magic/b7cfcb0216ae48e896f16c20592a7c94689fc380目录下的,另一个是demo目录下的。

编译后需要将canjie/runtime目录下aarch64的文件和demo/target目录下的aarch64的文件都打包拷贝到开发板上。

运行结果

使用export LD_LIBRARY_PATH目录设置好所需要的库文件路径,然后运行程序就可以看到结果了。

结束语

智能体和嵌入式系统的结合促进了新技术的融合与创新。随着人工智能算法、机器学习技术的不断发展,智能体可以在嵌入式系统上实现更高级的功能,如基于深度学习的图像识别、自然语言处理等。同时,物联网技术的兴起让嵌入式设备能够连接到网络,智能体可以通过网络获取更多信息,与其他智能体或系统进行交互协作,进一步拓展应用场景。例如,在智慧城市中,分布在各处的嵌入式智能设备(如智能路灯、智能交通信号灯)通过智能体的协同工作,实现资源优化配置和城市管理的智能化。​

目前看,仓颉团队的工作中心不在嵌入式系统方面,所以相关的支持还不是很完善,需要我们自己做一些探索和尝试。


http://www.hkcw.cn/article/pkMnMXelKy.shtml

相关文章

数值与字典解决方案二十七讲:两列数据相互去掉重复值后合并

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

林夏薇否认破产传闻,已发律师声明回应 正交律师处理

近期,TVB“视后”林夏薇被一家公司向香港高等法院申请破产。根据司法机构资料,案件延期至8月26日下午在高等法院提讯。对于破产一事,林夏薇回应称:“我丈夫Jason租住房子的公司有官司,正在上诉中,所以我莫名其妙,现在已交给律师处理,我也没有收到任何通知。”5月30日,…

下次放假安排已定可连休8天 国庆中秋合并假期

今天是端午节假期的最后一天,许多人已经开始期待下一次休假。根据国务院办公厅发布的2025年部分节假日安排通知,下一个长假将在四个月后的国庆节和中秋节期间。届时,国庆节与中秋节将合并放假,共8天。责任编辑:zx0176

24岁台大学霸暗网全球贩毒,3年海1亿多美元

24岁台大学霸暗网全球贩毒,3年海1亿多美元!据台媒报道,近日,美国联邦调查局(FBI)破获暗网毒品交易平台“隐身市场”,而该平台经营者“法老”的真实身份竟是24岁台湾大学资管系学生林睿庠。林睿庠因贩毒资产暴增,3年多其不法所得超过1亿美元(约7.2亿元人民币)。据悉,…

孙连城扮演者直播带货望远镜 从“宇宙区长”到带货主播

5月31日晚,曾在热播电视剧《人民的名义》中饰演“懒政区长孙连城”的演员李威,在短视频平台上开启直播带货,所售商品为天文望远镜。近一周内,李威已进行了三场关于望远镜的直播带货。6月1日上午,李威此前发布的带货直播预告视频疑似已被隐藏或删除,其商品橱窗中的天文望远…

互联网女皇340页AI报告猛料刷屏:AI增速创纪录

当地时间5月30日,玛丽米克尔发布了长达340页的“AI趋势报告”。报告指出,AI的发展速度前所未见,用户增长、使用量和资本支出均呈现出爆炸式增长,其影响力可能远超技术本身。玛丽米克尔是美国风险投资家,曾就职于摩根士丹利和凯鹏华盈,于2018年创立了自己的风投公司邦德资…

为何说中国“车圈恒大论”是误读 主流车企财务稳健

端午前夕,“车圈恒大论”再次成为业内焦点。5月30日,比亚迪集团品牌及公关处总经理李云飞通过社交媒体发布长文,首次正面回应被暗指为“汽车圈恒大”的流言,直言感觉好气又好笑,并列出财报数据逐一反驳,指出中国主流车企根本不存在所谓的“车圈恒大”。事情起源于前不久的…

关于免费版MQTT.fx 1.7.1下载与安装(附带下载链接)

MQTT.fx目前官网已经更新到5.x的版本&#xff0c;该版本需要付费使用&#xff0c;作为学习使用的话还是建议用免费的1.7.1版本&#xff0c;但是官网已经没有这个版本的安装包了&#xff0c;以下链接是我在网上找到的资料&#xff0c;该仓库仅用于学习交流&#xff0c;请勿用于商…

海外tk抓包简单暴力方式

将地址替换下面代码就可以 function hook_dlopen(module_name, fun) {var android_dlopen_ext Module.findExportByName(null, "android_dlopen_ext");if (android_dlopen_ext) {Interceptor.attach(android_dlopen_ext, {onEnter: function (args) {var pathptr …

编译原理实验 之 TINY 之 语义分析(第二次作业)

文章目录 本实验是接着前面的两个实验的基础上进行完善的&#xff0c;所以对于前面的实验如何操作&#xff1f;请看我的另外两个博客~ 编译原理 之 实验一 编译原理实验 之 Tiny C语言编译程序实验 语法分析 首先明确一下这次实验的任务&#xff1f; 主要目的&#xff1a;实现…

数组与元组:TypeScript 的基础

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

Transformer核心技术深度解析:多头注意力机制与架构精粹

一、多头注意力&#xff1a;模型理解的「多棱镜」 核心思想&#xff1a;并行化特征空间探索 传统注意力的局限&#xff1a;单一注意力机制如同单眼观察世界&#xff0c;只能捕捉单一维度的关联 多头机制的本质&#xff1a;为模型配备多组「认知透镜」&#xff0c;同时从不同子…

【C语言入门级教学】assert断⾔和指针的使用

文章目录 1.assert断⾔2.指针的使⽤和传址调⽤2.1 strlen的模拟实现2.2 传值调⽤和传址调⽤ 1.assert断⾔ assert.h 头⽂件定义了宏 assert() &#xff0c;⽤于在运⾏时确保程序符合指定条件&#xff0c;如果不符合&#xff0c;就报错终⽌运⾏。这个宏常常被称为“断⾔”。 a…

拓扑排序 + 深度优先搜索解决问题

如大家所知&#xff0c;使用深度优先搜索实现拓扑排序的总体思想是&#xff1a;对于一个特定节点&#xff0c;如果该节点的所有相邻节点都已经搜索完成&#xff0c;则该节点也会变成已经搜索完成的节点&#xff0c;在拓扑排序中&#xff0c;该节点位于其所有相邻节点的前面。一…

cnn训练并用grad-cam可视化

使用大米图片训练集&#xff0c;包含五个文件&#xff0c;分别是5种品牌的大米&#xff0c;使用cnn进行分类训练。 -Arborio/ &#xff1a;代表 Arborio 品种的大米图像数据&#xff0c;根据 Rice_Citation_Request.txt 文件可知&#xff0c;该数据集中包含 Arborio 品种的大米…

放弃 tsc+nodemon 使用 tsx 构建Node 环境下 TypeScript + ESM 开发环境搭建指南

放弃 tscnodemon 使用 tsx 构建Node 环境下 TypeScript ESM 开发环境搭建指南 目标 在 node 环境下构建 typescript esmodule模块 开发环境&#xff0c;这样可以使用 typescript 提供的类型安全和类型提示便利性。 我们要实现下面的效果 文件目录 src/index.ts 注意是 esmod…

Geogebra中导出3D Graphics窗口

导出没有特别的自定义设置&#xff0c;默认的第一个窗口是Graphics, 还有Graphics 2和3D Graphics ,优先顺序依次递减。如果要想导出的是3D Graphics, 需要确保关闭另外两个窗口。 这个是视频转换&#xff1a; 下面是直接导出&#xff1a; 带渲染效果的&#xff0c;其实是Al…

LeetCode 高频 SQL 50 题(基础版) 之 【高级查询和连接】· 上

题目&#xff1a;1731. 每位经理的下属员工数量 题解&#xff1a; select employee_id,name,reports_count,average_age from Employees t1,(select reports_to,count(*) reports_count,round(avg(age)) average_agefrom Employeeswhere reports_to is not nullgroup by repor…

韩国大选三强对决 李在明领跑 民众意愿强烈

韩国第21届总统选举于6月3日举行,预计4日凌晨揭晓结果。当选总统将立即就职,任期5年。当地时间2025年5月30日,韩国京畿道果川市中央选举管理委员会选举综合情况室的工作人员正在检查境内提前投票箱的存放地点监控视频。从去年12月3日的风波到今年4月4日前总统尹锡悦被罢免,…

48岁网红“大刚”疑酒精中毒离世 民间艺人突陨落

6月1日,短视频账号“大刚演艺传媒”发布讣告,宣布景旭刚因病于当天上午不幸离世,享年48岁。定于6月4日出殡。许多网友在评论区对景旭刚的离世表达了哀思,并称赞他多才多艺。次日,景旭刚的妻子确认了这一消息,称丈夫因饮酒过量导致酒精中毒去世。景旭刚的儿子也在朋友圈发…