如何在Watson Conversation Service中列出机器人所用的@Cities实体值
实现方法详解
嘿,这事儿不难,我给你拆解成具体步骤,核心逻辑通用,再针对主流对话机器人平台给你实操例子:
核心思路
不管用什么平台,都需要完成这三步:
- 第一步:识别用户意图:创建一个专门的意图(比如命名为
AskSupportedCities),把用户的问题「这个机器人支持哪些城市?」以及类似变体(比如「你们支持哪些城市?」「机器人能处理哪些城市的请求?」)添加到训练短语里,让机器人能准确识别用户的需求。 - 第二步:关联@City实体:确保你的机器人能调用到已创建的@City实体,获取所有预设的城市值(Austin、Providence、London、Boston)。
- 第三步:配置动态回复:把你想要的回复设置成模板,将模板里的
$Locations替换为@City实体所有值的拼接字符串,最后返回给用户。
主流平台实操例子
1. Google Cloud Dialogflow(ES/CX)
步骤1:创建意图
- 打开Dialogflow控制台,进入你的代理,新建意图并命名为
AskSupportedCities。 - 在「训练短语」模块中添加「这个机器人支持哪些城市?」,再补充几个类似问句(比如「机器人支持哪些城市?」)来提升识别准确率。
步骤2:获取实体所有值(推荐用Webhook)
因为直接在回复里硬编码城市值不够灵活(后续实体更新还要手动改回复),所以更推荐用Webhook动态获取:
- 开启意图的「启用Webhook调用」选项。
- 在Fulfillment里编写代码,获取@City实体的所有预设值,拼接成逗号分隔的字符串。比如用Node.js的话,代码片段大概是:
// 假设你已在Dialogflow中定义了@City实体,这里从实体配置中获取所有值 const cityValues = ["Austin", "Providence", "London", "Boston"]; // 也可以从Dialogflow的实体API动态拉取 const locations = cityValues.join(", "); // 构造回复 const response = { fulfillmentText: `Here are the cities this works with ${locations}, Which city do you want?` }; res.json(response);
步骤3:设置回复
Webhook会自动返回构造好的回复,用户提问时就能得到你想要的内容。
2. Microsoft Bot Framework(以Node.js为例)
步骤1:配置意图识别(用LUIS)
- 在LUIS平台创建意图
AskSupportedCities,添加训练短语「这个机器人支持哪些城市?」及变体。 - 确保LUIS中已定义好@City实体,包含所有城市值。
步骤2:在Bot代码中处理意图
当Bot识别到AskSupportedCities意图时,拼接城市列表并返回回复:
// 在意图处理逻辑中 async handleTurn(turnContext) { const cityValues = ["Austin", "Providence", "London", "Boston"]; const locations = cityValues.join(", "); await turnContext.sendActivity(`Here are the cities this works with ${locations}, Which city do you want?`); }
配图参考
你的@City实体配置示例:
用户提问示例:
内容的提问来源于stack exchange,提问作者Carlos Ferreira
相关产品推荐
相关产品推荐



