跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
TypeScriptSaaSAI大前端

做 AI 鸿蒙 App 后,我重构了应用逻辑

在鸿蒙 App 里接入 AI 后,原本按页面组织的逻辑开始失效:用户会直接用自然语言触发查订单、推荐商品、查询日程等操作,页面不再是唯一入口。文章按实际演进梳理了从“AI 页面”到 Service 服务化,再到 Tool 和 Agent 编排的重构过程,说明 UI 逐渐退到展示层,数据流也从页面驱动变成意图驱动。最后的结论很明确:AI App 不是给页面加一个功能,而是把应用改造成可被 AI 编排的能力系统。

字节跳动发布于 2026/6/30更新于 2026/10/2570 浏览
做 AI 鸿蒙 App 后,我重构了应用逻辑

在这里插入图片描述

引言

一开始,我只想在鸿蒙 App 里接一个 AI 功能,目标很朴素:做个智能搜索、加一个 AI 助手,或者让用户能直接用自然语言操作应用。听上去只是多了一个入口,真正做起来才发现,变化不在页面上,而在逻辑层。

从'加一个 AI 页面'开始

最早的实现很直观:首页旁边再放一个 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 之后,调用链开始变成:

AI → Service → Page → Service

同一个 Service 现在既要服务 UI,也要给 AI 调用。问题很快露出来了。

有些业务逻辑写死在页面里,AI 根本碰不到:

// Page 内部逻辑
async loadOrders() {
  return await api.get("/orders")
}

还有些逻辑直接和界面状态绑在一起,比如 loading、列表渲染、空态处理,这类代码对 AI 没什么用,反而会把业务层拖得很脏。最后只能老老实实拆:把能复用的能力从页面里抽出来。

把能力拆成 Service

我先做的是 Service 化。

export class OrderService {
  async getOrders(userId: string) {
    return await api.get("/orders")
  }
}

拆完之后,UI 和 AI 都只面对同一层能力:

await orderService.getOrders(userId)

这一步看起来不复杂,但很关键。App 不再只是页面拼起来的东西,而更像是一组可以被复用的能力。

再往上一层,补一个 Tool

Service 拆出来以后,新的问题来了:AI 并不知道该调哪个能力,也不该直接知道底层 API 怎么实现。于是我加了一层 Tool,把'怎么调用'这件事包起来。

export class OrderTool {
  async execute(params) {
    return await orderService.getOrders(params.userId)
  }
}

AI 只要调用 Tool 就行,不用关心下面是 Service、API 还是别的什么实现。结构变成了:

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 的位置变了

传统 App 里,UI 是起点,也是大部分流程的中心。接入 AI 之后,UI 更像结果展示层。

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

很多操作甚至不需要用户先进入某个页面,UI 只是把 AI 的处理结果呈现出来。它没有退场,只是退到了后面。

数据流也换了一套思路

以前的数据流大多是:

UI → Service → Data → UI

现在更像:

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

区别不只是箭头方向。以前是页面驱动流程,现在更像是意图驱动流程。这个变化会直接影响你怎么拆模块、怎么定义边界、怎么做复用。

真正变的是思维方式

项目做完以后,我最大的感受不是代码多了,而是思路变了。

以前会先想:这个页面怎么设计,按钮放哪,流程怎么走。现在先想的是:用户可能会怎么说,系统怎么理解,哪些能力可以组合,任务怎么拆开。

这不是一个小修小补的变化。它会逼着你重新看待 App 的核心。

结论

如果只用一句话概括这次变化,我会说:我做的已经不再是页面应用,而是能力系统。

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

结语

最开始,我只是想给鸿蒙 App 加一个 AI 功能。做完之后才发现,真正被改写的是应用架构本身。

如果你现在也在做 AI 鸿蒙 App,我的建议很直接:别把 AI 当成一个额外页面,它更像系统入口。这样设计,后面扩展能力、重构逻辑、接更多工具时,才不会把自己绕进去。

目录

  1. 引言
  2. 从“加一个 AI 页面”开始
  3. AI 开始绕过页面
  4. Service 层被推到前台
  5. 把能力拆成 Service
  6. 再往上一层,补一个 Tool
  7. 复杂任务逼出了 Agent
  8. UI 的位置变了
  9. 数据流也换了一套思路
  10. 真正变的是思维方式
  11. 结论
  12. 结语

更多推荐文章

查看全部
  • 学术写作中降低 AIGC 检测率的实用工具指南
  • wechat-need-web 浏览器扩展实现微信网页版访问
  • 前端文件上传处理:提升用户体验与性能优化
  • LLM 大模型:提升回答质量的关键在于提问技巧
  • Python 基础语法详解:变量、类型、运算符与输入输出
  • IntelliJ IDEA 打包 Web 项目 WAR 包及 Tomcat 部署指南
  • Spring Boot 4.0 虚拟线程时代:WebFlux 与 WebMVC 选型分析
  • C++ 算法入门:一维动态规划基础实战
  • 华为 OD 技术面试:C++ 核心考点与特性解析
  • 分布式训练框架的编程基础与 PyTorch RPC 实践
  • VS Code Copilot 实战指南:从安装到高级配置
  • LLM 微调实战:使用 Code-Llama 训练自定义代码数据集
  • 7 篇必读的大模型前沿论文精选
  • MATLAB 实现基于多目标粒子群算法(MOPSO)的无人机三维路径规划
  • OpenClaw 安全 AI 助理从零搭建实战指南
  • OpenClaw 集成 QVeris 实现 AI 助手实时数据查询
  • Java 并发工具类:CyclicBarrier 使用详解
  • 编程学习如何保持兴趣与动力:方法与路线指南
  • IntelliJ IDEA 中配置使用 Claude Code 方法
  • 基于 MS-Swift 框架的 DeepSeek-R1 部署与微调指南

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online