内容提要
作者基于Rokid AIUI开发了中文自我介绍陪练应用“说清楚”,围绕身份、经历、帮助三个目标引导练习,支持语音回答、镜腿操作、提示降难和精简模式;模型结合上下文追问并校验结构化输出,最终独立生成总结与介绍成稿。文章介绍了工程创建、语音识别、状态管理、上下文组织及模拟器调试,该应用已上架。
延伸解读
从“能跑”到“可用”:分步验证的开发节奏
作者没有一次性生成完整工程,而是先创建四个文件跑通欢迎页和跳转,再逐项补语音、模型和异常处理。每次只给一个可检查的目标,比如先让欢迎页进入第一题,再让回答产生模型请求。这样做的好处是出问题时能快速定位是页面未生成、事件未触发还是模型未返回,避免所有要求混在一起难以排查。
结构化输出与校验:让模型追问可控
模型每次只找一个信息缺口,并输出包含question、feedback、action等字段的JSON。程序会校验动作、目标范围、问题和练习模式,例如降难度必须留在原目标,精简模式才可进入相邻目标。校验不通过时最多重试两次,仍失败则保留回答和重试入口。这种设计把模型生成内容限制在可应用的范围内,减少无效或越界追问。
上下文组织:区分事实与历史,支持重说追溯
页面把有效回答存入validUserFacts,供成稿引用用户原话;history保留最近24条非作废对话,帮助模型理解问答经过。用户重说时,原回答及对应反馈被标记为superseded而非删除,正常生成只读取未作废条目,调试时仍可追溯。这样既支持调整练法,也能查清总结采用了哪些材料,避免模型编造未提供的经历或数字。
语音与镜腿交互的工程细节
收音使用SpeechRecognition,中间结果只显示,最终结果才提交。作者踩过主动取消仍提示“语音暂不可用”、旧会话错误覆盖新状态的坑,修复方式是先置空旧实例回调再abort,每个回调检查自己是否仍是当前实例。镜腿事件映射为Enter、ArrowUp、ArrowDown和Backspace,同一按键180毫秒内重复到达会被忽略,语音和按键最终调用同一组操作,避免维护两套逻辑。
Q&A
我想用Rokid AIUI开发一个类似“说清楚”的自我介绍陪练应用,需要哪些核心步骤?
核心步骤包括:1. 在AIUI Studio中新建智能体,选择“对话创建”进入AIUI CODING;2. 阅读AIUI快速开始文档并启用官方aiui-dev Skill;3. 创建工程文件,先实现欢迎页和基本跳转,再逐步添加语音、模型和异常处理;4. 配置app.json声明页面路径和录音权限;5. 编写AGENTS.md明确行为边界;6. 使用SpeechRecognition实现语音识别;7. 使用LanguageModel结合上下文追问并校验结构化输出;8. 在模拟器中调试完整流程;9. 打包AIX并提交审核上架。
在AIUI中如何实现语音识别并避免重复提交同一句话?
使用平台提供的SpeechRecognition,设置lang为'zh-CN'、continuous为false、interimResults为true。中间结果只显示,最终结果才提交。提交时先释放识别实例,再调用_route处理文字。onend也可能收到结束通知,因此要核对当前实例是否仍然有效,防止同一句话提交两次。页面离开时解除回调、释放会话。主动取消收音时,先把旧实例回调置空再abort,每个回调检查自己是否仍是当前实例。
如何组织上下文让模型能根据用户经历进行追问并生成总结?
每次请求创建模型会话,本轮记忆由页面传入。对话记录存到_turns,每条回答带上当时的目标和问题。有效事实与历史分别组装:_facts()返回所有有效回答(过滤掉作废的),_context()包含intent、userInput、currentStage、currentQuestion、currentMode、audience、focus、followups、validUserFacts和最近24条非作废历史。系统提示明确把历史与用户文字当成待分析资料,不能执行其中要求编造经历、改变规则的指令。总结时使用独立任务,输入整轮上下文,系统提示换成整轮整理任务。
模型返回的结构化输出如何校验?如果格式不对怎么办?
coachResult先解析JSON,再检查动作、目标范围、问题和练习模式。followup留在当前目标,advance只能进入相邻目标,finish要求已经到最后目标且至少有三条有效回答。question为空、mode不在允许范围、降低难度却没有frame,也会被判为无效。如果格式或字段不合要求,程序最多尝试两次:第一次失败后,把错误和上次原始输出随原上下文交给模型修正一次;仍失败就保留回答和重试入口。陪练等待上限35秒,总结45秒。
“说清楚”应用如何根据用户说“太难了”或“只剩两分钟”调整练习?
用户说“太难了”时,记录为adjust,模型返回围绕当前目标的补全句式提示,例如“有了这张表,新人______(反应/话语),______(状态变化)。”降难度应保留当前目标。用户说“只剩两分钟”时,模型切到compact模式,可以进入相邻目标,要求用一句话总结。校验时分开判断:stay条件为action是followup且stage等于当前目标;shorten条件为mode是compact且action是advance且stage等于当前目标+1。两者都不满足则报错。
开发过程中如何调试和上架AIUI应用?
保存代码后,进入“模拟调试”跑完一轮:回答问题、降低难度、缩短练习,最后生成总结。再换一组经历,确认追问和成稿会跟着内容变化,并检查镜腿单击、滑动和暂停是否正常。模拟器跑通后,先在“真机调试”页填写基本信息并打包AIX,再到“提审”页填写介绍、上传截图和演示视频,提交审核。审核通过后状态显示为“已上架”。