Merender respons agen sebagai visualisasi

Halaman ini menunjukkan cara menggunakan Python SDK untuk merender visualisasi dari spesifikasi diagram yang disediakan dalam respons Conversational Analytics API. Kode contoh mengekstrak spesifikasi diagram (dalam format Vega-Lite) dari kolom chart respons dan menggunakan library Vega-Altair untuk merender diagram, menyimpannya sebagai gambar, dan menampilkannya.

Contoh: Merender diagram batang dari API

Contoh ini menunjukkan cara merender diagram batang dari respons agen Conversational Analytics API. Contoh ini mengirimkan permintaan dengan perintah berikut:

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

Kode contoh menentukan fungsi bantuan berikut:

  • render_chart_response: Mengekstrak konfigurasi Vega-Lite dari pesan chart, mengonversinya ke format yang dapat digunakan oleh library Vega-Altair, merender diagram, menyimpannya ke chart.png, dan menampilkannya.
  • chat: Mengirim permintaan ke Conversational Analytics API menggunakan variabel inline_context dan daftar messages saat ini, memproses respons streaming, dan jika diagram ditampilkan, memanggil render_chart_response untuk menampilkannya.

Untuk menggunakan contoh kode berikut, ganti kode berikut:

  • sqlgen-testing: ID project penagihan Anda yang telah mengaktifkan API yang diperlukan.
  • Create a bar graph that shows the top five states by the total number of airports: Perintah yang ingin Anda kirim ke Conversational Analytics API.
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.")