国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

半小時實現(xiàn)GPT純血鴻蒙版

這篇具有很好參考價值的文章主要介紹了半小時實現(xiàn)GPT純血鴻蒙版。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

僅需半小時,即可實現(xiàn)純血鴻蒙版本的ChatGPT!

廢話少說,先看效果圖:

半小時實現(xiàn)GPT純血鴻蒙版,鴻蒙(Harmony OS)應(yīng)用開發(fā),harmonyos,鴻蒙

如上圖所示,這個小Demo實現(xiàn)了AI智能問答。靠右加粗的文本是用戶點擊底部提交按鈕后出現(xiàn)的;后面靠左對齊的普通文本是來自AI的回答內(nèi)容。當(dāng)然,整個內(nèi)容是可滑動瀏覽的,當(dāng)內(nèi)容被滑動時,屏幕右側(cè)將出現(xiàn)滾動條。最后,為什么UI是英文呢?因為鴻蒙的模擬器目前沒有內(nèi)置中文輸入法,恰好這個AI服務(wù)也可以用英文來回答。

值得注意的是:這個小Demo之所以我稱其為Demo,是因為它的功能實在是太簡單了。只有一個基礎(chǔ)的AI對話功能,如果要做成一個產(chǎn)品,我覺得起碼得有個數(shù)據(jù)持久化的過程,而且還能支持文本的編輯、復(fù)制、刪除,還要提供收藏功能。更重要的,UI也需要好好美化一下……

所以,這篇文章就權(quán)當(dāng)拋磚引玉,讓大家體會一下開發(fā)原生純血鴻蒙版本的App是有多么輕松。

前置條件

  1. DevEco 3.1.1 Release;
  2. 在百度智能云控制臺上創(chuàng)建好應(yīng)用,保存好API Key和Secret Key。
  • 關(guān)于1:下載和安裝文檔鏈接;
  • 關(guān)于2:百度智能云控制臺地址鏈接。

創(chuàng)建項目(5分鐘)

使用DevEco創(chuàng)建項目僅需兩步,第一步選擇類型,第二步填寫項目信息。

對于第一步,我們選擇Application(應(yīng)用程序)->Empty Ability(空白Ability);

對于第二步,我們選擇迄今為止最新的Compile SDK,即3.1.0(API 9),Model選擇Stage,不開啟“Enable Super Visual”。其余的內(nèi)容大家根據(jù)自身環(huán)境配置進(jìn)行填寫就好。

編碼實現(xiàn)(20分鐘)

整個編碼過程分為三個步驟,首先添加權(quán)限,然后實現(xiàn)UI,最后實現(xiàn)網(wǎng)絡(luò)操作。

添加權(quán)限(2分鐘)

在整個App的項目結(jié)構(gòu)中,找到默認(rèn)創(chuàng)建的entry模塊,依次定位到src->main->module.json5,權(quán)限在該文件中進(jìn)行配置。

這個Demo功能非常簡單,但仍需對其添加必要的網(wǎng)絡(luò)訪問權(quán)限,以確??梢源蜷_網(wǎng)絡(luò)套接字,完成HTTP請求和響應(yīng)。

代碼片段如下:

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

UI實現(xiàn)(10分鐘)

回過頭來看本文最上方的截圖,經(jīng)過布局分析后,可以得到如下結(jié)論:整個界面是縱向布局,由兩個部分構(gòu)成。一是可滾動的對話歷史;二是下方的輸入框和提交按鈕。

因此,整個UI布局最外層應(yīng)該是一個Column,表示縱向布局。其中,占據(jù)90%高度的對話歷史區(qū)域,占據(jù)10%高度的輸入框和按鈕區(qū)域。

先來看對話歷史區(qū)域,它其實本質(zhì)上也是一個Column,每個item就是一段文字。根據(jù)文字的類型來判斷是居左還是居右。在這個Column之外,為了讓整個對話歷史區(qū)域可以上下滾動查看,因此還需要Scroll組件將整個Column組件包裹起來。

