如何通过Dialogflow API向生成式回退传递参数及额外数据?
解决Dialogflow生成式回退模板无法获取动态数据的问题
核心问题分析
生成式回退模板默认不会自动调用webhook或读取会话参数,必须手动配置触发逻辑,同时要确保数据传递格式完全符合Dialogflow的要求,才能让模型在回复时纳入指定数据。
具体解决方案步骤
1. 开启生成式回退意图的webhook触发
- 进入Dialogflow控制台,找到生成式回退意图
- 在意图的Fulfillment标签页,勾选Enable webhook call for this intent
- 保存配置,确保每次触发回退意图时都会调用你的webhook服务
2. 在webhook中构造含额外数据的生成式提示词
- webhook需要返回符合Dialogflow格式的响应,将所有需要的基础数据、用户查询、额外数据嵌入到生成式提示词中,明确引导模型使用这些内容:
// Node.js示例webhook处理逻辑 function handleGenerativeFallback(agent) { // 从请求中获取传递的额外数据、用户查询 const extraData = agent.requestBody.queryParams.payload.extraData; const userQuery = agent.query; const baseData = "这里填入你的固定基础数据内容"; // 构造明确的生成提示词,强制模型参考所有传入数据 const prompt = `请结合以下所有信息生成自然回复: 用户问题:${userQuery} 固定基础数据:${baseData} 额外补充数据:${extraData}`; // 返回包含生成式内容的响应 agent.add({ payload: { google: { generativeContent: { parts: [{ text: prompt }], safetySettings: [ { category: "HARM_CATEGORY_DANGEROUS_CONTENT", threshold: "BLOCK_ONLY_HIGH" } ] } } } }); }
3. 通过Dialogflow API传递数据的正确格式
- 调用
detectIntent接口时,必须将额外数据放在queryParams.payload字段中,而非普通parameters,这样webhook才能准确捕获:
# Python示例API调用代码 import dialogflow_v2 as dialogflow def detect_intent_with_extra_data(project_id, session_id, user_text, lang_code, extra_data): session_client = dialogflow.SessionsClient() session_path = session_client.session_path(project_id, session_id) text_input = dialogflow.TextInput(text=user_text, language_code=lang_code) query_input = dialogflow.QueryInput(text=text_input) # 把额外数据放入payload参数传递 query_params = dialogflow.QueryParameters( payload={"extraData": extra_data} ) response = session_client.detect_intent( request={"session": session_path, "query_input": query_input, "query_params": query_params} ) return response
4. 验证数据传递链路
- 在webhook中添加日志,打印接收到的
agent.requestBody.queryParams.payload,确认额外数据是否正确传入 - 在Dialogflow控制台的History标签下,查看意图触发时的webhook请求/响应明细,检查数据完整性
关键注意事项
- 生成式回退模板本身不支持直接引用会话参数,必须通过webhook构造包含所有数据的提示词
- 如果额外数据量极大,可将数据存储到外部数据库,webhook仅传递数据ID,再在提示词中引导模型通过ID调取数据(需结合Dialogflow自定义知识库功能)
内容的提问来源于stack exchange,提问作者Aric Katz
相关产品推荐
相关产品推荐

