Nesta página, mostramos como usar o SDK do Python para renderizar uma visualização das especificações de gráficos fornecidas em uma resposta da API Conversational Analytics. O exemplo de código extrai a especificação do gráfico (no formato Vega-Lite) do campo chart
da resposta e usa a biblioteca Vega-Altair para renderizar, salvar como imagem e mostrar o gráfico.
Exemplo: renderizar um gráfico de barras de uma API
Este exemplo mostra como renderizar um gráfico de barras com base em uma resposta do agente da API Conversational Analytics. O exemplo envia uma solicitação com o seguinte comando:
"Create a bar graph that shows the top five states by the total number of airports."
O exemplo de código define as seguintes funções auxiliares:
render_chart_response
: extrai a configuração do Vega-Lite da mensagemchart
, converte para um formato que pode ser usado pela biblioteca Vega-Altair, renderiza o gráfico, salva emchart.png
e o mostra.chat
: envia uma solicitação à API Conversational Analytics usando a variávelinline_context
e a listamessages
atual, processa a resposta de streaming e, se um gráfico for retornado, chamarender_chart_response
para mostrá-lo.
Para usar o exemplo de código a seguir, substitua:
- sqlgen-testing: o ID do seu projeto de faturamento que tem as APIs necessárias ativadas.
- Create a bar graph that shows the top five states by the total number of airports: o comando que você quer enviar para a API 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.")