Dialogflow调用list_intents/get_intent无法返回训练短语求助
Dialogflow Python SDK获取训练短语为空的解决方案
问题描述
我尝试用Python获取Dialogflow中每个Intent的训练短语概览,按照官方示例编写代码后,Intent的名称和显示名能正常输出,但training_phrases始终是空列表(草稿和测试环境均是如此),而在控制台中明明能看到对应的训练短语。后续改用get_intent接口重新获取Intent详情,结果依然输出Training phrases: []。
问题原因
Dialogflow的list_intents接口默认只返回Intent的基础元数据(如名称、显示名),不会包含训练短语这类详细字段;即使是get_intent接口,默认也仅返回基础字段,需要显式指定要获取的字段范围才能拿到训练短语。
解决代码
修改get_intent的请求参数,通过intent_view指定需要获取完整的Intent信息:
from google.cloud import dialogflow_v2 # get_credentials 是自定义加载凭证的函数 credentials, project_id = get_credentials() client = dialogflow_v2.IntentsClient(credentials=credentials) request = dialogflow_v2.ListIntentsRequest( parent=f"projects/{project_id}/agent/environments/draft", ) page_result = client.list_intents(request=request) for intent in page_result: print("Intent name: ", intent.name) # 指定intent_view为INTENT_VIEW_FULL,获取完整Intent数据 intent_request = dialogflow_v2.GetIntentRequest( name=intent.name, intent_view=dialogflow_v2.IntentView.INTENT_VIEW_FULL ) intent = client.get_intent(request=intent_request) print("Intent name: ", intent.name) print("Intent display_name: ", intent.display_name) print("Training phrases: ", intent.training_phrases)
可选优化
如果只需要训练短语,无需其他额外字段,可以将intent_view设置为IntentView.INTENT_VIEW_INCLUDE_TRAINING_PHRASES,这样能减少返回的数据量,提升请求效率:
intent_request = dialogflow_v2.GetIntentRequest( name=intent.name, intent_view=dialogflow_v2.IntentView.INTENT_VIEW_INCLUDE_TRAINING_PHRASES )
内容的提问来源于stack exchange,提问作者Hav11
相关产品推荐
相关产品推荐