代碼片段如下:

@State messagesList: Object[] = [{ 'role': 'user', 'content': 'What can I help you with?' }]
// 歷史問答
Scroll() {
  Column() {
    ForEach(this.messagesList, (item: Object) => {
      if (item['role'] == 'user') {
        Text(item['content']).fontSize(20).fontWeight(FontWeight.Bold).width('100%').textAlign(TextAlign.End)
      } else {
        Text(item['content']).fontSize(20).width('100%').textAlign(TextAlign.Start)
      }
    })
  }.width('100%').alignItems(HorizontalAlign.Center)
}
.scrollable(ScrollDirection.Vertical)
.scrollBar(BarState.Auto)
.scrollBarColor(Color.Gray)
.scrollBarWidth(10)
.edgeEffect(EdgeEffect.Fade)
.height('90%')
.width('100%')

請注意這段代碼中的messagesList,它是一個對象數(shù)組。role表示角色,即該條消息是用戶發(fā)送的,還是服務(wù)器返回的;content表示文字內(nèi)容。

在由Scroll包裹的Column組件之中,使用了ArkTS提供的ForEach渲染方式進(jìn)行逐條消息的渲染,并使用if…else…條件判斷語句對角色來源進(jìn)行區(qū)分。

再來看底部的輸入框和操作按鈕,由于它們是橫向排列的,所以使用Row組件進(jìn)行布局。在此,我將文本輸入框設(shè)定了80%的寬度,提交按鈕設(shè)定了20%的寬度。

代碼片段如下:

@State questionStr: string = ''
// 文本輸入和提交
Row() {
  TextInput({ placeholder: 'Please input your question', text: this.questionStr })
    .type(InputType.Normal)
    .onChange((value: string) => {
      this.questionStr = value
    })
    .width('80%')
  Button('提交').type(ButtonType.Capsule).onClick(() => {
    this.messagesList.push({ 'role': 'user', 'content': this.questionStr })
    getAnswer(this.questionStr, this.messagesList)
    this.questionStr = ''
  }).width('20%')
}.height('10%').width('100%')

在這段代碼中,questionStr表示輸入框中的文字字符串。getAnswer()函數(shù)發(fā)起并接收HTTP請求,向服務(wù)器提交用戶問題字符串,并等待接收響應(yīng)內(nèi)容,將問題的回答放入messagesList對象數(shù)組之中,完成整個問答流程。

最后,將上述Scroll組件和Row組件一并放入Column內(nèi),完成整個UI繪制。

網(wǎng)絡(luò)訪問(8分鐘)

根據(jù)百度官方的開發(fā)文檔,完成整個AI問答過程至少需要兩個步驟:獲取access_token和獲取問題答案。

獲取access_token的過程在程序一開始就可以進(jìn)行了,因為在后續(xù)的操作中都要用到access_token。因此,我聲明了access_token的全局變量,并將獲取該值的方法封裝為getToken()函數(shù),具體代碼如下:

var access_token: string = ''
function getToken() {
  let httpRequest = http.createHttp();
  httpRequest.on('headersReceive', (header) => {
    console.info('header: ' + JSON.stringify(header));
  });
  httpRequest.request(
    "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[你的應(yīng)用的API Key]&client_secret=[你的應(yīng)用的Secret Key]",
    {
      method: http.RequestMethod.POST,
      header: {
        'Content-Type': 'application/json',
      },
      expectDataType: http.HttpDataType.OBJECT,
      usingCache: true,
      priority: 1,
      connectTimeout: 60000,
      readTimeout: 60000,
      usingProtocol: http.HttpProtocol.HTTP1_1,
    }, (err, data) => {
    if (!err) {
      access_token = data.result['access_token']
    } else {
      httpRequest.off('headersReceive')
      httpRequest.destroy()
    }
  });
}

