仓颉(Cangjie)开发入门

从第一行代码到 AI 智能体开发:一套完整的仓颉语言学习路径与 AI 创新项目实践指南
认识仓颉
仓颉(Cangjie)是一款面向全场景智能化应用开发的现代编程语言,主打原生智能化、强类型安全和高性能运行。它内建对 AI 开发范式的语言级支持,包括 AI 泛型、Agent DSL、向量化原语等特性,让开发者可以用同一套语言同时编写传统业务逻辑和智能体行为。
与其他语言相比,仓颉的设计哲学可以概括为三点:安全优先(默认不可变、空安全、内存安全)、智能原生(语法层面融入 AI 开发能力)、性能可预期(编译期优化与运行时性能剖面透明)。如果你已经熟悉 TypeScript、Rust 或 Swift,上手仓颉的曲线会非常平缓。
为什么现在学习仓颉
仓颉并非只是"又一种新语言"。它的核心差异在于把 AI 开发能力下沉到语言层,而非依赖外部框架补丁。这意味着 Agent 的行为描述、工具调用、RAG 检索等能力都有对应的语法结构和类型约束,编译器可以在构建阶段就检查智能体逻辑的正确性。
环境准备与 Hello World
安装工具链
仓颉目前提供 Linux 和 macOS 的官方编译器包,Windows 开发者可以通过 WSL2 使用。安装完成后,验证环境:
$ cjc --version
cjc 1.2.0 (release)
同时建议安装仓颉语言服务器 cangjie-lsp,以在 VS Code 或 TRAE 中获得语法高亮、类型提示和跳转定义的支持。
第一个程序
创建文件 hello.cj:
main(): Int64 {
println("Hello, Cangjie!")
return 0
}
编译并运行:
$ cjc hello.cj -o hello
$ ./hello
Hello, Cangjie!
仓颉源文件使用 .cj 后缀。入口函数 main 的返回类型为 Int64,函数体不需要大括号包裹(类似 Python 的缩进规则,但可选大括号用于多行复合表达式)。println 是标准库中的控制台输出函数,支持插值字符串。
核心语法速览
这一节不是语法手册,而是帮助有经验的开发者快速建立"仓颉代码长什么样"的直觉。
类型系统与变量
// 显式类型声明
let name: String = "Cangjie"
// 类型推导
let version = 1.2 // 推导为 Float64
let flags = [true, false] // 推导为 Array<Bool>
// 可变变量使用 var
var counter = 0
counter += 1
// 空安全:? 表示可空类型
let maybe: String? = null
let definite = maybe ?? "default"
函数与结构体
// 函数定义
func greet(user: String): String {
return "Hello, \(user)"
}
// 结构体 + 方法
struct User {
id: Int64
name: String
}
extend User {
func display(): String {
return "User(\(this.id), \(this.name))"
}
}
模式匹配
模式匹配是仓颉处理多分支逻辑的主要方式,比传统的 if-else 链更严谨:
match result {
case Ok(value) => println("Success: \(value)")
case Err(msg) => println("Error: \(msg)")
}
并发模型
仓颉采用 协程(Coroutine) + 通道(Channel) 的并发模型,语法类似 Go,但增加了类型安全:
func worker(id: Int64, ch: Channel<String>): Unit {
let msg = ch.recv()
println("Worker \(id) got: \(msg)")
}
main(): Int64 {
let ch = Channel<String>(bufferSize: 10)
spawn worker(1, ch)
ch.send("task")
return 0
}
AI 原生特性
仓颉最具辨识度的语法特性是 agent 块与 @tool 注解,它们允许你在语言层面描述智能体的行为、工具和推理流程:
@agent
struct MathHelper {
@tool
func add(a: Int64, b: Int64): Int64 {
return a + b
}
}
这个结构体在编译期会被元数据系统识别,运行时可以通过 CangjieMagic 框架直接暴露给 LLM 作为可调用的工具集。
仓颉 AI 创新项目生态
围绕仓颉语言,社区已经构建了一套覆盖"开发工具 - 知识基座 - Agent 框架 - 示例应用"的完整 AI 生态。下图展示了各项目在全栈中的位置与协作关系:
开发层
├── CangjieSkills ───────┐
└── magic-cli ───────────┤
│ 提供语言级 Skills
▼
知识层 Agent 层
├── CangjieCorpus ───────►├── CangjieMagic ◄── Agent DSL & 运行时
│ (注入 RAG 语料) │└── ACEHarness ───► 编排多 Agent
│ │ │
└─────────────────────────┘ │
▼
应用层
├── MagicExplorer
└── CangjieMagic-Examples
这个生态的设计理念是分层解耦、逐级组装。最底层是开发工具与知识基座,中间是 Agent 运行时与协作框架,上层是可直接运行的示例应用。开发者可以根据自己的需求选择从哪一层切入。
六大项目详解
| 项目 | 标签 | 简介 |
|---|---|---|
| CangjieSkills | 开发工具 | 面向 AI 开发工具的仓颉程序开发 Skills,支持从零创建仓颉项目并完成配置、开发、构建、运行和单元测试等流程。 |
| ACEHarness | Multi-Agent | 面向工程任务的本地 AI Multi-Agent 协作平台,支持 Spec Driven Development、状态机工作流、Supervisor 路由和多 Agent 协作。 |
| CangjieCorpus | RAG 基座 | 面向 RAG 技术的仓颉语言知识基座,整合官方开发指南、API 文档、典型代码示例和语法规范等语料资源。 |
| CangjieMagic | Agent 框架 | 基于仓颉原生 Agent DSL 与运行时 API 的 LLM Agent 应用开发框架,支持工具调用、模型接入、RAG、多 Agent 协作和 MCP 集成。 |
| magic-cli | CLI 工具 | 基于 Cangjie Agent DSL 和 CangjieMagic 构建的 AI 命令行助手,支持对话式开发、仓颉工具链集成、文档检索和 MCP 扩展。 |
| MagicExplorer | 示例应用 | 基于 CangjieMagic 的示例应用,可用于探索 Agent 开发与多 Agent 工程协作场景。 |
CangjieSkills:仓颉开发的 AI 助手
CangjieSkills 是一套面向仓颉开发的结构化能力集合,它将传统的 IDE 功能(项目创建、构建、测试)与 AI 辅助能力(代码生成、错误诊断、重构建议)融合在统一的接口下。
对于入门开发者,CangjieSkills 最大的价值在于降低环境配置的门槛。你不需要手动编辑 cjc.config 或管理复杂的模块路径,只需通过自然语言描述需求,Skills 会自动生成合理的项目结构和编译配置:
# 通过 CangjieSkills 创建新项目
> create project "web-api" with http server and json support
# 生成的目录结构
web-api/
├── src/
│ ├── main.cj
│ └── routes/
├── tests/
├── cjc.config
└── package.cj
CangjieSkills 也支持增量式开发。当你需要为现有项目添加数据库访问层时,它可以自动生成仓颉的结构体定义、连接池配置和基础的 CRUD 模板,开发者只需在此基础上填充业务逻辑。
ACEHarness:多 Agent 工程协作平台
ACEHarness 解决的是一个更复杂的问题:如何让多个 AI Agent 在真实的软件工程任务中协同工作,而不是各自为战。
它的核心设计包含四个机制:
- Spec Driven Development:Agent 的行为以结构化规格(Spec)描述,规格可以被验证、追踪和版本化管理。
- 状态机工作流:多 Agent 协作被建模为状态机,每个状态对应一个明确的工程阶段(分析、设计、编码、审查),状态之间的转移由 Supervisor 控制。
- Supervisor 路由:一个中心调度器根据当前任务类型和 Agent 能力表,把子任务路由到最合适的 Agent 实例。
- 多 Agent 协作协议:Agent 之间通过标准化的消息格式交换上下文,避免信息丢失或意图扭曲。
在实际使用中,你可以用 ACEHarness 搭建一个"代码评审委员会":一个 Agent 负责静态分析,一个负责风格检查,一个负责安全审计,Supervisor 汇总它们的输出并生成统一的评审报告。
CangjieCorpus:仓颉语言知识基座
大语言模型在回答仓颉相关问题时,往往因为训练语料不足而产生幻觉。CangjieCorpus 的目标是为 RAG(Retrieval-Augmented Generation)系统提供高质量、结构化的仓颉语言知识来源。
它整合了三类语料:
- 官方文档:开发指南、语言规范、标准库 API 文档,保持与官方版本同步更新。
- 典型代码示例:经过验证的惯用法(idioms)和最佳实践,覆盖常见开发场景。
- 社区问答:从论坛和 Issue 中提取的高频问题与解答,带有上下文和版本标签。
CangjieCorpus 的语料经过分块、Embedding 和索引,可以被 CangjieMagic 或 magic-cli 直接引用。当你向 magic-cli 提问"仓颉中如何实现泛型约束"时,它会先从 CangjieCorpus 检索相关段落,再基于这些上下文生成答案,大幅降低幻觉概率。
CangjieMagic:Agent 应用开发框架
CangjieMagic 是整个生态的核心引擎。它基于仓颉原生的 Agent DSL 和运行时 API,为开发者提供了一套完整的 LLM Agent 开发框架。
框架的能力矩阵覆盖了 Agent 开发的五个关键环节:
| 能力 | 说明 | 对应语法/API |
|---|---|---|
| 模型接入 | 支持 OpenAI、Claude、本地模型等多种后端 | LLMBackend 协议 |
| 工具调用 | 将仓颉函数注册为 LLM 可调用的工具 | @tool 注解 |
| RAG 集成 | 接入 CangjieCorpus 或自定义知识库 | VectorStore 接口 |
| 多 Agent 协作 | Agent 间消息传递与任务委派 | AgentGroup 编排 |
| MCP 集成 | 支持 Model Context Protocol 标准 | MCPClient 模块 |
CangjieMagic 的核心理念是类型安全贯穿 Agent 全生命周期。工具函数的参数类型、Agent 的状态转换、LLM 输出的解析结果,全部在编译期受到仓颉类型系统的约束。这意味着很多在传统 Python Agent 框架中只能在运行时发现的错误,在仓颉中会被编译器提前拦截。
magic-cli:AI 命令行助手
magic-cli 是 CangjieMagic 的一个终端封装,它将框架能力以对话式交互的形式暴露给开发者。你可以把它理解为"专门懂仓颉的 ChatGPT + Shell 助手"。
magic-cli 的典型使用场景包括:
- 对话式开发:描述需求,magic-cli 生成仓颉代码片段并解释每行的作用。
- 工具链集成:直接调用
cjc、cjtest等命令,把编译错误和测试失败反馈给 LLM 进行诊断。 - 文档检索:基于 CangjieCorpus 快速定位官方文档中的相关内容。
- MCP 扩展:通过 Model Context Protocol 接入外部工具(如数据库、API 测试工具),扩展 Agent 的能力边界。
$ magic-cli
> 帮我写一个仓颉函数,读取 JSON 文件并解析为 User 数组
# magic-cli 会生成代码、解释结构,并提示错误处理建议
MagicExplorer:Agent 开发探索器
MagicExplorer 是一个基于 CangjieMagic 构建的示例应用,它的目的不是解决某个具体业务问题,而是作为Agent 开发模式的参考实现。
通过阅读 MagicExplorer 的源码,你可以学习到:
- 如何用 Agent DSL 定义一个具备记忆和规划能力的智能体
- 如何在多 Agent 场景下设计消息协议和状态同步机制
- 如何将 RAG 检索结果有效地注入到 Agent 的推理上下文中
- 如何通过 MCP 让 Agent 调用外部 API 和本地工具
MagicExplorer 也包含了一组预置的交互场景,开发者可以直接运行并观察 Agent 的决策过程,这对理解"AI 到底是怎么思考"非常有帮助。
实战:构建你的第一个 Agent
这一节带你用 CangjieMagic 写一个最简单的 Agent:一个能查询天气并给出穿衣建议的助手。虽然功能简单,但它覆盖了工具定义、LLM 调用和响应解析的完整链路。
步骤一:定义工具
// weather_tools.cj
import std.net.http.*
import std.json.*
@tool
func getWeather(city: String): String {
let url = "https://api.weather.example/v1/current?city=\(city)"
let resp = HttpClient.get(url)
return resp.body
}
步骤二:定义 Agent
// advisor.cj
import cangjie.magic.*
@agent
struct WeatherAdvisor {
let llm: LLMBackend
let tools: [Tool] = [getWeather]
func ask(query: String): String {
let context = AgentContext {
query: query,
tools: this.tools
}
return this.llm.run(context)
}
}
步骤三:运行
// main.cj
main(): Int64 {
let advisor = WeatherAdvisor {
llm: OpenAIBackend(model: "gpt-4o")
}
let answer = advisor.ask("北京今天穿什么合适?")
println(answer)
return 0
}
编译运行后,Agent 会自动识别查询中涉及的城市信息,调用 getWeather 工具获取数据,然后结合 LLM 的推理能力生成穿衣建议。整个过程的类型安全由仓颉编译器保障:如果 getWeather 的签名发生变化,所有引用它的 Agent 定义都会在编译期报错。
下一步:完成这个示例后,建议你阅读 CangjieMagic-Examples 仓库中的进阶案例,学习如何为 Agent 添加记忆(Memory)、规划(Planning)和多轮对话(Multi-turn)能力。
总结与下一步
仓颉语言及其 AI 生态为开发者提供了一条从传统编程到智能体开发的无缝路径。它的独特之处在于:AI 能力不是附加的框架,而是语言本身的一部分。这种设计让 Agent 的行为描述、工具调用和知识检索都能享受到编译期类型检查和 IDE 智能提示的好处。
如果你是仓颉新手,建议按以下顺序探索:
- 语言基础:通过 CangjieSkills 创建几个练习项目,熟悉类型系统、模式匹配和并发模型。
- AI 开发入门:阅读 CangjieMagic 文档,理解 Agent DSL 的语法结构和运行时机制。
- 知识检索实践:搭建本地 CangjieCorpus 索引,体验 RAG 增强的代码问答。
- 多 Agent 协作:用 ACEHarness 设计一个简单的多 Agent 工作流,比如"需求分析 → 代码生成 → 自动测试"。
- 日常辅助:把 magic-cli 集成到开发终端,用它辅助编码、查文档和诊断编译错误。
仓颉的 AI 生态仍在快速演进中,新工具和新模式会不断加入。保持对官方仓库和社区讨论的关注,是持续跟进的最佳方式。
更多推荐




所有评论(0)