当前位置: 首页 > news >正文

【鸿蒙】大模型对话应用(一):大模型接口对接与调试

Demo介绍

本demo对接阿里云和百度的大模型API,实现一个简单的对话应用。

DecEco Studio版本:DevEco Studio 3.1.1 Release

HarmonyOS API版本:API9

关键点:ArkTS、ArkUI、UIAbility、网络http请求、列表布局

官方接口文档

此链接为当前时间(2024-1-26)文档链接地址,可能发生迁移变更,以官方为准。

阿里云通义千文API接口文档地址:通义千问API如何使用_模型服务灵积(DashScope)-阿里云帮助中心

百度智能云千帆大模型API接口文档地址:鉴权介绍 - 千帆大模型平台 | 百度智能云文档

新建项目

API9,Stage模型(需要联网)

资源同步下载结束后,打开预览器,可正常预览页面

实现API接口调用

新建http目录,在其中并在此目录下新建两个ts文件,分别实现调用阿里云和百度的API接口

申请网络权限

1、对接阿里云API

开通服务并获得API-KEY

请参照:如何开通DashScope并创建API-KEY_模型服务灵积(DashScope)-阿里云帮助中心

开通完成后,可在工作台拿到接口请求的鉴权信息:API-KEY,发起http时请求头header需要携带

参照文档实现请求方法

根据接口文档构造请求体,发起http请求,完成大模型对话

接口文档:通义千问API如何使用_模型服务灵积(DashScope)-阿里云帮助中心

实现ALiYunHttpUtils 类的 request 方法。


