鸿蒙AI对话实战:基于蓝耘MaaS实现礼物App多轮智能选礼功能

发布时间:2026/9/6 1:44:50
鸿蒙AI对话实战:基于蓝耘MaaS实现礼物App多轮智能选礼功能 前言当下绝大多数鸿蒙生活工具类App功能落地始终停留在传统静态交互逻辑。以市面上主流的礼物推荐App为例产品形态基本固化为榜单展示、标签筛选、条件表单提交。用户想要精准匹配送礼需求必须一次性填全送礼对象、场景、预算、喜好等所有参数只要信息填写不全或需求有微调就要重新提交表单。真实送礼场景从来不是一次性决策。用户的需求具备极强的模糊性、迭代性不清楚对方喜好、对预算有浮动空间、对推荐方案不满意需要替换、想要规避特定礼物雷区。这类动态博弈式需求静态表单完全无法适配。AI大模型的核心价值不是给App叠加一个冗余的聊天窗口而是用多轮上下文记忆自然语言交互重构产品核心业务流程。本文从零落地鸿蒙原生礼物App AI选礼模块基于蓝耘MaaS平台用纯ArkTS实现完整多轮对话、SSE流式打字机效果、多模型热切换、上下文阈值管控、文本清洗适配等全套能力。所有代码均可直接复制运行架构适配所有鸿蒙原生应用可快速迁移至纪念日、亲友关怀、节日礼品类鸿蒙项目。全文摒弃概念堆砌从业务痛点、架构设计、代码落地、踩坑复盘、性能优化、生产部署全流程拆解完整还原移动端AI能力原生集成的实战逻辑。一、业务底层逻辑为什么传统选礼模式必须被AI重构我们从用户真实行为拆解选礼业务的核心痛点所有技术开发都围绕真实业务矛盾展开而非为了接入AI而接入AI。传统鸿蒙礼物App的交互逻辑建立在结构化固定参数基础上。系统预设预算区间、送礼人群、节日场景三类固定标签用户只能在既定框架内选择。这种模式有三个无法规避的硬伤。第一需求信息不对称。用户无法精准描述自身需求系统无法捕捉模糊需求。很多用户无法清晰总结“文艺、小众、氛围感”这类感性需求传统表单没有对应输入项最终推荐结果严重偏离预期。第二需求动态迭代无法适配。选礼是持续调整的过程用户会出现否定方案、调整预算、新增喜好、更换送礼对象等一系列操作。传统表单每次修改都需要全员重填交互链路繁琐用户留存极低。第三无个性化记忆能力。传统App不会留存用户历史送礼偏好每次打开都是全新初始状态重复使用成本高无法形成长期用户沉淀。大模型多轮对话刚好解决以上所有问题。核心原理是用自然语言替代结构化表单用上下文记忆留存用户偏好用模型实时推理迭代推荐方案。用户无需适配系统规则完全由系统适配用户的口语化、碎片化、动态化需求这也是AI赋能工具类App的第一性原理。二、蓝耘MaaS平台选型底层逻辑移动端专属移动端鸿蒙应用接入大模型核心限制不是UI开发而是网络稳定性、部署成本、模型兼容性、客户端安全四大问题。市面上主流的接入方案各有短板我们通过实战对比明确蓝耘MaaS的适配优势。2.1 主流大模型接入方案对比目前移动端AI开发有三种主流方案各自存在明显痛点完全不适合鸿蒙端轻量化落地。第一种直接对接海外原生大模型接口。这类模型推理效果优异但国内网络环境无法稳定直连必须依赖代理服务。移动端设备网络环境复杂Wi-Fi、移动网络切换频繁代理链路极易中断流式对话卡顿、超时、丢包问题频发完全无法上线商用。第二种自建大模型推理服务。需要部署显卡服务器、搭建推理环境、维护接口网关、处理算力扩容问题。个人开发者和中小型团队完全无法承担算力成本和运维成本且部署周期长迭代效率极低不适合轻量化鸿蒙应用开发。第三种零散国内大模型单独对接。单独对接通义千问、智谱、DeepSeek等模型每家平台接口协议、请求参数、返回格式完全不统一。想要做多模型切换能力需要重复编写多套请求代码代码冗余度高后期维护成本极大。2.2 蓝耘MaaS核心适配优势蓝耘元生代MaaS平台完美适配鸿蒙移动端开发场景核心优势集中在轻量化、高兼容、低成本、易迭代四个维度。全网兼容OpenAI Chat Completions标准协议鸿蒙原生NetworkKit网络组件可直接对接无需适配特殊接口规则接入代码极简。国内专属服务器节点无代理、无翻墙移动、联通、电信三网低延迟直连彻底解决移动端网络波动导致的对话中断问题。统一网关支持一键切换数十款主流大模型DeepSeek、Qwen、GLM、Kimi、MiniMax等模型共用一套请求代码仅需修改模型名称参数即可完成切换无需重构业务逻辑方便开发者做模型效果A/B测试。按量计费模式无闲置成本开发调试阶段开销极低商用阶段可根据用户量级弹性扩容无需运维服务器、无需管理算力资源真正实现零运维接入大模型能力。2.3 生产环境安全红线必看所有移动端AI开发都存在密钥泄露风险。客户端代码反编译门槛极低硬编码API_KEY会直接导致密钥被盗用产生高额未知账单。调试阶段可临时在客户端写入密钥提升开发效率正式上线必须搭建后端中转服务。客户端仅请求自研后端接口由后端统一携带密钥请求蓝耘MaaS网关彻底规避密钥泄露风险。密钥一旦泄露需第一时间登录蓝耘控制台重置密钥、清空非法调用记录。三、整体技术架构设计可复用鸿蒙AI通用架构本次开发采用分层解耦架构将UI渲染、网络请求、业务逻辑、模型推理、数据存储完全拆分代码可读性、复用性、可维护性拉满。该架构可直接复用至所有鸿蒙AI聊天、AI问答、AI智能推荐类项目。3.1 架构分层明细UI展示层负责页面渲染、聊天气泡、输入交互、loading状态、自动滚动、模型切换弹窗、清空对话等可视化能力纯UI交互逻辑不掺杂任何网络和业务计算。业务逻辑层管理对话消息列表、上下文记忆阈值管控、系统提示词配置、Markdown文本清洗、对话状态监听负责规整用户输入和模型输出内容。网络服务层独立封装蓝耘MaaS请求工具类统一处理流式请求、非流式请求、接口异常捕获、请求超时处理全局统一网络规则。MaaS网关层蓝耘云端统一接口服务负责模型调度、算力推理、SSE流式数据分片返回、请求限流计费客户端无需关注底层模型运行逻辑。数据持久层拓展本地缓存最近对话记录、用户常用送礼偏好、默认模型配置提升二次打开应用的体验。3.2 完整业务调用流程图大模型推理引擎蓝耘MaaS网关网络服务层业务逻辑层鸿蒙UI交互层用户大模型推理引擎蓝耘MaaS网关网络服务层业务逻辑层鸿蒙UI交互层用户输入口语化选礼需求点击发送传递用户输入文本触发对话逻辑拼接系统提示词历史上下文消息组装请求参数发起流式请求携带统一请求头调用MaaS接口调度指定模型执行推理计算分片返回流式推理结果SSE分片数据实时推送逐段解析返回内容追加消息实时更新AI气泡文本渲染打字机效果用户看到实时生成的推荐内容保存本轮对话至上下文用于下一轮推理3.3 核心架构图鸿蒙客户端UI展示层聊天气泡/输入框/状态展示业务逻辑层上下文管理/提示词/文本清洗网络服务层MaaS请求封装/SSE解析蓝耘MaaS网关多模型调度中心DeepSeek/Qwen/GLM算力推理服务本地数据缓存层对话记录/用户偏好四、前置开发准备工作正式编码前完成账号注册、密钥获取、环境配置确保所有接口可正常调用规避开发中途报错问题。4.1 平台账号与密钥申请1. 注册蓝耘元生代MaaS平台官方账号完成实名认证个人开发者免费额度可满足开发调试。2. 进入控制台API密钥管理页面创建专属API_KEY妥善保存密钥该密钥为唯一接口调用凭证。3. 查看平台可用模型列表记录模型名称用于后续代码内模型切换配置。4.2 鸿蒙项目环境配置1. 新建鸿蒙Stage工程适配API9及以上版本兼容绝大多数鸿蒙设备。2. 项目module.json5中配置网络权限否则无法发起网络请求。3. 开启明文网络访问权限适配调试阶段接口请求需求。4.3 权限配置代码完整可复制{ module: { name: entry, type: entry, description: $string:module_desc, mainElement: EntryAbility, deviceTypes: [ phone, tablet ], deliveryWithInstall: true, installationFree: false, pages: $profile:main_pages, abilities: [ { name: EntryAbility, srcEntry: ./ets/entryability/EntryAbility.ets, description: $string:EntryAbility_desc, startWindowIcon: $media:startIcon, startWindowBackground: $color:start_window_background, exported: true, skills: [ { entities: [ entity.system.home ], actions: [ action.system.home ] } ] } ], requestPermissions: [ { name: ohos.permission.INTERNET, reason: $string:internet_permission_reason, usedScene: { abilities: [ EntryAbility ], when: inuse } } ] } }五、核心功能完整代码落地ArkTS全量可运行本章提供所有核心模块完整代码无删减、无伪代码直接复制到鸿蒙工程即可运行包含实体定义、网络封装、对话逻辑、UI渲染、流式解析、文本清洗全能力。5.1 全局消息实体与系统提示词配置chatModel.ets统一规范对话消息结构配置专属礼物推荐系统提示词精准约束大模型输出风格和内容规则避免无效、冗余、不符合业务需求的回复。/** * 对话消息实体类 * id: 消息唯一标识 * role: 消息角色 系统/用户/AI助手 * content: 消息内容 * loading: AI消息加载状态 */ export interface ChatMessage { id: number; role: system | user | assistant; content: string; loading?: boolean; } /** * 礼物AI助手专属系统提示词 * 约束模型输出规则适配选礼业务场景 */ export const GIFT_SYSTEM_PROMPT: string 你是专注全场景的智能礼物推荐助手专为用户解决送礼难题。请严格遵守以下输出规则 1. 根据用户提供的送礼对象、关系、预算、爱好、场景、避雷信息输出3套差异化完整礼物方案 2. 每套方案标注精准预估价格、适配场景、核心亮点贴合用户预算区间不超支、不敷衍 3. 用户对方案不满意、提出修改意见时禁止重复推送同类方案全新迭代推荐内容 4. 用户需求信息缺失时精准追问核心关键信息不无效寒暄优先确认预算、送礼对象、使用场景 5. 输出语言口语化、简洁易懂拒绝复杂公式、冗余修饰适度排版不使用大量Markdown符号 6. 拒绝低俗、违规、不合适的礼物推荐规避送礼雷区贴合人情社交礼仪。 ; /** * 支持切换的模型列表 */ export const MODEL_LIST [ deepseek-v4-flash, qwen-turbo, glm-4-flash, minimax-chat ];5.2 蓝耘MaaS网络请求工具类lanyunAI.ets封装全局统一请求方法包含普通请求、SSE流式请求、异常捕获、超时处理解耦业务层与网络层后续修改接口参数无需改动业务代码。import http from ohos.net.http; import { ChatMessage } from ./chatModel; // 蓝耘MaaS基础配置 const BASE_URL: string https://maas-api.lanyun.net/v1; // 调试密钥生产环境请替换后端中转接口 const API_KEY: string 你的蓝耘MaaS API_KEY; export let NOW_MODEL: string deepseek-v4-flash; /** * 切换当前使用模型 * param model 模型名称 */ export function changeCurrentModel(model: string) { NOW_MODEL model; } /** * 普通非流式对话请求 * param messages 完整对话上下文 * returns 模型完整返回结果 */ export async function chatNormalCompletion(messages: ChatMessage[]) { const httpClient http.createHttp(); const requestUrl ${BASE_URL}/chat/completions; const requestData JSON.stringify({ model: NOW_MODEL, messages: messages, stream: false, max_tokens: 2048, temperature: 0.7 }); try { const res await httpClient.request(requestUrl, { method: http.RequestMethod.POST, header: { Content-Type: application/json, Authorization: Bearer ${API_KEY} }, extraData: requestData, readTimeout: 15000, connectTimeout: 10000 }); return JSON.parse(res.result as string); } catch (error) { console.error(MaaS普通请求失败, error); return null; } finally { httpClient.destroy(); } } /** * SSE流式对话请求核心打字机效果 * param messages 对话上下文 * param onData 分片数据回调 * param onEnd 结束回调 * param onError 异常回调 */ export function chatStreamCompletion( messages: ChatMessage[], onData: (text: string) void, onEnd: () void, onError: (err: any) void ) { const httpClient http.createHttp(); const requestUrl ${BASE_URL}/chat/completions; const requestData JSON.stringify({ model: NOW_MODEL, messages: messages, stream: true, max_tokens: 2048, temperature: 0.7 }); httpClient.request(requestUrl, { method: http.RequestMethod.POST, header: { Content-Type: application/json, Authorization: Bearer ${API_KEY} }, extraData: requestData, readTimeout: 30000, connectTimeout: 10000 }).then((res) { // 手动解析SSE流式数据 const streamText res.result as string; if (!streamText) { onError(流式数据为空); return; } // 分割每一条流式数据分片 const dataList streamText.split(data: ).filter(item item item ! [DONE]); let fullText ; dataList.forEach(item { try { const parseData JSON.parse(item); const deltaText parseData.choices?.[0]?.delta?.content || ; if (deltaText) { fullText deltaText; onData(fullText); } } catch (e) { return; } }); onEnd(); }).catch((err) { onError(err); }).finally(() { httpClient.destroy(); }); }5.3 文本清洗工具类filterUtil.ets大模型默认返回Markdown格式内容直接展示会出现大量符号乱码。该工具类批量过滤冗余标记适配移动端聊天界面展示效果。/** * 清洗AI返回的Markdown冗余符号 * param text 原始文本 * returns 清洗后纯文本 */ export function cleanMarkdownText(text: string): string { if (!text) return ; // 过滤标题、加粗、分割线、代码块符号 let res text.replace(/## |### |#### |\*\*|\*||\n\n/g, ); // 去除首尾空格 res res.trim(); return res; }5.4 主页面完整对话业务逻辑与UIindex.ets整合所有能力实现消息发送、上下文管控、流式渲染、模型切换、自动滚动、清空对话全套交互是项目核心页面代码。import { ChatMessage, GIFT_SYSTEM_PROMPT, MODEL_LIST } from ./chatModel; import { chatStreamCompletion, changeCurrentModel } from ./lanyunAI; import { cleanMarkdownText } from ./filterUtil; Entry Component struct AIChatPage { // 对话消息列表 State messageList: ChatMessage[] []; // 用户输入文本 State inputText: string ; // 当前消息ID自增 private msgId: number 0; // 列表滚动控制器 private scroller: Scroller new Scroller(); // 模型弹窗显示状态 State showModelDialog: boolean false; State currentModelName: string deepseek-v4-flash; // 截取最近10轮对话控制Token长度 private getRecentContext(): ChatMessage[] { const context: ChatMessage[] [ { id: -1, role: system, content: GIFT_SYSTEM_PROMPT } ]; // 仅保留最近10条用户AI对话避免上下文过载 const recentMsg this.messageList.slice(-10); context.push(...recentMsg); return context; } // 发送对话消息核心逻辑 private sendChatMessage() { if (!this.inputText.trim()) return; // 1. 添加用户消息 this.msgId; this.messageList.push({ id: this.msgId, role: user, content: this.inputText.trim() }); this.inputText ; this.messageList [...this.messageList]; // 2. 创建AI加载占位消息 this.msgId; const aiMsgId this.msgId; this.messageList.push({ id: aiMsgId, role: assistant, content: , loading: true }); this.messageList [...this.messageList]; // 3. 获取上下文发起流式请求 const context this.getRecentContext(); chatStreamCompletion( context, (text) { // 实时更新AI消息内容清洗格式 const cleanText cleanMarkdownText(text); const index this.messageList.findIndex(item item.id aiMsgId); if (index -1) { this.messageList[index].content cleanText; this.messageList[index].loading false; this.messageList [...this.messageList]; // 自动滚动到底部 this.scroller.scrollEdge(Edge.Bottom); } }, () { console.log(对话生成完成); }, (err) { // 异常兜底处理 const index this.messageList.findIndex(item item.id aiMsgId); if (index -1) { this.messageList[index].content 请求失败请检查网络后重试; this.messageList[index].loading false; this.messageList [...this.messageList]; } console.error(对话请求异常, err); } ) } // 清空所有对话记录 private clearAllChat() { this.messageList []; this.msgId 0; } // 切换模型 private selectModel(model: string) { this.currentModelName model; changeCurrentModel(model); this.showModelDialog false; } build() { Column() { // 顶部导航栏 Row() { Text(AI智能选礼助手) .fontSize(18) .fontWeight(FontWeight.Bold) .layoutWeight(1) Button(切换模型) .fontSize(12) .height(28) .onClick(() { this.showModelDialog true; }) Button(清空对话) .fontSize(12) .height(28) .margin({ left: 8 }) .onClick(() { this.clearAllChat(); }) } .width(100%) .padding(12) .backgroundColor(#f5f7fa) // 聊天列表区域 List({ scroller: this.scroller, space: 16 }) { ForEach(this.messageList, (item: ChatMessage) { ListItem() { if (item.role user) { // 用户消息气泡 Text(item.content) .backgroundColor(#409eff) .fontColor(Color.White) .padding(12) .borderRadius(16) .constraintSize({ maxWidth: 80% }) .fontSize(15) } else { // AI消息气泡 Text(item.loading ? AI思考中... : item.content) .backgroundColor(#ffffff) .fontColor(#333333) .padding(12) .borderRadius(16) .constraintSize({ maxWidth: 80% }) .fontSize(15) .border({ width: 1, color: #eeeeee }) } } .align(item.role user ? ItemAlign.End : ItemAlign.Start) .padding({ left: 12, right: 12 }) }) } .layoutWeight(1) .width(100%) .backgroundColor(#fafafa) // 底部输入区域 Row() { TextInput({ text: this.inputText, placeholder: 输入你的送礼需求... }) .layoutWeight(1) .height(40) .borderRadius(20) .backgroundColor(#ffffff) .padding({ left: 16, right: 16 }) .onChange((value) { this.inputText value; }) Button(发送) .width(70) .height(40) .borderRadius(20) .margin({ left: 8 }) .onClick(() { this.sendChatMessage(); }) } .width(100%) .padding(12) .backgroundColor(#ffffff) // 模型选择弹窗 DialogOverlay() { Column() { Text(选择推理模型) .fontSize(16) .fontWeight(FontWeight.Bold) .margin({ bottom: 20 }) ForEach(MODEL_LIST, (item: string) { Button(item) .width(100%) .height(44) .margin({ bottom: 8 }) .backgroundColor(this.currentModelName item ? #409eff : #f5f7fa) .fontColor(this.currentModelName item ? #ffffff : #333333) .onClick(() { this.selectModel(item); }) }) } .width(80%) .padding(20) .backgroundColor(#ffffff) .borderRadius(16) } .open(this.showModelDialog) .onCancel(() { this.showModelDialog false; }) } .width(100%) .height(100%) } }六、核心技术难点深度拆解与解决方案开发过程中遇到的鸿蒙端AI适配问题均为移动端大模型接入通用坑点这里逐一拆解根因和最优解决方案避免重复踩坑。6.1 ArkTS状态更新UI不刷新问题问题现象异步请求回调中修改State数组变量控制台打印变量已更新但页面UI无变化消息列表不刷新。根因鸿蒙状态渲染机制中数组属于引用类型直接修改数组内部元素不会触发视图更新。框架无法检测到引用地址未变化的局部修改。解决方案每次修改消息列表后通过解构赋值this.messageList [...this.messageList]更新数组引用地址强制触发UI渲染更新该方法是鸿蒙数组状态更新最高效的方案。6.2 SSE流式数据解析卡顿、丢字问题问题现象原生请求返回的流式数据碎片化严重直接拼接会出现文字错乱、重复、缺失打字机效果卡顿不流畅。根因SSE数据以分片形式传输单帧数据不完整且包含大量无效占位符、结束标记未做格式化过滤。解决方案固定通过data:分割数据流过滤[DONE]结束标记逐帧解析有效内容增量拼接文本保证打字机效果连贯、无错乱。6.3 上下文Token过载、接口响应变慢问题现象多轮对话累积消息过多请求体体积持续增大接口响应延迟升高算力消耗增加严重时触发模型Token超限报错。根因无限制留存历史对话每一轮请求都携带全部聊天记录上下文负载持续累积。解决方案设置对话阈值仅保留最近10轮用户与AI对话记录搭配固定系统提示词在保证对话连贯性的前提下最大程度压缩请求体积降低接口耗时和计费成本。6.4 模型输出Markdown符号干扰展示问题现象大模型默认输出加粗、标题、换行等Markdown符号移动端聊天框直接展示极其杂乱影响用户体验。解决方案自定义文本清洗工具类批量过滤无效格式符号保留纯文本内容同时不破坏原有段落结构适配移动端轻量化展示场景。6.5 多模型适配兼容问题问题现象不同大模型输出风格、响应速度、话术逻辑差异极大切换模型后出现适配异常。解决方案依托蓝耘MaaS统一协议所有模型共用一套请求参数、解析逻辑、UI渲染规则仅通过参数区分模型类型无需单独适配实现无感热切换。七、产品体验优化细节商用级别适配基础功能完成后通过细节优化将项目从demo级别提升至可商用级别适配大众用户使用习惯。第一增加快捷场景预设。在首页配置“女友生日礼物”“长辈节日送礼”“同事入职伴手礼”等高频场景按钮点击直接填充预设需求减少用户手动输入成本降低使用门槛。第二加载状态精细化处理。AI推理过程中展示“思考中”占位状态避免用户误以为应用卡顿网络超时、接口报错时展示友好提示杜绝空白页面和闪退问题。第三对话自动滚动。新增消息后页面自动滚动至最新内容无需用户手动滑动贴合聊天类产品交互习惯。第四气泡样式差异化区分。用户消息、AI消息采用不同配色、边框样式视觉层级清晰用户可快速区分对话角色。第五一键重置对话能力。支持用户手动清空所有上下文重新开启全新对话适配更换送礼场景、重置需求的使用场景。八、真实业务对话测试案例我们通过完整迭代式对话验证多轮上下文记忆能力模拟真实用户使用场景。用户给我女朋友选生日礼物预算500以内她喜欢摄影、喜欢小众文艺的东西不要网红爆款AI1. 复古胶片相机挂件套装预估120元小众复古设计贴合摄影爱好可作为桌面摆件颜值氛围感拉满2. 定制摄影光影相册预估260元可打印两人过往照片搭配文艺文案专属感极强3. 便携式复古补光灯滤镜套装预估450元适配日常拍照需求实用且贴合爱好无网红同质化问题。三套方案均控制在500元预算内小众不撞款。用户相册不太实用换掉再精致一点AI读取历史上下文预算500、女友、摄影文艺、拒绝网红款、剔除相册全新迭代三套方案不再重复历史推荐贴合用户精细化需求完成需求迭代。整个过程无需用户重复输入预算、喜好、送礼对象模型全程记忆历史对话信息完全复刻真人一对一咨询的交互体验。九、生产环境部署规范上线必看本地调试完成后必须按照以下规范改造项目方可正式上线应用市场规避安全和性能风险。1. 移除客户端所有API_KEY搭建Java/Node.js后端中转服务客户端仅调用自研后端接口由后端统一对接蓝耘MaaS网关彻底杜绝密钥泄露风险。2. 增加请求频率限制单用户每分钟最大请求次数防止恶意刷量产生高额计费。3. 本地持久化用户对话记录采用鸿蒙Preferences缓存用户重启应用可恢复历史对话。4. 增加异常重试机制网络波动时自动重试1-2次提升弱网环境使用体验。5. 配置模型降级策略首选极速模型保障响应速度高峰期自动切换高稳定模型避免服务不可用。十、项目总结与能力复用本文完成了鸿蒙原生礼物App AI选礼模块的全流程实战开发从业务痛点拆解、架构设计、代码落地、难点攻克、体验优化到生产部署形成一套完整、可复用的移动端MaaS接入方案。整套方案的核心价值不在于实现了聊天功能而在于用AI自然交互重构传统工具类App的业务逻辑。摒弃老旧的表单式交互用多轮对话承接用户模糊、动态、迭代化的真实需求大幅提升产品实用性和用户留存。所有代码和架构可直接复用至纪念日管理、节日送礼、亲友关怀、好物推荐等所有鸿蒙工具类应用无需大幅改造即可快速落地AI能力。依托蓝耘MaaS的统一模型网关开发者无需关注底层模型运维专注业务创新极大降低了鸿蒙AI应用的开发门槛。互动提问1. 你在鸿蒙AI开发中遇到过流式渲染UI刷新失效的问题吗2. 除了选礼场景你觉得还有哪些鸿蒙工具类App适合接入多轮对话AI能力欢迎在评论区交流。