鸿蒙游戏里的 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 系统的"环境层"。

相关推荐
Elastic 中国社区官方博客21 小时前
Elasticsearch:使用 Agent Builder 的 A2A 实现 - 开发者的圣诞颂歌
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
chools21 小时前
【AI超级智能体】快速搞懂工具调用Tool Calling 和 MCP协议
java·人工智能·学习·ai
郝学胜-神的一滴21 小时前
深度学习必学:PyTorch 神经网络参数初始化全攻略(原理 + 代码 + 选择指南)
人工智能·pytorch·python·深度学习·神经网络·机器学习
leobertlan21 小时前
好玩系列:用20元实现快乐保存器
android·人工智能·算法
笨笨饿21 小时前
#58_万能函数的构造方法:ReLU函数
数据结构·人工智能·stm32·单片机·硬件工程·学习方法
jr-create(•̀⌄•́)21 小时前
从零开始:手动实现神经网络识别手写数字(完整代码讲解)
人工智能·深度学习·神经网络
nashane1 天前
HarmonyOS 6学习:解决异步场景下Toast提示框无法弹出的UI上下文丢失问题
学习·ui·harmonyos·harmony app
冬奇Lab1 天前
一天一个开源项目(第78篇):MiroFish - 用群体智能引擎预测未来
人工智能·开源·资讯
冬奇Lab1 天前
你的 Skill 真的好用吗?来自OpenAI的 Eval 系统化验证 Agent 技能方法论
人工智能·openai
数智工坊1 天前
Transformer 全套逻辑:公式推导 + 原理解剖 + 逐行精读 - 划时代封神之作!
人工智能·深度学习·transformer