View a markdown version of this page

OpenAI 代理 - Amazon Bedrock AgentCore
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

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

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 评估支持这两个库。这些库发出不同的范围名称并使用不同的跨度属性。评估服务从每种方法中提取相同的值。

当您的代理使用 Amazon 发行版 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 代理,将 Amazon 发行版节点自动仪表包 (@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 库(来自 Amazon 发行版节点自动仪表包@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 库(来自 Amazon 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" } }