
网罗开发 (小红书、快手、视频号同名)
大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。
图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG
我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验 。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。
展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索"展菲",即可纵览我在各大平台的知识足迹。
每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
文章目录
-
- 引言
- 一、先说结论
- 二、最常见错误
-
- [直接调用 AI](#直接调用 AI)
- [三、正确架构:NPC = Agent + Store + Service](#三、正确架构:NPC = Agent + Store + Service)
- 四、第一层:感知系统
- 五、第二层:记忆系统
- 六、第三层:决策系统
- 七、第四层:行为系统
- [八、完整 NPC 架构](#八、完整 NPC 架构)
- 九、多端协同
- 十、加入"人格系统"
- 十一、加入"长期记忆"
- 十二、常见错误
- 总结
引言
如果你做过一点 AI 游戏,很快会发现一个问题:
NPC 看起来"会说话",但其实"不聪明"。
典型表现:
- 只能回答,不能行动
- 记不住上下文
- 不理解游戏状态
- 行为和世界脱节
本质原因是:
你做的不是 NPC,而是"聊天接口"。
在 HarmonyOS 的架构中:
智能 NPC,不是一个 API,而是一个"系统角色"。
一、先说结论
一个完整的智能 NPC,必须具备 4 个能力:
1、感知(Perception)
2、记忆(Memory)
3、决策(Decision)
4、行为(Action)
如果缺任何一个:
NPC 都只是"假智能"
二、最常见错误
直接调用 AI
ts
const reply = await aiService.chat("你好")
然后显示:
ts
Text(reply)
问题:
- 不知道玩家是谁
- 不知道当前任务
- 不知道世界状态
本质:
没有"上下文系统"
三、正确架构:NPC = Agent + Store + Service
核心结构
玩家输入
↓
NPC Agent
↓
AI Service
↓
Action(行为)
↓
Store(世界状态)
↓
UI(表现)
重点:
AI 不直接输出 UI,而是输出"行为"
四、第一层:感知系统
NPC 必须"看见世界"。
输入来源:
玩家行为
游戏状态
任务进度
环境变化
示例
ts
getContext() {
return {
player: gameStore.state.player,
task: gameStore.state.task,
location: gameStore.state.map
}
}
这是 AI 的"输入"。
五、第二层:记忆系统
NPC 必须"记得过去"。
错误
ts
ai.chat("你好")
每次都是新对话。
正确
ts
memory = [
{ role: "user", content: "你好" },
{ role: "npc", content: "你好,冒险者" }
]
示例
ts
class NPCMemory {
history: string[] = []
add(msg: string) {
this.history.push(msg)
}
getRecent() {
return this.history.slice(-5)
}
}
本质:
记忆 = NPC 的"人格基础"
六、第三层:决策系统
AI 不应该直接输出文本,而是:
输出"行为意图"
示例 Prompt
ts
你是一个 NPC,请根据以下信息决定行为:
玩家状态:...
任务状态:...
历史对话:...
输出:
{
"action": "TALK | GIVE_TASK | ATTACK",
"content": "..."
}
代码
ts
const result = await aiService.chat(prompt)
const decision = JSON.parse(result)
结果:
ts
{
action: "GIVE_TASK",
content: "帮我找一把剑"
}
AI 不再只是"聊天"。
七、第四层:行为系统
AI 决策必须落地到游戏系统。
示例
ts
handleDecision(decision) {
switch (decision.action) {
case 'TALK':
gameStore.dispatch({
type: 'NPC_SPEAK',
payload: decision.content
})
break
case 'GIVE_TASK':
taskService.createTask(decision.content)
break
case 'ATTACK':
battleService.startCombat()
break
}
}
本质:
AI → Action → 游戏系统
八、完整 NPC 架构
玩家输入
↓
Perception(感知)
↓
Memory(记忆)
↓
AI Decision(决策)
↓
Action(行为)
↓
Store(世界状态)
↓
UI(表现)
完整闭环。
九、多端协同
NPC 不一定只在一个设备上。
示例:
手机:输入对话
TV:展示 NPC
Pad:显示任务
数据流
NPC Action
↓
Store
↓
分布式同步
↓
多端 UI
NPC 是"全场景角色"。
十、加入"人格系统"
让 NPC 更真实。
示例
ts
personality = {
name: "守卫",
tone: "严肃",
goal: "保护城门"
}
Prompt
ts
你是一个严肃的守卫,目标是保护城门...
NPC 会稳定输出风格。
十一、加入"长期记忆"
示例
ts
longTermMemory = {
playerReputation: 80,
completedTasks: []
}
AI 决策:
根据玩家声望改变行为
NPC 更像"活人"。
十二、常见错误
1、把 NPC 当聊天机器人
2、没有记忆
3、AI 直接改 UI
4、不接入 Store
5、没有行为系统
总结
鸿蒙游戏中智能 NPC 的正确架构:
感知(输入)
+ 记忆(上下文)
+ 决策(AI)
+ 行为(Action)
结合 HarmonyOS 的能力:
Store(统一状态)
+ 分布式(多端)
+ 状态驱动 UI
最终带来的不是"更聪明的 NPC",而是:
一个"会思考、会行动、会成长"的游戏角色系统。
最后:
NPC 的上限,不取决于模型,而取决于你给它的"系统能力"。