做了一个 AI 鸿蒙 App,我发现逻辑变了

做了一个 AI 鸿蒙 App,我发现逻辑变了
在这里插入图片描述

子玥酱(掘金 / 知乎 / ZEEKLOG / 简书 同名)

大家好,我是子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚焦于业务型系统的工程化建设与长期维护。

我持续输出和沉淀前端领域的实战经验,日常关注并分享的技术方向包括前端工程化、小程序、React / RN、Flutter、跨端方案,
在复杂业务落地、组件抽象、性能优化以及多端协作方面积累了大量真实项目经验。

技术方向:前端 / 跨端 / 小程序 / 移动端工程化
内容平台:掘金、知乎、ZEEKLOG、简书
创作特点:实战导向、源码拆解、少空谈多落地
文章状态:长期稳定更新,大量原创输出

我的内容主要围绕 前端技术实战、真实业务踩坑总结、框架与方案选型思考、行业趋势解读 展开。文章不会停留在“API 怎么用”,而是更关注为什么这么设计、在什么场景下容易踩坑、真实项目中如何取舍,希望能帮你在实际工作中少走弯路。

子玥酱 · 前端成长记录官 ✨
👋 如果你正在做前端,或准备长期走前端这条路
📚 关注我,第一时间获取前端行业趋势与实践总结
🎁 可领取 11 类前端进阶学习资源(工程化 / 框架 / 跨端 / 面试 / 架构)
💡 一起把技术学“明白”,也用“到位”

持续写作,持续进阶。
愿我们都能在代码和生活里,走得更稳一点 🌱

文章目录

引言

一开始,我只是想做一件很简单的事:

在鸿蒙 App 里接入一个 AI 功能。

比如:

  • 做一个智能搜索
  • 加一个 AI 助手
  • 支持自然语言操作

听起来很普通,对吧?

但当我真的把一个 AI 鸿蒙 App 从 0 做到能用之后,我发现一件很不对劲的事:

不是我在给 App 加 AI,而是 AI 在重写整个 App 的逻辑。

而且这种变化,不是 UI 层面的,而是:

架构级别的变化 

一、最开始,我只是加了一个“AI 页面”

最初的实现很典型:

首页 ↓ 新增一个 AI 页面 ↓ 调用大模型接口 ↓ 展示结果 

代码大概是这样:

@Entry@Component struct AIPage {@State input:string=""@State reply:string=""asyncsend(){this.reply =await aiService.chat(this.input)}}

当时我以为:

“这不就完成了吗?”

但很快问题就来了。

二、AI 开始“绕过页面”

用户开始提一些请求:

帮我查一下订单 帮我推荐几个商品 帮我看看今天有什么安排 

这些需求本来应该对应:

订单页 商品页 日程页 

但现在:用户根本没有进入这些页面,AI 直接返回了结果。

这时候我第一次意识到:

页面,不再是唯一入口了。

三、Service 层突然变成核心

以前我的代码结构是:

Page → Service → API 

但现在变成:

AI → Service Page → Service 

也就是说:Service 被两个入口调用:

  • UI
  • AI

问题马上暴露出来:

1 有些 Service 写在页面里

// Page 内部逻辑asyncloadOrders(){returnawait api.get("/orders")}

AI 根本调不了。

2 有些逻辑和 UI 强绑定

this.loading =truethis.orders =await api.get()this.loading =false

AI 也用不了,于是我不得不重构:

把所有业务逻辑从页面里“抽出来”。

四、我开始把能力“服务化”

我做的第一步是:

拆 Service 

例如:

exportclassOrderService{asyncgetOrders(userId:string){returnawait api.get("/orders")}}

然后 UI 和 AI 都调用:

await orderService.getOrders(userId)

这一刻变化很明显:

App 不再是页面集合,而是能力集合。

五、我又加了一层:Tool

很快我发现一个新问题,AI 并不知道该调用哪个 Service。

于是我加了一层:

Tool 

例如:

exportclassOrderTool{asyncexecute(params){returnawait orderService.getOrders(params.userId)}}

AI 只需要:

调用 Tool 

而不用关心底层实现,这时候架构变成:

AI → Tool → Service 

六、我不得不引入“Agent”

再往后,问题又来了。用户输入开始变复杂:

帮我查订单,并推荐相关商品 

这已经不是一个 Service 能完成的任务,我需要:

多个步骤 多个能力 组合执行 

于是我引入了:

Agent 

示例:

exportclassAgent{asyncrun(input:string){const intent =awaitthis.parse(input)if(intent ==="order_and_recommend"){const orders =await orderTool.execute()const goods =await recommendTool.execute()return{ orders, goods }}}}

这时候我才彻底意识到:

AI 不只是调用接口,而是在“编排系统能力”。

七、UI 的地位明显下降了

以前:

UI = 核心 

现在:

AI = 核心 UI = 展示 

很多操作变成:

用户一句话 ↓ AI 完成 ↓ UI 展示结果 

甚至很多时候:UI 根本不参与流程

八、数据流也变了

传统数据流:

UI → Service → Data → UI 

现在变成:

用户输入 ↓ AI ↓ Service ↓ Data ↓ UI(展示) 

变化很关键:

数据流不再由 UI 触发,而是由 AI 触发。

九、最大的变化,其实是“思维方式”

做完这个项目后,我最大的感受不是代码变了,而是:

思维方式彻底变了。

以前我在想:

这个页面怎么设计? 这个按钮放哪? 这个流程怎么走? 

现在我在想:

用户会说什么? 系统怎么理解? 能力怎么组合? 任务怎么完成? 

十、本质总结

如果用一句话总结这次变化:

我不再是在做“页面应用”,而是在做“能力系统”。

对比一下:

