Kết xuất câu trả lời của nhân viên hỗ trợ dưới dạng hình ảnh trực quan

Trang này trình bày cách sử dụng SDK Python để hiển thị hình ảnh từ thông số kỹ thuật của biểu đồ được cung cấp trong phản hồi API Phân tích trò chuyện. Mã mẫu trích xuất thông số kỹ thuật của biểu đồ (ở định dạng Vega-Lite) từ trường chart của phản hồi và sử dụng thư viện Vega-Altair để hiển thị biểu đồ, lưu biểu đồ dưới dạng hình ảnh và hiển thị biểu đồ.

Ví dụ: Kết xuất biểu đồ thanh từ một API

Ví dụ này cho thấy cách hiển thị biểu đồ thanh từ phản hồi của tác nhân API Phân tích trò chuyện. Ví dụ này gửi một yêu cầu với lời nhắc sau:

"Create a bar graph that shows the top five states by the total number of airports."

Mã mẫu xác định các hàm trợ giúp sau:

  • render_chart_response: Trích xuất cấu hình Vega-Lite từ thông báo chart, chuyển đổi cấu hình đó thành định dạng mà thư viện Vega-Altair có thể sử dụng, hiển thị biểu đồ, lưu biểu đồ vào chart.png và hiển thị biểu đồ đó.
  • chat: Gửi yêu cầu đến API Phân tích trò chuyện bằng biến inline_context và danh sách messages hiện tại, xử lý phản hồi truyền trực tuyến và nếu một biểu đồ được trả về, hãy gọi render_chart_response để hiển thị biểu đồ đó.

Để sử dụng mã mẫu sau, hãy thay thế nội dung sau:

  • sqlgen-testing: Mã của dự án thanh toán đã bật các API bắt buộc.
  • Create a bar graph that shows the top five states by the total number of airports: Lời nhắc mà bạn muốn gửi đến API Phân tích trò chuyện.
from google.cloud import geminidataanalytics
from google.protobuf.json_format import MessageToDict
import altair as alt
import proto

# Helper function for rendering chart response
def render_chart_response(resp):
  def _convert(v):
    if isinstance(v, proto.marshal.collections.maps.MapComposite):
      return {k: _convert(v) for k, v in v.items()}
    elif isinstance(v, proto.marshal.collections.RepeatedComposite):
      return [_convert(el) for el in v]
    elif isinstance(v, (int, float, str, bool)):
      return v
    else:
      return MessageToDict(v)

  vega_config = _convert(resp.result.vega_config)
  chart = alt.Chart.from_dict(vega_config)
  chart.save('chart.png')
  chart.display()

# Helper function for calling the API
def chat(q: str):
  billing_project = "sqlgen-testing"

  input_message = geminidataanalytics.Message(
      user_message=geminidataanalytics.UserMessage(text=q)
  )

  client = geminidataanalytics.DataChatServiceClient()
  request = geminidataanalytics.ChatRequest(
      inline_context=inline_context,
      parent=f"projects/{billing_project}/locations/global",
      messages=messages,
  )

  # Make the request
  stream = client.chat(request=request)

  for reply in stream:
    if "chart" in reply.system_message:
      # ChartMessage includes `query` for generating a chart and `result` with the generated chart.
      if "result" in reply.system_message.chart:
        render_chart_response(reply.system_message.chart)

# Send the prompt to make a bar graph
chat("Create a bar graph that shows the top five states by the total number of airports.")