Conversational Analytics API dapat menghasilkan visualisasi interaktif yang didasarkan pada pertanyaan pengguna. API menampilkan diagram sebagai konfigurasi JSON Vega-Lite atau gambar SVG (untuk sumber data Looker dan hanya dalam versi API v1alpha dan v1beta). Anda juga dapat menginstruksikan agen untuk membuat diagram dengan persyaratan tertentu. Visualisasi dibuat menggunakan hasil data yang diperoleh sebagai respons terhadap pertanyaan pengguna.


Visualisasi yang didukung
API ini menggunakan Vega-Lite untuk membuat visualisasi dan mendukung semua fitur Vega-Lite standar. Jenis diagram berikut didukung:
- Area
- Batang
- Geobentuk
- Peta panas
- Garis (Deret waktu)
- Lingkaran
- Sebar
Cara pembuatan diagram
Agen mengidentifikasi hasil data yang relevan dan meneruskannya ke subagen. Subagen ini menjalankan kode Python untuk menghasilkan konfigurasi JSON Vega-Lite untuk diagram. API ini menggunakan konteks percakapan untuk lebih memahami maksud pengguna saat membuat diagram. Dengan memanfaatkan Python, API dapat membuat diagram yang lebih kompleks.
Agen dapat melakukan transformasi data kecil, seperti penggabungan atau penerapan filter, untuk membuat diagram lebih relevan dan mudah dibaca.
Format output
Diagram ditampilkan dalam pesan hasil chart dan dapat diberikan dalam format berikut:
- JSON Vega-Lite
- gambar SVG
Anda dapat meminta gambar menggunakan kolom ChartOptions dalam konteks. Saat gambar diminta, API akan memberikan gambar dan output JSON Vega-Lite.
Menampilkan respons agen sebagai visualisasi
Bagian ini menunjukkan cara menggunakan Python SDK untuk merender visualisasi dari spesifikasi diagram yang diberikan dalam respons Conversational Analytics API. Kode contoh mengekstrak spesifikasi diagram (dalam format Vega-Lite) dari kolom chart respons dan menggunakan library Altair (yang dibangun di Vega-Lite) untuk merender diagram, menyimpannya sebagai gambar, dan menampilkannya.
Untuk mengetahui detail selengkapnya tentang merender diagram dengan Vega-Lite dan ekosistem Vega-Lite, lihat Alat untuk Membuat Visualisasi Vega-Lite.
Contoh: Merender diagram dari output Vega-Lite
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 pesanchart, mengonversinya ke format yang dapat digunakan oleh library Altair, merender diagram, menyimpannya kechart.png, dan menampilkannya.chat: Mengirim permintaan ke Conversational Analytics API menggunakan variabelinline_contextdan daftarmessagessaat ini, memproses respons streaming, dan jika diagram ditampilkan, memanggilrender_chart_responseuntuk 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(val) for k, val in v.items()}
elif isinstance(v, proto.marshal.collections.RepeatedComposite):
return [_convert(el) for el in v]
elif isinstance(v, (int, float, str, bool, type(None))):
return v
else:
return MessageToDict(v)
try:
vega_config = _convert(resp.result.vega_config)
chart = alt.Chart.from_dict(vega_config)
chart.save('chart.png')
chart.display()
print("Chart rendered and saved as chart.png")
except Exception as e:
print(f"Error rendering chart: {e}")
# Helper function for calling the API
def chat(q: str, inline_context, messages):
billing_project = "sqlgen-testing"
input_message = geminidataanalytics.Message(
user_message=geminidataanalytics.UserMessage(text=q)
)
messages.append(input_message)
client = geminidataanalytics.DataChatServiceClient()
request = geminidataanalytics.ChatRequest(
inline_context=inline_context,
parent=f"projects/{billing_project}/locations/global",
messages=messages,
)
# Make the request
try:
stream = client.chat(request=request)
for reply in stream:
if reply.system_message and hasattr(reply.system_message, 'chart'):
# ChartMessage includes `query` for generating a chart and `result` with the generated chart.
if hasattr(reply.system_message.chart, 'result'):
print("Chart result found in response.")
render_chart_response(reply.system_message.chart)
else:
print("Chart message found, but no result yet.")
# Append system messages to maintain context for follow-up turns
if reply.system_message:
messages.append(geminidataanalytics.Message(system_message=reply.system_message))
except Exception as e:
print(f"Error calling API: {e}")
# Example Usage:
# Assuming 'inline_context' and 'messages' are initialized as per "Build a data agent using the Python SDK"
# Example initialization (replace with your actual context and message history):
# inline_context = geminidataanalytics.InlineContext(...)
# messages = []
# 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")