概述
在 Rokid 眼镜上构建语音交互应用,核心在于如何把自然语言转化为具体的设备动作。这次我们将基于现有的 AI 语音查天气功能,扩展 GPS 自动定位和多轮对话上下文,并接入 LLM 生成个性化的旅游规划建议。
主要涉及的技术点包括:
- GPS 自动定位:识别'这里天气'等意图,直接获取位置信息。
- 多轮对话管理:处理'上海呢'、'那边呢'等续播指令。
- AI 旅游规划:结合天气数据调用 Claude API 生成行程建议。
- Kotlin 辅助类封装:LocationHelper、ConversationContext、AiTravelPlanHelper。
一、整体架构流程
我们在 AiWeatherActivity 基础上进行扩展,新增三个核心辅助类来解耦逻辑:
| 新建文件 | 职责 |
|---|---|
| LocationHelper.kt | GPS 获取 + 高德逆地理编码 |
| ConversationContext.kt | 多轮对话上下文(含 5 分钟 TTL) |
| AiTravelPlanHelper.kt | 对接 Claude API 旅游规划 |
原有文件也做了相应改造:
- AiIntentParser.kt:增加 GPS 触发词和续播意图解析。
- WeatherViewHelper.kt:新增 tv_travel_plan 控件及更新方法。
- AiWeatherActivity.kt:串联完整调用链。
![主要流程图]
二、核心功能:GPS 自动定位
用户说'这里的天气'时,不想等待手动输入城市名。虽然缓存位置可能有几公里偏差,但对天气查询完全够用。
1. 意图识别
在 AiIntentParser 中定义一组关键词,用于匹配 GPS 相关意图:
private val LOCATION_KEYWORDS = listOf(
"这里", "附近", "当前", "我这", "这边",
"当前位置", "我在哪", "这里的"
)
const val INTENT_LOCATION = "__LOCATION__"
fun isLocationIntent(text: String): Boolean {
val hasLocation = LOCATION_KEYWORDS.any { text.contains(it) }
val hasWeather = text.contains() || WEATHER_KEYWORDS.any { text.contains(it) }
hasLocation && hasWeather
}