import http from '@ohos.net.http';
import hilog from '@ohos.hilog';
class ALiYunHttpUtils {request(question: string) {hilog.info(0x0000, 'testTag', 'ALiYunHttpUtils request invoke. question: %{public}s', question);// 1 createHttp接口创建请求let httpRequest = http.createHttp();// 2 发起请求httpRequest.request(// 请求地址"https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation",// 请求options: HttpRequestOptions{// 请求方式method: http.RequestMethod.POST,// 请求头header: {"Content-Type": "application/json",// 这里的Authorization 就是刚才工作台查看的 API-KEY"Authorization": "sk-0bxxxxxxxxxxxxxxxxc3" // 脱敏处理},// 请求体extraData: {"model": "qwen-plus", // 指定用于对话的通义千问模型名"input": {"messages": [{"role": "user","content": question // 请求发起方传入的问题}]}}}, (err, data: http.HttpResponse) => {if (err) {hilog.error(0x0000, 'testTag', 'Failed to request ALiYun. Cause: %{public}s', JSON.stringify(err) ?? '');httpRequest.destroy();} else {hilog.error(0x0000, 'testTag', 'Request ALiYun success. data: %{public}s', JSON.stringify(data.result));httpRequest.destroy();}})}}
export default new ALiYunHttpUtils;
调用http请求方法

在index页面加载的时候,调用ALiYunHttpUtils.request方法

刷新页面触发请求

刷新或重启Preview预览器,index页面重新加载,会执行aboutToAppear方法;

打开Log控制台,可看到请求结果

2、对接百度API

创建应用

登录平台,创建应用,可得到应用的API Key 和 Secret Key;这两个信息在调用鉴权信息接口时会用到。

开通服务(计费)

添加应用后,会默认预置一部分服务,可在【在线服务】菜单页查看;

大部分服务都需要付费开通,有几个免费的本人不太会用(尴尬。。)有免费的策略各位也可以分享一下 嘿嘿~

开通了一个计费的,个人测试使用,调用不会很频繁

鉴权认证

根据鉴权接口文档,实现鉴权接口请求

文档地址:获取access_token - 千帆大模型平台 | 百度智能云文档

实现BaiduHttpUtils类的 request 方法。

注意:此处BaiduHttpUtils.request方法仅完成了鉴权接口调用,还未进行真正的对话

import hilog from '@ohos.hilog';
import http from '@ohos.net.http';
class BaiduHttpUtils {request(question: string) {hilog.info(0x0000, 'testTag', 'BaiduHttpUtils request invoke. question: %{public}s', question);// 先鉴权// 1 createHttp接口创建请求let httpRequest = http.createHttp();// 2 发起请求httpRequest.request(// 请求地址// 参数grant_type 固定值client_credentials// 参数client_id 应用的API Key// 参数client_secret 应用的Secret Key"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=asxxxxxxxxxxHo&client_secret=ihxxxxxxxxgG",{method: http.RequestMethod.POST,header: {"Content-Type": "application/json"}}, (err, data: http.HttpResponse) => {if (err) {hilog.error(0x0000, 'testTag', 'Failed to request BaiDu. Cause: %{public}s', JSON.stringify(err) ?? '');httpRequest.destroy();} else {hilog.error(0x0000, 'testTag', 'Request BaiDu success. data: %{public}s', JSON.stringify(data.result));httpRequest.destroy();}})}}
export default new BaiduHttpUtils;

在index页面加载的时候,调用BaiduHttpUtils.request方法

鉴权通过后,可在接口返回中获取后续对话接口所需要的鉴权信息access_token

发起对话请求

拿到access_token后,可根据上述开通的服务对应的接口文档,发起对话请求

实现BaiduHttpUtils类的 chatRequest方法,在鉴权结束后调用

import hilog from '@ohos.hilog';
import http from '@ohos.net.http';
class BaiduHttpUtils {request(question: string) {hilog.info(0x0000, 'testTag', 'BaiduHttpUtils request invoke. question: %{public}s', question);// 先鉴权// 1 createHttp接口创建请求let httpRequest = http.createHttp();// 2 发起请求httpRequest.request(// 请求地址// 参数grant_type 固定值client_credentials// 参数client_id 应用的API Key// 参数client_secret 应用的Secret Key"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=asxxxxxxxxHo&client_secret=ihxxxxxxxxgG",{method: http.RequestMethod.POST,header: {"Content-Type": "application/json"}}, (err, data: http.HttpResponse) => {if (err) {hilog.error(0x0000, 'testTag', 'Failed to request BaiDu. Cause: %{public}s', JSON.stringify(err) ?? '');httpRequest.destroy();} else {hilog.error(0x0000, 'testTag', 'Request BaiDu success. data: %{public}s', JSON.stringify(data.result));httpRequest.destroy();// 携带认证信息 发起对话请求let respToken: BaiDuToken = JSON.parse(data.result.toString())this.chatRequest(respToken.access_token, question)}})}chatRequest(token: string, question: string) {// 通常情况不建议把token打印出来 此处为了方便调试hilog.info(0x0000, 'testTag', 'BaiduHttpUtils chaRequest invoke. token: %{public}s, question: %{public}s', token, question);// 1 createHttp接口创建请求let httpRequest = http.createHttp();// 2 发起请求httpRequest.request(// 请求地址"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=" + token,{method: http.RequestMethod.POST,header: {"Content-Type": "application/json"},extraData: {"messages": [{"role": "user","content": question}]}}, (err, data: http.HttpResponse) => {if (err) {hilog.error(0x0000, 'testTag', 'Failed to request BaiDu. Cause: %{public}s', JSON.stringify(err) ?? '');httpRequest.destroy();} else {hilog.error(0x0000, 'testTag', 'Request BaiDu success. data: %{public}s', JSON.stringify(data.result));httpRequest.destroy();}})}}
export default new BaiduHttpUtils;class BaiDuToken {access_token: stringexpires_in: numbersession_key: string// ...
}
刷新页面触发请求

刷新或重启Preview预览器,index页面重新加载,会执行aboutToAppear方法;

打开Log控制台,可看到请求结果

至此,两个大模型的API接口对接完成,下一步可以开始设计对话页面。

相关文章:

【鸿蒙】大模型对话应用(一):大模型接口对接与调试

Demo介绍 本demo对接阿里云和百度的大模型API,实现一个简单的对话应用。 DecEco Studio版本:DevEco Studio 3.1.1 Release HarmonyOS API版本:API9 关键点:ArkTS、ArkUI、UIAbility、网络http请求、列表布局 官方接口文档 此…...

SQL的函数类型

目录 一、聚合函数 二、数值型函数 三、字符串函数 四、日期函数 五、流程控制函数 一、聚合函数 定义:聚合函数是指对一组值进行运算,最终返回是单个值,也可以被称为组合函数。 COUNT() 统计目标行数量的函数 AVG() 求平均值 SU…...

TSINGSEE青犀视频智慧电梯管理平台,执行精准管理、提升乘梯安全

一、方案背景 随着城市化进程的不断加快,我国已经成为全球最大的电梯生产和消费市场,电梯也成为人们日常生活中不可或缺的一部分。随着电梯数量的激增,电梯老龄化,维保数据不透明,物业管理成本高,政府监管…...

VMware:在部分链上无法执行所调用的函数,请打开父虚拟磁

VMware:在部分链上无法执行所调用的函数,请打开父虚拟磁 问题:VMware给虚拟机扩展硬盘容量,提示:在部分链上无法执行所调用的函数,请打开父虚拟磁。原因:是因为你的虚拟磁盘文件是分多个文件存储的&#xf…...

【数据结构 08】红黑树

一、概述 红黑树,是一种二叉搜索树,每一个节点上有一个存储位表示节点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长上两倍,因而是接进…...

【百度Apollo】自动驾驶规划技术:实现安全高效的智能驾驶

🎬 鸽芷咕:个人主页 🔥 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…...

《C程序设计》上机实验报告(五)之一维数组二维数组与字符数组

实验内容&#xff1a; 1.运行程序 #include <stdio.h> void main( ) { int i,j,iRow0,iCol0,m; int x[3][4]{{1,11,22,33},{2,28,98,38},{3,85,20,89}}; mx[0][0]; for(i0;i<3;i) for(j0;j<4;j) if (x[i][j]>m) { mx[i][j]; iRowi…...

【BUG】联想Y7000电池电量为0且无法充电解决方案汇总

因为最近火灾很多&#xff0c;所以昨天夜晚睡觉的时候把插线板电源关掉了&#xff0c;电脑也关机了。 各位一定要注意用电安全&#xff0c;网上的那些事情看着真的很难受qvq。 第二天早上起床的时候一看发现电脑直接没电了&#xff0c;插上电源后也是显示 你一定要冲进去啊(ू˃…...

centos7常用命令之安装插件2

centos7安装插件1 7、kibana 【启动kibana,需要调整这个配置文件(/opt/kibana-6.3.0/config/kibana.yml)的一处ip地址,因为每次虚拟机的ip地址可能会有所不同&#xff0c; 同时访问页面地址的ip:5601时,ip地址也对应修改】 1.解压缩包 cd /opt/ tar -xvf kibana-6.3.0-linux-x…...

MATLAB - 仿真单摆的周期性摆动

系列文章目录 前言 本例演示如何使用 Symbolic Math Toolbox™ 模拟单摆的运动。推导摆的运动方程&#xff0c;然后对小角度进行分析求解&#xff0c;对任意角度进行数值求解。 一、步骤 1&#xff1a;推导运动方程 摆是一个遵循微分方程的简单机械系统。摆最初静止在垂直位置…...

Pandas进阶--map映射,分组聚合和透视pivot_table详解

文章目录 1.Pandas的map映射&#xff08;1&#xff09;映射&#xff08;2&#xff09;map充当运算工具 2.数据分组和透视&#xff08;1&#xff09;分组统计 - groupby功能 是pandas最重要的功能&#xff08;2&#xff09;聚合agg 3.透视表pivot_table&#xff08;1&#xff09…...

Visual Studio 和Clion配置Cocos2d-x环境

Visual Studio 和Clion配置Cocos2d-x环境 我就不贴图片的&#xff0c;懒得上传图床。懒。开发环境: ​ 系统: Window11 ​ 编译器: CMake MSVC ​ 开发工具&#xff1a;Clion or Visual Studio ​ 请自行配置好&#xff0c;Python2.7&#xff0c;和Cmake ​ Cocos2d-x下载…...

【百度Apollo】本地调试仿真:加速自动驾驶系统开发的利器

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下…...

ztest中ddof起什么作用

⭐️ statsmodels 中 ztest 基本使用 statsmodels 也是一个强大的统计分析库&#xff0c;提供了丰富的统计模型和检验功能。对于 Z 检验&#xff0c;statsmodels 提供了 ztest 函数。 以下是使用 statsmodels 进行 Z 检验的示例&#xff1a; from statsmodels.stats.weights…...

linux 主机无法联网问题

主机不能联网 一 查看当前ip ping路由 ifconfig wlan0 wlan0: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.2.78 netmask 255.255.255.0 broadcast 192.168.2.255ping 192.168.2.1查看是否能ping通 二 查看路由表 route -n Destination G…...

2024/1/27 备战蓝桥杯 1-1

目录 求和 0求和 - 蓝桥云课 (lanqiao.cn) 成绩分析 0成绩分析 - 蓝桥云课 (lanqiao.cn) 合法日期 0合法日期 - 蓝桥云课 (lanqiao.cn) 时间加法 0时间加法 - 蓝桥云课 (lanqiao.cn) 扫雷 0扫雷 - 蓝桥云课 (lanqiao.cn) 大写 0大写 - 蓝桥云课 (lanqiao.cn) 标题…...

支持下一代网络IpV6的串口服务器,IpV6串口485接口转网口

和IPv4比较&#xff0c;IPv6有两个极具吸引力的特点&#xff1a;一个是IPv6采用的128位地址格式&#xff0c;而IPv4采用32位的地址格式&#xff0c;因此IPv6使地址空间增大了296&#xff1b;另一个是IPv6物联网数据业务具有更强的支持能力&#xff0c;成为未来物联网的重要协议…...

uniapp H5 实现上拉刷新 以及 下拉加载

uniapp H5 实现上拉刷新 以及 下拉加载 1. 先上图 下拉加载 2. 上代码 <script>import DragableList from "/components/dragable-list/dragable-list.vue";import {FridApi} from /api/warn.jsexport default {data() {return {tableList: [],loadingHi…...

网络工程师必学知识:2、IPv4和IPv6地址划分

网络工程师必学知识&#xff1a;2、IPv4和IPv6地址划分 1.概述&#xff1a;2.IPv4&#xff1a;地址划分&#xff1a;有类划分&#xff0c;无类划分。一、有类划分&#xff1a;分为5类。ABCDE&#xff0c;掩码分别位8、16、24、28、27取值范围&#xff1a;出类别bit不变&#xf…...

Rust - 变量

不管学什么语言好像都得从变量开始&#xff0c;不过只需要懂得大概就可以了。 但在Rust里不先把变量研究明白后面根本无法进行… 变量绑定 变量赋值❌ 变量绑定✔️ Rust中没有“赋值”一说&#xff0c;而是称为绑定。 int a 3; //C中的变量赋值 a 3; //python中的…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...