Skip to content

Commit 51700d5

Browse files
committed
docs: add design for AI Interaction
Updates #1454 Signed-off-by: Aofei Sheng <[email protected]>
1 parent 6ca1cc5 commit 51700d5

File tree

1 file changed

+155
-0
lines changed

1 file changed

+155
-0
lines changed

docs/product/ai-interaction.zh.md

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
# AI 交互(AI Interaction)
2+
3+
AI 交互是 Go+ Builder 中允许游戏在运行时与 AI 大语言模型进行通信的功能。通过这一功能,用户可以在游戏中创建智能对抗(如棋牌类游戏的人机对战)、智能对话、动态内容生成、自适应游戏体验等丰富的交互场景。
4+
5+
AI 交互功能专为学习编程的 10 岁左右的儿童设计,提供了极简的 API,使他们能够轻松地将 AI 能力集成到自己的游戏中,而无需理解复杂的网络请求、错误处理或 AI 模型细节。
6+
7+
## 基本概念
8+
9+
### AI 交互(AI Interaction)
10+
11+
AI 交互是指游戏运行时与外部 AI 大语言模型之间的通信过程。这种交互包括向 AI 发送消息以及接收和处理 AI 的回应。
12+
13+
AI 交互的基本流程是:
14+
15+
1. 游戏向 AI 发送消息(可能包含游戏状态等上下文信息)
16+
2. AI 处理消息并生成回应
17+
3. 游戏接收 AI 的回应并执行相应操作
18+
19+
### AI 角色(AI Role)
20+
21+
AI 角色是指 AI 在与游戏交互过程中所扮演的特定身份或行为模式。通过设定明确的角色,可以引导 AI 生成更加一致、更符合游戏场景的回应。
22+
23+
角色定义通常包含以下内容:
24+
25+
- 身份描述:角色的基本身份,如"向导"、"对手"、"老师"等
26+
- 行为准则:角色应该如何行事,包括语气、态度和决策风格
27+
- 知识范围:角色应该了解或不了解的内容范围
28+
- 目标导向:角色在游戏中的主要目标或任务
29+
30+
### AI 上下文(AI Context)
31+
32+
AI 上下文是帮助 AI 理解当前游戏状态、对话历史和环境信息的关键数据集合。良好的上下文能够使 AI 生成更加准确、相关的回应,提高游戏体验的智能性和连贯性。
33+
34+
AI 上下文分为两类:
35+
36+
1. 自动附着的上下文:由 spx 自动收集并提供给 AI 的信息,如对话历史、基本游戏环境等,这些信息无需用户手动提供,spx 会在每次 AI 交互时自动附加
37+
2. 用户提供的上下文:由开发者通过 API 显式提供的特定信息,如当前游戏状态、特殊规则、角色属性等,spx 会自动将这些信息转换为 AI 可理解的格式,使 AI 能够根据当前情境生成更加智能的回应
38+
39+
AI 上下文通常包含以下几种类型的信息:
40+
41+
- 游戏状态信息:如当前角色位置、游戏分数、收集的物品、已完成的任务等
42+
- 对话历史:之前与 AI 的交互记录,帮助 AI 理解对话的连续性
43+
- 环境信息:游戏世界的规则、可用资源、时间限制等
44+
- 用户信息:如用户的游戏风格、学习进度、困难点等
45+
46+
良好的上下文设计原则:
47+
48+
- 相关性:仅提供与当前任务或对话相关的信息
49+
- 简洁性:避免冗余信息,保持上下文数据结构清晰
50+
- 时效性:及时更新上下文,确保 AI 获得最新的游戏状态
51+
- 可理解性:以 AI 易于处理的方式组织信息
52+
53+
### AI 指令(AI Command)
54+
55+
AI 指令是游戏预先注册的、允许 AI 调用的函数。通过指令机制,AI 可以执行游戏中的特定操作,如移动精灵、播放声音、改变游戏状态等。
56+
57+
每个 AI 指令通常由以下组成部分:
58+
59+
- 指令结构:定义指令的名称、参数类型及其含义
60+
- 描述信息:说明指令的功能、使用场景和参数含义
61+
- 执行逻辑:指令对应的具体函数,接收参数并执行相应操作
62+
63+
### AI 消息(AI Message)
64+
65+
AI 消息是游戏发送给 AI 的文本内容,可以包含问题、指令或其他信息。AI 会根据消息内容生成回应。
66+
67+
AI 消息可以附带额外的上下文数据,帮助 AI 更好地理解游戏当前状态。
68+
69+
### AI 回应(AI Response)
70+
71+
AI 回应是 AI 对游戏发送的消息的处理结果。回应通常包含两部分:
72+
73+
1. 文本回应:AI 生成的文本内容
74+
2. AI 指令集:AI 决定按顺序调用的一系列 AI 指令
75+
76+
## API 设计
77+
78+
为了使 AI 交互功能易于使用,我们提供了 4 个核心 API:
79+
80+
### setAIRole
81+
82+
`setAIRole` 是一个"命令"类 API,用于设置 AI 在交互过程中应该扮演的角色。通过定义明确的角色,可以使 AI 的回应更加一致、更符合游戏场景,并避免在每次 `aiThink` 调用中重复角色描述。
83+
84+
```go
85+
setAIRole role
86+
setAIRole role, additionalContext
87+
```
88+
89+
为了便于使用,`setAIRole` 可以在游戏的任何时刻调用,以改变 AI 的角色设定。一旦设置,该角色将持续生效,直到被新的角色设定替换。
90+
91+
参数说明:
92+
93+
- `role``string` 类型,描述 AI 应该扮演的角色,如"向导"、"对手"、"老师"等
94+
- `additionalContext`:可选参数,`map[string]any` 类型,提供关于角色的额外上下文信息
95+
96+
### onAICommand
97+
98+
`onAICommand` 是一个"事件"类 API,用于注册可被 AI 调用的指令。用户可以通过它预定义游戏中可被 AI 执行的操作。
99+
100+
```go
101+
onAICommand T, (command) => {}
102+
```
103+
104+
参数说明:
105+
106+
- `T`:泛型,表示具体的 AI 指令结构体类型
107+
- `command``T` 类型,表示 AI 执行当前指令时传入的参数集合
108+
109+
指令结构体 `T` 需要满足以下要求:
110+
111+
1. 必须实现 `Desc() string` 方法:此方法返回指令的详细描述,包括指令的功能、使用场景和参数含义,用于帮助 AI 理解如何正确使用该指令
112+
2. 导出字段作为参数:结构体中所有导出字段(首字母大写)都会被 spx 自动识别为 AI 可设置的参数,这些字段的类型应当是基本类型(如 `string``int``float64``bool` 等)或其切片
113+
3. 字段标签:建议为每个字段添加描述性标签,如 `desc:"角色的名称"`,其中 `desc` 标签用于向 AI 提供该参数的详细说明
114+
115+
示例:
116+
117+
```go
118+
type MoveCommand struct {
119+
Direction string `desc:"移动方向,可选值:up, down, left, right"`
120+
Steps int `desc:"移动步数,正整数"`
121+
Speed float64 `desc:"移动速度,单位:像素/秒"`
122+
}
123+
124+
func (c MoveCommand) Desc() string {
125+
return "使角色按指定方向、步数和速度移动。此指令用于控制角色在游戏中的位置变化。"
126+
}
127+
```
128+
129+
### aiThink
130+
131+
`aiThink` 是一个"命令"类 API,用于向 AI 发送消息并选择性提供额外的上下文数据以获取回应。spx 会自动处理 AI 的回应,包括执行 AI 决定调用的指令。
132+
133+
```go
134+
aiThink msg
135+
aiThink msg, additionalContext
136+
```
137+
138+
为了便于使用,`aiThink` 采用阻塞式设计,且不返回任何值。如果请求过程中发生错误,spx 会自动重试若干次。如果多次尝试仍未成功,将触发通过 `onAIError` 注册的错误处理函数。如果未注册,则使用默认的错误处理方式。
139+
140+
参数说明:
141+
142+
- `msg``string` 类型,向 AI 发送的消息内容
143+
- `additionalContext`:可选参数,`map[string]any` 类型,提供给 AI 的额外上下文数据
144+
145+
### onAIError
146+
147+
`onAIError` 是一个"事件"类 API,用于注册当 AI 通信失败时的错误处理逻辑。通过定义错误处理函数,可以在网络请求失败或 AI 响应无效等错误发生时,向用户展示友好的提示信息。
148+
149+
```go
150+
onAIError (err) => {}
151+
```
152+
153+
参数说明:
154+
155+
- `err``error` 类型,具体的错误,可通过调用 `err.Error` 获得对应的字符串描述

0 commit comments

Comments
 (0)