鸿蒙游戏里的 AI Agent 设计


网罗开发 (小红书、快手、视频号同名)

大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验 。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员

👋 大家好,我是展菲!

📱 全网搜索"展菲",即可纵览我在各大平台的知识足迹。

📣 公众号"Swift社区",每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。

💬 微信端添加好友"fzhanfei",与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。

📅 最新动态:2025 年 3 月 17 日

快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!

文章目录

引言

如果说前一篇我们讨论的是:

AI Agent 会不会改变 App 形态

那么在鸿蒙游戏里,这个问题会变得更加具体:

AI 能不能直接"玩游戏"?

在 HarmonyOS 的生态中,随着端侧 AI 能力增强,一个新的方向正在出现:

复制代码
玩家操作 → AI 操作
UI 交互 → 智能体决策

也就是说:

游戏不再只是"给人玩的",而是可以"给 AI 运行的"

这篇文章,我们就从工程角度讲清楚:

鸿蒙游戏里的 AI Agent,到底该怎么设计?

一、先看问题:为什么游戏需要 AI Agent?

很多人第一反应是:

游戏里不是早就有 AI(NPC)了吗?

确实,但传统游戏 AI 是这样的:

ts 复制代码
// 典型状态机
if (playerInRange) {
  attack()
} else {
  patrol()
}

特点:

  • 写死逻辑
  • 行为固定
  • 不具备学习能力

而 AI Agent:

ts 复制代码
// 决策驱动
const action = await agent.decide(state)
execute(action)

特点:

  • 动态决策
  • 可学习
  • 可扩展

本质区别:

复制代码
传统AI:规则驱动
Agent:策略驱动

二、鸿蒙游戏中的 Agent 架构

一个完整的 AI Agent 系统,可以拆成四层:

复制代码
感知层(State)
   ↓
决策层(Agent)
   ↓
执行层(Action)
   ↓
环境层(Game Engine)

在鸿蒙应用中,通常结构是:

复制代码
entry
 ├─ pages
 ├─ components
 ├─ services
 ├─ ai   ← 新增
 └─ models

三、第一步:定义游戏状态

AI 想做决策,前提是"看懂世界"。

1、原始游戏状态

ts 复制代码
// 游戏内部数据(复杂且不稳定)
player.x
enemy.spriteFrame
collisionBox

问题:

  • 不统一
  • 不适合 AI

2、抽象状态

ts 复制代码
// models/GameState.ets
export interface GameState {
  player: {
    x: number
    y: number
    hp: number
  }
  enemies: {
    x: number
    y: number
    type: string
  }[]
}

3、状态获取

ts 复制代码
// services/GameStateService.ets
export class GameStateService {

  getState(): GameState {
    return {
      player: getPlayer(),
      enemies: getEnemies()
    }
  }

}

核心原则:

给 AI 的,一定是"稳定结构的数据",而不是引擎细节

四、第二步:定义动作空间

AI 能做什么,决定了它"能玩到什么程度"。

1、基础动作

ts 复制代码
// models/Action.ets
export type Action =
  | 'LEFT'
  | 'RIGHT'
  | 'JUMP'
  | 'ATTACK'
  | 'IDLE'

2、执行动作

ts 复制代码
// services/ActionService.ets
export class ActionService {

  execute(action: Action) {
    switch (action) {
      case 'LEFT':
        moveLeft()
        break
      case 'RIGHT':
        moveRight()
        break
      case 'JUMP':
        jump()
        break
      case 'ATTACK':
        attack()
        break
    }
  }

}

五、第三步:Agent 决策层

1、最简单的 Agent

ts 复制代码
// ai/SimpleAgent.ets
export class SimpleAgent {

  decide(state: GameState): Action {
    const enemy = state.enemies[0]

    if (!enemy) return 'IDLE'

    if (enemy.x < state.player.x) return 'LEFT'
    if (enemy.x > state.player.x) return 'RIGHT'

    return 'ATTACK'
  }

}

这只是"伪 Agent",本质还是规则。

2、模型驱动 Agent

ts 复制代码
// ai/ModelAgent.ets
export class ModelAgent {

