View a markdown version of this page

OpenAI 代理 - 亚马逊基岩 AgentCore

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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:

    • 用户提示和代理响应:来自调用代理范围的事件记录,在body.input和中body.output。

    • 工具调用:来自的工具名称gen_ai.tool.name,以及执行工具跨度中的参数gen_ai.tool.call.arguments和gen_ai.tool.call.result结果。在 OpenTelemetry 库中,即使使用分割遥测,工具参数和结果仍保留在 span 属性上。

  • OpenInference:

    • 用户提示和代理响应:根据推理跨度的事件记录重建。 AgentCore 评估从body.input和读取消息body.output,然后使用用户提示和代理响应回填空的调用代理跨度。

    • 工具调用:执行工具跨tool.name度中的工具名称。工具参数和结果来自该跨度的事件记录,以body.input和为单位body.output。

有关更多信息,请参见分割遥测中的跨度示例。

来自跨度属性

使用统一的遥测技术,相同的内容将作为属性保留在跨度上。这些属性取决于仪器库:

  • OpenTelemetry:

    • 用户提示和代理响应:从gen_ai.input.messages调用代理跨度开始。gen_ai.output.messages

    • 工具调用:执行工具跨度上的工具名称gen_ai.tool.call.arguments以及来自和gen_ai.tool.call.result的参数和结果。gen_ai.tool.name

  • OpenInference:

    • 用户提示和代理响应:从推理跨度(llm.input_messages.*和llm.output_messages.*)的索引消息属性中回填到空的调用代理跨度中。

    • 工具调用:执行工具跨度上的工具名称input.value以及来自和output.value的参数和结果。tool.name

有关更多信息,请参阅统一遥测中的跨度示例。

分体遥测中的跨度示例

使用分离式遥测,跨度携带识别属性,内容存在于相关的事件记录中。以下示例来自部署在亚马逊 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" } }