You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Dialogflow API V2添加训练短语避免覆盖内容的问题

解决Dialogflow V2 API添加训练短语时的覆盖问题

你猜的完全没错!直接调用patch接口只传新增的训练短语,确实会把现有的短语全删掉——因为Dialogflow的patch默认是替换式更新,而不是追加。正确的操作流程得分成三步来走:

1. 先拉取目标意图的完整数据

首先得调用projects.agent.intents.get接口,传入你要修改的意图名称(格式是projects/{你的项目ID}/agent/intents/{意图ID})。这个接口会返回意图的全部信息,包括现有的trainingPhrases数组,这一步是为了确保你能拿到所有已有的训练短语,不会弄丢。

注意调用的时候要做好身份认证,比如用服务账号的密钥生成访问令牌,不然接口会拒绝你的请求。

2. 给训练短语数组添加新内容

从返回的意图数据里取出trainingPhrases,把你要新增的训练短语对象加进去就行。每个训练短语的格式大概是这样的:

{
  "type": "EXAMPLE",
  "parts": [
    {
      "text": "你要添加的新训练短语内容"
    }
  ]
}

这里建议加个去重逻辑,先检查一下新增的短语是不是已经存在了,避免重复添加导致冗余。

3. 用patch接口更新意图(重点!)

这一步最关键的是要设置updateMask参数为trainingPhrases,然后在请求体里带上更新后的完整trainingPhrases数组。

updateMask的作用是告诉Dialogflow:“我只更新trainingPhrases这个字段,其他字段保持原样”。如果不设置这个参数,Dialogflow会默认用你传的请求体替换整个意图,那还是会覆盖掉其他内容。

举个curl的简单示例:

# 第一步:获取意图完整数据
curl -X GET \
  'https://dialogflow.googleapis.com/v2/projects/你的项目ID/agent/intents/你的意图ID' \
  -H 'Authorization: Bearer 你的访问令牌'

# 第二步修改数组后,第三步执行更新
curl -X PATCH \
  'https://dialogflow.googleapis.com/v2/projects/你的项目ID/agent/intents/你的意图ID?updateMask=trainingPhrases' \
  -H 'Authorization: Bearer 你的访问令牌' \
  -H 'Content-Type: application/json' \
  -d '{
    "trainingPhrases": [
      // 这里放原有的所有训练短语 + 新增的短语
    ]
  }'

如果需要批量处理多个意图或者频繁添加短语,最好把这个流程封装成脚本,比如用Python或者Node.js来实现,这样操作起来更高效。

内容的提问来源于stack exchange,提问作者mattipet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:38:11