动手创造 · PROJECT LAB
准备探索你的新作品
聊天机器人
0%
★★ 项目难度每一步,都离作品更近
先了解你将做出什么
应用介绍
这个机器人不连接网络,也不需要训练模型:它把输入统一成小写文字,再按关键词选择回复。 你会看到一个“先判断、再回答”的完整对话循环,也会明白这种规则机器人和真正的人工智能有什么区别。

聊天机器人教程(难度系数:★★)
准备界面
| 组件类型 | 组件名称 | 关键设置 |
|---|---|---|
| 文本输入框 | 文本输入框_消息 |
Hint:和机器人说点什么 |
| 按钮 | 按钮_发送 |
文本:发送 |
| 按钮 | 按钮_清空 |
文本:清空 |
| 标签 | 标签_转写 |
显示对话记录 |
| 标签 | 标签_状态 |
显示请求状态 |
| 文本朗读器 | 文本朗读器1 |
非可视组件 |
把回答规则抽成函数
先处理最具体的关键词,再处理一般问候,最后用兜底回复。顺序很重要:如果先判断“你好”, 包含“你好不好”的句子就会过早结束,后面的规则永远走不到。
function 生成回复(输入) {
var 文本 = lower(trim(输入))
var 回复文本 = join("我听到了:", 输入)
if textcontains(文本, "不开心") {
回复文本 = "听起来你有点难过,先休息一下吧。"
} else if textcontains(文本, "你好") {
回复文本 = "你好!今天想聊点什么?"
} else if textcontains(文本, "再见") {
回复文本 = "再见,随时欢迎回来。"
} else if textcontains(文本, "你是谁") {
回复文本 = "我是一个用代码写出来的规则机器人。"
}
return 回复文本
}
这不是理解句子,而是查找关键词。它的优点是简单、可预测,缺点是遇到没写过的表达方式就只能走兜底分支。
发送一条消息
把每轮对话追加到全局字符串里,再一次性更新标签。这样不会因为只设置最后一行而丢掉前面的聊天记录。
global 对话记录 = ""
global 回复 = ""
when Screen1.Initialize() {
对话记录 = "机器人:你好!试试输入“你好”或“你是谁”。"
标签_转写.Text = 对话记录
}
when 按钮_发送.Click() {
if isempty(文本输入框_消息.Text) {
标签_状态.Text = "先输入一句话"
} else {
回复 = 生成回复(文本输入框_消息.Text)
对话记录 = join(对话记录, " | 我:", 文本输入框_消息.Text, " | 机器人:", 回复)
标签_转写.Text = 对话记录
标签_状态.Text = "已回复"
文本朗读器1.Speak(回复)
文本输入框_消息.Text = ""
}
}
清空对话
清空只重置当前屏幕上的记录,不会影响其他 App 数据。之后再发送消息,机器人会从新的对话开始。
when 按钮_清空.Click() {
对话记录 = "机器人:我们重新开始吧。"
标签_转写.Text = 对话记录
标签_状态.Text = "已清空"
文本朗读器1.Stop()
}
开始测试
- 输入“你好”,是否得到问候。
- 输入“我不开心”,是否优先得到安慰,而不是普通问候。
- 输入“你是谁”,是否命中对应规则;输入没见过的话,是否走兜底回复。
- 连续发送三句话,记录是否完整保留。
- 点击清空后再发送,是否只看到新的对话。
剩余工作
可以把关键词和回复放进列表或字典,增加“天气”“学习”“音乐”等主题;还可以用 微数据库 保存对话。
如果希望机器人真的根据语义理解问题,就需要接入专门的模型或在线服务,并额外处理隐私和网络失败。
边做边查
打开全部组件速查
卡在哪一步?直接查操作
不用退出当前教程。速查会在新页面打开,查完回来继续刚才的进度。