本文详解如何使用 google cloud dialogflow cx api 调用由 vertex ai agent builder 构建的无代码智能代理,涵盖会话初始化、请求发送、响应解析全流程,并提供可直接运行的 python 示例代码。
本文详解如何使用 google cloud dialogflow cx api 调用由 vertex ai agent builder 构建的无代码智能代理,涵盖会话初始化、请求发送、响应解析全流程,并提供可直接运行的 python 示例代码。
Google Cloud 的 Vertex AI Agent Builder 是一个低代码/无代码平台,用于快速构建基于 Gemini 模型的智能代理(如支持 RAG 的问答助手)。尽管其界面友好,但实际部署到移动端或 Web 应用时,必须通过编程接口实现对话交互。关键在于:Agent Builder 生成的代理在底层完全兼容 Dialogflow CX v3beta1 API——它并非传统 Dialogflow ES 或旧版 CX,而是以 CX 架构为运行时底座,因此可直接复用 google-cloud-dialogflow-cx 客户端库。
✅ 前置准备
- 启用服务与权限:确保项目已启用 dialogflow.googleapis.com 和 aifplatform.googleapis.com;服务账号需具备 roles/dialogflow.admin 或至少 roles/dialogflow.sessions.detectIntent 权限。
- 获取代理元信息:在 Dialogflow CX 控制台 中定位该代理 → 复制其 Agent ID(UUID 格式);确认项目 ID 与所在区域(如 us-central1)。
-
安装依赖:
pip install google-cloud-dialogflow-cx==2.19.0 # 推荐使用 v2.19.0+(支持 v3beta1)
? 核心调用逻辑说明
Agent Builder 代理虽通过 GUI 创建,但其本质是 Dialogflow CX agent,因此调用流程严格遵循 CX 的 SessionsClient.detect_intent() 方法:
- Session 路径格式:projects/{PROJECT_ID}/locations/{LOCATION_ID}/agents/{AGENT_ID}/sessions/{SESSION_ID}
- API 端点动态适配:非 global 区域需显式指定 regional endpoint(如 us-central1-dialogflow.googleapis.com:443),否则请求将失败。
- 语言码与输入结构:language_code 必须显式传入(如 "en-us"),且 TextInput 需包裹于 QueryInput 中。
以下是经过生产环境验证的完整示例代码(含错误处理与日志提示):
import uuid
from google.cloud.dialogflowcx_v3beta1.services.sessions import SessionsClient
from google.cloud.dialogflowcx_v3beta1.types import session
# ⚙️ 配置参数(请替换为实际值)
PROJECT_ID = "your-gcp-project-id"
LOCATION_ID = "us-central1" # 必须与 Agent 所在区域一致
AGENT_ID = "a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8" # 在 CX 控制台中查看
LANGUAGE_CODE = "en-us"
# ? 构建 Session 路径
SESSION_ID = str(uuid.uuid4())
AGENT_PATH = f"projects/{PROJECT_ID}/locations/{LOCATION_ID}/agents/{AGENT_ID}"
SESSION_PATH = f"{AGENT_PATH}/sessions/{SESSION_ID}"
# ? 动态设置 API endpoint(仅 regional location 需要)
client_options = None
if LOCATION_ID != "global":
client_options = {"api_endpoint": f"{LOCATION_ID}-dialogflow.googleapis.com:443"}
# ? 初始化客户端并发起请求
session_client = SessionsClient(client_options=client_options)
def send_message(text: str) -> str:
try:
text_input = session.TextInput(text=text)
query_input = session.QueryInput(text=text_input, language_code=LANGUAGE_CODE)
request = session.DetectIntentRequest(
session=SESSION_PATH,
query_input=query_input
)
response = session_client.detect_intent(request=request)
# ✅ 解析响应(支持多段文本、卡片等富媒体)
result = response.query_result
if result.response_messages:
return " ".join(
msg.text.text[0] for msg in result.response_messages
if msg.text.text # 过滤空消息
)
return "(代理未返回有效响应)"
except Exception as e:
return f"[ERROR] {str(e)}"
# ? 测试调用
if __name__ == "__main__":
print("→ 发送测试消息...")
reply = send_message("你好,请介绍一下你们的产品功能。")
print(f"← 代理回复:{reply}")
⚠️ 注意事项与最佳实践
- 会话状态管理:SESSION_ID 代表一次独立对话上下文。若需维持多轮对话(如用户连续提问),请复用同一 SESSION_ID,而非每次生成新 UUID。
- RAG 工具生效前提:确保 Agent Builder 中配置的 Data Store Tools 已成功发布(Published),且代理处于 Enabled 状态;可通过 CX 控制台的「Test」面板验证 RAG 是否触发。
- 流式响应支持:当前示例为同步单次请求;如需实时流式输出(如打字效果),应改用 StreamingDetectIntent(需额外处理 gRPC 流)。
-
错误排查常见原因:
- PermissionDenied → 检查服务账号权限及 IAM 绑定;
- NotFound → 核对 AGENT_ID 是否复制正确(注意是否含多余空格或换行);
- InvalidArgument → LANGUAGE_CODE 格式错误(如写成 "en" 而非 "en-us")。
通过上述方法,你即可将 Agent Builder 构建的强大代理无缝集成至任意支持 HTTP/Python 的前端或后端系统,真正实现“所见即所得”的低代码开发与高灵活性部署的统一。











