跳到正文
本页内容

教 AI 说 'UI 语':Agent 开发指南

如何通过提示工程 (Prompt Engineering) 让您的 LLM 生成有效的 A2UI JSON。探索 Schema 验证的最佳实践。

挑战:LLM 擅长写诗,但不擅长写结构严谨的 JSON。 方案:给它一本语法书 (Schema) 和一个翻译器 (Validator)。

本指南将向您展示如何将一个标准的“聊天机器人”转变为“UI 生成器”。

1. “系统提示词” (System Prompt) 策略

获得 A2UI 输出最可靠的方法是将指令直接注入到 System Prompt 中。

UI 提示词解剖

您需要告诉 LLM 三件事:

  1. 身份 (Identity): “你是一个乐于助人的助手…”
  2. 能力 (Capability): “你可以使用 a2ui 工具渲染 UI 组件…”
  3. 语法 (Grammar): “这是你必须遵循的 JSON 结构…“
SYSTEM_PROMPT = """
你是一个旅行助手。
如果用户查询航班,**不要**发送文本列表。
相反,请使用 'flight-list' schema 生成一个 JSON 对象:

{
  "type": "flight-list",
  "data": { "flights": [...] }
}
"""

2. 工具调用 (Tool Use) vs 直接生成 (Generation)

有两种生成 UI 的流派:

方案 A:工具调用 (推荐)

定义一个 render_ui 工具 (Function Calling)。LLM 调用该函数,然后由您的后端处理 JSON 构造。

  • 优点:100% 有效的 JSON(由 SDK 保证格式)。
  • 缺点:较慢(多一次网络往返)。

方案 B:直接流式传输 (最快)

要求 LLM 直接在文本流中输出原始 JSON。

  • 优点:即时 “Streaming” 体验,对用户来说速度极快。
  • 缺点:LLM 可能会犯语法错误(例如少写一个逗号)。

3. 验证是必须的

永远不要信任 AI。它迟早会“幻觉”出一个不存在的闭合括号。 在将数据发送到客户端之前,务必验证输出。

import jsonschema

def validate_and_send(ai_response):
    try:
        jsonschema.validate(instance=ai_response, schema=A2UI_SCHEMA)
        client.send(ai_response)
    except Exception:
        client.send({ "type": "error", "message": "尝试绘制 UI 失败,请重试。" })

4. Google ADK 示例

使用 Google Agent Development Kit,您可以自动绑定 Schema。

from google.adk.agents import Agent

agent = Agent(
    name="restaurant_booker",
    instruction="Use the `show_restaurant` tool to display results.",
    tools=[show_restaurant_tool]
)