Bidang LLM Trace didefinisikan oleh Alibaba Cloud berdasarkan standar OpenTelemetry dan konsep dari domain aplikasi large language model (LLM). Bidang-bidang ini memperluas Attributes, Resource, dan Event untuk menggambarkan semantik data jejak aplikasi LLM, mencakup operasi kunci seperti permintaan input dan output LLM serta konsumsi token. Data semantik yang kaya dan sadar konteks ini mendukung skenario seperti Completion, Chat, Retrieval-Augmented Generation (RAG), Agent, dan Tool Calling—memungkinkan pelacakan dan pelaporan data yang efektif.
Spesifikasi semantik ini terus berkembang seiring komunitas. Jika aplikasi Anda adalah aplikasi Python, Anda harus mengumpulkan data observabel secara manual. Anda dapat menggunakan komponen loongsuite-util-genai untuk membantu integrasi pengumpulan data. Untuk detailnya, lihat README.
Definisi bidang tingkat rentang mengikuti standar terbuka OpenTelemetry. Untuk deskripsi rinci bidang jejak tingkat atas yang disimpan di Managed Service for OpenTelemetry Alibaba Cloud, lihat Definisi Parameter Analisis Jejak.
SpanKind khusus LLM merupakan sebuah Attribute—bukan Span kind yang didefinisikan dalam spesifikasi OpenTelemetry Trace. Spesifikasi semantik ini memperluas OpenTelemetry GenAI Semantic Conventions. Spesifikasi tersebut masih dalam pengembangan aktif dan dapat berubah pada rilis maintenance mendatang.
Bagian Umum
Attributes
AttributeKey | Description | Type | Example Value | Requirement Level |
| Session ID | string |
| Required if available |
| End-user identifier | string |
| Required if available |
| Operation type [1] | string |
| Required |
| Secondary operation type [2] | string |
| Required |
| Framework type used | string |
| Required if available |
[1] gen_ai.span.kind: Dipetakan ke gen_ai.operation.name sebagai berikut:
|
| Description |
RETRIEVER |
| Document retrieval |
LLM |
| Model invocation |
EMBEDDING |
| Embedding |
TOOL |
| Tool calling |
AGENT |
| Agent invocation |
RERANKER | - | Reranking invocation |
CHAIN | - | Chain (invocation unit) |
TASK | - | Task invocation |
ENTRY | - | Entry invocation marker |
STEP | - | ReAct round marker |
[2] gen_ai.operation.name: Secondary operation type. Gunakan salah satu enumerasi berikut atau tentukan nilai kustom:
Value | Description |
| Chat completion operation |
| Create GenAI agent operation |
| Word embedding operation |
| Tool calling operation |
| Multimodal content generation operation |
| Invoke GenAI agent operation |
| Document retrieval operation |
| Text completion operation |
Resources
ResourceKey | Description | Type | Example Value | Requirement Level |
| Application name | string |
| Required |
| Cloud Monitor workspace | string |
| Required if available |
| Cloud Monitor service ID | string |
| Required if available |
| Application source | string |
| Required if available |
| Application feature | string |
| Required Catatan
|
Chain
Chain adalah alat yang menghubungkan LLM dan komponen lainnya untuk menjalankan tugas kompleks, seperti Retrieval, Embedding, pemanggilan LLM, dan Chain bersarang.
Beri nama rentang chain {chain_name}. Jika chain_name tidak dapat diperoleh, beri nama chain.
Komunitas OpenTelemetry belum mendefinisikan konvensi semantik untuk jenis rentang ini. Saat ini, rentang Chain hanya berlaku untuk framework LangChain.
Attributes
AttributeKey | Description | Type | Example | Requirement Level |
| Operation type [1] | string |
| Required |
| Secondary operation type | string |
| Required if available |
| Input content | string |
| Recommended |
| Response content | string |
| Recommended |
| Time to First Byte [2] | integer | 1000000 | Recommended |
[1] gen_ai.span.kind: Enumerasi khusus untuk spanKind LLM. Dalam Chain, nilai ini harus CHAIN.
[2] gen_ai.user.time_to_first_token: Waktu dari penerimaan permintaan pengguna oleh server hingga paket respons pertama dikembalikan. Satuan: nanodetik.
Retriever
Retriever mengakses penyimpanan vektor atau database untuk mengambil data. Biasanya digunakan untuk melengkapi konteks guna meningkatkan akurasi dan efisiensi respons LLM.
Atur gen_ai.operation.name menjadi retrieval. Ketika gen_ai.operation.name adalah retrieval, inferensi gen_ai.span.kind sebagai RETRIEVER.
Beri nama rentang {gen_ai.operation.name} {gen_ai.data_source.id}. Format penamaan lain dapat diterima dalam kasus khusus.
Attributes
AttributeKey | Description | Type | Example | Requirement Level |
| Operation type [1] | string |
| Required |
| Secondary operation type [2] | string |
| Required |
| Data source unique identifier [3] | string |
| Required if available |
| Large language model provider | string |
| Required if available |
| Model name specified in the request | string |
| Required if available |
| Top-K value specified in the request | float |
| Recommended |
| Retrieved document list [4] | string |
| Optional |
| Query text snippet | string |
| Optional |
[1] gen_ai.span.kind: Enumerasi khusus untuk spanKind LLM. Dalam Retriever, nilai ini harus RETRIEVER.
[2] gen_ai.operation.name: Secondary operation type.
[3] gen_ai.data_source.id: ID unik sumber data. Ini adalah sumber data tempat Agen AI atau aplikasi RAG bergantung. Dapat berupa database eksternal, Object Storage Service, kumpulan dokumen, website, atau sistem penyimpanan lainnya.
[4] gen_ai.retrieval.documents: Mencatat daftar dokumen yang diambil. Setiap objek dokumen harus berisi setidaknya properti-properti berikut: id (string): Identifier unik dokumen. score (bilangan titik mengambang presisi ganda): Skor relevansi.
Reranker
Reranker menilai relevansi beberapa dokumen input berdasarkan kueri, mengurutkannya, dan mungkin mengembalikan dokumen top-K sebagai input ke LLM.
Beri nama rentang rerank {reranker.model_name}. Jika reranker.model_name tidak dapat diambil, beri nama rerank.
Komunitas OpenTelemetry belum mendefinisikan konvensi semantik untuk jenis rentang ini.
Attributes
AttributeKey | Description | Type | Example | Requirement Level |
| Operation type [1] | string |
| Required |
| Reranker request parameter | string |
| Optional |
| Model name used by the Reranker | string |
| Optional |
| Rank after reranking | integer |
| Optional |
| Output the document metadata[2] | string |
| Required |
| Metadata for output documents [3] | string |
| Required |
[1] gen_ai.span.kind: Enumerasi khusus untuk spanKind LLM. Dalam Reranker, nilai ini harus RERANKER.
[2] reranker.output_document: Dokumen input untuk reranking. Struktur array JSON. Metadata berisi informasi dasar dokumen seperti path, filename, dan sumber.
[3] reranker.output_document: Dokumen output setelah reranking. Struktur array JSON. Metadata berisi informasi dasar dokumen seperti path, filename, dan sumber.
LLM
Rentang LLM merepresentasikan pemanggilan LLM atau proses inferensi. Contohnya termasuk penggunaan SDK atau OpenAPI untuk memanggil LLM berbeda guna melakukan inferensi atau generasi teks.
Atur gen_ai.operation.name menjadi salah satu dari chat, generate_content, atau text_completion. Ketika gen_ai.operation.name adalah chat, generate_content, atau text_completion, inferensi gen_ai.span.kind sebagai LLM.
Beri nama rentang {gen_ai.operation.name} {gen_ai.request.model}. Format penamaan lain dapat diterima dalam kasus khusus.
Attributes
AttributeKey | Description | Type | Example | Requirement Level |
| Operation type [1] | string |
| Required |
| Secondary operation type [2] | string |
| Required |
| Large language model provider | string |
| Required |
| Unique conversation ID [3] | string |
| Required if available |
| Output type specified in the LLM request [4] | string |
| Required if available |
| Number of candidate generations requested in the LLM request | int |
| Required if not 1 |
| Model name specified in the LLM request | string |
| Required |
| Seed specified in the LLM request | string |
| Required if available |
| Frequency penalty set in the LLM request | float |
| Recommended |
| Maximum token count specified in the LLM request | integer |
| Recommended |
| Presence penalty set in the LLM request | float |
| Recommended |
| Temperature specified in the LLM request | float |
| Recommended |
| Top-P value specified in the LLM request | float |
| Recommended |
| Top-K value specified in the LLM request | float |
| Recommended |
| Stop sequences for the LLM | string[] |
| Recommended |
| Unique ID generated by the LLM | string |
| Recommended |
| Model name used for LLM generation | string |
| Recommended |
| Reason the LLM stopped generating | string[] |
| Recommended |
| First-token latency for the LLM in streaming-response scenarios [5] | integer |
| Recommended |
| Inference time for reasoning models [6] | integer |
| Recommended |
| Number of input tokens used | integer |
| Recommended |
| Number of output tokens used | integer |
| Recommended |
| Total number of tokens used | integer |
| Recommended |
| Number of tokens written to the model provider's cache [7] | integer |
| Recommended |
| Number of tokens read from the model provider's cache [8] | integer |
| Recommended |
| Model input content [9] | string |
| Optional |
| Model output content [10] | string |
| Optional |
| System prompt content [11] | string |
| Optional |
| Tool definition list [12] | string |
| Optional |
| LLM prefill latency. Unit: nanoseconds | integer |
| Recommended |
| LLM decode latency. Unit: nanoseconds | integer |
| Recommended |
| LLM inference time. Equals the sum of prefill and decode time. Unit: nanoseconds | integer |
| Recommended |
| Multi-modal data involved in the LLM input content [13] | string[] |
| Recommended |
| Multi-modal data involved in the LLM output content [14] | string[] |
| Recommended |
[1] gen_ai.span.kind: Enumerasi khusus untuk spanKind LLM. Dalam rentang LLM, nilai ini harus LLM.
[2] gen_ai.operation.name: Secondary operation type.
[3] gen_ai.conversation.id: Unique conversation ID. Kumpulkan jika Anda dapat dengan mudah memperolehnya.
[4] gen_ai.output.type: Kumpulkan jika permintaan menentukan jenis output (misalnya format output). Nilai harus salah satu enumerasi berikut atau nilai kustom:
Value | Description |
| Image |
| Well-formatted JSON object |
| Voice |
| Plain text |
[5] gen_ai.user.time_to_first_token: Waktu dari penerimaan permintaan pengguna oleh server hingga paket respons pertama dikembalikan. Satuan: nanodetik.
[6] gen_ai.response.reasoning_time: Durasi proses penalaran. Satuan: milidetik.
[7] gen_ai.usage.cache_creation.input_tokens: Nilai ini sudah termasuk dalam gen_ai.usage.input_tokens.
[8] gen_ai.usage.cache_read.input_tokens: Nilai ini sudah termasuk dalam gen_ai.usage.input_tokens.
[9] gen_ai.input.messages: Mencatat konten input untuk pemanggilan LLM. Pesan harus disediakan sesuai urutan yang dikirim ke model atau agen. Ikuti gen_ai.input.messages.json.
Kumpulkan hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
[10] gen_ai.output.messages: Mencatat konten output model. Pesan harus disediakan sesuai urutan yang dikirim ke model atau agen. Ikuti gen_ai.output.messages.json.
Kumpulkan hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
[11] gen_ai.system_instructions: Mencatat konten prompt atau instruksi sistem secara terpisah. Gunakan bidang ini jika Anda dapat memperoleh konten prompt atau instruksi sistem secara independen. Jika tidak, catat dalam atribut gen_ai.input.messages. Ikuti gen_ai.system_instructions.json.
Kumpulkan hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
[12] gen_ai.tool.definitions: Mencatat definisi tool yang diberikan ke LLM. Atribut ini bisa sangat besar. Secara default, kumpulkan hanya field type dan name. Kumpulkan semua field lain hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
[13] gen_ai.input.multimodal_metadata: Mengumpulkan data multi-modal yang dirujuk dalam konten input model. Hanya mencakup pesan UriPart. Ikuti gen_ai.input.messages.json.
Kumpulkan hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
[14] gen_ai.output.multimodal_metadata: Mengumpulkan data multi-modal yang dirujuk dalam konten output model. Hanya mencakup pesan UriPart. Ikuti gen_ai.output.messages.json.
Kumpulkan hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
Record Prompts, Inputs, and Outputs
Anda dapat mengabaikan pencatatan input pengguna dan respons model, mencatatnya dalam atribut rentang, atau mencatatnya sebagai event (log). Untuk detailnya, lihat Control LLM Application Conversation History Collection Behavior.
Embedding
Embedding merepresentasikan satu proses, seperti penyematan teks dengan Large Language Model (LLM). Anda kemudian dapat menggunakan kueri kemiripan untuk mengoptimalkan solusi terhadap permasalahan.
Atur gen_ai.operation.name menjadi embeddings. Ketika gen_ai.operation.name adalah embeddings, inferensi gen_ai.span.kind sebagai EMBEDDING.
Beri nama rentang {gen_ai.operation.name} {gen_ai.request.model}. Format penamaan lain dapat diterima dalam kasus khusus.
Attributes
AttributeKey | Description | Type | Example | Requirement Level |
| Operation type [1] | string |
| Required |
| Secondary operation type [2] | string |
| Required |
| Large language model provider | string |
| Required |
| Model name specified in the request | string |
| Required if available |
| Number of dimensions expected for the embedding operation | integer |
| Recommended |
| Encoding formats requested for the embedding operation | string[] |
| Recommended |
| Token count consumed by the input text | integer |
| Optional |
| Total token count consumed by the embedding | integer |
| Optional |
[1] gen_ai.span.kind: Enumerasi khusus untuk spanKind LLM. Dalam rentang Embedding, nilai ini harus EMBEDDING.
[2] gen_ai.operation.name: Secondary operation type.
Tool
Rentang Tool merepresentasikan pemanggilan ke tool eksternal. Contohnya termasuk memanggil kalkulator atau meminta informasi cuaca terbaru dari API cuaca.
Atur gen_ai.operation.name menjadi execute_tool. Ketika gen_ai.operation.name adalah execute_tool, inferensi gen_ai.span.kind sebagai TOOL.
Beri nama rentang {gen_ai.operation.name} {gen_ai.tool.name}. Format penamaan lain dapat diterima dalam kasus khusus.
Attributes
AttributeKey | Description | Type | Example | Requirement Level |
| Operation type [1] | string |
| Required |
| Secondary operation type [2] | string |
| Required |
| Tool ID | string |
| Recommended |
| Tool description | string |
| Recommended |
| Tool name | string | Recommended | |
| Tool type | string |
| Recommended |
| Tool call input parameters [2] | string |
| Optional |
| Tool call return value [3] | string |
| Optional |
[1] gen_ai.span.kind: Enumerasi khusus untuk spanKind LLM. Dalam rentang Tool, nilai ini harus TOOL.
[2] gen_ai.tool.call.arguments: Parameter input pemanggilan tool, dalam bentuk string JSON. Kumpulkan hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
[3] gen_ai.tool.call.result: Nilai kembali pemanggilan tool, dalam bentuk string JSON. Kumpulkan hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
Agent
Rentang Agent merepresentasikan skenario agen cerdas—Chain yang lebih kompleks. Agen menggunakan hasil inferensi LLM untuk menentukan langkah selanjutnya. Hal ini mungkin melibatkan beberapa pemanggilan LLM dan Tool, berlangsung langkah demi langkah hingga mencapai jawaban akhir.
Atur gen_ai.operation.name menjadi invoke_agent atau create_agent. Ketika gen_ai.operation.name adalah invoke_agent atau create_agent, inferensi gen_ai.span.kind sebagai AGENT.
Beri nama rentang {gen_ai.operation.name} {gen_ai.agent.name}. Format penamaan lain dapat diterima dalam kasus khusus.
Attributes
AttributeKey | Description | Type | Example | Requirement Level |
| Operation type [1] | string |
| Required |
| Secondary operation type [2] | string |
| Required |
| Unique conversation ID [3] | string |
| Required if available |
| Agent description | string |
| Required if available |
| Unique agent identifier | string |
| Required if available |
| Agent name | string |
| Required if available |
| Data source unique identifier [4] | string |
| Required if available |
| Number of input tokens used | integer |
| Recommended |
| Number of output tokens used | integer |
| Recommended |
| Total number of tokens used | integer |
| Recommended |
| Number of tokens written to the model provider's cache [5] | integer |
| Recommended |
| Number of tokens read from the model provider's cache [6] | integer |
| Recommended |
| Model input content [7] | string |
| Optional |
| Model output content [8] | string |
| Optional |
| System prompt content [9] | string |
| Optional |
| Tool definition list [10] | string |
| Optional |
| Agent's first-token response latency | integer |
| Recommended |
[1] gen_ai.span.kind: Enumerasi khusus untuk spanKind LLM. Dalam rentang Agent, nilai ini harus AGENT.
[2] gen_ai.operation.name: Secondary operation type.
[3] gen_ai.conversation.id: Unique conversation ID. Kumpulkan jika Anda dapat dengan mudah memperolehnya.
[4] gen_ai.data_source.id: ID unik sumber data. Ini adalah sumber data tempat Agen AI atau aplikasi RAG bergantung. Dapat berupa database eksternal, Object Storage Service, kumpulan dokumen, website, atau sistem penyimpanan lainnya.
[5] gen_ai.usage.cache_creation.input_tokens: Nilai ini sudah termasuk dalam gen_ai.usage.input_tokens.
[6] gen_ai.usage.cache_read.input_tokens: Nilai ini sudah termasuk dalam gen_ai.usage.input_tokens.
[7] gen_ai.input.messages: Mencatat konten input untuk pemanggilan LLM. Pesan harus disediakan sesuai urutan yang dikirim ke model atau agen. Ikuti gen_ai.input.messages.json.
Kumpulkan hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
[8] gen_ai.output.messages: Mencatat konten output model. Pesan harus disediakan sesuai urutan yang dikirim ke model atau agen. Ikuti gen_ai.output.messages.json.
Kumpulkan hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
[9] gen_ai.system_instructions: Mencatat konten prompt atau instruksi sistem secara terpisah. Gunakan bidang ini jika Anda dapat memperoleh konten prompt atau instruksi sistem secara independen. Jika tidak, catat dalam atribut gen_ai.input.messages. Ikuti gen_ai.system_instructions.json.
Kumpulkan hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
[10] gen_ai.tool.definitions: Mencatat definisi tool yang diberikan ke LLM. Atribut ini bisa sangat besar. Secara default, kumpulkan hanya field type dan name. Kumpulkan semua field lain hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
Task
Rentang Task merepresentasikan pemanggilan metode internal kustom, seperti memanggil fungsi lokal atau logika lain yang ditentukan aplikasi.
Beri nama rentang run_task {gen_ai.task.name}. Format penamaan lain dapat diterima dalam kasus khusus.
Komunitas OpenTelemetry belum mendefinisikan konvensi semantik untuk jenis rentang ini. Oleh karena itu, gen_ai.operation.name dapat berubah.
Attributes
AttributeKey | Description | Type | Example | Requirement Level |
| Operation type [1] | string |
| Required |
| Secondary operation type | string |
| Required |
| Input parameters | string |
| Optional |
| Input MIME type | string |
| Optional |
| Output MIME type | string |
| Optional |
[1] gen_ai.span.kind: Enumerasi khusus untuk spanKind LLM. Dalam rentang Task, nilai ini harus TASK.
Entry
Rentang Entry menandai titik masuk untuk pemanggilan ke sistem aplikasi AI.
Beri nama rentang enter_ai_application_system. Format penamaan lain dapat diterima dalam kasus khusus.
Komunitas OpenTelemetry belum mendefinisikan konvensi semantik untuk jenis rentang ini. Oleh karena itu, gen_ai.operation.name dapat berubah.
Attributes
AttributeKey | Description | Type | Example | Requirement Level |
| Operation type [1] | string |
| Required |
| Secondary operation type | string |
| Recommended |
| Session ID | string |
| Required if available |
| End-user identifier | string |
| Required if available |
| Model input content [2] | string |
| Optional |
| Model output content [3] | string |
| Optional |
| First-token response latency in streaming-response scenarios [4] | integer |
| Recommended |
[1] gen_ai.span.kind: Enumerasi khusus untuk spanKind LLM. Dalam rentang Entry, nilai ini harus ENTRY.
[2] gen_ai.input.messages: Mencatat konten input untuk pemanggilan LLM. Pesan harus disediakan sesuai urutan yang dikirim ke model atau agen. Ikuti gen_ai.input.messages.json.
Kumpulkan hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
[3] gen_ai.output.messages: Mencatat konten output model. Pesan harus disediakan sesuai urutan yang dikirim ke model atau agen. Ikuti gen_ai.output.messages.json.
Kumpulkan hanya ketika flag OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT diaktifkan. Flag ini diaktifkan secara default.
[4] gen_ai.response.time_to_first_token: Waktu dari penerimaan permintaan pengguna oleh server hingga paket respons pertama dikembalikan. Satuan: nanodetik.
ReAct Step
Rentang Step menandai proses iterasi Reasoning-Acting dalam suatu Agent.
Beri nama rentang react step. Format penamaan lain dapat diterima dalam kasus khusus.
Komunitas OpenTelemetry belum mendefinisikan konvensi semantik untuk jenis rentang ini. Oleh karena itu, gen_ai.operation.name dapat berubah.
Attributes
AttributeKey | Description | Type | Example | Requirement Level |
| Operation type [1] | string |
| Required |
| Secondary operation type | string |
| Recommended |
| Reason for this ReAct round's termination | string |
| Recommended |
| Round number for this ReAct iteration [2] | integer |
| Recommended |
[1] gen_ai.span.kind: Enumerasi khusus untuk spanKind LLM. Dalam rentang ReAct Step, nilai ini harus STEP.
[2] gen_ai.react.round: Nomor putaran ReAct harus dimulai dari 1 dan bertambah 1 untuk setiap iterasi.