如何用Python/Notebook调用Dialogflow API批量添加意图语句并重新训练?
Dialogflow ES 自动化批量更新训练语句并重训练实践
一、batchUpdate方法完全适用
projects.agent.intents/batchUpdate就是官方提供的批量更新意图的API方法,支持批量为多个意图添加、修改训练语句,完全匹配你的需求。
二、Python实现步骤及代码示例
环境准备
- 安装依赖包:
pip install google-cloud-dialogflow - 配置认证:设置环境变量
GOOGLE_APPLICATION_CREDENTIALS指向你的GCP服务账号密钥JSON文件。
完整代码示例
from google.cloud import dialogflow_v2 as dialogflow from google.protobuf import field_mask_pb2 def batch_update_intents(project_id, intent_updates): """批量为指定意图添加新训练语句""" client = dialogflow.IntentsClient() parent = client.project_agent_path(project_id) update_entries = [] for intent_id, new_phrases in intent_updates.items(): # 获取目标意图的现有配置,避免覆盖其他设置 intent_path = client.intent_path(project_id, intent_id) intent = client.get_intent(intent_path) # 逐个添加新训练语句 for phrase_text in new_phrases: training_phrase = dialogflow.Intent.TrainingPhrase() part = training_phrase.parts.add() part.text = phrase_text training_phrase.type = dialogflow.Intent.TrainingPhrase.Type.EXAMPLE intent.training_phrases.append(training_phrase) # 指定仅更新训练语句字段,防止误改其他配置 update_mask = field_mask_pb2.FieldMask(paths=['training_phrases']) update_entries.append( dialogflow.BatchUpdateIntentsRequest.IntentBatchUpdateIntent( intent=intent, update_mask=update_mask ) ) # 发送批量更新请求 request = dialogflow.BatchUpdateIntentsRequest( parent=parent, intent_batch_update_intents=update_entries ) client.batch_update_intents(request) print("训练语句批量更新完成") def train_agent(project_id): """触发智能体重训练""" client = dialogflow.AgentsClient() parent = client.project_path(project_id) client.train_agent(parent=parent) print("智能体重训练任务已启动") if __name__ == "__main__": # 替换为你的项目ID PROJECT_ID = "your-gcp-project-id" # 定义需要更新的意图ID和对应的新训练语句 intent_update_config = { "your-intent-id-1": ["我想查询订单物流", "帮我看看我的快递到哪了"], "your-intent-id-2": ["修改我的收货地址", "更新一下收件地址"] } # 执行批量更新 batch_update_intents(PROJECT_ID, intent_update_config) # 触发重训练 train_agent(PROJECT_ID)
三、关键注意事项
- 服务账号权限:确保你的GCP服务账号拥有
dialogflow.intents.update和dialogflow.agents.train的权限,可在IAM控制台配置。 - 更新掩码:
update_mask必须指定为training_phrases,否则会覆盖意图的其他配置(如响应、上下文等)。 - 异步训练:重训练是异步操作,如果需要等待训练完成,可以调用
get_agent_training_status方法查询状态。
内容的提问来源于stack exchange,提问作者Abiud Rds
相关产品推荐
相关产品推荐

