【鸿蒙】大模型对话应用(二):对话界面设计与实现
Demo介绍
本demo对接阿里云和百度的大模型API,实现一个简单的对话应用。
DecEco Studio版本:DevEco Studio 3.1.1 Release
HarmonyOS SDK版本:API9
关键点:ArkTS、ArkUI、UIAbility、网络http请求、列表布局、层叠布局
对话页面设计
参照各种聊天类软件设计,一个简单的对话页面大致可分为三部分:对话框头,对话框,输入框

在src/main/ets/pages目录下新建页面,完成对话页面UI实现;
注意:一定是新建page;新建ets文件或复制已有的page,都会导致页面的路由文件src/main/resources/base/profile/main_pages.json中 无法生成新页面的路由。

@Entry
@Component
struct ChatPage {build() {Row() {Column() {// 1 对话框头headerText("Hello 文心一言")// 2 对话框chatList()// 3 输入框inputBox()}.width('100%')}.height('100%')}
}
@Builder function headerText(title: string) {}@Builder function chatList() {}@Builder function inputBox() {}
对话框头设计实现
使用 @Builder 注解自定义UI结构 headerText
其中仅一个文本组件,文本字体最小20,最大40,文本限制占一行;是为了适配手机竖屏时,字体大小固定可能导致错行或展示异常;
对话框头高度占全屏比为10%
@Builder function headerText(title: string) {Text(title).minFontSize(20).maxFontSize(40).maxLines(1).fontWeight(FontWeight.Bold).height('10%')
}
预览效果:

对话框设计实现
对话框中,每条消息又由:①对话消息、②对话头像,两部分实现
先定义消息体类结构:
- role,消息发起角色;分为我方(MessageRoleEnum.Mine)和对方(MessageRoleEnum.Other)
- message,消息文本
export class MessageVO {role: MessageRoleEnummessage: stringconstructor(role: MessageRoleEnum, message: string) {this.role = rolethis.message = message}
}export enum MessageRoleEnum {// 我方Mine,// 对方Other
}
定义测试数据
import { MessageRoleEnum, MessageVO } from '../model/MessageVO'
class TextTest {static readonly Text: MessageVO[] = [{role: MessageRoleEnum.Mine,message: '请介绍一下你自己'},{role: MessageRoleEnum.Other,message: "我是百度公司开发的人工智能语言模型,我的中文名是文心一言,英文名是ERNIE-Bot," +"可以协助您完成范围广泛的任务并提供有关各种主题的信息,比如回答问题,提供定义和解释及建议。如果您有任何问题,请随时向我提问。"},{role: MessageRoleEnum.Mine,message: '我在上海,周末可以去哪里玩?'},{role: MessageRoleEnum.Other,message: '上海是一个充满活力和文化氛围的城市,有很多适合周末游玩的地方。以下是几个值得推荐的地方:\n\n1. 上海科技馆:上海科技馆是中国大陆最大的科技馆之一'}]
}
使用列表组件(List)完成布局构建
说明:ArkUI提供了一种轻量的UI元素复用机制@Builder,@Builder所装饰的函数遵循build()函数语法规则,开发者可以将重复使用的UI元素抽象成一个方法,在build方法里调用。
下面代码中chatList 为对话框的UI布局结构;
chatLine_mine 和 chatLine_other 分别为:消息源是自己 和 消息源是对方(大模型)时的UI结构,唯一不同的就是图像在左(对方)还是在右(我方);
chatLine_image_style 修饰对话框中头像样式;
chatLine_text_style 修饰对话框中消息文本的样式。
@Builder function chatList() {List({space: 15, scroller: this.scroller}) {ForEach(TextTest.Text, (item: MessageVO) => {if (item.role === MessageRoleEnum.Mine) {chatLine_mine(item.message)} else {chatLine_other(item.message)}})}.alignListItem(ListItemAlign.Center).height('80%')
}@Builder function chatLine_mine(msg:string) {Row({space: 5}) {Text(msg).chatLine_text_style()Image($r("app.media.icon")).chatLine_image_style()}.alignItems(VerticalAlign.Top)
}
@Builder function chatLine_other(msg:string) {Row({space: 5}) {Image($r("app.media.icon")).chatLine_image_style()Text(msg).chatLine_text_style()}.alignItems(VerticalAlign.Top)
}@Extend(Image) function chatLine_image_style() {.width(50).aspectRatio(1)
}
@Extend(Text) function chatLine_text_style() {.fontSize(20).fontColor(Color.White).width('70%').lineHeight(25).backgroundColor('rgb(64,64,64)').padding(12).border({radius: 10})
}
预览效果:

输入框设计实现
使用层叠布局(Stack)完成一个简单的输入框;
其中【发送】按钮图标,是一个png格式图片,放在src/main/resources/base/media 目录下;
API9中,输入框组件(TextInput)API不支持原生的 [ 清除输入框文本按钮 ] ,可以使用层叠布局配合TextInput 组件的 text 属性实现。
@Builder function inputBox() {Row() {Stack() {TextInput({placeholder: '有问题尽管问我~'}).height(50).enterKeyType(EnterKeyType.Send)Image($r('app.media.ic_public_send')).margin({right:10}).height(35)}.alignContent(Alignment.End).height('10%')}.width('90%')
}
预览效果:

头像图标为项目创建默认生成的src/main/resources/base/media/icon.png,可自己更换
发送图标可在华为官网图标库获取:HarmonyOS 主题图标库 | icon素材免费下载 | 华为开发者联盟
![]()
至此,对话的UI页面就构建完成了;
使用相同的步骤,可以构建出相同的两个页面,一个用于和阿里云大模型对话,一个用于和百度云大模型对话。
下一步,可以通过页面跳转或跨Ability调用的方式,从首页进入不同大模型的对话页面;
之后可以通过请求大模型接口,更新页面数据,驱动页面渲染,实现与大模型的对话效果。
参考文档(鸿蒙官方开发指南):文档中心
相关文章:
【鸿蒙】大模型对话应用(二):对话界面设计与实现
Demo介绍 本demo对接阿里云和百度的大模型API,实现一个简单的对话应用。 DecEco Studio版本:DevEco Studio 3.1.1 Release HarmonyOS SDK版本:API9 关键点:ArkTS、ArkUI、UIAbility、网络http请求、列表布局、层叠布局 对话页…...
MySQL 导入数据
我们可以将已有的数据导入到MySQL数据库中,下面是几种方式: 1、mysql 命令导入 使用 mysql 命令导入语法格式为: mysql -u用户名 -p密码 < 要导入的数据库数据(shulanxt.sql) 实例: # mysql -uroot -p123456 < …...
探索数字经济:从基础到前沿的奇妙旅程
新一轮技术革命方兴未艾,特别是以人工智能、大数据、物联网等为代表的数字技术革命,催生了一系列新技术、新产业、新模式,深刻改变着世界经济面貌。数字经济已成为重组全球要素资源、重塑全球经济结构、改变全球竞争格局的关键力量。预估到20…...
【INTEL(ALTERA)】如何在 Windows 操作系统上设置 Design Space Explorer II 远程 SSH 场
说明 从英特尔 Quartus Prime Pro Edition 软件 22.1 版本开始,您可以选择使用 Windows OpenSSH 服务器设置 Design Space Explorer II (DSE II)。 解决方法 1.让 DSE II 与 OpenSSH 协同工作的第一步是 安装 OpenSSH。应在远程主机上安装 Op…...
Python编程-使用urllib进行网络爬虫常用内容梳理
Python编程-使用urllib进行网络爬虫常用内容梳理 使用urllib库进行基础网络请求 使用request发起网络请求 from urllib import request from http.client import HTTPResponseresponse: HTTPResponse request.urlopen(url"http://pkc/vul/sqli/sqli_str.php") pr…...
01 Redis的特性+下载安装启动+Redis自动启动+客户端连接
1.1 NoSQL NoSQL(“non-relational”, “Not Only SQL”),泛指非关系型的数据库。 键值存储数据库 : 就像 Map 一样的 key-value 对。如Redis文档数据库 : NoSQL 与关系型数据的结合,最像关系…...
C++发起Https请求
Wininet库忽略Https证书 相信很多朋友使用C WINAPI开发的时候网络模块的时候遇到Https忽悠证书无效的情况下, 仍然希望获取结果下列代码便是忽略异常的Https CA证书,下面对原理进行简单的讲解首先, 需要设置Https忽略需要用到如下结果函数与参数Interne…...
哪款笔记软件支持电脑和手机互通数据?
上班族在日常工作中,随手记录工作笔记已成为司空见惯的场景。例如:从快节奏的会议记录到灵感迸发的创意;跟踪项目进展,记录每个阶段的成果、问题和下一步计划;记录、更新工作任务清单等,工作笔记承载了职场…...
部署PXE高效批量网络装机
部署PXE高效批量网络装机 因在Cisco3850核心交换机中已开启DHCP 服务,因此不需要在配置DHCP服务。如果您的网络环境中也已有DHCP服务,也不用再配置DHCP服务了,直接部署PXE相关服务即可。 找一台linux系统的服务器,这本次试验用的是…...
【JavaEE】UDP协议与TCP协议
作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…...
Leetcode—1828. 统计一个圆中点的数目【中等】
2024每日刷题(一零五) Leetcode—1828. 统计一个圆中点的数目 实现代码 class Solution { public:vector<int> countPoints(vector<vector<int>>& points, vector<vector<int>>& queries) {vector<int> a…...
新概念英语第二册(47)
New words and expressions】生词和短语(9) thirsty adj. 贪杯的 ghost n. 鬼魂 haunt v. (鬼)来访,闹鬼 block …...
抽象类(Java)、模板方法设计模式
一、概念 在Java中有abstract关键字,就是抽象的意思,可用来修饰类和成员方法。 用abstract来修饰类,那这个类就是抽象类;修饰方法,那这个方法就是抽象方法。 修饰符 abstract class 类名{修饰符 abstract 返回值类型…...
【Delphi】IDE 工具栏错乱恢复
由于经常会在4K和2K显示器上切换Delphi开发环境(IDE),导致IDE工具栏错乱,咋样设置都无法恢复,后来看到红鱼儿的博客,说是通过操作注册表的方法,能解决,试了一下,果真好用,非常感谢分…...
自动化报告的前奏|使用python-pptx操作PPT(一)
自动化报告先从python-pptx开始 文章目录 1 python-pptx的基础属性1.1 新建幻灯片1.1.1 幻灯片布局的样式1.1.2 修改pptx模版大小1.1.3 指定模版生成1.1.4 创建幻灯片背景1.1.5 创建幻灯片备注信息1.1.6 设置幻灯片标题1.2 一些ppt元素/组件1.2.1 特殊符号1.2.2 placeholders1.…...
2024美赛数学建模D题思路+代码
文章目录 1 赛题思路2 美赛比赛日期和时间3 赛题类型4 美赛常见数模问题5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 美赛比赛日期和时间 比赛开始时间:北京时间2024年2月2日(周五ÿ…...
JDBC 结构优化2
JDBC 结构优化2 文章目录 JDBC 结构优化2结构优化2 - ATM系统(存,取,转,查)1 Service2 事务3 ThreadLocal4 事务的封装 结构优化2 - ATM系统(存,取,转,查) 1 Service 什么是业务? 代表用户完成的一个业务功能,可以由一个或多个DAO的调用组成。软件所提供的一个功…...
大模型相关术语
AGI(Artificial General Intelligence) 指通用人工智能,专注于研制像人一样思考、像人一样从事多种用途的机器。它与一般的特定领域智能(如机器视觉、语音识别等)相区分。 AIGC(AI-Generated Content&…...
数据库之九 流程控制、存储过程和函数
【零】数据准备 【1】创建用户信息表 (1)创建表 id:编号name:用户名sex:性别,默认男balance:余额register_time:注册时间 drop table if exists user; create table user( id in…...
DolphinDB学习(2):增删改查数据表(分布式表的基本操作)
文章目录 创建数据表1. 创建数据表全流程2. 核心:创建table3. 在已有的数据表中追加新的数据 数据表自身的操作1. 查询有哪些数据表2. 删除某张数据表3. 修改数据表的名称 博客里只介绍最常见的分区表(createPartitionedTable)的创建方法&…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