getToken()函數(shù)我在回調(diào)的onPageShow()函數(shù)中使用,即程序啟動后,就獲取access_token。

最后,我們來實現(xiàn)getAnswer()函數(shù),它是向服務(wù)器提交問題和接收響應(yīng)的函數(shù),具體代碼如下:

function getAnswer(questionStr: string, messageList: Object[]) {
  let httpRequest = http.createHttp();
  httpRequest.on('headersReceive', (header) => {
    console.info('header: ' + JSON.stringify(header));
  });
  httpRequest.request(
    "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/yi_34b_chat?access_token=" + access_token,
    {
      method: http.RequestMethod.POST,
      header: {
        'Content-Type': 'application/json'
      },
      extraData: { "messages": [{
        "role": "user",
        "content": questionStr
      }] },
      expectDataType: http.HttpDataType.OBJECT,
      usingCache: true,
      priority: 1,
      connectTimeout: 60000,
      readTimeout: 60000,
      usingProtocol: http.HttpProtocol.HTTP1_1,
    }, (err, data) => {
    if (!err) {
      messageList.push({ 'role': 'assist', 'content': data.result['result'] })
    } else {
      httpRequest.off('headersReceive')
      httpRequest.destroy()
    }
  }
  );
}

還需要做些別的嗎?

答案是:沒有了,真的不用了。

運行項目(5分鐘)

無論是本地模擬器,還是真機,抑或是遠(yuǎn)程模擬器,只需要啟動其中一個,然后讓這個程序跑起來吧!如無意外,你將會得到一個超級簡易的AI問答機器人,純血鴻蒙版。

當(dāng)然,這里我寫了需要5分鐘,是包括了下載模擬器鏡像的時間,如果你有真機或是使用遠(yuǎn)程模擬器的話,那就會更快了。

最后,我們來對比一下。我完成上述功能,Index.ets一共117行,你的呢?文章來源地址http://www.zghlxwxcb.cn/news/detail-813794.html

