Halaman ini menunjukkan cara menggunakan Python SDK untuk membuat permintaan ke Conversational Analytics API. Kode Python contoh menunjukkan cara menyelesaikan tugas-tugas berikut:
- Mengautentikasi dan menyiapkan lingkungan Anda
- Mengonfigurasi setelan dan melakukan inisialisasi klien
- Menghubungkan ke sumber data Looker, BigQuery, atau Data Studio
- Menyiapkan konteks untuk chat stateful atau stateless
- Membuat agen data
- Membuat percakapan
- Mengelola agen data dan percakapan
- Menggunakan API untuk mengajukan pertanyaan
- Membuat percakapan multi-turn stateless
- Menentukan fungsi bantuan
Mengautentikasi dan menyiapkan lingkungan Anda
Untuk menggunakan Python SDK untuk Conversational Analytics API, ikuti petunjuk di notebook Colaboratory SDK Conversational Analytics API untuk mendownload dan menginstal SDK. Perhatikan bahwa metode download dan konten SDK Colab dapat berubah sewaktu-waktu.
Setelah menyelesaikan petunjuk penyiapan di notebook, Anda dapat menggunakan kode berikut untuk mengimpor library SDK yang diperlukan dan mengautentikasi Akun Google Anda dalam lingkungan Colaboratory:
from google.colab import auth
auth.authenticate_user()
from google.cloud import geminidataanalytics
from google.api_core import client_options
Mengonfigurasi setelan dan melakukan inisialisasi klien
Kode Python contoh berikut menentukan project penagihan, lokasi, dan petunjuk sistem yang digunakan di seluruh skrip Anda, serta menginisialisasi klien API dengan setelan endpoint berdasarkan lokasi:
# Billing project
billing_project = "my_project_name"
location = "LOCATION"
# System instructions
system_instruction = "Help the user analyze their data."
# Set client options based on location.
if not location or location == "global":
endpoint = "geminidataanalytics.googleapis.com"
elif "-" in location:
# Regional endpoints
endpoint = f"geminidataanalytics-{location}.googleapis.com"
else:
# Multi-regional endpoints
endpoint = f"geminidataanalytics.{location}.rep.googleapis.com"
opts = client_options.ClientOptions(api_endpoint=endpoint)
data_agent_client = geminidataanalytics.DataAgentServiceClient(client_options=opts)
data_chat_client = geminidataanalytics.DataChatServiceClient(client_options=opts)
Ganti nilai contoh sebagai berikut:
- my_project_name: ID project Google Cloud tempat Anda mengaktifkan API yang diperlukan.
LOCATION: Lokasi tempat resource Anda disimpan. Untuk menggunakan endpoint global, tentukan
global. Untuk memenuhi persyaratan residensi data, tentukan satu region yang didukung (sepertius-east4) atau multi-region (sepertieuatauus). Untuk mengetahui informasi selengkapnya, lihat Residensi data.Help the user analyze their data.: Petunjuk sistem untuk memandu perilaku agen dan menyesuaikannya dengan kebutuhan data Anda. Misalnya, Anda dapat menggunakan petunjuk sistem untuk menentukan istilah bisnis, mengontrol panjang respons, atau menetapkan format data. Idealnya, tentukan petunjuk sistem menggunakan format YAML yang direkomendasikan dalam Menulis petunjuk sistem yang efektif untuk memberikan panduan yang mendetail dan terstruktur.
Menghubungkan ke sumber data
Bagian berikut menunjukkan cara menentukan detail koneksi untuk sumber data agen Anda. Agen Anda dapat terhubung ke data dengan cara berikut:
Menghubungkan ke data Looker
Contoh kode berikut menunjukkan cara menentukan detail koneksi ke Looker Explore dengan kunci API atau token akses. Anda dapat menghubungkan hingga lima Eksplorasi Looker sekaligus dengan Conversational Analytics API.
Kunci API
Anda dapat membuat koneksi dengan instance Looker menggunakan kunci Looker API yang dihasilkan, seperti yang dijelaskan dalam Mengautentikasi dan menghubungkan ke sumber data.
looker_client_id = "my_looker_client_id"
looker_client_secret = "my_looker_client_secret"
looker_instance_uri = "https://my_company.looker.com"
lookml_model_1 = "my_model"
explore_1 = "my_explore"
lookml_model_2 = "my_model_2"
explore_2 = "my_explore_2"
looker_explore_reference = geminidataanalytics.LookerExploreReference()
looker_explore_reference.looker_instance_uri = looker_instance_uri
looker_explore_reference.lookml_model = "my_model"
looker_explore_reference.explore = "my_explore"
looker_explore_reference2 = geminidataanalytics.LookerExploreReference()
looker_explore_reference2.looker_instance_uri = looker_instance_uri
looker_explore_reference2.lookml_model = "my_model_2"
looker_explore_reference2.explore = "my_explore_2"
credentials = geminidataanalytics.Credentials()
credentials.oauth.secret.client_id = looker_client_id
credentials.oauth.secret.client_secret = looker_client_secret
datasource_references = geminidataanalytics.DatasourceReferences()
datasource_references.looker.explore_references = [looker_explore_reference, looker_explore_reference2]
Ganti nilai contoh sebagai berikut:
- my_looker_client_id: Client ID kunci Looker API yang Anda buat.
- my_looker_client_secret: Rahasia klien dari kunci Looker API yang Anda buat.
- https://my_company.looker.com: URL lengkap instance Looker Anda.
- my_model: Nama model LookML yang menyertakan Explore yang ingin Anda hubungkan.
- my_explore: Nama Looker Explore yang ingin Anda kueri oleh agen data.
- my_model_2: Nama model LookML kedua yang menyertakan Explore yang ingin Anda hubungkan. Anda dapat mengulangi variabel ini untuk model tambahan hingga lima Eksplorasi.
- my_explore_2: Nama Looker Explore tambahan yang ingin Anda kueri oleh agen data. Anda dapat mengulangi variabel ini untuk menyertakan hingga lima Eksplorasi.
Token akses
Anda dapat membuat koneksi dengan instance Looker menggunakan token akses, seperti yang dijelaskan dalam Mengautentikasi dan menghubungkan ke sumber data dengan Conversational Analytics API.
looker_access_token = "my_access_token"
looker_instance_uri = "https://my_company.looker.com"
lookml_model = "my_model"
explore = "my_explore"
lookml_model_2 = "my_model_2"
explore_2 = "my_explore_2"
looker_explore_reference = geminidataanalytics.LookerExploreReference()
looker_explore_reference.looker_instance_uri = looker_instance_uri
looker_explore_reference.lookml_model = "my_model"
looker_explore_reference.explore = "my_explore"
looker_explore_reference2 = geminidataanalytics.LookerExploreReference()
looker_explore_reference2.looker_instance_uri = looker_instance_uri
looker_explore_reference2.lookml_model = "my_model_2"
looker_explore_reference2.explore = "my_explore_2"
credentials = geminidataanalytics.Credentials()
credentials.oauth.secret.client_id = looker_client_id
credentials.oauth.secret.client_secret = looker_client_secret
datasource_references = geminidataanalytics.DatasourceReferences()
datasource_references.looker.explore_references = [looker_explore_reference, looker_explore_reference2]
Ganti nilai contoh sebagai berikut:
- my_access_token: Nilai
access_tokenyang Anda buat untuk melakukan autentikasi ke Looker. - https://my_company.looker.com: URL lengkap instance Looker Anda.
- my_model: Nama model LookML yang menyertakan Explore yang ingin Anda hubungkan.
- my_explore: Nama Looker Explore yang ingin Anda kueri oleh agen data.
- my_model_2: Nama model LookML kedua yang menyertakan Explore yang ingin Anda hubungkan. Anda dapat mengulangi variabel ini untuk model tambahan hingga lima Eksplorasi.
- my_explore_2: Nama Looker Explore tambahan yang ingin Anda kueri oleh agen data. Anda dapat mengulangi variabel ini untuk menyertakan hingga lima Eksplorasi.
Untuk mengetahui informasi selengkapnya tentang cara terhubung ke Explore Looker, termasuk peran yang diperlukan, lihat Terhubung ke Looker.
Menghubungkan ke data BigQuery
Bagian berikut menunjukkan cara terhubung ke data BigQuery menggunakan referensi tabel, referensi grafik, atau keduanya. Untuk mengetahui informasi selengkapnya tentang cara terhubung ke tabel dan grafik, termasuk peran yang diperlukan, lihat Terhubung ke BigQuery.
Menghubungkan ke tabel BigQuery
Kode contoh berikut menentukan koneksi ke beberapa tabel BigQuery dan menyertakan contoh kolom konteks terstruktur opsional.
bigquery_table_reference_1 = geminidataanalytics.BigQueryTableReference()
bigquery_table_reference_1.project_id = "PROJECT_ID_1"
bigquery_table_reference_1.dataset_id = "DATASET_ID_1"
bigquery_table_reference_1.table_id = "TABLE_ID_1"
bigquery_table_reference_1.schema = geminidataanalytics.Schema()
bigquery_table_reference_1.schema.description = "TABLE_DESCRIPTION"
bigquery_table_reference_1.schema.fields = [
geminidataanalytics.Field(
name="COLUMN_NAME",
description="COLUMN_DESCRIPTION"
)
]
bigquery_table_reference_2 = geminidataanalytics.BigQueryTableReference()
bigquery_table_reference_2.project_id = "PROJECT_ID_2"
bigquery_table_reference_2.dataset_id = "DATASET_ID_2"
bigquery_table_reference_2.table_id = "TABLE_ID_2"
bigquery_table_reference_3 = geminidataanalytics.BigQueryTableReference()
bigquery_table_reference_3.project_id = "PROJECT_ID_3"
bigquery_table_reference_3.dataset_id = "DATASET_ID_3"
bigquery_table_reference_3.table_id = "TABLE_ID_3"
# Connect to your data source
datasource_references = geminidataanalytics.DatasourceReferences()
datasource_references.bq.table_references = [bigquery_table_reference_1, bigquery_table_reference_2, bigquery_table_reference_3]
Ganti nilai contoh sebagai berikut:
- PROJECT_ID_1: ID project Google Cloud yang berisi set data dan tabel BigQuery yang ingin Anda hubungkan. Untuk terhubung ke set data publik, tentukan
bigquery-public-data. - DATASET_ID_1: ID set data BigQuery. Contoh,
san_francisco. - TABLE_ID_1: ID tabel BigQuery. Contoh,
street_trees. - TABLE_DESCRIPTION: Deskripsi opsional tentang konten dan tujuan tabel.
- COLUMN_NAME: Nama kolom dalam tabel yang deskripsi opsionalnya Anda berikan.
- COLUMN_DESCRIPTION: Deskripsi opsional tentang konten dan tujuan kolom.
Menghubungkan ke BigQuery Graph
Anda juga dapat terhubung ke grafik menggunakan BigQuery Graph. Berikan satu atau beberapa referensi grafik di kolom property_graph_references.
Untuk mengetahui informasi tentang persyaratan edisi BigQuery dan batasan kueri grafik, lihat Menghubungkan ke BigQuery Graph.
# BigQuery graph reference
graph_reference = geminidataanalytics.BigQueryPropertyGraphReference()
graph_reference.project_id = "GRAPH_PROJECT_ID"
graph_reference.dataset_id = "GRAPH_DATASET_ID"
graph_reference.property_graph_id = "GRAPH_ID"
# Connect to your data source
datasource_references = geminidataanalytics.DatasourceReferences()
datasource_references.bq.property_graph_references = [graph_reference]
Ganti nilai contoh sebagai berikut:
- GRAPH_PROJECT_ID: ID project Google Cloud yang berisi grafik BigQuery.
- GRAPH_DATASET_ID: ID set data BigQuery yang berisi grafik.
- GRAPH_ID: ID grafik BigQuery.
Untuk mengkueri tabel dan grafik dengan agen data yang sama, tetapkan table_references dan property_graph_references di datasource_references.bq.
Menghubungkan ke data Data Studio
Kode contoh berikut menentukan koneksi ke sumber data Data Studio.
studio_datasource_id = "my_datasource_id"
studio_references = geminidataanalytics.StudioDatasourceReference()
studio_references.datasource_id = studio_datasource_id
## Connect to your data source
datasource_references.studio.studio_references = [studio_references]
Pada contoh sebelumnya, ganti my_datasource_id dengan ID sumber data.
Menghubungkan ke data AlloyDB
Kode contoh berikut menentukan koneksi ke database AlloyDB menggunakan Python SDK.
# Define the AlloyDB database reference
alloydb_database_reference = geminidataanalytics.AlloyDbDatabaseReference()
alloydb_database_reference.project_id = "PROJECT_ID"
alloydb_database_reference.region = "REGION"
alloydb_database_reference.cluster_id = "CLUSTER_ID"
alloydb_database_reference.instance_id = "INSTANCE_ID"
alloydb_database_reference.database_id = "DATABASE"
alloydb_database_reference.table_ids = ["TABLE_1_ID", "TABLE_2_ID"]
# Optional: Include this if you have created advanced context for the agent
agent_context_reference = geminidataanalytics.AgentContextReference()
agent_context_reference.context_set_id = f"projects/{billing_project}/locations/{location}/contextSets/your_context_set_id"
# Add the AlloyDB reference to the DatasourceReferences object
datasource_references = geminidataanalytics.DatasourceReferences()
datasource_references.alloydb.database_reference = alloydb_database_reference
# Optional:
# datasource_references.alloydb.agent_context_reference = agent_context_reference
Ganti nilai contoh sebagai berikut:
- PROJECT_ID: ID project Google Cloud yang berisi cluster AlloyDB.
- REGION: Region tempat cluster AlloyDB berada—misalnya,
us-central1. - CLUSTER_ID: ID cluster AlloyDB.
- INSTANCE_ID: ID instance AlloyDB.
- DATABASE: Nama database target—misalnya,
financial. - TABLE_1_ID, TABLE_2_ID: Daftar tabel dalam database yang disarankan untuk digunakan oleh agen data—misalnya,
"loan","client","disp". - your_context_set_id: Jika Anda membuat konteks lanjutan untuk agen, ID set konteks Anda.
Menghubungkan ke data Cloud SQL untuk MySQL
Untuk terhubung ke instance Cloud SQL untuk MySQL, gunakan class CloudSqlReference
dari geminidataanalytics SDK. Hal ini melibatkan penentuan project, instance, database, dan secara opsional, tabel tertentu yang ingin Anda pertimbangkan oleh agen.
Sebelum terhubung ke data Cloud SQL untuk MySQL, pastikan Anda melakukan autentikasi ke Cloud SQL untuk MySQL menggunakan Identity and Access Management (IAM). Untuk mengetahui informasi selengkapnya, lihat Melakukan autentikasi ke Cloud SQL untuk MySQL dan Cloud SQL untuk PostgreSQL.
Contoh berikut menentukan koneksi ke database Cloud SQL untuk MySQL menggunakan Python SDK.
# Import the necessary library
from google.cloud import geminidataanalytics
# Define the Cloud SQL database reference
cloud_sql_database_reference = geminidataanalytics.CloudSqlDatabaseReference(
project_id="PROJECT_ID",
instance_id="INSTANCE_ID",
database_id="DATABASE_ID",
# Optional: Specify table IDs to guide the agent
table_ids=["TABLE_1_ID", "TABLE_2_ID"]
)
# Create a CloudSqlReference object
cloud_sql_reference = geminidataanalytics.CloudSqlReference(
database_reference=cloud_sql_database_reference
# Optional: Include this if you have created advanced context for the agent
# agent_context_reference=geminidataanalytics.AgentContextReference(
# context_set_id=f"projects/{billing_project}/locations/{location}/contextSets/your_context_set_id"
# )
)
# Add the Cloud SQL reference to the DatasourceReferences object
datasource_references = geminidataanalytics.DatasourceReferences()
datasource_references.cloud_sql = cloud_sql_reference
Ganti nilai contoh sebagai berikut:
- PROJECT_ID: ID project Google Cloud yang berisi instance Cloud SQL untuk MySQL.
- INSTANCE_ID: ID instance Cloud SQL untuk MySQL.
- DATABASE_ID: Nama database target dalam instance—misalnya,
financial. - TABLE_1_ID, TABLE_2_ID: (Opsional) Daftar nama tabel tertentu dalam database yang disarankan untuk digunakan oleh agen data—misalnya,
"orders"dan"customers". - your_context_set_id: Jika Anda membuat konteks lanjutan untuk agen, ID set konteks Anda.
Anda dapat menggunakan objek datasource_references saat membuat atau berinteraksi dengan agen data.
Menghubungkan ke data Cloud SQL untuk PostgreSQL
Untuk terhubung ke instance Cloud SQL untuk PostgreSQL, gunakan class CloudSqlReference
dari geminidataanalytics SDK. Hal ini melibatkan penentuan project, instance, database, dan secara opsional, tabel tertentu yang ingin Anda pertimbangkan oleh agen.
Sebelum terhubung ke data Cloud SQL untuk PostgreSQL, pastikan Anda melakukan autentikasi ke Cloud SQL untuk PostgreSQL menggunakan IAM. Untuk mengetahui informasi selengkapnya, lihat Melakukan autentikasi ke Cloud SQL untuk MySQL dan Cloud SQL untuk PostgreSQL.
Contoh berikut menentukan koneksi ke database Cloud SQL untuk PostgreSQL menggunakan Python SDK.
# Import the necessary library
from google.cloud import geminidataanalytics
# Define the Cloud SQL database reference
cloud_sql_database_reference = geminidataanalytics.CloudSqlDatabaseReference(
project_id="PROJECT_ID",
instance_id="INSTANCE_ID",
database_id="DATABASE_ID",
# Optional: Specify table IDs to guide the agent
table_ids=["TABLE_1_ID", "TABLE_2_ID"]
)
# Create a CloudSqlReference object
cloud_sql_reference = geminidataanalytics.CloudSqlReference(
database_reference=cloud_sql_database_reference
# Optional: Include this if you have created advanced context for the agent
# agent_context_reference=geminidataanalytics.AgentContextReference(
# context_set_id=f"projects/{billing_project}/locations/{location}/contextSets/your_context_set_id"
# )
)
# Add the Cloud SQL reference to the DatasourceReferences object
datasource_references = geminidataanalytics.DatasourceReferences()
datasource_references.cloud_sql = cloud_sql_reference
Ganti nilai contoh sebagai berikut:
- PROJECT_ID: ID project Google Cloud yang berisi instance Cloud SQL untuk PostgreSQL.
- INSTANCE_ID: ID instance Cloud SQL untuk PostgreSQL.
- DATABASE_ID: Nama database target dalam instance—misalnya,
postgres. - TABLE_1_ID, TABLE_2_ID: (Opsional) Daftar nama tabel tertentu dalam database yang disarankan untuk digunakan oleh agen data—misalnya,
"users"dan"products". - your_context_set_id: Jika Anda membuat konteks lanjutan untuk agen, ID set konteks Anda.
Anda dapat menggunakan objek datasource_references saat membuat atau berinteraksi dengan agen data.
Menghubungkan ke data Spanner
Untuk terhubung ke instance Spanner, gunakan class SpannerReference
dari geminidataanalytics SDK. Hal ini melibatkan penentuan project, instance, database, dan secara opsional, tabel tertentu yang ingin Anda pertimbangkan oleh agen.
Sebelum Anda terhubung ke data Spanner, pastikan akun pengguna atau
layanan memiliki peran IAM spanner.databaseReader. Untuk mengetahui informasi selengkapnya,
lihat Menerapkan peran IAM.
Kode Python contoh berikut menentukan koneksi ke database Spanner menggunakan Python SDK.
# Import the necessary library
from google.cloud import geminidataanalytics
# Define the Spanner database reference
spanner_database_reference = geminidataanalytics.SpannerDatabaseReference(
project_id="PROJECT_ID",
instance_id="INSTANCE_ID",
database_id="DATABASE_ID",
# Optional: Specify table IDs to guide the agent
table_ids=["TABLE_1_ID", "TABLE_2_ID"]
)
# Create a SpannerReference object
spanner_reference = geminidataanalytics.SpannerReference(
database_reference=spanner_database_reference
# Optional: Include this if you have created advanced context for the agent
# agent_context_reference=geminidataanalytics.AgentContextReference(
# context_set_id=f"projects/{billing_project}/locations/{location}/contextSets/your_context_set_id"
# )
)
# Add the Spanner reference to the DatasourceReferences object
datasource_references = geminidataanalytics.DatasourceReferences()
datasource_references.spanner = spanner_reference
Ganti nilai contoh sebagai berikut:
- PROJECT_ID: ID project Google Cloud yang berisi instance Spanner.
- INSTANCE_ID: ID instance Spanner.
- DATABASE_ID: Nama database target dalam instance.
- TABLE_1_ID, TABLE_2_ID: (Opsional) Daftar nama tabel tertentu dalam database yang disarankan untuk digunakan oleh agen data—misalnya,
"Singers"dan"Albums". - your_context_set_id: Jika Anda membuat konteks lanjutan untuk agen, ID set konteks Anda.
Anda dapat menggunakan objek datasource_references saat membuat atau berinteraksi dengan agen data.
Menyiapkan konteks untuk chat stateful atau stateless
Conversational Analytics API mendukung percakapan multi-giliran, yang memungkinkan pengguna mengajukan pertanyaan lanjutan yang didasarkan pada konteks sebelumnya. Kode Python contoh berikut menunjukkan cara menyiapkan konteks untuk chat stateful atau stateless:
- Chat stateful: Google Cloud menyimpan dan mengelola histori percakapan. Chat stateful pada dasarnya bersifat multi-turn, karena API mempertahankan konteks dari pesan sebelumnya. You only need to send the current message for each turn.
- Chat stateless: Aplikasi Anda mengelola histori percakapan. Anda harus menyertakan seluruh histori percakapan dengan setiap pesan baru. Untuk contoh mendetail tentang cara mengelola percakapan multi-turn dalam mode stateless, lihat Membuat percakapan multi-turn stateless.
Chat stateful
Contoh kode berikut menyiapkan konteks untuk chat stateful, tempat Google Cloud menyimpan dan mengelola histori percakapan. Anda juga dapat mengaktifkan analisis lanjutan dengan Python secara opsional dengan menyertakan baris published_context.options.analysis.python.enabled = True dalam kode contoh berikut.
# Set up context for stateful chat
published_context = geminidataanalytics.Context()
published_context.system_instruction = system_instruction
published_context.datasource_references = datasource_references
# Optional: To enable advanced analysis with Python, include the following line:
published_context.options.analysis.python.enabled = True
# Optional: To limit query costs to 100 MiB, include the following line:
published_context.options.datasource.big_query_max_billed_bytes.value = 104857600
Chat stateless
Kode contoh berikut menyiapkan konteks untuk chat stateless, yang mengharuskan Anda mengirim seluruh histori percakapan dengan setiap pesan. Anda juga dapat mengaktifkan analisis lanjutan dengan Python secara opsional dengan menyertakan baris inline_context.options.analysis.python.enabled = True dalam kode contoh berikut.
# Set up context for stateless chat
inline_context = geminidataanalytics.Context()
inline_context.system_instruction = system_instruction
inline_context.datasource_references = datasource_references
# Optional: To enable advanced analysis with Python, include the following line:
inline_context.options.analysis.python.enabled = True
# Optional: To limit query costs to 100 MiB, include the following line:
inline_context.options.datasource.big_query_max_billed_bytes = 104857600
Membuat agen data
Kode Python contoh berikut membuat permintaan API untuk membuat agen data, yang kemudian dapat Anda gunakan untuk melakukan percakapan tentang data Anda. Anda dapat membuat agen secara sinkron atau asinkron. Agen data dikonfigurasi dengan sumber data, petunjuk sistem, dan konteks yang ditentukan.
Anda dapat melindungi agen data dengan CMEK secara opsional dengan menetapkan kolom kms_key saat membuat agen data. Untuk mengetahui informasi selengkapnya, lihat Kunci enkripsi yang dikelola pelanggan (CMEK).
Sinkron
data_agent_id = "data_agent_1"
# Optional: If using CMEK, replace the empty strings with your KMS key details.
key_ring = "" # KEY_RING_NAME
key_name = "" # KEY_NAME
key_project = "" # KMS_PROJECT_ID (Defaults to billing_project if empty)
key_location = "" # KEY_LOCATION (Defaults to location if empty; except eu)
data_agent = geminidataanalytics.DataAgent()
data_agent.data_analytics_agent.published_context = published_context
data_agent.name = f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}" # Optional
# Optional: Add CMEK key if details are provided
if key_ring and key_name:
if not key_project:
key_project = billing_project
if not key_location:
key_location = location
kms_key_data_agent = f"projects/{key_project}/locations/{key_location}/keyRings/{key_ring}/cryptoKeys/{key_name}"
data_agent.kms_key = kms_key_data_agent # Add for CMEK
request = geminidataanalytics.CreateDataAgentRequest(
parent=f"projects/{billing_project}/locations/{location}",
data_agent_id=data_agent_id, # Optional
data_agent=data_agent,
)
try:
response = data_agent_client.create_data_agent_sync(request=request)
print("Data Agent created")
print(response)
except Exception as e:
print(f"Error creating Data Agent: {e}")
Asinkron
data_agent_id = "data_agent_1"
# Optional: If using CMEK, replace the empty strings with your KMS key details.
key_ring = "" # KEY_RING_NAME
key_name = "" # KEY_NAME
key_project = "" # KMS_PROJECT_ID (Defaults to billing_project if empty)
key_location = "" # KEY_LOCATION (Defaults to location if empty; except eu)
data_agent = geminidataanalytics.DataAgent()
data_agent.data_analytics_agent.published_context = published_context
data_agent.name = f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}" # Optional
# Optional: Add CMEK key if details are provided
if key_ring and key_name:
if not key_project:
key_project = billing_project
if not key_location:
key_location = location
kms_key_data_agent = f"projects/{key_project}/locations/{key_location}/keyRings/{key_ring}/cryptoKeys/{key_name}"
data_agent.kms_key = kms_key_data_agent # Add for CMEK
request = geminidataanalytics.CreateDataAgentRequest(
parent=f"projects/{billing_project}/locations/{location}",
data_agent_id=data_agent_id, # Optional
data_agent=data_agent,
)
try:
data_agent_client.create_data_agent(request=request)
print("Data Agent created")
except Exception as e:
print(f"Error creating Data Agent: {e}")
Dalam contoh sebelumnya, ganti nilai sebagai berikut:
- data_agent_1: ID unik untuk agen data.
- KEY_RING_NAME: Jika menggunakan CMEK, nama key ring Cloud KMS Anda.
- KEY_NAME: Jika menggunakan CMEK, nama kunci Cloud KMS Anda.
- KMS_PROJECT_ID: Jika menggunakan CMEK, project ID tempat kunci dihosting.
- KEY_LOCATION: Jika menggunakan CMEK, lokasi key ring Anda. Untuk multi-region
eu, gunakaneurope. Untuk semua lokasi lainnya, gunakan lokasi yang sama dengan agen data. Jika tidak diberikan, setelan ini akan ditetapkan secara default ke lokasi agen data, yang berfungsi untuk semua lokasi kecuali multi-regioneu. Untuk mengetahui informasi selengkapnya, lihat Persyaratan lokasi kunci.
Membuat percakapan
Contoh kode Python berikut membuat permintaan API untuk membuat percakapan.
Anda dapat melindungi percakapan dengan CMEK secara opsional dengan menetapkan kolom kms_key saat membuat percakapan. Untuk mengetahui informasi selengkapnya, lihat Kunci enkripsi yang dikelola pelanggan (CMEK).
# Initialize request arguments
data_agent_id = "data_agent_1"
conversation_id = "conversation_1"
# Optional: If using CMEK, replace the empty strings with your KMS key details.
key_ring = "" # KEY_RING_NAME
key_name = "" # KEY_NAME
key_project = "" # KMS_PROJECT_ID (Defaults to billing_project if empty)
key_location = "" # KEY_LOCATION (Defaults to location if empty; single regions only)
conversation = geminidataanalytics.Conversation()
conversation.agents = [f'projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}']
conversation.name = f"projects/{billing_project}/locations/{location}/conversations/{conversation_id}"
# Optional: Add CMEK key if details are provided
if key_ring and key_name:
if not key_project:
key_project = billing_project
if not key_location:
key_location = location
kms_key_conversation = f"projects/{key_project}/locations/{key_location}/keyRings/{key_ring}/cryptoKeys/{key_name}"
conversation.kms_key = kms_key_conversation # Add for CMEK
request = geminidataanalytics.CreateConversationRequest(
parent=f"projects/{billing_project}/locations/{location}",
conversation_id=conversation_id,
conversation=conversation,
)
# Make the request
response = data_chat_client.create_conversation(request=request)
# Handle the response
print(response)
Ganti nilai contoh sebagai berikut:
- data_agent_1: ID agen data, seperti yang ditentukan dalam blok kode contoh di Membuat agen data.
- conversation_1: ID unik untuk percakapan.
- KEY_RING_NAME: Jika menggunakan CMEK, nama key ring Cloud KMS Anda.
- KEY_NAME: Jika menggunakan CMEK, nama kunci Cloud KMS Anda.
- KMS_PROJECT_ID: Jika menggunakan CMEK, project ID tempat kunci dihosting.
- KEY_LOCATION: Jika menggunakan CMEK, lokasi key ring Anda. Untuk multi-region
us, gunakanus-central1. Untuk multi-regioneu, gunakaneurope-west1. Untuk satu region, gunakan region yang sama dengan percakapan. Jika tidak diberikan, setelan ini akan ditetapkan secara default ke lokasi percakapan, yang hanya berfungsi untuk satu region. Untuk mengetahui informasi selengkapnya, lihat Persyaratan lokasi kunci.
Mengelola agen data dan percakapan
Contoh kode berikut menunjukkan cara mengelola agen data dan percakapan Anda menggunakan Conversational Analytics API. Anda dapat melakukan tugas berikut:
- Mendapatkan agen data
- Mencantumkan agen data
- Mencantumkan agen data yang dapat diakses
- Memperbarui agen data
- Mendapatkan kebijakan IAM untuk agen data
- Menetapkan kebijakan IAM untuk agen data
- Menghapus agen data
- Mendapatkan percakapan
- Mencantumkan percakapan
- Mencantumkan pesan dalam percakapan
Mendapatkan agen data
Contoh kode Python berikut menunjukkan cara membuat permintaan API untuk mengambil agen data yang telah Anda buat sebelumnya.
# Initialize request arguments
data_agent_id = "data_agent_1"
request = geminidataanalytics.GetDataAgentRequest(
name=f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}",
)
# Make the request
response = data_agent_client.get_data_agent(request=request)
# Handle the response
print(response)
Pada contoh sebelumnya, ganti nilai data_agent_1 dengan ID unik untuk agen data yang ingin Anda ambil.
Mencantumkan agen data
Kode berikut menunjukkan cara mencantumkan semua agen data untuk project tertentu dengan memanggil metode list_data_agents. Untuk mencantumkan semua agen, Anda harus memiliki izin geminidataanalytics.dataAgents.list pada project. Untuk mengetahui informasi selengkapnya tentang peran IAM yang menyertakan izin ini, lihat daftar peran yang telah ditetapkan.
billing_project = "YOUR-BILLING-PROJECT"
location = "global"
request = geminidataanalytics.ListDataAgentsRequest(
parent=f"projects/{billing_project}/locations/{location}",
)
# Make the request
page_result = data_agent_client.list_data_agents(request=request)
# Handle the response
for response in page_result:
print(response)
Ganti YOUR-BILLING-PROJECT dengan ID project penagihan Anda.
Mencantumkan agen data yang dapat diakses
Kode berikut menunjukkan cara mencantumkan semua agen data yang dapat diakses untuk project tertentu dengan memanggil metode list_accessible_data_agents.
billing_project = "YOUR-BILLING-PROJECT"
creator_filter = "YOUR-CREATOR-FILTER"
location = "global"
request = geminidataanalytics.ListAccessibleDataAgentsRequest(
parent=f"projects/{billing_project}/locations/{location}",
creator_filter=creator_filter
)
# Make the request
page_result = data_agent_client.list_accessible_data_agents(request=request)
# Handle the response
for response in page_result:
print(response)
Ganti nilai contoh sebagai berikut:
- YOUR-BILLING-PROJECT: ID project penagihan Anda.
- YOUR-CREATOR-FILTER: Filter yang akan diterapkan berdasarkan pembuat agen data. Nilai yang mungkin mencakup
NONE(default),CREATOR_ONLY, danNOT_CREATOR_ONLY.
Memperbarui agen data
Kode contoh berikut menunjukkan cara mengupdate agen data secara sinkron atau asinkron dengan memanggil metode update_data_agent_sync atau update_data_agent pada resource agen data. Permintaan memerlukan objek DataAgent yang menyertakan nilai baru untuk kolom yang ingin Anda ubah, dan parameter update_mask yang menggunakan objek FieldMask untuk menentukan kolom yang akan diperbarui.
Untuk memperbarui agen data, Anda harus memiliki izin IAM geminidataanalytics.dataAgents.update pada agen. Untuk mengetahui informasi selengkapnya tentang peran IAM yang menyertakan izin ini, lihat daftar peran yang telah ditetapkan.
Sinkron
data_agent_id = "data_agent_1"
billing_project = "YOUR-BILLING-PROJECT"
data_agent = geminidataanalytics.DataAgent()
data_agent.data_analytics_agent.published_context = published_context
data_agent.name = f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}"
data_agent.description = "Updated description of the data agent."
update_mask = field_mask_pb2.FieldMask(paths=['description', 'data_analytics_agent.published_context'])
request = geminidataanalytics.UpdateDataAgentRequest(
data_agent=data_agent,
update_mask=update_mask,
)
try:
# Make the request
response = data_agent_client.update_data_agent_sync(request=request)
print("Data Agent Updated")
print(response)
except Exception as e:
print(f"Error updating Data Agent: {e}")
Asinkron
data_agent_id = "data_agent_1"
billing_project = "YOUR-BILLING-PROJECT"
data_agent = geminidataanalytics.DataAgent()
data_agent.data_analytics_agent.published_context = published_context
data_agent.name = f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}"
data_agent.description = "Updated description of the data agent."
update_mask = field_mask_pb2.FieldMask(paths=['description', 'data_analytics_agent.published_context'])
request = geminidataanalytics.UpdateDataAgentRequest(
data_agent=data_agent,
update_mask=update_mask,
)
try:
# Make the request
data_agent_client.update_data_agent(request=request)
print("Data Agent Updated")
except Exception as e:
print(f"Error updating Data Agent: {e}")
Ganti nilai contoh sebagai berikut:
- data_agent_1: ID agen data yang ingin Anda perbarui.
- YOUR-BILLING-PROJECT: ID project penagihan Anda.
- Updated description of the data agent.: Deskripsi agen data yang diperbarui.
Mendapatkan kebijakan IAM untuk agen data
Kode contoh berikut menunjukkan cara menggunakan metode get_iam_policy untuk mengambil kebijakan IAM untuk agen data. Permintaan menentukan jalur resource agen data.
billing_project = "YOUR-BILLING-PROJECT"
location = "global"
data_agent_id = "data_agent_1"
resource = f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}"
request = iam_policy_pb2.GetIamPolicyRequest(
resource=resource,
)
try:
response = data_agent_client.get_iam_policy(request=request)
print("IAM Policy fetched successfully!")
print(f"Response: {response}")
except Exception as e:
print(f"Error setting IAM policy: {e}")
Ganti nilai contoh sebagai berikut:
- YOUR-BILLING-PROJECT: ID project penagihan Anda.
- data_agent_1: ID agen data yang kebijakan IAM-nya ingin Anda dapatkan.
Menetapkan kebijakan IAM untuk agen data
Untuk membagikan agen, Anda dapat menggunakan metode set_iam_policy untuk menetapkan peran IAM kepada pengguna di agen tertentu. Permintaan ini menyertakan binding yang menentukan peran yang harus ditetapkan kepada pengguna tertentu.
billing_project = "YOUR-BILLING-PROJECT"
location = "global"
data_agent_id = "data_agent_1"
role = "roles/geminidataanalytics.dataAgentEditor"
users = "EMAIL_ADDRESS"
resource = f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}"
# Construct the IAM policy
binding = policy_pb2.Binding(
role=role,
members= [f"user:{i.strip()}" for i in users.split(",")]
)
policy = policy_pb2.Policy(bindings=[binding])
# Create the request
request = iam_policy_pb2.SetIamPolicyRequest(
resource=resource,
policy=policy
)
# Send the request
try:
response = data_agent_client.set_iam_policy(request=request)
print("IAM Policy set successfully!")
print(f"Response: {response}")
except Exception as e:
print(f"Error setting IAM policy: {e}")
Ganti nilai contoh sebagai berikut:
- YOUR-BILLING-PROJECT: ID project penagihan Anda.
- data_agent_1: ID agen data yang ingin Anda tetapkan kebijakan IAM-nya.
- EMAIL_ADDRESSES: Daftar email pengguna yang dipisahkan koma yang ingin Anda beri peran yang ditentukan.
Menghapus agen data
Kode contoh berikut menunjukkan cara menggunakan metode delete_data_agent_sync atau delete_data_agent untuk menghapus agen data secara sinkron atau asinkron. Saat Anda menghapus agen data, agen tersebut akan memasuki periode penghapusan sementara selama 30 hari dan tidak dapat dipulihkan. Untuk mengetahui informasi selengkapnya, lihat Retensi dan penghapusan data. Permintaan menentukan URL resource agen data.
Sinkron
billing_project = "YOUR-BILLING-PROJECT"
location = "global"
data_agent_id = "data_agent_1"
request = geminidataanalytics.DeleteDataAgentRequest(
name=f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}",
)
try:
# Make the request
data_agent_client.delete_data_agent_sync(request=request)
print("Data Agent Deleted")
except Exception as e:
print(f"Error deleting Data Agent: {e}")
Asinkron
billing_project = "YOUR-BILLING-PROJECT"
location = "global"
data_agent_id = "data_agent_1"
request = geminidataanalytics.DeleteDataAgentRequest(
name=f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}",
)
try:
# Make the request
data_agent_client.delete_data_agent(request=request)
print("Data Agent Deleted")
except Exception as e:
print(f"Error deleting Data Agent: {e}")
Ganti nilai contoh sebagai berikut:
- YOUR-BILLING-PROJECT: ID project penagihan Anda.
- data_agent_1: ID agen data yang ingin Anda hapus.
Mendapatkan percakapan
Contoh kode berikut menunjukkan cara menggunakan metode get_conversation untuk mengambil informasi tentang percakapan yang ada. Permintaan menentukan jalur resource percakapan.
billing_project = "YOUR-BILLING-PROJECT"
location = "global"
conversation_id = "conversation_1"
request = geminidataanalytics.GetConversationRequest(
name = f"projects/{billing_project}/locations/{location}/conversations/{conversation_id}"
)
# Make the request
response = data_chat_client.get_conversation(request=request)
# Handle the response
print(response)
Ganti nilai contoh sebagai berikut:
- YOUR-BILLING-PROJECT: ID project penagihan Anda.
- conversation_1: ID percakapan yang ingin Anda ambil.
Membuat daftar percakapan
Kode contoh berikut menunjukkan cara mencantumkan percakapan untuk project tertentu dengan memanggil metode list_conversations. Permintaan menentukan URL resource induk, yaitu project dan lokasi (misalnya, projects/my-project/locations/global).
Secara default, metode ini menampilkan percakapan yang Anda buat. Admin (pengguna dengan peran IAM cloudaicompanion.topicAdmin) dapat melihat semua percakapan dalam project.
billing_project = "YOUR-BILLING-PROJECT"
location = "global"
request = geminidataanalytics.ListConversationsRequest(
parent=f"projects/{billing_project}/locations/{location}",
)
# Make the request
response = data_chat_client.list_conversations(request=request)
# Handle the response
print(response)
Ganti YOUR-BILLING-PROJECT dengan ID project penagihan tempat Anda mengaktifkan API yang diperlukan.
Mencantumkan pesan dalam percakapan
Kode contoh berikut menunjukkan cara menggunakan metode list_messages untuk mengambil semua pesan dalam percakapan. Permintaan menentukan jalur resource percakapan.
Untuk mencantumkan pesan, Anda harus memiliki izin cloudaicompanion.topics.get pada percakapan.
billing_project = "YOUR-BILLING-PROJECT"
location = "global"
conversation_id = "conversation_1"
request = geminidataanalytics.ListMessagesRequest(
parent=f"projects/{billing_project}/locations/{location}/conversations/{conversation_id}",
)
# Make the request
response = data_chat_client.list_messages(request=request)
# Handle the response
print(response)
Ganti nilai contoh sebagai berikut:
- YOUR-BILLING-PROJECT: ID project penagihan Anda.
- conversation_1: ID percakapan yang pesannya ingin Anda cantumkan.
Menghapus percakapan
Kode contoh berikut menunjukkan cara menghapus percakapan. Admin (pengguna dengan peran Identity and Access Management cloudaicompanion.topicAdmin) atau pengguna dengan izin Identity and Access Management cloudaicompanion.topics.delete dapat menghapus percakapan dalam project.
billing_project = "YOUR-BILLING-PROJECT"
location = "global"
conversation_id = "conversation_1"
request = geminidataanalytics.DeleteConversationRequest(
name = f"projects/{billing_project}/locations/{location}/conversations/{conversation_id}"
)
# Make the request
response = data_chat_client.delete_conversation(request=request)
# Handle the response
print(response)
Ganti nilai contoh sebagai berikut:
- YOUR-BILLING-PROJECT: ID project penagihan Anda.
- conversation_1: ID percakapan yang pesannya ingin Anda cantumkan.
Menggunakan API untuk mengajukan pertanyaan
Setelah membuat agen data dan, untuk chat stateful, percakapan, Anda dapat mengirim kueri ke agen. Contoh kode berikut menunjukkan cara memanggil metode data_chat_client.chat. Contoh ini menggunakan variabel konteks (seperti sumber data dan petunjuk sistem) yang Anda konfigurasi di Menyiapkan konteks untuk chat stateful atau stateless.
Saat Anda mengirim kueri, API akan menampilkan aliran objek Message. Streaming ini dapat berisi berbagai jenis pesan, termasuk teks, tabel data, dan diagram. Pesan teks dapat memberikan insight tentang penalaran agen, melaporkan progresnya, atau memberikan jawaban akhir. Tujuan setiap pesan teks ditunjukkan oleh nilai TextType:
THOUGHT: Menampilkan proses penalaran internal agen saat merencanakan cara menjawab kueri Anda. PesanTHOUGHTmemberikan insight langkah demi langkah tentang proses penalaran dan pengambilan keputusan agen, serta berisi dua bagian:parts[0]adalah ringkasan pemikiran, yang meringkas teks pemikiran lengkap secara singkat, danparts[1]adalah teks pemikiran lengkap.PROGRESS: Melaporkan progres agen dalam suatu tindakan, seperti pengambilan data atau alat yang sedang dipanggil. Nilai ini hanya ditampilkan untuk sumber data Looker dan berisi dua bagian:parts[0]adalah ringkasan, danparts[1]adalah teks progres lengkap.FINAL_RESPONSE: Memberikan jawaban akhir untuk kueri Anda.
Contoh kode berikut menggunakan fungsi bantuan show_message, yang ditentukan dalam Menentukan fungsi bantuan, untuk memproses dan menampilkan setiap pesan dalam streaming. Untuk panduan tentang cara merender pesan ini di antarmuka pengguna saat Anda menggunakan sumber data Looker, lihat Merender respons agen untuk sumber data Looker.
Chat stateful
Mengirim permintaan chat stateful dengan referensi Conversation
Anda dapat mengirim permintaan chat stateful ke agen data dengan mereferensikan resource Conversation yang telah Anda buat sebelumnya.
# Create a request that contains a single user message (your question)
question = "Which species of tree is most prevalent?"
messages = [geminidataanalytics.Message()]
messages[0].user_message.text = question
data_agent_id = "data_agent_1"
conversation_id = "conversation_1"
# Create a conversation_reference
conversation_reference = geminidataanalytics.ConversationReference()
conversation_reference.conversation = f"projects/{billing_project}/locations/{location}/conversations/{conversation_id}"
conversation_reference.data_agent_context.data_agent = f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}"
# Form the request
request = geminidataanalytics.ChatRequest(
parent = f"projects/{billing_project}/locations/{location}",
# credentials = credentials,
messages = messages,
conversation_reference = conversation_reference
)
# Make the request
stream = data_chat_client.chat(request=request, timeout=300 #custom timeout up to 600s)
# Handle the response
for response in stream:
show_message(response)
Ganti nilai contoh sebagai berikut:
- Which species of tree is most prevalent?: Pertanyaan dalam bahasa alami untuk dikirim ke agen data.
- data_agent_1: ID unik untuk agen data, seperti yang ditentukan dalam Membuat agen data.
- conversation_1: ID unik untuk percakapan, seperti yang ditentukan dalam Membuat percakapan.
Chat stateless
Contoh kode berikut menunjukkan cara mengirim kueri ke agen data saat Anda telah menyiapkan konteks untuk chat stateless. Anda dapat mengirim kueri stateless dengan mereferensikan resource DataAgent yang telah ditentukan sebelumnya atau dengan menggunakan konteks inline dalam permintaan.
Mengirim permintaan chat stateless dengan referensi DataAgent
Anda dapat mengirim kueri ke agen data dengan mereferensikan resource DataAgent yang telah Anda buat sebelumnya.
# Create a request that contains a single user message (your question)
question = "Which species of tree is most prevalent?"
messages = [geminidataanalytics.Message()]
messages[0].user_message.text = question
data_agent_id = "data_agent_1"
data_agent_context = geminidataanalytics.DataAgentContext()
data_agent_context.data_agent = f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}"
# Form the request
request = geminidataanalytics.ChatRequest(
parent=f"projects/{billing_project}/locations/{location}",
# credentials=credentials,
messages=messages,
data_agent_context = data_agent_context
)
# Make the request
stream = data_chat_client.chat(request=request, timeout=300 #custom timeout up to 600s)
# Handle the response
for response in stream:
show_message(response)
Ganti nilai contoh sebagai berikut:
- Which species of tree is most prevalent?: Pertanyaan dalam bahasa alami untuk dikirim ke agen data.
- data_agent_1: ID unik untuk agen data, seperti yang ditentukan dalam Membuat agen data.
Mengirim permintaan chat stateless dengan konteks inline
Kode contoh berikut menunjukkan cara menggunakan parameter inline_context untuk memberikan konteks langsung dalam permintaan chat stateless Anda.
# Create a request that contains a single user message (your question)
question = "Which species of tree is most prevalent?"
messages = [geminidataanalytics.Message()]
messages[0].user_message.text = question
request = geminidataanalytics.ChatRequest(
inline_context=inline_context,
parent=f"projects/{billing_project}/locations/{location}",
# credentials=credentials,
messages=messages,
)
# Make the request
stream = data_chat_client.chat(request=request, timeout=300 #custom timeout up to 600s)
# Handle the response
for response in stream:
show_message(response)
Pada contoh sebelumnya, ganti Which species of tree is most prevalent? dengan pertanyaan bahasa alami untuk dikirim ke agen data.
Membuat percakapan multi-giliran stateless
Untuk mengajukan pertanyaan lanjutan dalam percakapan stateless, aplikasi Anda harus mengelola konteks percakapan dengan mengirimkan seluruh histori pesan bersama setiap permintaan baru. Contoh berikut menunjukkan cara membuat percakapan multi-turn dengan mereferensikan agen data atau menggunakan konteks inline untuk menyediakan sumber data secara langsung.
# List that is used to track previous turns and is reused across requests
conversation_messages = []
data_agent_id = "data_agent_1"
# Use data agent context
data_agent_context = geminidataanalytics.DataAgentContext()
data_agent_context.data_agent = f"projects/{billing_project}/locations/{location}/dataAgents/{data_agent_id}"
# Helper function for calling the API
def multi_turn_Conversation(msg):
message = geminidataanalytics.Message()
message.user_message.text = msg
# Send a multi-turn request by including previous turns and the new message
conversation_messages.append(message)
request = geminidataanalytics.ChatRequest(
parent=f"projects/{billing_project}/locations/{location}",
# credentials=credentials,
messages=conversation_messages,
# Use data agent context
data_agent_context=data_agent_context,
# Use inline context
# inline_context=inline_context,
)
# Make the request
stream = data_chat_client.chat(request=request, timeout=300 #custom timeout up to 600s)
# Handle the response
for response in stream:
show_message(response)
conversation_messages.append(response)
# Send the first turn request
multi_turn_Conversation("Which species of tree is most prevalent?")
# Send follow-up turn request
multi_turn_Conversation("Can you show me the results as a bar chart?")
Pada contoh sebelumnya, ganti nilai contoh sebagai berikut:
- data_agent_1: ID unik untuk agen data, seperti yang ditentukan dalam blok kode contoh di Membuat agen data.
- Which species of tree is most prevalent?: Pertanyaan dalam bahasa alami untuk dikirim ke agen data.
- Can you show me the results as a bar chart?: Pertanyaan lanjutan yang mengembangkan atau menyempurnakan pertanyaan sebelumnya.
Menentukan fungsi bantuan
Kode contoh berikut berisi definisi fungsi bantuan yang digunakan dalam contoh kode sebelumnya. Fungsi ini membantu mengurai respons dari API dan menampilkan hasilnya.
import json as json_lib
import textwrap
import time
import altair as alt
import IPython
import pandas as pd
import proto
import requests
from google.protobuf.json_format import MessageToDict, MessageToJson
from IPython.display import display, HTML
from pygments import highlight, lexers, formatters
from google.protobuf import field_mask_pb2
from google.iam.v1 import policy_pb2
from google.iam.v1 import iam_policy_pb2
def handle_text_response(resp):
parts = resp.parts
full_text = "".join(parts)
if "\n" not in full_text and len(full_text) > 80:
wrapped_text = textwrap.fill(full_text, width=80)
print(wrapped_text)
else:
print(full_text)
def display_schema(data):
fields = getattr(data, "fields")
df = pd.DataFrame({
"Column": map(lambda field: getattr(field, 'name'), fields),
"Type": map(lambda field: getattr(field, 'type'), fields),
"Description": map(lambda field: getattr(field, 'description', '-'), fields),
"Mode": map(lambda field: getattr(field, 'mode'), fields)
})
display(df)
def display_section_title(text):
display(HTML('<h2>{}</h2>'.format(text)))
def format_looker_table_ref(table_ref):
return 'lookmlModel: {}, explore: {}, lookerInstanceUri: {}'.format(table_ref.lookml_model, table_ref.explore, table_ref.looker_instance_uri)
def format_bq_table_ref(table_ref):
return '{}.{}.{}'.format(table_ref.project_id, table_ref.dataset_id, table_ref.table_id)
def display_datasource(datasource):
source_name = ''
if 'studio_datasource_id' in datasource:
source_name = getattr(datasource, 'studio_datasource_id')
elif 'looker_explore_reference' in datasource:
source_name = format_looker_table_ref(getattr(datasource, 'looker_explore_reference'))
else:
source_name = format_bq_table_ref(getattr(datasource, 'bigquery_table_reference'))
print(source_name)
display_schema(datasource.schema)
def handle_schema_response(resp):
if 'query' in resp:
print(resp.query.question)
elif 'result' in resp:
display_section_title('Schema resolved')
print('Data sources:')
for datasource in resp.result.datasources:
display_datasource(datasource)
def handle_data_response(resp):
if "query" in resp:
query = resp.query
display_section_title("Retrieval query")
print(f"Query name: {query.name}")
if "question" in query:
print(f"Question: {query.question}")
if "datasources" in query:
print("Data sources:")
for datasource in query.datasources:
display_datasource(datasource)
elif "generated_sql" in resp:
display_section_title("SQL generated")
print(resp.generated_sql)
elif "result" in resp:
display_section_title("Data retrieved")
fields = [field.name for field in resp.result.schema.fields]
d = {}
for el in resp.result.data:
for field in fields:
if field in d:
d[field].append(el[field])
else:
d[field] = [el[field]]
display(pd.DataFrame(d))
def handle_chart_response(resp):
def _value_to_dict(v):
if isinstance(v, proto.marshal.collections.maps.MapComposite):
return _map_to_dict(v)
elif isinstance(v, proto.marshal.collections.RepeatedComposite):
return [_value_to_dict(el) for el in v]
elif isinstance(v, (int, float, str, bool)):
return v
else:
return MessageToDict(v)
def _map_to_dict(d):
out = {}
for k in d:
if isinstance(d[k], proto.marshal.collections.maps.MapComposite):
out[k] = _map_to_dict(d[k])
else:
out[k] = _value_to_dict(d[k])
return out
if 'query' in resp:
print(resp.query.instructions)
elif 'result' in resp:
vegaConfig = resp.result.vega_config
vegaConfig_dict = _map_to_dict(vegaConfig)
alt.Chart.from_json(json_lib.dumps(vegaConfig_dict)).display();
def show_message(msg):
m = msg.system_message
if 'text' in m:
handle_text_response(getattr(m, 'text'))
elif 'schema' in m:
handle_schema_response(getattr(m, 'schema'))
elif 'data' in m:
handle_data_response(getattr(m, 'data'))
elif 'chart' in m:
handle_chart_response(getattr(m, 'chart'))
print('\n')