最新案例動態,請查閲【案例共創】使用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. 案例流程

【案例共創】使用HarmonyOS NEXT和MaaS快速開發鴻蒙AI應用_開發者

説明:

  1. 用户進入開發者空間,在MaaS平台上領取模型;
  2. 用户在本地安裝DevEco Studio開發工具;
  3. 使用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. 開發者空間配置

面向廣大開發者羣體,華為開發者空間提供一個隨時訪問的“開發桌面雲主機”、豐富的“預配置工具集合”和靈活使用的“場景化資源池”,開發者開箱即用,快速體驗華為根技術和資源。

【案例共創】使用HarmonyOS NEXT和MaaS快速開發鴻蒙AI應用_開發者_02

2. 領取大模型服務Tokens

參考案例《華為雲MaaS大模型服務百萬商用Tokens領取使用指導》中的“一、 領取”章節內容,領取華為開發者空間百萬token代金券福利,購買ModelArts Studio DeepSeek-V3 輕量體驗包(¥3.50)。開通商用模型服務,最後獲取模型名稱API地址API Key的參數值。

【案例共創】使用HarmonyOS NEXT和MaaS快速開發鴻蒙AI應用_開發者_03

【案例共創】使用HarmonyOS NEXT和MaaS快速開發鴻蒙AI應用_API_04

注意:記錄API KeyAPI地址以及model名稱留作後面步驟使用。

三、創建鴻蒙項目,調用API接口

1. 安裝開發工具、創建本地模擬器

下載DevEco Studio,選擇DevEco Studio 5.0.3 Release版本:

https://developer.huawei.com/consumer/cn/download/deveco-studio

【案例共創】使用HarmonyOS NEXT和MaaS快速開發鴻蒙AI應用_HTTP_05

安裝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。

【案例共創】使用HarmonyOS NEXT和MaaS快速開發鴻蒙AI應用_開發者_06

在工程配置頁面,需要根據嚮導配置工程的基本信息。

【案例共創】使用HarmonyOS NEXT和MaaS快速開發鴻蒙AI應用_HTTP_07

點擊finish,等待項目同步完成。

【案例共創】使用HarmonyOS NEXT和MaaS快速開發鴻蒙AI應用_開發者_08

添加網絡權限:

在entry->src->main->module.json5下,添加網絡權限:

"requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ],

【案例共創】使用HarmonyOS NEXT和MaaS快速開發鴻蒙AI應用_開發者_09

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請求時此字段用於傳遞請求體內容。

這裏我們調用模型能力,幫忙介紹下中華人民共和國的首都。

點擊運行按鈕,運行鴻蒙項目,成功獲取數據:

【案例共創】使用HarmonyOS NEXT和MaaS快速開發鴻蒙AI應用_API_10

返回數據:

{
	"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

【案例共創】使用HarmonyOS NEXT和MaaS快速開發鴻蒙AI應用_HTTP_11

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應用的案例已全部完成。