目錄
引言
編寫視覺語言大模型(VLM)程序
交叉編譯Cangjie Magic到T536開發板
對cjpm.toml文件的修改
stdx庫的配置
拷貝libsecurec.so到cangjie的庫文件中
開始交叉編譯
部署到開發板
拷貝所需要的庫文件
安裝curl
運行程序
結束語
本文首發于:【新提醒】【HZ-T536開發板免費體驗】3 - Cangjie Magic調用視覺語言大模型(VLM)真香,是不是可以沒有YOLO和OCR了? - 北京合眾恒躍科技有限公司 - 電子技術論壇 - 廣受歡迎的專業電子論壇!
?感謝電子發燒友和合眾恒躍提供的試用機會。
引言
上次我們已經實現了交叉編譯倉頡編程語言的程序在開發板上運行。今天我們會交叉編譯Cangjie Magic程序到開發板上。Cangjie Magic是一個基于倉頡編程語言構建的 LLM Agent 開發框架,其主要特點包括:Agent DSL、支持 MCP 協議,支持模塊化調用,支持任務智能規劃。Cangjie Agent DSL 是一個用于定義和管理 Agent 的專用語言。它允許開發人員通過結構化的系統提示詞、工具和各類協作策略來增強 Agent 的功能。
今天我們就嘗試在開發板上利用質譜AI的視覺語言模型(VLM)模型來進行圖像識別。我們的目標就是類似前幾天測試Milk-V Duo S所做的識別車牌號,我們會看到VLM做這個工作簡直易如反掌。
編寫視覺語言大模型(VLM)程序
視覺語言大模型(VLM)已經成為智能系統的關鍵基石。隨著真實世界的智能任務越來越復雜,VLM模型也亟需在基本的多模態感知之外, 逐漸增強復雜任務中的推理能力,提升自身的準確性、全面性和智能化程度,使得復雜問題解決、長上下文理解、多模態智能體等智能任務成為可能。智譜AI推出新版VLM開源模型 GLM-4.1V-9B-Thinking ,引入思考范式,通過課程采樣強化學習 RLCS(Reinforcement Learning with Curriculum Sampling)全面提升模型能力, 達到 10B 參數級別的視覺語言模型的最強性能,在18個榜單任務中持平甚至超過8倍參數量的 Qwen-2.5-VL-72B。 同步開源基座模型 GLM-4.1V-9B-Base。我們采用的就是其免費版本:glm-4.1v-thinking-flash
。
有關Cangjie Magic的安裝和創建工程參考官方文檔即可:Install Cangjie Magic
在Cangjie Magic中調用質譜AI的視覺模型非常簡單,使用下面的程序即可。
package vlm
import magic.dsl.*
import magic.prelude.*
import magic.config.Config@agent[model: "zhipuai:glm-4.1v-thinking-flash"]
class VLMAssistant {@prompt( "以JSON格式給出所找到對象")
}main() {let agent = VLMAssistant()let result = agent.chat(AgentRequest("公交車的車次和車牌號", image: "https://i1.hdslb.com/bfs/archive/d01ed6e71e53e1aa2ab3676770647ced764bf196.jpg"))println(result.content)
}
加入工程目錄的名字是vlm,只要執行下面的命令就可以測試程序:
cjpm run --name vlm
交叉編譯Cangjie Magic到T536開發板
目前Cangjie Magic 主要是在x86、鴻蒙、蘋果電腦等幾個平臺進行開發和測試,缺少對嵌入式開發板的測試。本文主要討論AARCH64的Linux平臺,這個也是目前在嵌入式開發板中最多的平臺之一。
我們使用的是交叉編譯,雖然T536開發板的能力很強,本地編譯也可以,但是程序編寫還是電腦比較方便。構建倉頡語言的交叉編譯環境請參考我的上一篇博文。
對cjpm.toml文件的修改
如果是交叉編譯,需要在cjpm.toml中加入-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要修改,一個是CangjieMagic目錄下的,另一個是vlm目錄下的。
stdx庫的配置
Cangjie Magic是依賴stdx庫的,雖然在安裝的時候,安裝腳本會自動安裝本機的stdx庫,但是交叉編譯所需要的aarch64版本還需要手工下載。
訪問stdx庫的主頁,點擊右側的“發行版”,找到最新的版本,在其中現在aarch64的文件(例如cangjie-stdx-linux-aarch64-1.0.1.1.zip)。
?
在CangjieMagic\libs目錄下建立一個cangjie-stdx-linux-aarch64-1.0.1.1目錄,然后解壓下載的zip文件。
在CangjieMagic目錄下的cjpm.toml加入如下語句:
[target.aarch64-unknown-linux-gnu.bin-dependencies]path-option = ["./libs/cangjie-stdx-linux-aarch64-1.0.1.1/linux_aarch64_llvm/dynamic/stdx"]
拷貝libsecurec.so到cangjie的庫文件中
倉頡語言的庫文件里面不知道為什么少了一個動態庫libsecurec.so,沒有這個文件在前面我們交叉編譯的時候只好使用--static選項,不過交叉編譯Cangjie Magic的時候無法使用這個選項,所以需要將stdx中的libsecurec.so拷貝到D:\cangjie\runtime\lib\linux_aarch64_llvm目錄中。這點很重要,否則會產生錯誤。
開始交叉編譯
執行下面的語句就可以開始交叉編譯了:
cjpm build `--target aarch64-unknown-linux-gnu`
幾分鐘之后,整個工程就編譯完成了。
部署到開發板
拷貝所需要的庫文件
編譯后需要將canjie/runtime目錄下aarch64的所有so文件、CangjieMagic\libs\cangjie-stdx-linux-aarch64-1.0.1.1\linux_aarch64_llvm\dynamic\stdx下的所有so文件和vlm\target\aarch64-unknown-linux-gnu\release\magic目錄下的所有so文件都打包拷貝到開發板上的cangjielib目錄下。
然后使用下面的命令設置好所需要的庫文件路徑:
export LD_LIBRARY_PATH=./cangjielib可以看一下所有庫文件的大小:
root@ubuntu:~# du -sh cangjielib/
47M cangjielib/
所有庫文件的大小是47M字節,還是比較小的,當然有進一步裁減的余地。
安裝curl
Cangjie Magic默認是調用curl來執行大模型推理工作的,而開發板默認是沒有curl程序的,需要安裝程序。如果找不到該程序,我們的vlm程序會報告下面的錯誤:
2025-08-01T13:12:46.004227006Z ERROR VLMAssistant: ProcessException: Created process failed, errMessage: "No such file or directory".
An exception has occurred:
Exception: Fail to get chat model responseat magic.core.agent.AgentExecutionException::init(std.core::String)(/mnt/d/CangjieMagic/src/core/agent/agent_executor_exception.cj:8)at magic.agent_executor.react.ReactTask::handleStep(magic.agent_executor.react::ReactStep)(/mnt/d/CangjieMagic/src/agent_executor/react/react_task.cj:74)at magic.agent_executor.react.ReactTask::runOnce()(/mnt/d/CangjieMagic/src/agent_executor/react/react_task.cj:114)at magic.agent_executor.react.ReactExecutor::run(magic.core.agent::Agent, magic.core.agent::AgentRequest)(/mnt/d/CangjieMagic/src/agent_executor/react/react_executor.cj:25)at magic.agent.base.AbsAgent::chat(magic.core.agent::AgentRequest)(/mnt/d/CangjieMagic/src/agent/base/abs_agent.cj:37)at vlm.main()(/mnt/d/test/vlm/src/main.cj:18)
安裝curl程序很簡單,只需要執行下面命令:
apt update
apt install curl
如果不想安裝curl,還有一個辦法就是讓Cangjie Magic使用倉頡語言的http庫,需要在編譯時加上curl=false
選項。
運行程序
將vlm可執行文件拷貝到開發板上,并設置好可執行權限。
運行程序前還需要配置環境變量ZHIPU_API_KEY,設置其為質譜AI的API Key。
做好了所有準備工作就可以直接運行程序了,我們采用的測試圖片是這樣的。
程序執行結果:
root@ubuntu:~# ./vlm
{"busInfo": {"routeNumber": "26", "busId": "26-03", "licensePlate": "鄂B·5C805"}}
效果相當不錯!
結束語
從今天測試看,VLM 發展得非常快,可以部分替代 YOLO 和 OCR 的工作,我們可以在開發板上利用它進行拍攝的圖片的分析,從而可以得到更豐富的環境信息。
使用Cangjie Magic編寫大語言模型調用程序相當簡單,確實是一個人工智能利器。當然如果僅僅想完成大語言模型調用,也可以直接調用質譜AI提供的API接口,我們只所以費很大力氣完成Cangjie Magic的交叉編譯,是為了實現智能代理(AI Agent)。這個問題留待下次介紹。