仓颉三方库 Vibe Coding 尝试

9 min

记录一次 Vibe Coding 的完整实践过程,本次开发以 Claude Code 为主要工具(后文简称 CC),采用 Claude Sonnet 4 模型,同时使用了花费150元购买的200刀 Max 订阅额度(通过中转 API 实现)。

这不仅是一次 Vibe Coding 的尝试,也是结合仓颉这门新兴编程语言的实践。过程中还衍生出一个新想法:对于仓颉及领域特定语言(DSL)等新兴编程语言在大语言模型(LLM)中支持薄弱的问题,在语料和训练数据不足的阶段,是否存在折中的优化方案?这一问题暂先搁置,后文再展开探讨。

安装和使用 Claude Code

这部分操作较为简单,此处简要说明:

  1. 确保已安装 Node.js 18+ 环境,执行以下命令安装 Claude Code:

    npm install -g @anthropic-ai/claude-code
  2. 配置中转 API 和中转网址的环境变量:

    export ANTHROPIC_AUTH_TOKEN=sk-xxxx
    export ANTHROPIC_BASE_URL=https://xxxx

准备仓颉语料库

如前文所述,目前仓颉语言的资料相对匮乏,导致模型在专业领域的回答准确性较低。例如,向 CC 询问一个简单示例时,得到的代码存在语法错误:

CC 生成的 greet 函数中,默认值的设置不符合仓颉语法规范——在仓颉中,只有命名参数可设置默认值,且命名参数需在冒号前添加感叹号。因此,该代码无法通过编译,更无法配合仓颉工具链进行开发:

基于此,我在项目中集成了仓颉语料库,帮助大模型”即时学习”。具体而言,将仓颉语言的用户指南、标准库 API 及工具链文档统一放入 cangjie_corpus 目录,至此完成所有准备工作。

进入项目根目录后,直接执行 claude 命令启动 CLI 程序。若 API 和转发网址配置无误,即可开始对话。

CC 提供了一些预设命令(详细说明见官网),在输入框中输入斜杠即可调用。

首先介绍 /init 命令:在项目根目录生成 CLAUDE.md 文件(官方称为”记忆文件”),其内容会作为提示词的一部分在对话启动时加载,且后续会由 CC 自动更新。本次开发中,我在让 CC 完成了整体架构设计和学习仓颉语法后才执行该命令。

若需手动更新记忆文件以写入关键要求,可使用 /memory 命令。该命令支持设置两个记忆文件:

  • Project memory:对整个工程生效,用于记录团队共享的记忆
  • User memory:属于个人的差异化记忆(例如我设置的”用中文交流”)

两者存储位置不同(另有第三个记忆文件 CLAUDE.local.md,用法可参考官网)。

规划先行

任何开发前都需对项目进行完整规划。幸运的是,Claude 可充当系统架构师角色。此时可按快捷键 shift + tab 切换至 plan mode(规划模式)——在此模式下,CC 会与你交流,但在获得明确许可前不会开始编码,非常适合制定完整设计方案。另一模式为 auto accept mode(自动接受模式),该模式下 CC 拥有更高权限,可自由修改文件以快速编写代码(无需每次等待确认),但删除文件等危险操作仍需用户许可。

进入 plan mode 后,我给出的第一条指令如下:

## 任务
使用仓颉编程语言开发一个 jsonrpc 2.0 的代码库
## 仓颉语言文档
仓颉语言的相关文档在 @/cangjie_corpus 目录下
## 任务流程
1. 阅读仓颉编程语言的文档,总结文档内容
2. 设计一个 jsonrpc 2.0 协议库的整体架构
3. 设计完成后再开始编码  

等待 CC 思考完毕,会得到一份架构设计文档。可通过多轮对话进一步打磨方案,确认后保存文档并执行 /init 命令。

开始编码

架构设计满意后,你可以愉快地对 CC 说:“现在可以开始进行具体代码的开发了!”,(这一刻我感受到了作为一名资本家的快感~),再次按 shift + tab 切换至自动接受模式,可节省大量审核时间。

开发过程中仍需人工监督:若遇到 tokens 上限或 CC 出现”幻觉”,可使用 /compact/clear 命令纠正方向。其中,compact 命令会总结当前上下文以减少 tokens 占用,clear 命令会直接清除历史对话,但重要信息仍会保存在记忆文件中。

经过多轮对话后,代码基本完成,但由于 CC 对仓颉语言的掌握有限,代码质量可能不足。此时可让 CC 进行编译,直至通过所有检查。

如前文所述,CC 学习仓颉文档后,会将 cjpm buildcjpm test 等关键命令记录到记忆文件中,因此它会主动调用 cjpm build 进行编译,并根据报错修改代码。编译器报错可解决约60%的语法错误,但多次尝试未果时,CC 可能会放弃并注释报错代码。此时需人工监督,告知其具体参考文档或直接提供正确语法。

最终目标是完成完整的单元测试和性能基准测试。同样让 CC 先学习相关写法,再生成代码,反复执行”规划→开发→运行→修改”的迭代循环,直至达到预期效果。

验收成果

耗时一天,消耗30万 tokens 额度后,我完成了 jsonrpc4cj 代码库的开发,并使用 CC 辅助完成了 Git 上传等基础操作。

GitCode 仓库地址:https://gitcode.com/oortling/jsonrpc4cj

总结

本次 Vibe Coding 尝试是一次完整体验,我不仅掌握了更多 CC 使用技巧,也对项目整体设计有了更深思考。近期 CC 新增了 SubAgent 功能,支持定义多个代理角色,可组建包含产品、开发、测试的”专家团队”,实现真正意义上的”一人公司”,后续将继续探索。

但还是需要承认,现阶段的 Vibe Coding 尚不能完全替代程序员群体,更适合小项目的原型验证,且需要领域经验丰富的人类进行强化和监督。

To be Continue

回到前文关于”新兴编程语言 LLM 支持薄弱”的问题,整个过程中的痛点是:学习仓颉语言导致上下文过于冗余,以及在不同的会话之间会丢失某些记忆。针对这个问题,我也和 CC 探讨了 RAG(检索增强生成)和 MCP(模型协作处理)两种解决方案,目前已完成 MCP 模式的原型验证:

PS:本人对大模型领域的认知有限,文中若有不当之处,欢迎指正,我会虚心学习。