Auf dieser Seite wird beschrieben, wie Sie mit dem Python SDK eine Visualisierung aus den Diagrammspezifikationen rendern, die in einer Antwort der Conversational Analytics API enthalten sind. Im Beispielcode wird die Diagrammspezifikation (im Vega-Lite-Format) aus dem Feld chart
der Antwort extrahiert und die Vega-Altair-Bibliothek verwendet, um das Diagramm zu rendern, als Bild zu speichern und anzuzeigen.
Beispiel: Balkendiagramm aus einer API rendern
In diesem Beispiel wird gezeigt, wie ein Balkendiagramm aus einer Agent-Antwort der Conversational Analytics API gerendert wird. Im Beispiel wird eine Anfrage mit dem folgenden Prompt gesendet:
"Create a bar graph that shows the top five states by the total number of airports."
Im Beispielcode werden die folgenden Hilfsfunktionen definiert:
render_chart_response
: Extrahiert die Vega-Lite-Konfiguration aus derchart
-Nachricht, konvertiert sie in ein Format, das von der Vega-Altair-Bibliothek verwendet werden kann, rendert das Diagramm, speichert es inchart.png
und zeigt es an.chat
: Sendet eine Anfrage an die Conversational Analytics API mit der Variableninline_context
und der aktuellen Listemessages
, verarbeitet die Streaming-Antwort und ruftrender_chart_response
auf, um das Diagramm anzuzeigen, falls eines zurückgegeben wird.
Wenn Sie den folgenden Beispielcode verwenden möchten, ersetzen Sie Folgendes:
- sqlgen-testing: Die ID Ihres Abrechnungsprojekts, in dem die erforderlichen APIs aktiviert sind.
- Create a bar graph that shows the top five states by the total number of airports: Der Prompt, den Sie an die Conversational Analytics API senden möchten.
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.")