  async decide(state: GameState): Promise<Action> {
    const input = this.encode(state)
    const result = await this.runModel(input)
    return this.decode(result)
  }

  encode(state: GameState) {
    return JSON.stringify(state)
  }

  async runModel(input: string) {
    // 调用本地模型 / 云模型
  }

  decode(output: any): Action {
    return output.action
  }

}

六、第四步:调度循环

关键问题:

Agent 怎么接入游戏循环?

1、游戏循环

ts 复制代码
function gameLoop() {
  update()
  render()
}

2、接入 Agent

ts 复制代码
const agent = new ModelAgent()
const stateService = new GameStateService()
const actionService = new ActionService()

async function gameLoop() {
  const state = stateService.getState()

  const action = await agent.decide(state)

  actionService.execute(action)

  update()
  render()
}

这样 AI 就"接管了玩家"。

七、鸿蒙特有优化:端侧 Agent

在 HarmonyOS 上,有一个关键优势:

端侧 AI 能力

1、本地推理

ts 复制代码
async runModel(input) {
  return await localModel.infer(input)
}

优点:

  • 无网络依赖
  • 响应快
  • 隐私安全

2、分层策略

ts 复制代码
if (simpleCase) {
  return ruleAgent.decide(state)
} else {
  return modelAgent.decide(state)
}

提升性能。

八、进阶:多 Agent 系统

不仅可以一个 AI,还可以多个:

1、敌人 AI

ts 复制代码
enemyAgent.decide(state)

2、队友 AI

ts 复制代码
allyAgent.decide(state)

3、玩家 AI

ts 复制代码
playerAgent.decide(state)

形成:

复制代码
多智能体系统(Multi-Agent)

九、常见坑

1、状态设计过复杂,AI 学不会。

2、动作过多,决策空间爆炸。

3、性能问题,每帧调用模型会卡顿。

解决:

ts 复制代码
// 降频
if (frame % 5 === 0) {
  action = await agent.decide(state)
}

4、不可控行为,AI 做出"奇怪操作"。

解决:

  • 加规则约束
  • 限制动作空间

总结

鸿蒙游戏里的 AI Agent,本质是把"玩家"抽象成一个系统模块:

复制代码
玩家 → Agent
操作 → Action
感知 → State

从工程角度,可以总结为三步:

1、抽象世界

ts 复制代码
Game → GameState

2、定义行为

ts 复制代码
Input → Action

3、接入循环

ts 复制代码
GameLoop → Agent → Action

最终你会得到一个完全不同的游戏形态:

复制代码
人玩游戏
AI 也能玩游戏
甚至 AI 比人更会玩

如果再往前一步,这个系统甚至可以变成:

一个可训练、可评估、可演化的 AI 世界

这也是为什么很多人开始把游戏引擎(甚至像 OpenClaw)看成:

下一代 AI 系统的"环境层"。

相关推荐
AI周红伟16 分钟前
All in Token, 移动,电信,联通,阿里,百度,华为,字节,Token石油战争,Token经济,百度要“重写”AI价值度量
大数据·人工智能·机器学习·百度·copilot·openclaw
AI周红伟17 分钟前
Token经济学:AI时代的新货币战争,All in Token, 新时代的石油战争,华为,阿里,百度,字节的石油战争
大数据·人工智能·机器学习·百度·华为·copilot·openclaw
XM_jhxx4 小时前
±0.03mm的精度怎么保证?翌东塑胶用AI赋能质量管控升级
人工智能
阿正的梦工坊4 小时前
深入理解 PyTorch 中的 unsqueeze 操作
人工智能·pytorch·python
秦歌6666 小时前
DeepAgents框架详解和文件后端
人工智能·langchain
测试员周周7 小时前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战
开发语言·前端·人工智能·python·功能测试·appium·测试用例
霸道流氓气质7 小时前
基于 Milvus Lite 的 Spring AI RAG 向量库实践方案与示例
人工智能·spring·milvus
ar01237 小时前
AR巡检平台:构筑智能巡检新模式的数字化引擎
人工智能·ar
语音之家7 小时前
【预讲会征集】ACL 2026 论文预讲会
人工智能·论文·acl
碳基硅坊7 小时前
电商场景下的商品自动识别与辅助上架
人工智能