En esta página, se muestra cómo usar el SDK de Python para renderizar una visualización a partir de las especificaciones del gráfico que se proporcionan en una respuesta de la API de Conversational Analytics. El código de muestra extrae la especificación del gráfico (en el formato de Vega-Lite) del campo chart
de la respuesta y usa la biblioteca Vega-Altair para renderizar el gráfico, guardarlo como una imagen y mostrarlo.
Ejemplo: Renderiza un gráfico de barras a partir de una API
En este ejemplo, se muestra cómo renderizar un gráfico de barras a partir de una respuesta del agente de la API de Conversational Analytics. En el ejemplo, se envía una solicitud con la siguiente instrucción:
"Create a bar graph that shows the top five states by the total number of airports."
El código de muestra define las siguientes funciones auxiliares:
render_chart_response
: Extrae la configuración de Vega-Lite del mensajechart
, la convierte en un formato que pueda usar la biblioteca de Vega-Altair, renderiza el gráfico, lo guarda enchart.png
y, luego, lo muestra.chat
: Envía una solicitud a la API de Conversational Analytics con la variableinline_context
y la listamessages
actual, procesa la respuesta de transmisión y, si se muestra un gráfico, llama arender_chart_response
para mostrarlo.
Para usar el siguiente código de muestra, reemplaza lo siguiente:
- sqlgen-testing: Es el ID de tu proyecto de facturación que tiene las APIs requeridas habilitadas.
- Create a bar graph that shows the top five states by the total number of airports: Es la instrucción que deseas enviar a la API de Conversational Analytics.
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.")