在这里插入图片描述

从第一行代码到 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 在真实的软件工程任务中协同工作,而不是各自为战。

它的核心设计包含四个机制:

  1. Spec Driven Development:Agent 的行为以结构化规格(Spec)描述,规格可以被验证、追踪和版本化管理。
  2. 状态机工作流:多 Agent 协作被建模为状态机,每个状态对应一个明确的工程阶段(分析、设计、编码、审查),状态之间的转移由 Supervisor 控制。
  3. Supervisor 路由:一个中心调度器根据当前任务类型和 Agent 能力表,把子任务路由到最合适的 Agent 实例。
  4. 多 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 生成仓颉代码片段并解释每行的作用。
  • 工具链集成:直接调用 cjccjtest 等命令,把编译错误和测试失败反馈给 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 智能提示的好处。

如果你是仓颉新手,建议按以下顺序探索:

  1. 语言基础:通过 CangjieSkills 创建几个练习项目,熟悉类型系统、模式匹配和并发模型。
  2. AI 开发入门:阅读 CangjieMagic 文档,理解 Agent DSL 的语法结构和运行时机制。
  3. 知识检索实践:搭建本地 CangjieCorpus 索引,体验 RAG 增强的代码问答。
  4. 多 Agent 协作:用 ACEHarness 设计一个简单的多 Agent 工作流,比如"需求分析 → 代码生成 → 自动测试"。
  5. 日常辅助:把 magic-cli 集成到开发终端,用它辅助编码、查文档和诊断编译错误。

仓颉的 AI 生态仍在快速演进中,新工具和新模式会不断加入。保持对官方仓库和社区讨论的关注,是持续跟进的最佳方式。

Logo

一站式 AI 云服务平台

更多推荐