Alexa技能交互模型文件的组织与部署方法问询
我太懂这种抓瞎的感觉了——官方文档在这些具体的文件组织细节上确实藏得很深,我当初折腾Alexa技能的时候也卡了好久,翻了N多内容才理清这些点。下面给你逐一拆解:
Alexa技能交互模型文件组织与部署全指南
一、项目结构与文件放置(最优实践)
首先说最省心的标准结构,也是ASK CLI初始化项目时自动生成的结构:
- 项目根目录下创建
models文件夹,所有区域设置(locale)的交互模型文件都直接放在这里,比如en-US.json、zh-CN.json等。 - 如果你坚持要把
sample_utterances.txt、自定义槽值列表拆成单独文件,建议按locale分分子目录,结构如下:
这种结构能清晰区分不同locale的资源,避免混乱。你的技能项目根目录 └── models/ ├── en-US/ │ ├── en-US.json # 英文美国的核心交互模型 │ ├── sample_utterances.txt # 英文样本语句 │ └── custom_slots/ │ ├── Fruit.txt # 自定义槽类型Fruit的所有值 │ └── City.txt # 自定义槽类型City的所有值 └── fr-FR/ ├── fr-FR.json ├── sample_utterances.txt └── custom_slots/
二、Sample Utterances与.json的相对位置
如果用单独的sample_utterances.txt,必须在对应的<locale>.json里通过imports字段指定它的相对路径。比如en-US.json里要加:
{ "interactionModel": { "languageModel": { "invocationName": "我的水果助手", "intents": [] // 这里是你的意图定义 }, "imports": [ { "name": "sample_utterances", "path": "./sample_utterances.txt" } ] } }
路径是相对于当前json文件的位置,所以如果两者在同一个文件夹,直接写文件名就行。
三、多区域Sample Utterances的处理与映射
每个locale的资源是完全独立的:
- 给每个locale单独创建一套
sample_utterances.txt,比如en-US的放在models/en-US/,fr-FR的放在models/fr-FR/。 - 确保每个locale的json文件里的
imports路径指向对应区域的样本文件,这样ASK CLI部署时会自动把对应locale的模型和样本语句关联起来。
四、在.json中关联自定义槽类型值列表
如果用单独的槽值文件(比如Fruit.txt),需要在json的languageModel.types里定义槽类型,并通过valuesImportPath指定文件路径:
{ "interactionModel": { "languageModel": { "types": [ { "name": "Fruit", "valuesImportPath": "./custom_slots/Fruit.txt" } ] } } }
槽值文件的格式很简单,每行写一个槽值就行,不需要额外的格式,比如Fruit.txt里就是:
苹果 香蕉 橙子
五、ASK CLI部署的文件指定技巧
ask deploy默认会扫描项目中所有符合结构的资源(包括models目录下的所有locale文件),自动部署所有内容。- 如果只想部署特定locale的模型,用
--target参数指定具体的json文件路径,比如:ask deploy --target models/en-US/en-US.json - 要是你的文件结构比较特殊,可能需要在项目根目录的
skill.json里,修改manifest.apis.custom.interactionModel字段,手动指定每个locale的模型路径,但一般用前面说的标准结构就完全够用,不需要额外配置。
真的,这些细节官方文档确实讲得太零散了,我当初也是踩了好几个坑才摸清楚,希望这些内容能帮你理顺!
内容的提问来源于stack exchange,提问作者gmolau
相关产品推荐
相关产品推荐

