引言
一开始的目标是在鸿蒙 App 里接入一个 AI 功能,例如智能搜索、AI 助手或支持自然语言操作。但实际开发后发现,不是给 App 加 AI,而是 AI 在重写整个 App 的逻辑,这是架构级别的变化。
一、最开始,我只是加了一个'AI 页面'
最初的实现很典型:首页新增一个 AI 页面,调用大模型接口,展示结果。
@Entry
@Component
struct AIPage {
@State input: string = ""
@State reply: string = ""
async send() {
this.reply = await aiService.chat(this.input)
}
}
当时以为这样完成了,但很快问题就来了。
二、AI 开始'绕过页面'
用户开始提一些请求,如帮我查一下订单、推荐几个商品、看看今天有什么安排。这些需求本来应该对应订单页、商品页、日程页,但现在用户根本没有进入这些页面,AI 直接返回了结果。
这时候第一次意识到:页面,不再是唯一入口了。
三、Service 层突然变成核心
以前代码结构是 Page → Service → API,但现在变成 AI → Service → Page → Service。也就是说 Service 被两个入口调用:UI 和 AI。
1 有些 Service 写在页面里
// Page 内部逻辑
async loadOrders() {
return await api.get("/orders")
}
AI 根本调不了。
2 有些逻辑和 UI 强绑定
this.loading = true
this.orders = await api.get()
this.loading = false
AI 也用不了,于是我不得不重构:把所有业务逻辑从页面里'抽出来'。
四、我开始把能力'服务化'
做的第一步是拆 Service。
export class OrderService {
async getOrders(userId: string) {
return await api.get("/orders")
}
}
然后 UI 和 AI 都调用:
await orderService.getOrders(userId)
这一刻变化很明显:App 不再是页面集合,而是能力集合。
五、我又加了一层:Tool
很快发现一个新问题,AI 并不知道该调用哪个 Service。于是加了一层 Tool。
export class OrderTool {
async execute(params) {
return await orderService.getOrders(params.userId)
}
}
AI 只需要调用 Tool,而不用关心底层实现,这时候架构变成:AI → Tool → Service。
六、我不得不引入'Agent'
再往后,用户输入开始变复杂,如帮我查订单,并推荐相关商品。这已经不是一个 Service 能完成的任务,需要多个步骤、多个能力组合执行。于是引入了 Agent。
export class Agent {
async run(input: string) {
const intent = await this.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 触发。
九、最大的变化,其实是'思维方式'
做完这个项目后,最大的感受不是代码变了,而是思维方式彻底变了。
以前在想:这个页面怎么设计?这个按钮放哪?这个流程怎么走? 现在在想:用户会说什么?系统怎么理解?能力怎么组合?任务怎么完成?
十、本质总结
如果用一句话总结这次变化:我不再是在做'页面应用',而是在做'能力系统'。
| 维度 | 传统 App | AI App |
|---|---|---|
| 入口 | 页面 | 意图 |
| 核心 | UI | Agent |
| 逻辑 | 固定流程 | 动态任务 |
| 结构 | 页面集合 | 能力系统 |
结语
一开始只是想给鸿蒙 App 加一个 AI 功能,但最后得到的是一个完全不同的应用架构。建议不要把 AI 当成功能,而要当成系统入口来设计。否则很快就会遇到架构混乱、代码失控、AI 能力无法扩展的问题。

