最新案例動態,請查閲【案例共創】使用HarmonyOS NEXT和MaaS快速開發鴻蒙AI應用。小夥伴們快來領取華為開發者空間進行實操吧!
一、概述
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領取使用指導》中的“一、 領取”章節內容,領取華為開發者空間百萬token代金券福利,購買ModelArts Studio DeepSeek-V3 輕量體驗包(¥3.50)。開通商用模型服務,最後獲取模型名稱、API地址和API Key的參數值。
注意:記錄API Key、API地址以及model名稱留作後面步驟使用。
三、創建鴻蒙項目,調用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應用的案例已全部完成。