Cangjie Code Assistant
本方案深度整合 Cangjie Magic 框架 的原生 RAG 技术能力,通过对仓颉语言官方文档、语法规则、典型代码示例等核心语料的系统性梳理与结构化处理,构建起专属知识图谱。在此基础上,将本地知识库与高性能大语言模型进行深度耦合,成功实现仓颉编程语言编码助手的本地化部署,为鸿蒙生态开发者提供了具备精准语义理解、实时编码辅助、多场景适配能力的智能开发工具。
1 安装仓颉环境
1.1 仓颉SDK下载
前往仓颉官网,下载对应环境仓颉SDK,版本:0.53.18
1.2 安装
根据官网的指导文档,进行对应版本的安装与环境配置。
2 编译运行
2.1 配置代码
本项目依赖 Cangjie Magic 框架作为运行基础,需要自己手动解压 /third_party路径下的CangjieMagic.tar文件。
2.2 配置模型和 key
修改 src/config.cj 文件中的相关配置。
2.2.1 模型配置
将 config.cj 中的 MODEL 和 Config.env 按照如下规则修改:
模型配置使用格式 <service>:<model>,当前支持如下的模型服务商。
| 服务商名称 | 示例 | 配置说明 | 服务 URL 配置 |
|---|---|---|---|
| 阿里云 | dashscope:qwen-plus |
DASHSCOPE_API_KEY |
DASHSCOPE_BASE_URL,默认 https://dashscope.aliyuncs.com/compatible-mode/v1 |
| DeepSeek | deepseek:deepseek-chat |
DEEPSEEK_API_KEY |
DEEPSEEK_BASE_URL,默认 https://api.deepseek.com |
| 火山方舟 | ark:doubao-lite-4k |
ARK_API_KEY |
ARK_BASE_URL,默认 https://ark.cn-beijing.volces.com/api/v3 |
| Llama.cpp | llamacpp |
无需配置模型名称和 API Key | LLAMACPP_BASE_URl,默认 http://localhost:8080 |
| Ollama | ollama:phi-3 |
无需配置 API Key | OLLAMA_BASE_URl,默认 http://localhost:11434 |
| OpenAI | openai:gpt-4o |
OPENAI_API_KEY |
OPENAI_BASE_URL,默认 https://api.openai.com/v1 |
| SiliconFlow | siliconflow:deepseek-ai/DeepSeek-V3 |
SILICONFLOW_API_KEY |
SILICONFLOW_BASE_URL,默认 https://api.siliconflow.cn/v1 |
| 智谱 AI | zhipuai:glm-4 |
ZHIPUAI_API_KEY |
ZHIPUAI_BASE_URL,默认 https://open.bigmodel.cn/api/paas/v4 |
火山方舟模型示例:
public let MODEL = "ark:DeepSeek-V3"
public func buildAgent(chatView: ChatView): Agent {
Config.env['ARK_API_KEY'] = '<your api key>'
...
}
DeepSeek 模型示例:
public let MODEL = "deepseek:deepseek-chat"
public func buildAgent(chatView: ChatView): Agent {
Config.env['DEEPSEEK_API_KEY'] = '<your api key>'
...
}
2.2.2 配置 Embedding 模型
将 config.cj 中,buildEmbeddingModel() 方法中的ModelConfig里的内容进行修改:
- service: String, 服务名称,如"openai"或"ollama",根据自己的 embedding 模型服务方选择。
- kind: String, 模型类型,共
chat、embedding、image三种模式,此处我们选择embedding。 - name: String, 模型名称,如
gpt-4o、text-embedding-ada-002、bge-m3:567m等。 - apiKey: String, API密钥,默认为空字符串。
- baseURL: String, 基础URL,默认为空字符串。
本地 Ollama Embedding 模型示例:
ModelConfig(service:"ollama", kind:"embedding", name:"bge-m3:567m", baseURL:"http://127.0.0.1:11434")
2.3 依赖
2.3.1 Faiss
本项目选取 Faiss 作为向量数据库工具。需要注意的是,Faiss 依赖于平台特定的共享库文件,需根据运行环境进行适配:
- Windows 环境:需部署 faiss.dll 与 faiss_c.dll 动态链接库
- Linux X86 环境:需部署 libfaiss.so 与 libfaiss_c.so 共享对象文件
以上两种环境所需的文件已随代码提供,无需再构建,目前已打包放入third_party/CangjieMagic.tar/ffi_libs中。
若需要再其他环境中运行,请参考 Faiss 官方的指导文档编译出对应的文件,并放入third_party/CangjieMagic/ffi_libs中。
2.3.2 切块后的语料文件
当前项目已对同步开源的仓颉语料库完成了语料切块,文件路径: resources/cangjiedocSummary_w_exampleCode_w_docURL.jsonl。
2.4 运行
2.4.1 构建本地化向量数据库
首次构建,在命令行中输入 cjpm run --name cjca --run-args "--build",项目将根据 resources 下的语料文件构建对应的向量数据库。由于数据较多,本次构建将花费较长的时间。
此步骤需构建一次,后续若语料文件无变化,无需重复构建。如需更换其他语料文件,则修改 src/main.cj 中的 filePath 即可。
2.4.2 查询问题
在命令行中输入 cjpm run --name cjca --run-args "--query xxxxxx",其中 xxxxxx 为要进行的提问。
Linux X86 运行示例:
cjpm run --name cjca --run-args "--query 仓颉中的 Argopt 方法怎么使用?"
需要注意的是,目前仅 Linux X86 环境支持中文提问。Windows 平台由于未知原因暂无法使用中文提问,进可用英文提问,但可以要求模型使用中文回答。目前正在定位问题原因,后续会持续跟进并修复
Windows 运行示例:
cjpm run --name cjca --run-args "--query How to use Argopt in cangjie? answer me in Chinese."
3 仓颉介绍
3.1 仓颉语言
仓颉编程语言是一款面向全场景智能的新一代编程语言,主打原生智能化、天生全场景、高性能、强安全。主要应用于鸿蒙原生应用及服务应用等场景中,为开发者提供良好的编程体验。 详细的开发指南可以参见官网: 仓颉编程语言开发指南
3.2 仓颉 Magic 框架
基于仓颉编程语言构建的 LLM Agent 开发框架,其主要特点包括:Agent DSL、支持 MCP 协议,支持模块化调用,支持任务智能规划。 仓颉 Magic 开发指南
欢迎加入 Cangjie Magic 开发者讨论者群组,一起交流碰撞创意想法,构建最具创意的Agent应用!