一、概述
1. 案例介绍
鸿蒙(HarmonyOS)是华为开发的面向万物互联时代的分布式操作系统,支持手机、平板、智能穿戴等全场景设备,实现硬件互助、资源共享。该系统基于组件化设计,具备内核层自主可控、一次开发多端部署等特性。
MaaS (即 ModelArts Studio大模型即服务平台)是华为云面向AI开发者推出的一站式大模型开发平台,支持开发者一键体验大模型能力,快速构建大模型应用。MaaS平台提供大模型训练、推理、部署、管理、监控等全生命周期管理能力,帮助开发者快速构建大模型应用,加速AI开发。
ModelArts Studio大模型即服务平台(MaaS)的应用场景:
-
业界主流开源大模型覆盖全
MaaS集成了业界主流开源大模型,含Llama、Baichuan、Yi、Qwen模型系列,所有的模型均基于昇腾AI云服务进行全面适配和优化,使得精度和性能显著提升。开发者无需从零开始构建模型,只需选择合适的预训练模型进行微调或直接应用,减轻模型集成的负担。 -
零代码、免配置、免调优模型开发
平台结合与100+客户适配、调优开源大模型的行业实践经验,沉淀了大量适配昇腾,和调优推理参数的最佳实践。通过为客户提供一键式训练、自动超参调优等能力,和高度自动化的参数配置机制,使得模型优化过程不再依赖于手动尝试,显著缩短了从模型开发到部署的周期,确保了模型在各类应用场景下的高性能表现,让客户能够更加聚焦于业务逻辑与创新应用的设计。 -
资源易获取,按需收费,按需扩缩,支撑故障快速恢复与断点续训
企业在具体使用大模型接入企业应用系统的时候,不仅要考虑模型体验情况,还需要考虑模型具体的精度效果,和实际应用成本。
MaaS提供灵活的模型开发能力,同时基于昇腾云的算力底座能力,提供了若干保障客户商业应用的关键能力。
保障客户系统应用大模型的成本效率,按需收费,按需扩缩的灵活成本效益资源配置方案,有效避免了资源闲置与浪费,降低了进入AI领域的门槛。
架构强调高可用性,多数据中心部署确保数据与任务备份,即使遭遇故障,也能无缝切换至备用系统,维持模型训练不中断,保护长期项目免受时间与资源损耗,确保进展与收益。 -
大模型应用开发,帮助开发者快速构建智能Agents
在企业中,项目级复杂任务通常需要理解任务并拆解成多个问题再进行决策,然后调用多个子系统去执行。MaaS基于多个优质昇腾云开源大模型,提供优质Prompt模板,让大模型准确理解业务意图,分解复杂任务,沉淀出丰富的多个智能Agent,帮助企业快速智能构建和部署大模型应用。
2. 适用对象
- 企业
- 个人开发者
- 高校学生
3. 案例时间
本案例总时长预计60分钟。
4. 案例流程
说明:
- 用户进入开发者空间,在MaaS平台上领取模型;
- 用户在本地安装DevEco Studio开发工具;
- 使用DevEco Studio开发工具编写代码,调用模型API接口;
5. 资源总览
本案例预计花费0元。
| 资源名称 | 规格 | 单价(元) | 时长(分钟) |
|---|---|---|---|
| 开发者空间—云主机 | 4vCPUs | 8GB | ARM | Ubuntu | 免费 | 60 |
| ModelArts Studio | 无 | 免费 | 60 |
| DevEco Studio | DevEco Studio 5.0.3 Release | 免费 | 60 |
| Local Emulator | HarmonyOS 5.0.3 | 免费 | 60 |
二、资源与开发环境准备
1. 开发者空间配置
面向广大开发者群体,华为开发者空间提供一个随时访问的“开发桌面云主机”、丰富的“预配置工具集合”和灵活使用的“场景化资源池”,开发者开箱即用,快速体验华为根技术和资源。
2. 领取大模型服务Tokens
参考案例《华为云MaaS大模型服务免费Tokens领取使用指导》 的“二、免费领取”章节,领取DeepSeek-V3-32K(NEW)模型Tokens。记录API地址和API Key留作后面步骤使用。
三、创建鸿蒙项目,调用API接口
1. 安装开发工具、创建本地模拟器
下载DevEco Studio,选择DevEco Studio 5.0.3 Release版本:
https://developer.huawei.com/consumer/cn/download/deveco-studio
安装DevEco Studio:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-software-install
创建模拟器:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-emulator-create
2. 创建HarmonyOS NEXT项目
通过如下两种方式,打开工程创建向导界面:
- 如果当前未打开任何工程,可以在DevEco Studio的欢迎页,选择Create Project开始创建一个新工程。
- 如果已经打开了工程,可以在菜单栏选择File > New > Create Project来创建一个新工程。
选择创建Application,再选择需要的Ability工程模板,然后单击Next。
在工程配置页面,需要根据向导配置工程的基本信息。
点击finish,等待项目同步完成。
添加网络权限:
在entry->src->main->module.json5下,添加网络权限:
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
}
],
3. 编写代码调用API接口
使用HTTP发起请求分为:一般数据请求和流式传输请求。
发起HTTP一般数据请求:
- 从@kit.NetworkKit中导入http命名空间。
- 调用createHttp()方法,创建一个HttpRequest对象。
- 调用该对象的on()方法,订阅http响应头事件,此接口会比request请求先返回。可以根据业务需要订阅此消息。
- 调用该对象的request()方法,传入http请求的url地址和可选参数,发起网络请求。
- 按照实际业务需要,解析返回结果。
- 调用该对象的off()方法,取消订阅http响应头事件。
- 当该请求使用完毕时,调用destroy()方法主动销毁。
具体操作步骤,请参考以下代码。
在Index外层导入http和 BusinessError:
import { http } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';
在Index.ets文件中的aboutToAppear 方法中定义方法,发起一般数据请求:
aboutToAppear(): void {
// HTTP一般数据请求
commonRequest()
}
commonRequest方法的完整代码:
function commonRequest() {
// 每一个httpRequest对应一个HTTP请求任务,不可复用
let httpRequest = http.createHttp();
// 用于订阅HTTP响应头,此接口会比request请求先返回。可以根据业务需要订阅此消息
httpRequest.on('headersReceive', (header) => {
console.info('header: ' + JSON.stringify(header));
});
httpRequest.request(
// 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
"EXAMPLE_URL",
{
method: http.RequestMethod.POST,
// 开发者根据自身业务需要添加header字段
header: {
'Content-Type': 'application/json',
// 把yourApiKey替换成真实的API Key
"Authorization": 'Bearer yourApiKey'
},
// 当使用POST请求时此字段用于传递请求体内容,具体格式与服务端协商确定
extraData: {
"model": "DeepSeek-V3",
"messages": [
{ "role": "system", "content": "You are a helpful assistant." },
{ "role": "user", "content": "请介绍下中华人名共和国的首都" }
],
"stream": false,
"temperature": 0.6
},
expectDataType: http.HttpDataType.STRING, // 可选,指定返回数据的类型
usingCache: true, // 可选,默认为true
priority: 1, // 可选,默认为1
connectTimeout: 60000, // 可选,默认为60000ms
readTimeout: 60000, // 可选,默认为60000ms
usingProtocol: http.HttpProtocol.HTTP1_1, // 可选,协议类型默认值由系统自动指定
}, (err: BusinessError, data: http.HttpResponse) => {
if (!err) {
// data.result为HTTP响应内容,可根据业务需要进行解析
console.info('Result:' + JSON.stringify(data.result));
console.info('code:' + JSON.stringify(data.responseCode));
// data.header为HTTP响应头,可根据业务需要进行解析
console.info('header:' + JSON.stringify(data.header));
console.info('cookies:' + JSON.stringify(data.cookies)); // 8+
// 当该请求使用完毕时,调用destroy方法主动销毁
httpRequest.destroy();
} else {
console.error('error:' + JSON.stringify(err));
// 取消订阅HTTP响应头事件
httpRequest.off('headersReceive');
// 当该请求使用完毕时,调用destroy方法主动销毁
httpRequest.destroy();
}
});
}
注意:
- EXAMPLE_URL 要替换成上一个步骤中获取的API地址;
- yourApiKey 要替换成上一个步骤中获取的API Key;
- extraData:POST请求时此字段用于传递请求体内容。
这里我们调用模型能力,帮忙介绍下中华人名共和国的首都。
点击运行按钮,运行鸿蒙项目,成功获取数据:
返回数据:
{
"id": "chat-905be6d7c37448348bc1b29a27e89cf6",
"object": "chat.completion",
"created": 1748404209,
"model": "DeepSeek-V3",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "中华人民共和国的首都是北京。北京是一座具有悠久历史和灿烂文化的古城,也是中国的政治、文化、国际交往、科技创新和教育中心。北京拥有许多著名的文化古迹和现代建筑,如故宫、天安门广场、颐和园、鸟巢等。同时,北京还是中国最重要的交通枢纽之一,拥有发达的交通网络和便捷的公共交通系统。",
"tool_calls": []
},
"logprobs": null,
"finish_reason": "stop",
"stop_reason": null
}],
"usage": {
"prompt_tokens": 28,
"total_tokens": 107,
"completion_tokens": 79
},
"prompt_logprobs": null
}
参数说明:
| 参数 | 参数类型 | 描述 |
|---|---|---|
| Id | Str | 请求ID |
| object | Str | 请求任务 |
| created | Int | 请求生成的时间戳 |
| model | Str | 调用的模型名 |
| choices | Array | 模型生成内容 |
| usage | Object | 请求输入长度、输出长度和总长度 |
发起HTTP流式传输请求:
- 从@kit.NetworkKit中导入http命名空间。
- 调用createHttp()方法,创建一个HttpRequest对象。
- 调用该对象的on()方法,可以根据业务需要订阅HTTP响应头事件、HTTP流式响应数据接收事件、HTTP流式响应数据接收进度事件和HTTP流式响应数据接收完毕事件。
- 调用该对象的requestInStream()方法,传入http请求的url地址和参数,发起网络请求。
- 按照实际业务需要,可以解析返回的响应码。
- 调用该对象的off()方法,取消订阅响应事件。
- 当该请求使用完毕时,调用destroy()方法主动销毁。
具体操作步骤,请参考以下代码。
在Index.ets文件中的aboutToAppear 方法中定义方法,发起HTTP流式传输请求:
aboutToAppear(): void {
// HTTP一般数据请求
// commonRequest()
// HTTP流式传输请求
streamRequest()
}
streamRequest方法的完整代码:
function streamRequest() {
// 每一个httpRequest对应一个HTTP请求任务,不可复用
let httpRequest = http.createHttp();
// 用于订阅HTTP响应头事件
httpRequest.on('headersReceive', (header: Object) => {
console.info('header: ' + JSON.stringify(header));
});
// 用于订阅HTTP流式响应数据接收事件
let res = new ArrayBuffer(0);
httpRequest.on('dataReceive', (data: ArrayBuffer) => {
const newRes = new ArrayBuffer(res.byteLength + data.byteLength);
const resView = new Uint8Array(newRes);
resView.set(new Uint8Array(res));
resView.set(new Uint8Array(data), res.byteLength);
res = newRes;
console.info('res length: ' + res.byteLength);
});
// 用于订阅HTTP流式响应数据接收完毕事件
httpRequest.on('dataEnd', () => {
console.info('No more data in response, data receive end');
});
let streamInfo: http.HttpRequestOptions = {
method: http.RequestMethod.POST, // 可选,默认为http.RequestMethod.GET
// 开发者根据自身业务需要添加header字段
header: {
'Content-Type': 'application/json',
// 把yourApiKey替换成真实的API Key
"Authorization": 'Bearer yourApiKey'
},
// 当使用POST请求时此字段用于传递请求体内容,具体格式与服务端协商确定
extraData: {
"model": "DeepSeek-V3",
"messages": [
{ "role": "system", "content": "You are a helpful assistant." },
{ "role": "user", "content": "请介绍下中华人名共和国的首都" }
],
"stream": false,
"temperature": 0.6
},
expectDataType: http.HttpDataType.STRING, // 可选,指定返回数据的类型
usingCache: true, // 可选,默认为true
priority: 1, // 可选,默认为1
connectTimeout: 60000, // 可选,默认为60000ms
readTimeout: 60000, // 可选,默认为60000ms。若传输的数据较大,需要较长的时间,建议增大该参数以保证数据传输正常终止
usingProtocol: http.HttpProtocol.HTTP1_1 // 可选,协议类型默认值由系统自动指定
}
// 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
httpRequest.requestInStream("EXAMPLE_URL",
streamInfo).then((data: number) => {
console.info("requestInStream OK!");
console.info('ResponseCode :' + JSON.stringify(data));
// 取消订阅HTTP响应头事件
httpRequest.off('headersReceive');
// 取消订阅HTTP流式响应数据接收事件
httpRequest.off('dataReceive');
// 取消订阅HTTP流式响应数据接收完毕事件
httpRequest.off('dataEnd');
// 当该请求使用完毕时,调用destroy方法主动销毁
httpRequest.destroy();
}).catch((err: Error) => {
console.info("requestInStream ERROR : err = " + JSON.stringify(err));
});
}
注意:
- EXAMPLE_URL 要替换成上一个步骤中获取的API地址;
- yourApiKey 要替换成上一个步骤中获取的API Key。
点击运行按钮,运行鸿蒙项目,成功返回:200
FAQ:
request和requestInStream使用区别:如果响应数据小于5M用request,大于5M用requestinstream。
参考:
https://support.huaweicloud.com/usermanual-maas-modelarts/maas-modelarts-0011.html
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/http-request-V5
三方库:
https://plugins.jetbrains.com/plugin/25151-json2ets
至此,使用HarmonyOS NEXT和MaaS快速开发鸿蒙AI应用的案例已全部完成。
6万+

被折叠的 条评论
为什么被折叠?



