AI模拟器

一、介绍

基于鸿蒙Next模拟一个ai对话过程
二、场景需求

客户服务、数据分析、个性化推荐、图像和视频处理、智能家居、交通管理、教育行业、制造等等。

三、业务步骤

第一步:输入框提出问题,发送问题,

第二部:下次发送,先清除之前提问,避免重复提问

第三步:获取ai反馈相关问题答案,目前虚拟数据,可自行设置答案结果
四、效果展示

五:代码展示:

复制代码
import { MsgRoleEnum } from '.../common/CommonConstant'
import { MsgP, textShow } from '.../common/MsgPassageway'
import { HidingHeadVerseData } from '.../database/HidingHeadVerse'

@Entry
@Component
struct Index02{
@State textShowArr: MsgP[] = textShow
@State textMsg: string = ''
@State inputValue: string = ''//获取输入文本数据
@State inputText: string = '' // 输入框展示文本数据
@State btnMsg: string = "发送"
@State btnInputShow: boolean = true // 清除/发送

build(){
Column(){
List(){
ForEach(this.textShowArr,(item:MsgP,index:number)=>{
if (item.role === MsgRoleEnum.Mine) {
ListItem(){
Row(){
//用户消息
Row(){
Text(item.msg)
.fontSize(16)
.textAlign(TextAlign.End)
.padding(6)
.backgroundColor(0xffcbebff)
.borderRadius(4)
}.width("67%")
.justifyContent(FlexAlign.End)
//用户头像
Image($r('app.media.ic_user_portrait')).width(30).height(30).margin({left:10,right:10})

          }.width("100%")
          .padding({top:4,bottom:4})
          .justifyContent(FlexAlign.End)
          .alignItems(VerticalAlign.Top)
        }
      }else {
        ListItem(){
          Row(){
            //AI头像
            Image($r('app.media.ic_gallery_ai_photography_on')).width(30).height(30).margin({left:10,right:10})
            //AI返回消息
            Row(){
              Text(item.msg + this.textMsg)
                .fontSize(16)
                .textAlign(TextAlign.Start)
                .padding(6)
                .backgroundColor(0xffffff)
                .borderRadius(4)
            }.width("67%")
            .justifyContent(FlexAlign.Start)

          }.width("100%")
          .padding({top:4,bottom:4})
          .justifyContent(FlexAlign.Start)
          .alignItems(VerticalAlign.Top)
        }
      }

    },(item:string)=>item)
  }

  Blank()//填充容器组件

  //底部输入框
  if (this.btnInputShow){
    //底部输入框
    Row(){
      //输入框
      TextInput({text:this.inputText,placeholder:"请输入您的关键词~"})
        .width("80%")
        .backgroundColor(0x999999)
        .height(40)
        .margin({left:12,right:12})
        .borderRadius(4)
        .backgroundColor(0xeeeeee)
        .onChange((value:string)=>{
          this.inputValue = value
          this.inputText = value
        })
      //发送图标
      Text(this.btnMsg)
        .margin({right:12})
        .fontColor(0x0091FF)
        .onClick(()=>{
          if (this.btnMsg === "清除"){
            this.textShowArr = []
            this.btnMsg = "发送"
          }else {
            this.textMsg = ""
            this.HidingHeadVerseFun()
          }

        })
    }.width("100%")
    .height(70)
    .backgroundColor(0xffffff)
    .alignItems(VerticalAlign.Center)
    .justifyContent(FlexAlign.Start)
  }

}
.width("100%")
.height("100%")
.borderRadius({ bottomLeft:12,bottomRight:12 })
.backgroundColor(0xeeeeee)
.justifyContent(FlexAlign.Start)
}

HidingHeadVerseFun(){
if (this.inputValue !== "") {
this.textShowArr.push({
role:0,
msg:this.inputText
})
this.inputText = ""
this.btnMsg = "清除"
this.Search_HidingHeadVerseFun()
}else {
console.info("输入文本数据为空")
}
}
//打字机效果
HidingHeadVerseTypewriter(v_idx:number){
if (v_idx == 999) {
let strLen = "我还在成长中,试试以下关键词:时间的片段、陌生的信..."
let idx = 0
let timer = setInterval(()=>{
if (idx < strLen.length) {
this.textMsg += strLen[idx++];
} else {
clearInterval(timer);
}
},100)
}else {
let strLen = HidingHeadVerseData[v_idx].title as string + HidingHeadVerseData[v_idx].content as string
let idx = 0
let timer = setInterval(()=>{
if (idx < strLen.length) {
this.textMsg += strLen[idx++];
} else {
clearInterval(timer);
}
},100)
}
}

Search_HidingHeadVerseFun(){
let searchStr = this.inputValue.includes("时间的片段") || this.inputValue.includes("时间")
let searchStr2 = this.inputValue.includes("陌生的信") || this.inputValue.includes("陌生的信")
if (searchStr) {
this.textShowArr.push({
role: 1,
msg: ""
})
this.HidingHeadVerseTypewriter(0)
}if (searchStr2){
this.textShowArr.push({
role: MsgRoleEnum.Other,
msg: ""
})
this.HidingHeadVerseTypewriter(2)

六、代码结构及原理:
1.整体结构:

使用了ArkTS的装饰器语法,如@Entry和@Component组件。使用了ArkTS的渲染语法if/else等
2.状态管理:

组件使用@State装饰器定义了几个响应式状态变量,如btnInputShow这些变量的变化会自动触发UI的更新。
3.UI结构:

界面使用嵌套的Column和Row组件构建。使用了ForEach遍历循环数据信息。
4.数据传递:

当点击"发送"按钮时,会调用HidingHeadVerseFun()回调函数,先获取用户问题数据,然后在数据库中对比,调用Search_HidingHeadVerseFun()回调函数,获取答案数据信息。

总的来说,这段代码展示了如何使用ArkTS和ArkUI框架创建一个交互式的ai问答界面。它利用了声明式UI、响应式编程和组件化的概念,使得代码结构清晰,易于理解和维护。

相关推荐
秦先生在广东6 小时前
构筑 AI Agent 的实时安全防线:Harness 与 AWS AgentCore Gateway 的深度集成解析
人工智能
秦先生在广东7 小时前
可审计决策原语:重塑 Agent 循环中的治理与信任
人工智能
米小虾7 小时前
一周 AI 观察(9.23–9.30):越狱的 Agent、腰斩的价格,与一场关于 GPU 的金融赌局
人工智能
秦先生在广东7 小时前
AI 时代的交付新瓶颈:从代码生成速度到生产环境持续信任
人工智能
米小虾7 小时前
把调度器扔了:微软 Agensh 让 1024 个编码 Agent 自组织,但收益正在变平
人工智能
米小虾7 小时前
告别盲目重复采样:PTTS 用「规划-执行分离」把测试时算力省下一半
人工智能
有毒的教程7 小时前
AI文生视频转场提示词(直接复制,分类型|适配MiniMax H3 / 可灵 / Runway)
人工智能·音视频
泛联新安7 小时前
软件定义汽车时代,如何让AI研发“可信”?——泛联新安构建汽车企业级可信AI体系的落地路径
大数据·人工智能·安全·网络安全·汽车·漏洞挖掘·代码安全
吴建旭 智宅焕8 小时前
AI搜索时代的智能家居交付知识架构:官网作为可信一手信息源与全国交付基础设施
人工智能·架构·智能家居
yuanxi2008 小时前
001267拟扩产光模块:大客户销售如何用价值力读一条扩产公告
人工智能·职场和发展·创业创新·学习方法