首页 > 其他分享 >#星计划#鸿蒙原生应用有问必答

#星计划#鸿蒙原生应用有问必答

时间:2024-01-22 11:32:39浏览次数:21  
标签:原生 http string 鸿蒙 HTTP ChatGpt data message 有问必答

鸿蒙原生有问必答APP

运行环境

DAYU200:4.0.10.16

SDK:4.0.10.15

IDE:4.0.600

前言

在配置好环境之后,可以尝试这编写一个较为简单的应用程序练练手,这里选择使用一个免费的API接口网站ALAPI来尝试编写一个可进行对话的GPT应用程序。

创建项目

image20240109162742507.png

创建好项目之后可以先把helloworld的demo在真机上跑一下,注意需要签名

image20240109162843738.png

签名方式

image20240109163005513.png

随后直接点击运行,可以看到控制台输出

image20240109163123631.png

image20240109163152991.png

开发板效果如图所示

image20240109163214371.png

修改图标和名称

项目中含有文件记录了应用的图标和名称,一部分是设置里的,一部分是显示在桌面的,需要将这两部分均做修改。

第一部分目录在AppScope/app.json5

如下图所示,icon和label分别对应图标与名称,我们将这里改为我们需要的内容

image20240109163400644.png

image20240109163556357.png

此时在系统设置中我们的应用图标和名称应当都改过来了

image20240109164302257.png

修改桌面图标和名称

修改src/main/module.json5中如图所示的label和icon。

我们修改label的时候,修改中文目录下的就可以,具体操作卫按住ctrl跳转时选择中文路径

image20240109164357073.png

更改后效果如下

image20240109164459021.png

对应用添加相关权限

由于使用ChatGpt需要使用网络权限,我们在这里添加网络权限

在src/main/module.json5中modele中添加配置

image20240109164702092.png

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

自定义数据模型

本次调用GPT的API可以自定数据模型来实现,我们可以在ets目录下新建Model文件夹,新建GPTModel文件(ts)

image20240109164926139.png

export class ChatGptModel {
  code: number = 0
  message: string = ""
  data: ChatGpt = new ChatGpt()
}

export class ChatGpt {
  content: string = ""

}

由于在API网站中查看ChatGPT调用时返回的参数较少,直接写在里面

image20240109165050828.png

在网站的请求参数介绍中有这样的内容

名称 必填 类型 描述 示例
token true string 请求token,用户中心获取。 用户中心获取token
content string 需要对话的内容,如:帮我写一封情书。
message string ChatGPT消息请求格式
max_tokens int 最大返回的tokens限制,默认不填返回最多, 3.5默认最大是16000 tokens, 请不要超过这个限制否则会报错

我们实现的时简单的一对一的对话,所以message暂时可以不用管,在在线测试网站中尝试

image20240109165234572.png

token可以通过注册本网站来获取ALAPI

image20240109165343084.png

得到响应主体

{
  "code": 200,
  "msg": "success",
  "data": {
    "content": "你好!我是一个AI助手,可以帮助您回答问题和提供服务。有什么我可以为您做的吗?"
  },
  "time": 1704790385,
  "usage": 1,
  "log_id": "603268355937845248"
}

可以看到我们需要的仅仅只有content内的内容。

创建输入界面

作为一款问答式GPT应用,需要有用户输入的地方,我们这里简单的做一个输入页面

输入页面可以直接在默认的index页面中修改

image20240109165717664.png

输入框组件

image20240109165734469.png

查询按钮

image20240109165747149.png

按钮点击时的事件,这里参考一篇博客,将用户输入内容传递给下一个页面,下一个页面我们将其命名为ChatGpt

源代码如下

import router from '@ohos.router'

@Entry
@Component
struct Login {
  @State message: string = '欢迎使用ChatGpt'

  build() {
    Column() {
      TextInput({
        placeholder: "请输入您的问题"
      }).onChange((value: string) => {
        console.info("输入的问题是" + value)
        this.message = value

      }).type(InputType.Normal)

      Button("查询")
        .width("100%")
        .backgroundColor(Color.Orange)
        .fontColor(Color.Black)
        .margin({
          bottom: 10
        })
        .onClick(() => {
          router.pushUrl({
            url: "pages/ChatGpt",
            params: {
              message: this.message
            }
          }, router.RouterMode.Single)
        })

    }.width("100%").height("100%").justifyContent(FlexAlign.Center).padding({
      left: "10", right: 10
    })
  }
}

创建HTTP请求

下面我们写用户点击按钮后的返回页面

1.导入http模块

import http from '@ohos.net.http';
import { BusinessError } from '@ohos.base';

2.创建createHttp

let httpRequest = http.createHttp();

3.填写HTTP地址

httpData() {

  // 3.每一个httpRequest对应一个HTTP请求任务,不可复用
  let httpRequest = http.createHttp();
  //4.
  httpRequest.request(// 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
    "https://v2.alapi.cn/api/chatgpt/pro",
    {
      method: http.RequestMethod.GET, // 可选,默认为http.RequestMethod.GET
      // // 开发者根据自身业务需要添加header字段
      header: [{
        'Content-Type': 'application/json'
      }],
      // 当使用POST请求时此字段用于传递内容
      extraData: {
        "token": "此处替换为你的token",
        "content":this.paramsFromIndex?.['message'],
        "max_tokens":"10000"
      },
      // expectDataType: http.HttpDataType.STRING, // 可选,指定返回数据的类型
      // usingCache: true, // 可选,默认为true
      // priority: 1, // 可选,默认为1
      // connectTimeout: 60000, // 可选,默认为60000ms
      // readTimeout: 60000, // 可选,默认为60000ms
      // usingProtocol: http.HttpProtocol.HTTP1_1, // 可选,协议类型默认值由系统自动指定
      // usingProxy: false, //可选,默认不使用网络代理,自API 10开始支持该属性
    }, (err: BusinessError, data: http.HttpResponse) => {
    
    //对网络数据的处理    
    if (!err) {


      // data.result为HTTP响应内容,可根据业务需要进行解析
      console.info('Result:' + JSON.stringify(data.result));
      let ChatGptModel: ChatGptModel = JSON.parse(data.result.toString())
      this.ChatGpt = ChatGptModel.data

      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();
    }
  }
  );
}