维度传统 AppAI App
入口页面意图
核心UIAgent
逻辑固定流程动态任务
结构页面集合能力系统

结语

一开始我只是想:

给鸿蒙 App 加一个 AI 功能

但最后我得到的是:

一个完全不同的应用架构。

如果你现在也在做 AI 鸿蒙 App,我给你一个建议:

不要把 AI 当成功能,而要当成系统入口来设计。

否则你很快就会遇到:

  • 架构混乱
  • 代码失控
  • AI 能力无法扩展

Read more

轮腿机器人代码调试补充

轮腿机器人代码调试补充

* @Author: 星夜雨夜 * @brief: 轮腿基础代码编写调试补充,移植自达妙开源代码 * @attention:笔者默认读者已经熟练掌握机甲大师RoboMaster c型开发板例程代码的底盘代码和INS_task.c陀螺仪代码、熟练掌握各电机can协议和遥控器dbus协议。默认读者已能看懂轮腿圣经和玺佬的五连杆运动学解算与VMC。建议读者仔细研读轮腿圣经3~5遍,边看MATLAB文件和达妙开源代码,掌握轮腿调试和编写大致思路。一定要注意各状态变量的单位和正负号是否正确,轮腿调试过程中,最难之处在于极性是否正确。本车所有电机均为逆时针旋转为正方向。 !!!强烈建议读者在开发轮腿之前,先运用LQR算法完成一阶倒立摆的平衡小车(即板凳模型)的实现 !!!如果时间紧,其实完全可以不搞仿真,直接实机开调。仿真不疯,实物不一定不疯;但实物疯,仿真必疯。 调试成果展示视频链接(抖音):轮腿机器人 一阶倒立摆平衡小车参考资料: 1.本科毕设 轮腿式双足机器人 开源文件演示_哔哩哔哩_bilibili(资料在视频评论区) 2.达妙平衡小车开源:[达妙科技开源系列-平衡小车] 第一弹_哔哩

四大机器人与PLC信号交互

工业机器人与PLC信号交互实战指南:ABB、FANUC、KUKA、安川全解析 在一条自动化产线上,你是否曾遇到这样的场景?操作员按下启动按钮,PLC逻辑一切正常,安全条件全部满足——可机器人就是不动。排查半天,最后发现是“自动模式”信号没给到位,或者电平类型接反了。这种看似低级却频繁发生的联调问题,背后往往暴露的是对机器人与PLC信号交互机制理解的不足。 对于刚进入自动化系统集成领域的工程师来说,面对 ABB、FANUC、KUKA 和安川这四大主流机器人品牌,最常踩的坑不是复杂的运动控制算法,而是最基础的—— 怎么让机器人听懂PLC的指令 。这些机器人的控制器就像一个个性格迥异的“执行官”,它们接受命令的方式、回应状态的习惯、甚至对“急停复位”这类关键动作的理解都不尽相同。 本文不讲高深理论,也不堆砌术语,而是从一线调试经验出发,带你穿透不同品牌之间的信号壁垒,真正搞明白: 哪些信号必须接?怎么接才可靠?为什么有时候信号给了却没反应? 工业环境中,PLC 通常是整条线的“大脑”,负责流程调度、安全监控和外围设备协调;而机器人则是“手”

医疗连续体机器人模块化控制界面设计与Python库应用研究(下)

医疗连续体机器人模块化控制界面设计与Python库应用研究(下)

软件环境部署 系统软件架构以实时性与兼容性为核心设计目标,具体配置如下表所示: 类别配置详情操作系统Ubuntu 20.04 LTS,集成RT_PREEMPT实时内核补丁(调度延迟<1 ms)开发环境Python 3.8核心库组件PyQt5 5.15.4(图形界面)、OpenCV 4.5.5(图像处理)、NumPy 1.21.6(数值计算) 该环境支持模块化控制界面开发与传感器数据的实时融合处理,为连续体机器人的逆运动学求解(如FB CCD算法测试)提供稳定运行基础[16]。 手眼协调校准 为实现视觉引导的精确控制,需完成相机与机器人基坐标系的空间映射校准,具体流程如下: 1. 标识点布置:在机器人末端及各段首尾、中间位置共固定7个反光标识点,构建臂型跟踪特征集[29]; 2. 数据采集:采用NOKOV度量光学动作捕捉系统(8台相机,

【PX4+ROS完全指南】从零实现无人机Offboard控制:模式解析与实战

【PX4+ROS完全指南】从零实现无人机Offboard控制:模式解析与实战

引言 无人机自主飞行是机器人领域的热门方向,而PX4作为功能强大的开源飞控,配合ROS(机器人操作系统)的灵活性与生态,成为实现高级自主飞行的黄金组合。然而,许多初学者对PX4的飞行模式理解不清,更不知道如何通过ROS编写可靠的Offboard控制程序。 本文将带你彻底搞懂PX4 6大核心飞行模式,实现无人机的自动起飞、悬停、轨迹跟踪(圆形/方形/螺旋)与降落。 亮点一览: * ✅ 深度解析PX4飞行模式(稳定/定高/位置/自动/Offboard) * ✅ 明确ROS可控制的模式与指令接口 * ✅ 完整的ROS功能包(C++实现,状态机设计) * ✅ 支持位置控制与速度控制双模式 * ✅ 内置圆形、方形、螺旋轨迹生成器 * ✅ 详细的安全机制与失效保护配置 无论你是准备参加比赛、做科研,还是想入门无人机开发,这篇文章都将是你宝贵的参考资料。 第一部分:PX4飞行模式深度剖析 PX4的飞行模式可以看作一个控制权逐级递增的层级结构。理解这些模式是编写控制程序的前提。 1. 稳定模式(STABILIZED / MANUAL / ACRO) * 核心特点: