本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
OpenAI 代理
本页介绍如何检测 OpenAI Agents 代理、如何识别跨度以及如何提取评估字段。 AgentCore 评估支持在 Python 中内置的 OpenAI 代理 TypeScript;本页分别介绍了 Python 代理支持和TypeScript 代理支持方面的每种语言。
主题
Python 代理支持
Python OpenAI 代理在作用域名称 opentelemetry.instrumentation.openai_agents (OpenTelemetry) 或 openinference.instrumentation.openai_agents () 下发出跨度。OpenInference
为您的代理人提供仪器
您可以使用两个工具库之一来检测 OpenAI 代理代理:OpenTelemetry(opentelemetry-instrumentation-openai-agents) 或 OpenInference (openinference-instrumentation-openai-agents)。亚马逊基岩 AgentCore 评估支持这两个库。这些库发出不同的范围名称并使用不同的跨度属性。评估服务从每种方法中提取相同的值。
当您的代理使用 AWS 发行版 OpenTelemetry (ADOT) 运行时,例如在 Amazon Bedrock AgentCore Runtime 上,您无需添加显式的检测代码。将仪器库添加到项目的依赖项中就足够了。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
|
|
推理
|
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
|
|
推理
|
openinference.span.kind = LLM
|
在 OpenInference 库中,AGENT和CHAIN跨度是空的结构容器:它们不携带对话内容。用户提示和代理响应是根据同一跟踪中的推断 (LLM) 跨度重建的。
OpenAI Agents 以基于部件的格式序列化消息,其中每条消息都携带一parts组键入的内容块(例如,)。[{"role": "user", "parts": [{"type": "text", "content": "…"}]}]使用该 OpenTelemetry 库,“ AgentCore 评估” 可以解析出这些部分的文本。使用该 OpenInference 库,模型输出是完整的 OpenAI 响应对象, AgentCore 评估从中output[].content[].text读取响应文本。
此内容的位置取决于遥测数据的收集方式。在这两种情况下,识别属性(gen_ai.operation.name或openinference.span.kind)都处于跨度内。有关更多信息,请参阅遥测设置和交付。
通过拆分遥测, AgentCore 评估从与每个跨度相关的事件记录中读取对话内容。工具输入和输出的位置在两个库之间有所不同:
-
OpenTelemetry:
-
OpenInference:
有关更多信息,请参见分割遥测中的跨度示例。
使用统一的遥测技术,相同的内容将作为属性保留在跨度上。这些属性取决于仪器库:
-
OpenTelemetry:
-
OpenInference:
有关更多信息,请参阅统一遥测中的跨度示例。
分体遥测中的跨度示例
使用分离式遥测,跨度携带识别属性,内容存在于相关的事件记录中。以下示例来自部署在亚马逊 Bedrock Runtime 上的 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 库,即使使用分割遥测,工具参数和结果也会保留在 span 属性上。
{
"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 评估从 inference (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 评估使用最后一条纯文本输入消息作为用户提示。输出消息是 OpenAI 响应对象, AgentCore 评估从中读取响应文本。
{
"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 评估会重构该跨度的用户提示和代理响应,并回填空的 invoke 代理 () 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 发行版节点自动仪表包 (@aws/aws-distro-opentelemetry-node-autoinstrumentation) 添加到您的依赖项中。它包括内置的 OpenAI 代理工具,该工具在启动时激活并发出范围名称。@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-native OpenTelemetry 库(来自 AWS 发行版节点自动仪表包@aws/aws-distro-opentelemetry-node-autoinstrumentation,发出范围名称@aws/aws-distro-opentelemetry-instrumentation-openai-agents)集合和 OpenInference JS 库 (@arizeai/openinference-instrumentation-openai-agents) 集gen_ai.operation.name。openinference.span.kind有关这些值,请参阅 Python 代理支持如何识别跨度下的如何识别跨度。
字段提取读取的属性与 Python 代理的属性相同。请注意,在 ADOT-native TypeScript 库中,调用代理跨度是一个结构容器:用户提示符和代理响应是从 inference (chat) 跨度而不是调用代理跨度重建的,这与 Python 库不同,Python OpenTelemetry 库将它们保持在调用代理跨度上。有关每个字段的读取来源,请参阅 Python 代理支持下如何提取评估字段。
来自代理的示例跨度 TypeScript
以下示例来自部署在具有统一遥测功能的亚马逊 Bedrock AgentCore Runtime 上的 TypeScript OpenAI 代理旅行计划代理。每个仪器库下方显示相同的代理。
这些例子并不完整。它们显示来自真实代理交互的代表性数据,为了便于阅读,省略了一些字段并截断了长值。
OpenTelemetry
使用 ADOT-native 库(来自 AWS Distro Node autoInstrumentation 软件包@aws/aws-distro-opentelemetry-node-autoinstrumentation,发出范围名称@aws/aws-distro-opentelemetry-instrumentation-openai-agents),调用代理跨度是一个结构容器,对话内容以零件格式和属性存在于推断 (chat) 跨度上。gen_ai.input.messages gen_ai.output.messages AgentCore 评估从推理跨度重构用户提示和代理响应。
例
- 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 评估从 inference (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 评估会重构该跨度的用户提示和代理响应,并回填空的 invoke 代理 () 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"
}
}