Eseguire il rendering di una risposta dell'agente come visualizzazione

Questa pagina mostra come utilizzare l'SDK Python per eseguire il rendering di una visualizzazione dalle specifiche del grafico fornite in una risposta dell'API Analisi conversazionale. Il codice campione estrae la specifica del grafico (in formato Vega-Lite) dal campo chart della risposta e utilizza la libreria Vega-Altair per eseguire il rendering del grafico, salvarlo come immagine e visualizzarlo.

Esempio: eseguire il rendering di un grafico a barre da un'API

Questo esempio mostra come eseguire il rendering di un grafico a barre da una risposta dell'agente dell'API Analisi conversazionale. L'esempio invia una richiesta con il seguente prompt:

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

Il codice campione definisce le seguenti funzioni helper:

  • render_chart_response: estrae la configurazione Vega-Lite dal messaggio chart, la converte in un formato utilizzabile dalla libreria Vega-Altair, esegue il rendering del grafico, lo salva in chart.png e lo visualizza.
  • chat: invia una richiesta all'API Analisi conversazionale utilizzando la variabile inline_context e l'elenco messages corrente, elabora la risposta di streaming e, se viene restituito un grafico, chiama render_chart_response per visualizzarlo.

Per utilizzare il seguente codice campione, sostituisci quanto segue:

  • sqlgen-testing: l'ID del progetto di fatturazione in cui sono abilitate le API richieste.
  • Create a bar graph that shows the top five states by the total number of airports: il prompt che vuoi inviare all'API Analisi conversazionale.
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.")