本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
OpenAI 代理程式
此頁面說明如何檢測 OpenAI Agents 代理程式、如何識別範圍,以及如何擷取評估欄位。AgentCore Evaluations 支援建置在 Python 和 TypeScript 中的 OpenAI 代理程式;此頁面分別涵蓋 Python 代理程式支援和 TypeScript 代理程式支援中的每種語言。
主題
Python 代理程式支援
Python OpenAI 代理程式會在範圍名稱 opentelemetry.instrumentation.openai_agents(OpenTelemetry) 或 openinference.instrumentation.openai_agents(OpenInference) 下發出。
檢測您的代理程式
您可以使用兩種檢測程式庫之一來檢測 OpenAI Agents:OpenTelemetry (opentelemetry-instrumentation-openai-agents) 或 OpenInference ()openinference-instrumentation-openai-agents。Amazon Bedrock AgentCore Evaluations 支援這兩個程式庫。程式庫會發出不同的範圍名稱,並使用不同的跨度屬性。評估服務會從每個 中擷取相同的值。
當您的代理程式使用 AWS Distro for OpenTelemetry (ADOT) 執行時,例如在 Amazon Bedrock AgentCore 執行期,您不需要新增明確的檢測程式碼。將檢測程式庫新增至專案的相依性已足夠。ADOT 在啟動時發現它並自動啟用它。
為您想要的相依性路徑新增檢測程式庫。除非您有鎖定原因,否則請使用最新的可用版本。
範例
- OpenTelemetry
-
注意:使用 版本 0.61.0 或更新版本。這是使用 評估服務測試的最早版本。
將 opentelemetry-instrumentation-openai-agents新增至您的相依性。發出的範圍名稱為 opentelemetry.instrumentation.openai_agents。
requirements.txt:
opentelemetry-instrumentation-openai-agents>=0.61.0
pyproject.toml:
[project]
dependencies = [
"opentelemetry-instrumentation-openai-agents>=0.61.0",
]
- OpenInference
-
注意:使用 版本 1.5.0 或更新版本。這是使用 評估服務測試的最早版本。
將 openinference-instrumentation-openai-agents新增至您的相依性。發出的範圍名稱為 openinference.instrumentation.openai_agents。
requirements.txt:
openinference-instrumentation-openai-agents>=1.5.0
pyproject.toml:
[project]
dependencies = [
"openinference-instrumentation-openai-agents>=1.5.0",
]
如何識別跨度
用於分類範圍的屬性在兩個檢測程式庫之間不同。
範例
- OpenTelemetry
-
OpenTelemetry 檢測程式庫會使用 gen_ai.operation.name 屬性來分類跨度。
| 跨度類型 |
識別屬性 |
|
叫用代理程式
|
gen_ai.operation.name = invoke_agent
|
|
執行工具
|
gen_ai.operation.name = execute_tool
|
|
Inference
|
gen_ai.operation.name = chat
|
OpenAI 代理程式也會發出內部轉界範圍,其中 gen_ai.operation.name = unknown。評估服務會略過這些項目。
- OpenInference
-
OpenInference 檢測程式庫會使用 openinference.span.kind 屬性分類跨度。
| 跨度類型 |
識別屬性 |
|
叫用代理程式
|
openinference.span.kind = AGENT或 CHAIN
|
|
執行工具
|
openinference.span.kind = TOOL
|
|
Inference
|
openinference.span.kind = LLM
|
使用 OpenInference 程式庫時, AGENT和 CHAIN 範圍是空的結構容器:它們不會攜帶任何對話內容。使用者提示和代理程式回應會從相同追蹤中的推論 (LLM) 重建。
OpenAI 代理程式會以組件型格式序列化訊息,其中每則訊息都會攜帶parts一組類型內容區塊 (例如 [{"role": "user", "parts": [{"type": "text", "content": "…"}]}])。透過 OpenTelemetry 程式庫,AgentCore Evaluations 會剖析這些部分中的文字。使用 OpenInference 程式庫時,模型輸出是完整的 OpenAI 回應物件,而 AgentCore Evaluations 會從 讀取回應文字output[].content[].text。
此內容的位置取決於收集遙測的方式。在這兩種情況下,識別屬性 (gen_ai.operation.name 或 openinference.span.kind) 位於跨度。如需詳細資訊,請參閱遙測設定和交付。
透過分割遙測,AgentCore Evaluations 會從與每個範圍相關的事件記錄中讀取對話內容。工具輸入和輸出的位置在兩個程式庫之間不同:
-
OpenTelemetry:
-
OpenInference:
如需詳細資訊,請參閱分割遙測中的範例跨度。
使用統一遙測,相同的內容會保留在跨度上做為屬性。屬性取決於檢測程式庫:
-
OpenTelemetry:
-
OpenInference:
如需詳細資訊,請參閱統一遙測中的範例跨度。
分割遙測中的範例範圍
使用分割遙測時,跨度會攜帶識別屬性,並且內容存在於相關事件記錄中。下列範例來自部署在 Amazon Bedrock AgentCore 執行期上的 Python OpenAI 代理程式旅行規劃代理程式。 AgentCore 相同的代理程式會顯示在每個檢測程式庫下方。
這些範例不是完整的跨度。它們會顯示來自實際客服人員互動的代表性資料,省略一些欄位,並截斷長值以保證可讀性。
OpenTelemetry
範例
- Invoke agent span
-
gen_ai.operation.name 屬性 (invoke_agent) 將此識別為調用代理程式範圍。
{
"traceId": "6a01eef11066751d68f90def0da1f80a",
"spanId": "3a300b0b3fe650e4",
"name": "invoke_agent openaiOtelTravel",
"kind": "INTERNAL",
"scope": {
"name": "opentelemetry.instrumentation.openai_agents",
"version": "0.62.1"
},
"attributes": {
"gen_ai.operation.name": "invoke_agent",
"gen_ai.agent.name": "openaiOtelTravel",
"gen_ai.system": "openai",
"gen_ai.provider.name": "openai",
"gen_ai.request.model": "gpt-4o-mini-2024-07-18",
"session.id": "sea-nyc-trip-2-turns-openai-otel"
},
"status": {
"code": "OK"
}
}
相關事件記錄會承載對話。每個訊息的 content都是 OpenAI 組件格式陣列;使用者提示字元是使用者訊息的文字,客服人員回應則是助理訊息的文字。
{
"spanId": "3a300b0b3fe650e4",
"traceId": "6a01eef11066751d68f90def0da1f80a",
"scope": {
"name": "opentelemetry.instrumentation.openai_agents"
},
"body": {
"input": {
"messages": [
{
"role": "user",
"content": "[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Hey, how can you help me\"}]}]"
}
]
},
"output": {
"messages": [
{
"role": "assistant",
"content": "[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"I can assist you with planning your trips ...\"}]}]"
}
]
}
}
}
- Execute tool span
-
gen_ai.operation.name 屬性 (execute_tool) 將此識別為執行工具範圍; gen_ai.tool.name會保留工具名稱。使用 OpenTelemetry 程式庫時,即使使用分割遙測,工具引數和結果仍會保留在跨屬性上。
{
"traceId": "6a01eefa5c52f3d86a35038f35f5ba30",
"spanId": "3cbc4ea5f73fef81",
"name": "execute_tool search_flights",
"kind": "INTERNAL",
"scope": {
"name": "opentelemetry.instrumentation.openai_agents",
"version": "0.62.1"
},
"attributes": {
"gen_ai.operation.name": "execute_tool",
"gen_ai.tool.name": "search_flights",
"gen_ai.tool.type": "function",
"gen_ai.tool.call.arguments": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}",
"gen_ai.tool.call.result": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"flights\": [ ... ]}",
"session.id": "sea-nyc-trip-2-turns-openai-otel"
},
"status": {
"code": "OK"
}
}
- Inference span
-
gen_ai.operation.name 屬性 (chat) 將此識別為推論範圍。此範圍會攜帶模型中繼資料,以及在 中可供代理程式使用的工具gen_ai.tool.definitions清單。在 body.input和 中的相關事件記錄中,模型呼叫的對話訊息是即時的body.output。
{
"traceId": "6a01eef11066751d68f90def0da1f80a",
"spanId": "7c1f9a2b4d6e8a03",
"name": "openai.response",
"kind": "INTERNAL",
"scope": {
"name": "opentelemetry.instrumentation.openai_agents",
"version": "0.62.1"
},
"attributes": {
"gen_ai.operation.name": "chat",
"gen_ai.provider.name": "openai",
"gen_ai.request.model": "gpt-4o-mini-2024-07-18",
"gen_ai.response.model": "gpt-4o-mini-2024-07-18",
"gen_ai.usage.input_tokens": 269,
"gen_ai.usage.output_tokens": 78,
"gen_ai.tool.definitions": "[{\"type\": \"function\", \"function\": {\"name\": \"search_flights\", \"description\": \"Search for available flights between cities.\", \"parameters\": { ... }}}]",
"session.id": "sea-nyc-trip-2-turns-openai-otel"
},
"status": {
"code": "OK"
}
}
{
"spanId": "7c1f9a2b4d6e8a03",
"traceId": "6a01eef11066751d68f90def0da1f80a",
"scope": {
"name": "opentelemetry.instrumentation.openai_agents"
},
"body": {
"input": {
"messages": [
{
"role": "user",
"content": "[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Hey, how can you help me\"}]}]"
}
]
},
"output": {
"messages": [
{
"role": "assistant",
"content": "[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"I can assist you with planning your trips ...\"}]}]"
}
]
}
}
}
OpenInference
使用 OpenInference 程式庫時,呼叫代理程式 (AGENT) 的範圍是空的容器。AgentCore Evaluations 會從推論 (LLM) 範圍重建使用者提示和代理程式回應,其內容存在於相關事件記錄中。
範例
- Invoke agent span
-
openinference.span.kind 屬性 (AGENT) 將此識別為調用代理程式範圍。跨度沒有對話內容。
{
"traceId": "6a387ee61078243c1cc455ed45c6c313",
"spanId": "9a1c7dce81b692cd",
"name": "openaiOInfTravel",
"kind": "INTERNAL",
"scope": {
"name": "openinference.instrumentation.openai_agents",
"version": "1.5.0"
},
"attributes": {
"openinference.span.kind": "AGENT",
"graph.node.id": "openaiOInfTravel",
"llm.system": "openai",
"session.id": "sea-nyc-trip-2-turns-openai-oi"
},
"status": {
"code": "OK"
}
}
- Execute tool span
-
openinference.span.kind 屬性 (TOOL) 將此識別為執行工具範圍; tool.name會保留工具名稱。工具引數和結果會即時存在於相關事件記錄中。
{
"traceId": "6a387ef07b8f4f3732fab45d3c0b51ff",
"spanId": "b4e78cb0a06a6fe2",
"name": "search_flights",
"kind": "INTERNAL",
"scope": {
"name": "openinference.instrumentation.openai_agents",
"version": "1.5.0"
},
"attributes": {
"openinference.span.kind": "TOOL",
"tool.name": "search_flights",
"input.mime_type": "application/json",
"output.mime_type": "application/json",
"session.id": "sea-nyc-trip-2-turns-openai-oi"
},
"status": {
"code": "OK"
}
}
{
"spanId": "b4e78cb0a06a6fe2",
"traceId": "6a387ef07b8f4f3732fab45d3c0b51ff",
"scope": {
"name": "openinference.instrumentation.openai_agents"
},
"body": {
"input": {
"messages": [
{ "role": "user", "content": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}" }
]
},
"output": {
"messages": [
{ "role": "assistant", "content": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"flights\": [ ... ]}" }
]
}
}
}
- Inference span
-
openinference.span.kind 屬性 (LLM) 將此識別為推論範圍。訊息角色和工具定義位於跨屬性上;訊息內容存在於相關事件記錄中。ADOT 會將輸入角色扁平化為 user,因此 AgentCore Evaluations 會使用最後一個純文字輸入訊息做為使用者提示。輸出訊息是 OpenAI 回應物件,AgentCore Evaluations 會從中讀取回應文字。
{
"traceId": "6a387ee61078243c1cc455ed45c6c313",
"spanId": "1221a062c7f90a8e",
"name": "response",
"kind": "INTERNAL",
"scope": {
"name": "openinference.instrumentation.openai_agents",
"version": "1.5.0"
},
"attributes": {
"openinference.span.kind": "LLM",
"llm.model_name": "gpt-4o-mini-2024-07-18",
"llm.input_messages.0.message.role": "system",
"llm.input_messages.1.message.role": "user",
"llm.output_messages.0.message.role": "assistant",
"llm.tools.0.tool.json_schema": "{\"type\": \"function\", \"function\": {\"name\": \"search_flights\", ...}}",
"session.id": "sea-nyc-trip-2-turns-openai-oi"
},
"status": {
"code": "OK"
}
}
{
"spanId": "1221a062c7f90a8e",
"traceId": "6a387ee61078243c1cc455ed45c6c313",
"scope": {
"name": "openinference.instrumentation.openai_agents"
},
"body": {
"input": {
"messages": [
{ "role": "user", "content": "[{\"content\": \"Hey, how can you help me\", \"role\": \"user\"}]" },
{ "role": "user", "content": "You are a travel planning assistant. Help users plan trips ..." },
{ "role": "user", "content": "Hey, how can you help me" }
]
},
"output": {
"messages": [
{
"role": "assistant",
"content": "{\"id\": \"resp_abc123...\", \"output\": [{\"type\": \"message\", \"content\": [{\"type\": \"output_text\", \"text\": \"I can assist you with planning your trips ...\"}]}]}"
}
]
}
}
}
統一遙測中的範例範圍
使用統一遙測,相同的內容會保留在跨屬性上,而且不會產生單獨的事件記錄。下列範例來自 Python OpenAI 代理程式旅行規劃代理程式。相同的代理程式會顯示在每個檢測程式庫下方。
這些範例不是完整的跨度。它們會顯示來自實際客服人員互動的代表性資料,省略一些欄位,並截斷長值以保證可讀性。
OpenTelemetry
範例
- Invoke agent span
-
gen_ai.input.messages 屬性會保留使用者提示,而 gen_ai.output.messages 屬性會保留客服人員回應。兩者都是 OpenAI 組件格式陣列。
{
"traceId": "6a4de7b85e61747e6b568a1f4768e89d",
"spanId": "50656fd77904d125",
"name": "invoke_agent openaiOtelTravel",
"kind": "INTERNAL",
"scope": {
"name": "opentelemetry.instrumentation.openai_agents",
"version": "0.62.1"
},
"attributes": {
"gen_ai.operation.name": "invoke_agent",
"gen_ai.agent.name": "openaiOtelTravel",
"gen_ai.system": "openai",
"gen_ai.input.messages": "[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Hey, how can you help me\"}]}]",
"gen_ai.output.messages": "[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"I can assist you with planning your trips ...\"}]}]",
"session.id": "sea-nyc-trip-2-turns-unified"
},
"status": {
"code": "OK"
}
}
- Execute tool span
-
gen_ai.tool.call.arguments 屬性會保留工具引數,而 gen_ai.tool.call.result 屬性則會保留工具結果。
{
"traceId": "6a4de7c376913db82e6f0f336a16731d",
"spanId": "8840e8e23724ebd7",
"name": "execute_tool search_flights",
"kind": "INTERNAL",
"scope": {
"name": "opentelemetry.instrumentation.openai_agents",
"version": "0.62.1"
},
"attributes": {
"gen_ai.operation.name": "execute_tool",
"gen_ai.tool.name": "search_flights",
"gen_ai.tool.call.arguments": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}",
"gen_ai.tool.call.result": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"flights\": [ ... ]}",
"session.id": "sea-nyc-trip-2-turns-unified"
},
"status": {
"code": "OK"
}
}
- Inference span
-
gen_ai.operation.name 屬性 (chat) 將此識別為推論範圍。模型中繼資料和gen_ai.tool.definitions屬性 (可供代理程式使用的工具清單) 會內嵌在跨度上。
{
"traceId": "6a4de7b85e61747e6b568a1f4768e89d",
"spanId": "9b2c1e5f7a3d0846",
"name": "openai.response",
"kind": "INTERNAL",
"scope": {
"name": "opentelemetry.instrumentation.openai_agents",
"version": "0.62.1"
},
"attributes": {
"gen_ai.operation.name": "chat",
"gen_ai.provider.name": "openai",
"gen_ai.request.model": "gpt-4o-mini-2024-07-18",
"gen_ai.response.model": "gpt-4o-mini-2024-07-18",
"gen_ai.usage.input_tokens": 269,
"gen_ai.usage.output_tokens": 78,
"gen_ai.tool.definitions": "[{\"type\": \"function\", \"function\": {\"name\": \"search_flights\", \"description\": \"Search for available flights between cities.\", \"parameters\": { ... }}}]",
"session.id": "sea-nyc-trip-2-turns-unified"
},
"status": {
"code": "OK"
}
}
OpenInference
範例
- Execute tool span
-
input.value 屬性會保留工具引數,而 output.value 屬性則會保留工具結果。
{
"traceId": "6a387ef07b8f4f3732fab45d3c0b51ff",
"spanId": "d5a1c9e70b46f312",
"name": "search_flights",
"kind": "INTERNAL",
"scope": {
"name": "openinference.instrumentation.openai_agents",
"version": "1.5.1"
},
"attributes": {
"openinference.span.kind": "TOOL",
"tool.name": "search_flights",
"input.value": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}",
"output.value": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"flights\": [ ... ]}",
"session.id": "sea-nyc-trip-2-turns-oi"
},
"status": {
"code": "OK"
}
}
- Inference span
-
訊息內容內嵌在索引屬性上。llm.input_messages.* 屬性會保留系統提示和使用者提示,而llm.output_messages.*屬性會保留客服人員回應。AgentCore Evaluations 會從此範圍重建使用者提示和代理程式回應,並回填空的調用代理程式 (AGENT) 範圍。
{
"traceId": "6a387ee61078243c1cc455ed45c6c313",
"spanId": "c9f0a2b41d773e88",
"name": "response",
"kind": "INTERNAL",
"scope": {
"name": "openinference.instrumentation.openai_agents",
"version": "1.5.1"
},
"attributes": {
"openinference.span.kind": "LLM",
"llm.model_name": "gpt-4o-mini-2024-07-18",
"llm.input_messages.0.message.role": "system",
"llm.input_messages.0.message.content": "You are a travel planning assistant ...",
"llm.input_messages.1.message.role": "user",
"llm.input_messages.1.message.content": "Hey, how can you help me",
"llm.output_messages.0.message.role": "assistant",
"llm.output_messages.0.message.contents.0.message_content.text": "I can assist you with planning your trips ...",
"session.id": "sea-nyc-trip-2-turns-oi"
},
"status": {
"code": "OK"
}
}
TypeScript 代理程式支援
TypeScript OpenAI 代理程式會發出與 Python 代理程式相同的跨度類型、識別屬性和內容配置,因此評估服務會以相同的方式讀取。有兩個 TypeScript 檢測程式庫,每個程式庫都有自己的範圍名稱。
檢測您的代理程式
將您想要的慣例的檢測程式庫新增至 TypeScript 相依性。除非您有鎖定原因,否則請使用最新的可用版本。
範例
- ADOT (OpenTelemetry)
-
對於 ADOT 上的 TypeScript 代理程式,將 AWS Distro Node 自動檢測套件 (@aws/aws-distro-opentelemetry-node-autoinstrumentation) 新增至您的相依性。它包含內建的 OpenAI Agents 檢測,會在啟動時啟用並發出範圍名稱 @aws/aws-distro-opentelemetry-instrumentation-openai-agents。
package.json:
{
"dependencies": {
"@aws/aws-distro-opentelemetry-node-autoinstrumentation": "^0.12.0"
}
}
- OpenInference
-
將 @arizeai/openinference-instrumentation-openai-agents新增至您的相依性。發出的範圍名稱為 @arizeai/openinference-instrumentation-openai-agents。
package.json:
{
"dependencies": {
"@arizeai/openinference-instrumentation-openai-agents": "^0.2.2"
}
}
如何識別跨度
跨度識別與 Python 代理程式相同。ADOT 原生 OpenTelemetry 程式庫 (來自 AWS Distro Node 自動檢測套件 @aws/aws-distro-opentelemetry-node-autoinstrumentation,發出範圍名稱 @aws/aws-distro-opentelemetry-instrumentation-openai-agents) 會設定 gen_ai.operation.name,而 OpenInference JS 程式庫 (@arizeai/openinference-instrumentation-openai-agents) 會設定 openinference.span.kind。如需這些值,請參閱 Python 代理程式支援下的跨度識別方式。
欄位擷取會讀取與 Python 代理程式相同的屬性。請注意,使用 ADOT 原生 TypeScript 程式庫時,叫用代理程式的範圍是結構容器:使用者提示和代理程式回應是從推論 (chat) 範圍重建的,而不是叫用代理程式的範圍,不同於 Python OpenTelemetry 程式庫,它會將其保留在叫用代理程式範圍上。對於讀取每個欄位的位置,請參閱如何在 Python 代理程式支援下擷取評估欄位。 Python 代理程式支援
來自 TypeScript 代理程式的範例
下列範例來自部署在具有統一遙測的 Amazon Bedrock AgentCore 執行期上的 TypeScript OpenAI 代理程式旅行規劃代理程式。相同的代理程式會顯示在每個檢測程式庫下方。
這些範例不是完整的跨度。它們會顯示來自實際客服人員互動的代表性資料,省略一些欄位,並截斷長值以保證可讀性。
OpenTelemetry
使用 ADOT 原生程式庫 (從 AWS Distro Node 自動檢測套件 發出範圍名稱 @aws/aws-distro-opentelemetry-instrumentation-openai-agents)@aws/aws-distro-opentelemetry-node-autoinstrumentation,調用代理程式範圍是結構容器,對話內容存在於部分格式gen_ai.input.messages和gen_ai.output.messages屬性的推論 (chat) 範圍上。AgentCore Evaluations 會從推論範圍重建使用者提示和代理程式回應。
範例
- Invoke agent span
-
gen_ai.operation.name 屬性 (invoke_agent) 將此識別為調用代理程式範圍。範圍包含客服人員名稱和工具清單,但沒有對話內容。
{
"traceId": "6a6bc695459e41aa14a172bb41d3246d",
"spanId": "9a1c7dce81b692cd",
"name": "invoke_agent openaiAdotTS",
"kind": "INTERNAL",
"scope": {
"name": "@aws/aws-distro-opentelemetry-instrumentation-openai-agents",
"version": "0.12.0"
},
"attributes": {
"gen_ai.operation.name": "invoke_agent",
"gen_ai.agent.name": "openaiAdotTS",
"gen_ai.provider.name": "openai",
"open_ai.agent.tools": "[\"search_flights\", \"book_flight\", \"search_hotels\", \"book_hotel\", \"search_activities\", \"book_activity\"]",
"session.id": "sea-nyc-trip-2-turns"
},
"status": {
"code": "OK"
}
}
- Execute tool span
-
gen_ai.operation.name 屬性 (execute_tool) 將此識別為執行工具範圍; gen_ai.tool.name會保留工具名稱。gen_ai.tool.call.arguments 和 gen_ai.tool.call.result 屬性會保留工具引數和結果。
{
"traceId": "6a6bc695459e41aa14a172bb41d3246d",
"spanId": "3cbc4ea5f73fef81",
"name": "execute_tool search_flights",
"kind": "INTERNAL",
"scope": {
"name": "@aws/aws-distro-opentelemetry-instrumentation-openai-agents",
"version": "0.12.0"
},
"attributes": {
"gen_ai.operation.name": "execute_tool",
"gen_ai.tool.name": "search_flights",
"gen_ai.tool.type": "function",
"gen_ai.tool.call.arguments": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}",
"gen_ai.tool.call.result": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"flights\": [ ... ]}",
"session.id": "sea-nyc-trip-2-turns"
},
"status": {
"code": "OK"
}
}
- Inference span
-
gen_ai.operation.name 屬性 (chat) 將此識別為推論範圍。gen_ai.input.messages 和 gen_ai.output.messages 屬性會保留部分格式的對話、gen_ai.system_instructions保留系統提示,並gen_ai.tool.definitions列出客服人員可用的工具。
{
"traceId": "6a6bc695459e41aa14a172bb41d3246d",
"spanId": "7c1f9a2b4d6e8a03",
"name": "chat gpt-4o-mini-2024-07-18",
"kind": "INTERNAL",
"scope": {
"name": "@aws/aws-distro-opentelemetry-instrumentation-openai-agents",
"version": "0.12.0"
},
"attributes": {
"gen_ai.operation.name": "chat",
"gen_ai.provider.name": "openai",
"gen_ai.response.model": "gpt-4o-mini-2024-07-18",
"gen_ai.input.messages": "[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Hey, how can you help me\"}]}]",
"gen_ai.output.messages": "[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"I can assist you with planning your trips ...\"}]}]",
"gen_ai.system_instructions": "[{\"type\": \"text\", \"content\": \"You are a travel planning assistant ...\"}]",
"gen_ai.tool.definitions": "[{\"type\": \"function\", \"name\": \"search_flights\", \"description\": \"Search for available flights between cities.\", ...}]",
"gen_ai.usage.input_tokens": 422,
"gen_ai.usage.output_tokens": 82,
"session.id": "sea-nyc-trip-2-turns"
},
"status": {
"code": "OK"
}
}
OpenInference
使用 OpenInference JS 程式庫,調用代理程式 (AGENT) 和 turn (CHAIN) 範圍是空的容器。AgentCore Evaluations 會從推論 (LLM) 範圍重建使用者提示和代理程式回應,其訊息位於索引llm.input_messages.*和llm.output_messages.*屬性上。
範例
- Invoke agent span
-
openinference.span.kind 屬性 (AGENT) 將此識別為調用代理程式範圍。跨度沒有對話內容。
{
"traceId": "6a6bc695459e41aa14a172bb41d3246d",
"spanId": "9a1c7dce81b692cd",
"name": "openaiAgentsOInf",
"kind": "INTERNAL",
"scope": {
"name": "@arizeai/openinference-instrumentation-openai-agents",
"version": "0.2.2"
},
"attributes": {
"openinference.span.kind": "AGENT",
"graph.node.id": "openaiAgentsOInf",
"llm.system": "openai",
"session.id": "sea-nyc-trip-2-turns"
},
"status": {
"code": "OK"
}
}
- Execute tool span
-
openinference.span.kind 屬性 (TOOL) 將此識別為執行工具範圍; tool.name會保留工具名稱。input.value 和 output.value 屬性會保留工具引數和結果。
{
"traceId": "6a6bc695459e41aa14a172bb41d3246d",
"spanId": "b4e78cb0a06a6fe2",
"name": "search_flights",
"kind": "INTERNAL",
"scope": {
"name": "@arizeai/openinference-instrumentation-openai-agents",
"version": "0.2.2"
},
"attributes": {
"openinference.span.kind": "TOOL",
"tool.name": "search_flights",
"input.value": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}",
"output.value": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"flights\": [ ... ]}",
"session.id": "sea-nyc-trip-2-turns"
},
"status": {
"code": "OK"
}
}
- Inference span
-
openinference.span.kind 屬性 (LLM) 將此識別為推論範圍。llm.input_messages.* 屬性會保留系統提示和使用者提示,llm.output_messages.*屬性會保留客服人員回應,而llm.tools.*.tool.json_schema屬性會保留工具定義。AgentCore Evaluations 會從此範圍重建使用者提示和代理程式回應,並回填空的調用代理程式 (AGENT) 範圍。
{
"traceId": "6a6bc695459e41aa14a172bb41d3246d",
"spanId": "1221a062c7f90a8e",
"name": "response",
"kind": "INTERNAL",
"scope": {
"name": "@arizeai/openinference-instrumentation-openai-agents",
"version": "0.2.2"
},
"attributes": {
"openinference.span.kind": "LLM",
"llm.model_name": "gpt-4o-mini-2024-07-18",
"llm.input_messages.0.message.role": "system",
"llm.input_messages.0.message.content": "You are a travel planning assistant ...",
"llm.input_messages.1.message.role": "user",
"llm.input_messages.1.message.content": "Hey, how can you help me",
"llm.output_messages.0.message.role": "assistant",
"llm.output_messages.0.message.contents.0.message_content.text": "I can assist you with travel planning by ...",
"llm.tools.0.tool.json_schema": "{\"type\": \"function\", \"function\": {\"name\": \"search_flights\", ...}}",
"session.id": "sea-nyc-trip-2-turns"
},
"status": {
"code": "OK"
}
}