對話記錄結構定義
本文說明 BigQuery 中對話式數據分析對話記錄的資料表版面配置、資料欄、事件類型、使用者身分欄位和 JSON 酬載結構。如要概略瞭解對話記錄的運作方式,請參閱「對話記錄總覽」。
表格版面配置和自動建立
請先在資料代理所在的專案中建立目的地資料集,再啟用記錄功能。Conversational Analytics API 服務代理會在第一個記錄的回合中,於資料集的位置建立資料表 (或將缺少的結構定義資料欄新增至現有的相容資料表)。自動建立的資料表會依 timestamp 逐日分區 (繼承資料集上的任何預設分區到期時間),並依 event_type、agent 和 user_id 分群。查詢資料表時,請一律篩選 timestamp。
資料欄
下表說明對話記錄目的地資料表中的資料欄。
| 欄 | 類型 | 模式 | 目錄 |
|---|---|---|---|
timestamp |
TIMESTAMP |
REQUIRED |
事件的世界標準時間。分區資料欄。 |
event_id |
STRING |
NULLABLE |
事件的專屬 ID。即使重試寫入作業,這個 ID 也不會改變,因此您可以使用這個 ID 移除重複項目。 |
event_type |
STRING |
NULLABLE |
事件類型。請參閱「事件類型」。 |
agent |
STRING |
NULLABLE |
代理類型,而非代理名稱或 ID (例如 ConversationalAnalyticsAgent)。如要區分代理,請使用資料代理 ID (請參閱「attributes 內的欄位」)。 |
session_id |
STRING |
NULLABLE |
一個回合,而非整個對話。一個問題及其答案的所有事件都會共用 session_id。如要將對話回合分組,請使用 attributes 中的對話 ID。 |
invocation_id |
STRING |
NULLABLE |
一輪對話中的一次執行作業。 |
user_id |
STRING |
NULLABLE |
提出問題的來電者。請參閱「使用者身分」。 |
trace_id |
STRING |
NULLABLE |
OpenTelemetry 追蹤記錄 ID (32 個十六進位字元)。 |
span_id |
STRING |
NULLABLE |
這項作業在回合執行樹狀結構中的 ID。 |
parent_span_id |
STRING |
NULLABLE |
父項作業的 ID。 |
content |
JSON |
NULLABLE |
事件酬載。形狀取決於 event_type。 |
content_parts |
RECORD |
REPEATED |
多部分內容,每個部分有一個元素 (例如 mime_type、uri、object_ref、text、part_index、part_attributes 和 storage_mode)。 |
attributes |
JSON |
NULLABLE |
中繼資料:資料代理 ID、對話 ID、內部使用者金鑰、模型版本,以及詳細的權杖用量。 |
latency_ms |
JSON |
NULLABLE |
延遲時間測量指標,例如 total_ms 和 time_to_first_token_ms。 |
status |
STRING |
NULLABLE |
OK 或 ERROR。 |
error_message |
STRING |
NULLABLE |
錯誤詳細資料。如果模型因正常停止以外的原因而停止 (例如達到詞元數量上限),系統也會在 OK
LLM_RESPONSE 資料列中設定這個值。 |
is_truncated |
BOOLEAN |
NULLABLE |
如果事件中的任何文字值超過 512,000 個字元 (500 * 1,024) 並遭到截斷,則為 true。剪輯值結尾為 ...[TRUNCATED]。移除後即無法復原。 |
事件類型
下表說明 event_type 欄中可能顯示的值,以及儲存各事件資料的資料欄或 JSON 欄位。
event_type 值 |
說明 | 填入資料的資料欄和 JSON 欄位 |
|---|---|---|
INVOCATION_STARTING |
轉彎起點。 | 無 |
USER_MESSAGE_RECEIVED |
使用者的問題。 | content.text_summary |
AGENT_RESPONSE |
代理的回覆,以結構化物件呈現。 | content.text_summary (純文字) 和 content.response (請參閱「AGENT_RESPONSE 的結構」) |
LLM_RESPONSE |
每個模型呼叫都會有一列,包括要求工具的呼叫 (如果直接從已驗證的查詢回答一輪,則不會寫入,其中 attributes.fast_path 為 true)。系統不會儲存模型的輸出內容。 |
權杖:content.usage.prompt、content.usage.completion、content.usage.total。模型:attributes.model_version。完成原因:attributes.finish_reason。詳細用法:attributes.usage_metadata (例如 cached_content_token_count 和 thoughts_token_count)。 |
INVOCATION_COMPLETED |
對話結束,並顯示每輪對話的延遲時間。content 是空的。 |
latency_ms.total_ms |
EMBEDDING_SUGGESTION |
建議代理擁有者,哪些資料欄可透過嵌入功能提升成效。這個按鈕只會顯示在部分代理程式。 | content.reason,content.suggested_columns |
INVOCATION_ERROR、AGENT_ERROR、LLM_ERROR |
轉彎失敗。status 為 ERROR,content 為 NULL。 |
error_message (單行摘要,已遮蓋 SQL 陳述式和資料表名稱) |
使用者身分
user_id 欄包含呼叫者的電子郵件地址:使用者的電子郵件地址、API 呼叫者使用服務帳戶驗證時的服務帳戶電子郵件地址,或 NULL (如果呼叫者沒有電子郵件地址,例如某些員工身分聯盟身分)。系統也會在每個資料列的 attributes.session_metadata.user_id 中記錄內部使用者金鑰,因此您可以使用 internal_user_key 計算不重複使用者 (請參閱「建立跨代理事件檢視畫面」)。
如要在透過服務帳戶呼叫 API 時,將對話歸因於自己的使用者,請在應用程式中記錄使用者對應。API 不接受使用者 ID 記錄。
attributes 內的欄位
下表顯示用於從 attributes JSON 資料欄擷取中繼資料欄位的 GoogleSQL 運算式。
| 需求條件 | GoogleSQL 運算式 |
|---|---|
| 資料代理 ID | JSON_VALUE(attributes, '$.session_metadata.state."data-agent-id"') |
| 資料代理完整資源名稱 | JSON_VALUE(attributes, '$.adk.app_name') |
| 對話 ID | JSON_VALUE(attributes, '$.session_metadata.state."conversation-id"') |
| 內部使用者金鑰 | JSON_VALUE(attributes, '$.session_metadata.user_id') |
模型版本 (LLM_RESPONSE 列) |
JSON_VALUE(attributes, '$.model_version') |
AGENT_RESPONSE 的結構
如要以純文字形式讀取代理的回覆,請使用 JSON_VALUE(content, '$.text_summary')。結合答案的 Markdown、假設和洞察部分,以及任何釐清問題。在 AGENT_RESPONSE 資料列中,content.response 是 JSON 物件,而非字串,因此 JSON_VALUE(content, '$.response') 會傳回 NULL。
下表說明 content.response 下方的路徑。
content.response 底下的路徑 |
類型 | 目錄 |
|---|---|---|
parts |
ARRAY<JSON> |
答案就在這裡。 |
parts[].markdown |
STRING |
答案文字 (Markdown)。 |
parts[].insight |
STRING |
從資料中得出的洞察資訊。 |
parts[].assumption |
STRING |
代理做出的假設。 |
parts[].data_result_artifact_name |
STRING |
資料結果的名稱。 |
parts[].chart_artifact_name |
STRING |
圖表名稱。 |
followup_questions |
ARRAY<STRING> |
建議的後續問題。 |
clarifying_question |
STRING |
設定代理向使用者提出釐清問題,而非回答問題的時間。 |
citation_sources |
JSON |
答案中引用的來源。 |