到了這里,關(guān)于半小時實現(xiàn)GPT純血鴻蒙版的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 深入理解ArkTS:Harmony OS 應(yīng)用開發(fā)語言 TypeScript 的基礎(chǔ)語法和關(guān)鍵特性

    Harmony OS應(yīng)用開發(fā)的主力語言ArkTS的前身TS語言的基本語法。通過學(xué)習(xí)變量的聲明和數(shù)據(jù)類型、條件控制、函數(shù)聲明、循環(huán)迭代等基本知識,并了解內(nèi)核接口的聲明和使用。同時還介紹了模塊化開發(fā)的概念,提高代碼的復(fù)用性和開發(fā)效率。該對話還涉及了if else和switch條件控制語

    2024年02月04日
    瀏覽(27)
  • 鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(通用屬性:文本通用)

    鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(通用屬性:文本通用)

    文本通用屬性目前只針對包含文本元素的組件,設(shè)置文本樣式。 說明: 從API Version 7開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨標(biāo)記該內(nèi)容的起始版本。 名稱 參數(shù)類型 描述 fontColor ResourceColor 設(shè)置字體顏色。 從API version 9開始,該接口支持在ArkTS卡片中使用。 fon

    2024年03月23日
    瀏覽(22)
  • 鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(基礎(chǔ)手勢:Checkbox)

    鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(基礎(chǔ)手勢:Checkbox)

    提供多選框組件,通常用于某選項的打開或關(guān)閉。 說明: API version 11開始,Checkbox默認(rèn)樣式由圓角方形變?yōu)閳A形。 該組件從API Version 8開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨標(biāo)記該內(nèi)容的起始版本。 無 Checkbox(options?: CheckboxOptions) 多選框組件。 卡片能力: ?從

    2024年04月11日
    瀏覽(33)
  • 鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(容器組件:Scroll)

    鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(容器組件:Scroll)

    可滾動的容器組件,當(dāng)子組件的布局尺寸超過父組件的尺寸時,內(nèi)容可以滾動。 說明: 該組件從API version 7開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨標(biāo)記該內(nèi)容的起始版本。 該組件嵌套List子組件滾動時,若List不設(shè)置寬高,則默認(rèn)全部加載,在對性能有要求的場

    2024年04月13日
    瀏覽(31)
  • 鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(基礎(chǔ)手勢:CalendarPicker)

    鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(基礎(chǔ)手勢:CalendarPicker)

    日歷選擇器組件,提供下拉日歷彈窗,可以讓用戶選擇日期。 說明: 該組件從API Version 10開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨標(biāo)記該內(nèi)容的起始版本。 無 CalendarPicker(options?: CalendarOptions) 日歷選擇器。 系統(tǒng)能力: ?SystemCapability.ArkUI.ArkUI.Full 參數(shù): 參數(shù)名

    2024年03月09日
    瀏覽(21)
  • 鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(基礎(chǔ)手勢:ImageAnimator)

    鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(基礎(chǔ)手勢:ImageAnimator)

    提供幀動畫組件來實現(xiàn)逐幀播放圖片的能力,可以配置需要播放的圖片列表,每張圖片可以配置時長。 說明: 該組件從API Version 7開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨標(biāo)記該內(nèi)容的起始版本。 無 ImageAnimator() 從API version 10開始,該接口支持在ArkTS卡片中使用。

    2024年03月15日
    瀏覽(14)
  • 鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(通用屬性:安全區(qū)域)

    鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(通用屬性:安全區(qū)域)

    安全區(qū)域是指頁面的顯示區(qū)域,默認(rèn)不與系統(tǒng)設(shè)置的非安全區(qū)域比如狀態(tài)欄、導(dǎo)航欄區(qū)域重疊,默認(rèn)情況下開發(fā)者開發(fā)的界面都被布局在安全區(qū)域內(nèi)。提供屬性方法允許開發(fā)者設(shè)置組件繪制內(nèi)容突破安全區(qū)域的限制,通過expandSafeArea屬性支持組件不改變布局情況下擴展其繪制

    2024年04月29日
    瀏覽(15)
  • 鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(基礎(chǔ)手勢:Search)

    鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(基礎(chǔ)手勢:Search)

    搜索框組件,適用于瀏覽器的搜索內(nèi)容輸入框等應(yīng)用場景。 說明: 該組件從API Version 8開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨標(biāo)記該內(nèi)容的起始版本。 無 Search(options?: { value?: string, placeholder?: ResourceStr, icon?: string, controller?: SearchController }) 參數(shù): 參數(shù)名 參數(shù)類型

    2024年03月24日
    瀏覽(23)
  • 鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(通用屬性:尺寸設(shè)置)

    鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(通用屬性:尺寸設(shè)置)

    用于設(shè)置組件的寬高、邊距。 說明: 從API Version 7開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨標(biāo)記該內(nèi)容的起始版本。 width(value: Length) 設(shè)置組件自身的寬度,缺省時使用元素自身內(nèi)容需要的寬度。若子組件的寬大于父組件的寬,則會畫出父組件的范圍。 從API ver

    2024年03月15日
    瀏覽(18)
  • 鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(通用屬性:組件標(biāo)識)

    鴻蒙Harmony應(yīng)用開發(fā)—ArkTS聲明式開發(fā)(通用屬性:組件標(biāo)識)

    id為組件的唯一標(biāo)識,在整個應(yīng)用內(nèi)唯一。本模塊提供組件標(biāo)識相關(guān)接口,可以獲取指定id組件的屬性,也提供向指定id組件發(fā)送事件的功能。 說明: 從API Version 8開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨標(biāo)記該內(nèi)容的起始版本。 名稱 參數(shù)說明 描述 id string 組件

    2024年04月22日
    瀏覽(39)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包