技能skill是怎么执行起来的?
基于典型对话式AI技能平台如亚马逊Alexa、谷歌Assistant、百度DuerOS等的通用运行机制知识。一个技能的完整执行可以概括为“触发 - 理解 - 加载 - 执行 - 响应”的链条涉及技能自身代码、技能平台和运行时环境三方的协同工作。其核心流程如下1. 触发与解析用户触发用户在智能设备如音箱、手机上通过唤醒词和语音指令或直接通过文本向平台发出请求例如“小X问天气技能今天北京温度如何”。平台处理技能平台如Alexa Service、DuerOS Cloud接收到语音流后会先进行自动语音识别将其转为文本然后通过自然语言理解模型分析该文本。意图匹配NLU模型将用户查询与技能发布的意图定义文件.intent 中的示例语句进行匹配识别出用户的意图GetWeather和提取关键参数/词槽城市北京日期今天。2. 技能加载与初始化路由与加载平台根据识别出的技能名称确定需要调用哪个技能。然后它会找到该技能的代码包并读取其manifest.json 文件获取技能的元数据、权限和入口点配置。环境准备平台为此次调用创建一个独立的、短暂的执行环境通常是一个容器或函数计算实例。在此环境中会根据技能的package.json 文件安装所有必要的Node.js依赖确保运行时环境的一致性。3. 请求分发与逻辑执行事件封装平台将NLU解析出的意图、参数、会话信息、用户标识等封装成一个结构化的请求事件对象。调用入口函数平台根据manifest.json中的配置找到技能的主逻辑文件通常是index.js并调用其中指定的入口函数将上一步的请求事件对象传递给该函数。业务逻辑运行技能代码index.js中的逻辑开始执行。它会解析请求事件获取意图和参数。执行业务逻辑例如根据“北京”和“今天”这两个参数去调用一个第三方天气预报API获取数据。处理API返回的数据构建一个面向用户的友好回复内容。4. 响应生成与返回构建响应对象代码逻辑执行完毕后需要创建一个符合平台规范的响应对象。这个对象不仅包含要朗读或显示的文本还可以包含卡片式的图形界面信息、指令如播放音频等。平台交付技能将响应对象返回给平台。平台负责将这个响应转化为最终的用户体验在智能音箱上播放合成语音在手机APP上显示文本和卡片等等。5. 会话管理多轮对话如果是一次多轮对话平台会在本次响应的基础上维持会话状态。当用户说出下一句话时如“那上海呢”平台会携带之前的会话上下文再次发起上述流程技能代码需要能够处理这种带上下文的请求。总结来说技能的执行是一个由平台驱动的“事件响应”模型。开发者负责编写处理特定“意图事件”的业务逻辑代码和定义其触发方式平台负责处理所有通用的、繁重的基础设施工作语音识别、自然语言理解、负载均衡、资源调度、交付响应并在恰当的时机以事件的形式调用skill里的代码。skill的代码只需专注于“当发生A意图时应该做什么并返回什么”即可。