
梅科尔工作室Cangjie Magic探索:土壤医生智能体助力科学种田 原创
作者:平运宏
团队:梅科尔工作室
CangjieMagic应用
SDK版本:Cangjie-0.53.18-windows_x64
API包配置:https://gitcode.com/Cangjie-TPC/CangjieMagic
参考连接:https://cangjie-lang.cn/docs
前言:
本文将带领读者探索 Cangjie Magic 的开发环境配置、智能体构建方法,并通过土壤医生智能体这一实际应用案例,展示其在农业领域的强大潜力。
CangjieMagic智能体开发
(1)项目工程创建
产物类型选择executable即可(默认)
选择仓颉SDK包安装的路径
点击创建项目,完成仓颉项目工程创建
(2)环境配置
进行开发之前,首先需要配置CangjieMagic依赖,需要修改新建项目的 cjpm.toml
// 方式一:直接配置 git 依赖(需要git版本管理工具)
// 推荐:配置git依赖包SDK可以和官方的更新同步,新版本无需再从新配置
[dependencies]
magic = { git = "https://gitcode.com/Cangjie-TPC/CangjieMagic.git", branch = "dev" }
// 方式二:下载本项目代码并配置本地源码依赖
[dependencies]
magic = { path = "<local-path-to-this-project>" }
(3)智能体构建
使用使用宏 @agent 修饰 class 类型来定义一个 Agent 类型
基本框架构建:
// 配置导入
import magic.dsl.*
import magic.prelude.*
import magic.config.Config
...
@agent[
// 配置使用到的 LLM 模型服务;默认使用 gpt-4o;
model: "siliconflow:deepseek-ai/DeepSeek-V3"
// 规划模式;默认为 react;
executor: "react"
// 配置接入的 MCP 服务器;
// mcp: [
// { command: "cjpm", args: ["run", "--skip-build", "--name", "CangJie_Server.demo_server"] }
// ]
]
class soilDoctor {
@prompt(
// 提示词配置
""
)
}
...
大模型接入
配置使用到的 LLM 模型服务:模型配置使用格式 < service > : < model >,当前CangjieMagic支持如下的模型服务商。我们项目使用SiliconFlow的API接口,大家可以根据实际情况选择。
...
main() {
// 配置大模型与API密钥,
// 大模型的参数根据选择模型的不同需要进行调整,详细配置可以参考上方的官方支持接口表格
Config.env["SILICONFLOW_API_KEY"] = "*********"
...
return
}
(4)智能体调用与运行
在完成基础配置之后,我们需要在mian()框架下进行智能体的调用,并预设输入内容
main() {
Config.env["SILICONFLOW_API_KEY"] = "<替换为个人的AIP_Y>"
let age = demoAgent()
let result = age.chat("你好")
println(result)
return
}
完成以上步骤后,我们就可以在终端输入命令cjpm run --name <package.name>运行项目,最终可以在终端看到我们的智能体输出。
至此完成CangjieMagic开发的环境配置与第一个智能体构建。
多项目工程协同Agent开发——土壤医生智能体
背景:目前大多数农民都是经验性施肥,这种粗放模式易导致化肥利用率低下和过量施用问题。测土配方施肥技术,通过"实地取样-化学检测-人工分析"环节实现精准配肥。但人工分析依赖于个人知识和经验积累,存在门槛、效率瓶颈。本项目基于全国测土配肥技术体系,构建工作流配肥智能体,辅助农技人员进行配肥判断,降低技术门槛,助力测土配肥技术推广。
多智能体协同开发
CangjieMagic多 Agent 可以被组织为组以进行高效协作,分为线性协同、主从协同、自由协同三类,本项目基于CangjieMagic线性协同多智能体协作的方式,构建了土壤医生智能体,优化传统分析流程,为农民提供施肥建议,提高肥料利用率。
项目定义了soilDoctor、soilAssistant两个智能体,分别负责整体输出风格的确定与用户提供数据的分析与建议输出
soilDoctor智能体定义整体输出风格,考虑目的是为用户提供施肥建议,用户主要面向农民与农技人员;定义使输出内容通俗易懂
...
@agent[
model: "siliconflow:deepseek-ai/DeepSeek-V3",
executor: "react"
]
class soilDoctor {
@prompt(
"你是一位专业的土壤健康分析专家,具有丰富的农业知识和经验。"
"请用通俗易懂的语言给出建议,确保农民能够理解和执行。"
)
}
...
soilAssistant智能体主要进行用户输入数据与具体要求进行详细分析,输出分析报告
...
@agent[
model: "siliconflow:deepseek-ai/DeepSeek-V3",
executor: "react"
// tool : [soilCom]
]
class soilAssistant {
@prompt(
"你是一位专业的农业技术顾问,负责具体的施肥方案制定。"
"你需要:"
...
"请确保建议具有可操作性,并解释建议的科学依据。"
)
}
...
项目调用仓颉API提供的std.console包实现用户输入,并将输入的而数据进行读取,准备进行存储到变量,预备输入给智能体。
...
Console.stdOut.write("请输入一季作物的总吸收量(100): ")
var total_crop_absorption = Console.stdIn.readln() // 输入
var inPut1 = total_crop_absorption.getOrThrow()
Console.stdOut.write("请输入土壤供应量(20):")
var soil_supply = Console.stdIn.readln() // 输入
var inPut2 = soil_supply.getOrThrow()
...
项目通过使用线性 协同的多智能体协同方式,将两个不同功能的智能体联合,共同实现土壤施肥推荐建议的功能
// Agent 按顺序操作,每个 Agent 接收前一个 Agent 的消息(包括结果和任务),进行处理,然后将结果传递给下一个 Agent 。
let linearGroup: LinearGroup = ag1 |> ag2 |> ag3
...
let group = soilDoctor() |> soilAssistant()
let result = group.chat(AgentRequest("一季作物的总吸收量:${inPut1},土壤供应量:${inPut2}"))
...
项目运行最终输出:
后记
本文完成了仓颉开发环境的配置,运行了第一个仓颉程序,并基于CangjieMagic完成了第一个智能体的构建。
原生鸿蒙,仓颉造字:下一代全场景智能化编程语言,为鸿蒙生态而生,开启高效与安全的开发新纪元。期待未来它持续进化、生态繁荣,吸引更多开发者共同创新,推动智能体开发技术迈向新高度