不要忘记将页面添加到mainpage中

路径src/main/resources/base/profile/main_pages.json

image20240109170545393.png

接下来就可以尝试运行一下代码,在开发板中运行效果如下

image20240109170334509.png

image20240109170357710.png

点击查询之后的效果如下:

image20240109170642449.png

如此,一个简单的GPT程序就做好了==还可以让它帮你写情书哦==

image20240109171129588.png

参考链接

#星计划#鸿蒙原生应用随机诗词【坚果派-坚果】-鸿蒙开发者社区-51CTO.COM

本文作者:wx659b9e0826602

想了解更多关于鸿蒙的内容,请访问:​

​51CTO鸿蒙开发者社区

​https://ost.51cto.com/#bkwz​

标签:原生,http,string,鸿蒙,HTTP,ChatGpt,data,message,有问必答
From: https://blog.51cto.com/harmonyos/9363199

相关文章

  • 阿里云 ACK 云原生 AI 套件中的分布式弹性训练实践
    作者:霍智鑫众所周知,随着时间的推移,算力成为了AI行业演进一个不可或缺的因素。在数据量日益庞大、模型体量不断增加的今天,企业对分布式算力和模型训练效率的需求成为了首要的任务。如何更好的、更高效率的以及更具性价比的利用算力,使用更低的成本来训练不断的迭代AI模型,变成了迫......
  • 从方法论到最佳实践,深度解析企业云原生 DevSecOps 体系构建
    作者:匡大虎引言安全一直是企业上云关注的核心问题。随着云原生对云计算基础设施和企业应用架构的重定义,传统的企业安全防护架构已经不能够满足新时期下的安全防护要求。为此企业安全人员需要针对云原生时代的安全挑战重新进行系统性的威胁分析并构建适合企业自身的威胁情报系统,同时......
  • 云原生实践总结
    云原生实践总结......
  • 为大模型工程提效,基于阿里云 ACK 的云原生 AI 工程化实践
    作者:张凯背景以GPT(GenerativePre-trainedTransformer)和Diffusionmodel为代表的大语言模型(Largelanguagemodel,LLM)和生成式人工智能(Generativeartificialintelligence,GAI)在过往两年,将人们对AI的梦想与期待推向了一个新高峰。这一次,AI带来的“智能”效果和“涌现”能力,吸......
  • 从方法论到最佳实践,深度解析企业云原生 DevSecOps 体系构建
    作者:匡大虎引言安全一直是企业上云关注的核心问题。随着云原生对云计算基础设施和企业应用架构的重定义,传统的企业安全防护架构已经不能够满足新时期下的安全防护要求。为此企业安全人员需要针对云原生时代的安全挑战重新进行系统性的威胁分析并构建适合企业自身的威胁情报系统,......
  • 下一代云原生网关Higress:基于Wasm开发JWT认证插件
    什么是HigressHigress是基于阿里内部的EnvoyGateway实践沉淀、以开源Istio+Envoy为核心构建的下一代云原生网关,实现了流量网关+微服务网关+安全网关三合一的高集成能力,深度集成Dubbo、Nacos、Sentinel等微服务技术栈,能够帮助用户极大的降低网关的部署及运维成本且能力不打......
  • 更好测原生rzsz的替换方案: tszrz
    文档我实际安装的流程trzsz分为trzsz和trzsz-sshtrzsz要拥有类似于xshell的rz和sz的功能,需要使用特定的ssh客户端例如(trzsz-ssh)登录的情况下才能使用.服务端根据文档安装trzsz把文件从本地上传到服务重启:trz后面可以指定目录;从服务器上下载文件:tsz服务器上的文......
  • 鸿蒙原生应用/元服务实战-AGC中几个菜单栏的关系
    大家是否清楚AGC这几个菜单栏的相互关系?我的元服务:点击后跳转到“我的应用”列表中的“HarmonyOS”页签,并且过滤出元服务。开发者可以在此模块中管理和运营元服务,例如创建元服务、发布元服务等。我的应用:开发者可以在此模块中管理和运营应用,例如创建应用、配置应用信息、发布应用、......
  • HarmonyOS SDK,助力开发者打造焕然一新的鸿蒙原生应用
    鸿蒙生态千帆启航仪式于1月18日正式启动。从2019年HarmonyOS正式发布到2020年“没有人能够熄灭漫天星光”,今天,满天星光终汇成璀璨星河,HarmonyOSNEXT鸿蒙星河版重磅发布,带来了全新架构、全新体验、全新生态。作为支撑鸿蒙原生应用开发的技术源动力,HarmonyOSSDK将系统......
  • 鸿蒙生态进入第二阶段,加速千行百业应用鸿蒙化
    【中国,深圳,2024年1月18日】,华为宣布HarmonyOSNEXT鸿蒙星河版开发者预览面向开发者开放申请,这意味着鸿蒙生态进入第二阶段,将加速千行百业的应用鸿蒙化。华为常务董事、终端BGCEO、智能汽车解决方案BU董事长余承东公布鸿蒙生态最新进展:鸿蒙生态设备数量仅历时5个月即从7亿增长......