做了一个 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

.NET 的 WebApi 项目必要可配置项都有哪些?

.NET 的 WebApi 项目必要可配置项都有哪些?

目录 一、数据库配置 (一)选择合适的数据库提供程序 (二)配置数据库连接字符串 (三)数据库迁移(以 EF Core 为例) 二、依赖注入配置 (一)理解依赖注入 (二)注册服务 (三)使用依赖注入 三、Swagger 配置 (一)安装 Swagger 相关包 (二)配置 Swagger 服务 (三)启用 Swagger 中间件 四、接口接收和输出大小写配置 (一)接口接收大小写配置 (二)接口输出大小写配置 五、跨域配置 (一)什么是跨域 (二)配置跨域 六、身份验证与授权配置

本地服务器用 OpenClaw + Open WebUI 搭建企业多部门 AI 平台(附 Docker 避坑指南)

本地服务器用 OpenClaw + Open WebUI 搭建企业多部门 AI 平台(附 Docker 避坑指南)

引言: 最近在尝试使用 OpenClaw,发现这个 AI 个人助理框架非常有意思。于是团队里就有人提出:能不能为公司的多个部门,分别搭建专属的 OpenClaw 服务器? 诚然,现在有钉钉、飞书等成熟的办公软件可以接入 AI,但对于一些尚未全面普及此类协作软件的企业(或者需要绝对私有化部署的团队)来说,独立搭建一套内部 AI 门户依然是刚需。 起初,我们考虑直接让大家通过 OpenClaw 自带的 Web 界面进行跨电脑访问。但实操后发现这存在致命缺陷: 1. 权限越界:自带的 Web 端拥有底层的配置编辑权限,暴露给普通员工极其不安全。 2. 无法溯源:多终端共用一个 Web 界面,根本无法追溯对话是由谁发起的。 3. 缺乏隔离:无法按部门精细化分配 API 额度或限制特定部门只能访问特定的 OpenClaw 节点,无法实现业务隔离。 为了解决这些痛点,我们最终确定了这套架构方案:

gpt-oss-20b-WEBUI安装失败?这五个点必须检查

gpt-oss-20b-WEBUI安装失败?这五个点必须检查 你是不是也遇到过这样的情况:镜像已经部署完成,网页推理入口也点开了,但页面一直转圈、报错404、提示“Connection refused”,或者干脆连后台服务都起不来?别急着重装——gpt-oss-20b-WEBUI这类基于vLLM+OpenWebUI的轻量级开源推理镜像,安装失败往往不是模型本身的问题,而是几个关键环节被忽略了。 本文不讲从零编译、不堆参数配置,只聚焦一个目标:帮你快速定位并解决90%以上的部署卡点。我们结合真实部署日志、用户反馈和镜像运行机制,提炼出五个最常被跳过的检查项。它们不炫技、不复杂,但每一条都直击安装失败的核心原因。 1. 显存是否真够用?别被“双卡4090D”误导 镜像文档里写着“双卡4090D(vGPU),微调最低要求48GB显存”,但很多人忽略了这句话的潜台词:这是指vLLM推理时实际可用的显存,不是系统显示的总显存。 vLLM对显存的使用非常“挑剔”。它需要连续的大块显存来加载KV缓存,而GPU在启动过程中会被系统、驱动、X Server甚至NVIDIA Container