openai-agents 0.0.11__tar.gz → 0.0.13__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of openai-agents might be problematic. Click here for more details.
- {openai_agents-0.0.11 → openai_agents-0.0.13}/.github/workflows/tests.yml +1 -2
- {openai_agents-0.0.11 → openai_agents-0.0.13}/.gitignore +2 -1
- {openai_agents-0.0.11 → openai_agents-0.0.13}/PKG-INFO +5 -5
- {openai_agents-0.0.11 → openai_agents-0.0.13}/README.md +1 -3
- openai_agents-0.0.13/docs/ja/agents.md +151 -0
- openai_agents-0.0.13/docs/ja/config.md +98 -0
- openai_agents-0.0.13/docs/ja/context.md +81 -0
- openai_agents-0.0.13/docs/ja/examples.md +45 -0
- openai_agents-0.0.13/docs/ja/guardrails.md +158 -0
- openai_agents-0.0.13/docs/ja/handoffs.md +117 -0
- openai_agents-0.0.13/docs/ja/index.md +56 -0
- openai_agents-0.0.13/docs/ja/mcp.md +64 -0
- openai_agents-0.0.13/docs/ja/models/index.md +116 -0
- openai_agents-0.0.13/docs/ja/models/litellm.md +77 -0
- openai_agents-0.0.13/docs/ja/multi_agent.md +41 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ja/quickstart.md +23 -19
- openai_agents-0.0.13/docs/ja/results.md +56 -0
- openai_agents-0.0.13/docs/ja/running_agents.md +99 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ja/streaming.md +12 -8
- openai_agents-0.0.13/docs/ja/tools.md +295 -0
- openai_agents-0.0.13/docs/ja/tracing.md +122 -0
- openai_agents-0.0.13/docs/ja/visualization.md +87 -0
- openai_agents-0.0.13/docs/ja/voice/pipeline.md +81 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ja/voice/quickstart.md +13 -9
- openai_agents-0.0.13/docs/ja/voice/tracing.md +18 -0
- openai_agents-0.0.11/docs/models.md → openai_agents-0.0.13/docs/models/index.md +41 -16
- openai_agents-0.0.13/docs/models/litellm.md +73 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/quickstart.md +1 -1
- openai_agents-0.0.13/docs/ref/extensions/litellm.md +3 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/scripts/translate_docs.py +24 -3
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/visualization.md +1 -3
- openai_agents-0.0.13/examples/basic/local_image.py +48 -0
- openai_agents-0.0.13/examples/basic/media/image_bison.jpg +0 -0
- openai_agents-0.0.13/examples/basic/non_strict_output_type.py +81 -0
- openai_agents-0.0.13/examples/basic/remote_image.py +31 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/financial_research_agent/main.py +1 -1
- openai_agents-0.0.13/examples/model_providers/litellm_auto.py +41 -0
- openai_agents-0.0.13/examples/model_providers/litellm_provider.py +55 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/mkdocs.yml +10 -2
- {openai_agents-0.0.11 → openai_agents-0.0.13}/pyproject.toml +5 -3
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/__init__.py +2 -1
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/_run_impl.py +3 -3
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/agent.py +9 -2
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/agent_output.py +58 -8
- openai_agents-0.0.13/src/agents/extensions/models/litellm_model.py +381 -0
- openai_agents-0.0.13/src/agents/extensions/models/litellm_provider.py +21 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/extensions/visualization.py +1 -1
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/mcp/server.py +24 -5
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/model_settings.py +21 -2
- openai_agents-0.0.13/src/agents/models/chatcmpl_converter.py +466 -0
- openai_agents-0.0.13/src/agents/models/chatcmpl_helpers.py +37 -0
- openai_agents-0.0.13/src/agents/models/chatcmpl_stream_handler.py +292 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/models/interface.py +3 -3
- openai_agents-0.0.13/src/agents/models/multi_provider.py +144 -0
- openai_agents-0.0.13/src/agents/models/openai_chatcompletions.py +284 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/models/openai_responses.py +9 -9
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/result.py +24 -9
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/run.py +16 -13
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/tracing/processors.py +6 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/tracing/span_data.py +1 -1
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/fake_model.py +7 -4
- openai_agents-0.0.13/tests/fastapi/streaming_app.py +30 -0
- openai_agents-0.0.13/tests/fastapi/test_streaming_context.py +29 -0
- openai_agents-0.0.13/tests/mcp/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/mcp/test_server_errors.py +1 -1
- openai_agents-0.0.13/tests/model_settings/test_serialization.py +59 -0
- openai_agents-0.0.13/tests/models/__init__.py +0 -0
- openai_agents-0.0.13/tests/models/conftest.py +11 -0
- openai_agents-0.0.13/tests/models/test_litellm_chatcompletions_stream.py +286 -0
- openai_agents-0.0.13/tests/models/test_map.py +20 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_agent_config.py +3 -2
- openai_agents-0.0.13/tests/test_cancel_streaming.py +116 -0
- openai_agents-0.0.13/tests/test_extra_headers.py +92 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_function_schema.py +1 -1
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_openai_chatcompletions.py +7 -7
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_openai_chatcompletions_converter.py +38 -38
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_openai_responses_converter.py +1 -1
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_output_tool.py +56 -3
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_tool_converter.py +5 -5
- openai_agents-0.0.13/tests/voice/__init__.py +0 -0
- openai_agents-0.0.13/tests/voice/conftest.py +11 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/voice/test_workflow.py +3 -3
- openai_agents-0.0.13/uv.lock +2927 -0
- openai_agents-0.0.11/docs/ja/agents.md +0 -147
- openai_agents-0.0.11/docs/ja/config.md +0 -94
- openai_agents-0.0.11/docs/ja/context.md +0 -77
- openai_agents-0.0.11/docs/ja/examples.md +0 -40
- openai_agents-0.0.11/docs/ja/guardrails.md +0 -154
- openai_agents-0.0.11/docs/ja/handoffs.md +0 -113
- openai_agents-0.0.11/docs/ja/index.md +0 -52
- openai_agents-0.0.11/docs/ja/mcp.md +0 -60
- openai_agents-0.0.11/docs/ja/multi_agent.md +0 -37
- openai_agents-0.0.11/docs/ja/results.md +0 -52
- openai_agents-0.0.11/docs/ja/running_agents.md +0 -95
- openai_agents-0.0.11/docs/ja/tools.md +0 -270
- openai_agents-0.0.11/docs/ja/tracing.md +0 -116
- openai_agents-0.0.11/docs/ja/visualization.md +0 -84
- openai_agents-0.0.11/docs/ja/voice/pipeline.md +0 -75
- openai_agents-0.0.11/docs/ja/voice/tracing.md +0 -14
- openai_agents-0.0.11/src/agents/models/openai_chatcompletions.py +0 -1030
- openai_agents-0.0.11/tests/voice/conftest.py +0 -14
- openai_agents-0.0.11/uv.lock +0 -2029
- {openai_agents-0.0.11 → openai_agents-0.0.13}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/.github/ISSUE_TEMPLATE/model_provider.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/.github/workflows/docs.yml +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/.github/workflows/issues.yml +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/.github/workflows/publish.yml +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/.prettierrc +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/.vscode/settings.json +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/LICENSE +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/Makefile +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/agents.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/assets/images/favicon-platform.svg +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/assets/images/graph.png +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/assets/images/mcp-tracing.jpg +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/assets/images/orchestration.png +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/assets/logo.svg +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/config.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/context.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/examples.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/guardrails.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/handoffs.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/index.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ja/models.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/mcp.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/multi_agent.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/agent.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/agent_output.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/exceptions.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/extensions/handoff_filters.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/extensions/handoff_prompt.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/function_schema.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/guardrail.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/handoffs.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/index.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/items.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/lifecycle.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/mcp/server.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/mcp/util.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/model_settings.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/models/interface.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/models/openai_chatcompletions.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/models/openai_responses.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/result.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/run.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/run_context.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/stream_events.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/tool.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/tracing/create.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/tracing/index.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/tracing/processor_interface.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/tracing/processors.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/tracing/scope.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/tracing/setup.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/tracing/span_data.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/tracing/spans.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/tracing/traces.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/tracing/util.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/usage.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/voice/events.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/voice/exceptions.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/voice/input.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/voice/model.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/voice/models/openai_provider.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/voice/models/openai_stt.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/voice/models/openai_tts.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/voice/pipeline.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/voice/pipeline_config.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/voice/result.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/voice/utils.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/ref/voice/workflow.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/results.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/running_agents.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/streaming.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/stylesheets/extra.css +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/tools.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/tracing.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/voice/pipeline.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/voice/quickstart.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/docs/voice/tracing.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/agent_patterns/README.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/agent_patterns/agents_as_tools.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/agent_patterns/deterministic.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/agent_patterns/forcing_tool_use.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/agent_patterns/input_guardrails.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/agent_patterns/llm_as_a_judge.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/agent_patterns/output_guardrails.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/agent_patterns/parallelization.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/agent_patterns/routing.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/agent_patterns/streaming_guardrails.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/basic/agent_lifecycle_example.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/basic/dynamic_system_prompt.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/basic/hello_world.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/basic/hello_world_jupyter.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/basic/lifecycle_example.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/basic/previous_response_id.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/basic/stream_items.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/basic/stream_text.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/basic/tools.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/customer_service/main.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/financial_research_agent/README.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/financial_research_agent/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/financial_research_agent/agents/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/financial_research_agent/agents/financials_agent.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/financial_research_agent/agents/planner_agent.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/financial_research_agent/agents/risk_agent.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/financial_research_agent/agents/search_agent.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/financial_research_agent/agents/verifier_agent.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/financial_research_agent/agents/writer_agent.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/financial_research_agent/manager.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/financial_research_agent/printer.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/handoffs/message_filter.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/handoffs/message_filter_streaming.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/mcp/filesystem_example/README.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/mcp/filesystem_example/main.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/mcp/filesystem_example/sample_files/favorite_books.txt +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/mcp/filesystem_example/sample_files/favorite_cities.txt +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/mcp/filesystem_example/sample_files/favorite_songs.txt +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/mcp/git_example/README.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/mcp/git_example/main.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/mcp/sse_example/README.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/mcp/sse_example/main.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/mcp/sse_example/server.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/model_providers/README.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/model_providers/custom_example_agent.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/model_providers/custom_example_global.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/model_providers/custom_example_provider.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/research_bot/README.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/research_bot/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/research_bot/agents/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/research_bot/agents/planner_agent.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/research_bot/agents/search_agent.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/research_bot/agents/writer_agent.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/research_bot/main.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/research_bot/manager.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/research_bot/printer.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/research_bot/sample_outputs/product_recs.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/research_bot/sample_outputs/product_recs.txt +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/research_bot/sample_outputs/vacation.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/research_bot/sample_outputs/vacation.txt +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/tools/computer_use.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/tools/file_search.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/tools/web_search.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/voice/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/voice/static/README.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/voice/static/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/voice/static/main.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/voice/static/util.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/voice/streamed/README.md +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/voice/streamed/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/voice/streamed/main.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/examples/voice/streamed/my_workflow.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/_config.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/_debug.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/computer.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/exceptions.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/extensions/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/extensions/handoff_filters.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/extensions/handoff_prompt.py +0 -0
- {openai_agents-0.0.11/src/agents → openai_agents-0.0.13/src/agents/extensions}/models/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/function_schema.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/guardrail.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/handoffs.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/items.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/lifecycle.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/logger.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/mcp/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/mcp/util.py +0 -0
- {openai_agents-0.0.11/src/agents/util → openai_agents-0.0.13/src/agents/models}/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/models/_openai_shared.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/models/fake_id.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/models/openai_provider.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/py.typed +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/run_context.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/stream_events.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/strict_schema.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/tool.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/tracing/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/tracing/create.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/tracing/logger.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/tracing/processor_interface.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/tracing/scope.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/tracing/setup.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/tracing/spans.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/tracing/traces.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/tracing/util.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/usage.py +0 -0
- {openai_agents-0.0.11/src/agents/voice/models → openai_agents-0.0.13/src/agents/util}/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/util/_coro.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/util/_error_tracing.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/util/_json.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/util/_pretty_print.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/util/_transforms.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/util/_types.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/version.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/events.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/exceptions.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/imports.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/input.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/model.py +0 -0
- {openai_agents-0.0.11/tests → openai_agents-0.0.13/src/agents/voice/models}/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/models/openai_model_provider.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/models/openai_stt.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/models/openai_tts.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/pipeline.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/pipeline_config.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/result.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/utils.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/src/agents/voice/workflow.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/README.md +0 -0
- {openai_agents-0.0.11/tests/mcp → openai_agents-0.0.13/tests}/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/conftest.py +0 -0
- {openai_agents-0.0.11/tests/voice → openai_agents-0.0.13/tests/fastapi}/__init__.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/mcp/conftest.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/mcp/helpers.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/mcp/test_caching.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/mcp/test_connect_disconnect.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/mcp/test_mcp_tracing.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/mcp/test_mcp_util.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/mcp/test_runner_calls_mcp.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_agent_hooks.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_agent_runner.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_agent_runner_streamed.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_agent_tracing.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_computer_action.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_config.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_doc_parsing.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_extension_filters.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_function_tool.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_function_tool_decorator.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_global_hooks.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_guardrails.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_handoff_tool.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_items_helpers.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_max_turns.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_openai_chatcompletions_stream.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_pretty_print.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_responses.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_responses_tracing.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_result_cast.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_run_config.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_run_step_execution.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_run_step_processing.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_strict_schema.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_tool_choice_reset.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_tool_use_behavior.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_trace_processor.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_tracing.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_tracing_errors.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_tracing_errors_streamed.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/test_visualization.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/testing_processor.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/tracing/test_processor_api_key.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/voice/fake_models.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/voice/helpers.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/voice/test_input.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/voice/test_openai_stt.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/voice/test_openai_tts.py +0 -0
- {openai_agents-0.0.11 → openai_agents-0.0.13}/tests/voice/test_pipeline.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openai-agents
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.13
|
|
4
4
|
Summary: OpenAI Agents SDK
|
|
5
5
|
Project-URL: Homepage, https://github.com/openai/openai-agents-python
|
|
6
6
|
Project-URL: Repository, https://github.com/openai/openai-agents-python
|
|
@@ -20,11 +20,13 @@ Classifier: Typing :: Typed
|
|
|
20
20
|
Requires-Python: >=3.9
|
|
21
21
|
Requires-Dist: griffe<2,>=1.5.6
|
|
22
22
|
Requires-Dist: mcp<2,>=1.6.0; python_version >= '3.10'
|
|
23
|
-
Requires-Dist: openai>=1.
|
|
23
|
+
Requires-Dist: openai>=1.76.0
|
|
24
24
|
Requires-Dist: pydantic<3,>=2.10
|
|
25
25
|
Requires-Dist: requests<3,>=2.0
|
|
26
26
|
Requires-Dist: types-requests<3,>=2.0
|
|
27
27
|
Requires-Dist: typing-extensions<5,>=4.12.2
|
|
28
|
+
Provides-Extra: litellm
|
|
29
|
+
Requires-Dist: litellm<2,>=1.65.0; extra == 'litellm'
|
|
28
30
|
Provides-Extra: viz
|
|
29
31
|
Requires-Dist: graphviz>=0.17; extra == 'viz'
|
|
30
32
|
Provides-Extra: voice
|
|
@@ -34,7 +36,7 @@ Description-Content-Type: text/markdown
|
|
|
34
36
|
|
|
35
37
|
# OpenAI Agents SDK
|
|
36
38
|
|
|
37
|
-
The OpenAI Agents SDK is a lightweight yet powerful framework for building multi-agent workflows.
|
|
39
|
+
The OpenAI Agents SDK is a lightweight yet powerful framework for building multi-agent workflows. It is provider-agnostic, supporting the OpenAI Responses and Chat Completions APIs, as well as 100+ other LLMs.
|
|
38
40
|
|
|
39
41
|
<img src="https://cdn.openai.com/API/docs/images/orchestration.png" alt="Image of the Agents Tracing UI" style="max-height: 803px;">
|
|
40
42
|
|
|
@@ -47,8 +49,6 @@ The OpenAI Agents SDK is a lightweight yet powerful framework for building multi
|
|
|
47
49
|
|
|
48
50
|
Explore the [examples](examples) directory to see the SDK in action, and read our [documentation](https://openai.github.io/openai-agents-python/) for more details.
|
|
49
51
|
|
|
50
|
-
Notably, our SDK [is compatible](https://openai.github.io/openai-agents-python/models/) with any model providers that support the OpenAI Chat Completions API format.
|
|
51
|
-
|
|
52
52
|
## Get started
|
|
53
53
|
|
|
54
54
|
1. Set up your Python environment
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# OpenAI Agents SDK
|
|
2
2
|
|
|
3
|
-
The OpenAI Agents SDK is a lightweight yet powerful framework for building multi-agent workflows.
|
|
3
|
+
The OpenAI Agents SDK is a lightweight yet powerful framework for building multi-agent workflows. It is provider-agnostic, supporting the OpenAI Responses and Chat Completions APIs, as well as 100+ other LLMs.
|
|
4
4
|
|
|
5
5
|
<img src="https://cdn.openai.com/API/docs/images/orchestration.png" alt="Image of the Agents Tracing UI" style="max-height: 803px;">
|
|
6
6
|
|
|
@@ -13,8 +13,6 @@ The OpenAI Agents SDK is a lightweight yet powerful framework for building multi
|
|
|
13
13
|
|
|
14
14
|
Explore the [examples](examples) directory to see the SDK in action, and read our [documentation](https://openai.github.io/openai-agents-python/) for more details.
|
|
15
15
|
|
|
16
|
-
Notably, our SDK [is compatible](https://openai.github.io/openai-agents-python/models/) with any model providers that support the OpenAI Chat Completions API format.
|
|
17
|
-
|
|
18
16
|
## Get started
|
|
19
17
|
|
|
20
18
|
1. Set up your Python environment
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
search:
|
|
3
|
+
exclude: true
|
|
4
|
+
---
|
|
5
|
+
# エージェント
|
|
6
|
+
|
|
7
|
+
エージェントはアプリの主要な構成ブロックです。エージェントは、大規模言語モデル ( LLM ) に instructions と tools を設定したものです。
|
|
8
|
+
|
|
9
|
+
## 基本設定
|
|
10
|
+
|
|
11
|
+
エージェントで最も一般的に設定するプロパティは次のとおりです。
|
|
12
|
+
|
|
13
|
+
- `instructions`: 開発者メッセージまたは system prompt とも呼ばれます。
|
|
14
|
+
- `model`: 使用する LLM と、temperature や top_p などのモデル調整パラメーターを指定する任意の `model_settings`。
|
|
15
|
+
- `tools`: エージェントがタスクを達成するために利用できるツール。
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
from agents import Agent, ModelSettings, function_tool
|
|
19
|
+
|
|
20
|
+
@function_tool
|
|
21
|
+
def get_weather(city: str) -> str:
|
|
22
|
+
return f"The weather in {city} is sunny"
|
|
23
|
+
|
|
24
|
+
agent = Agent(
|
|
25
|
+
name="Haiku agent",
|
|
26
|
+
instructions="Always respond in haiku form",
|
|
27
|
+
model="o3-mini",
|
|
28
|
+
tools=[get_weather],
|
|
29
|
+
)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## コンテキスト
|
|
33
|
+
|
|
34
|
+
エージェントはその `context` 型について汎用的です。コンテキストは依存性注入の手段で、`Runner.run()` に渡すオブジェクトです。これはすべてのエージェント、ツール、ハンドオフなどに渡され、エージェント実行時の依存関係や状態をまとめて保持します。任意の Python オブジェクトをコンテキストとして渡せます。
|
|
35
|
+
|
|
36
|
+
```python
|
|
37
|
+
@dataclass
|
|
38
|
+
class UserContext:
|
|
39
|
+
uid: str
|
|
40
|
+
is_pro_user: bool
|
|
41
|
+
|
|
42
|
+
async def fetch_purchases() -> list[Purchase]:
|
|
43
|
+
return ...
|
|
44
|
+
|
|
45
|
+
agent = Agent[UserContext](
|
|
46
|
+
...,
|
|
47
|
+
)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## 出力タイプ
|
|
51
|
+
|
|
52
|
+
デフォルトでは、エージェントはプレーンテキスト ( つまり `str` ) を出力します。特定の型で出力させたい場合は `output_type` パラメーターを使用します。一般的には [Pydantic](https://docs.pydantic.dev/) オブジェクトを利用しますが、Pydantic の [TypeAdapter](https://docs.pydantic.dev/latest/api/type_adapter/) でラップ可能な型であれば何でも対応します。たとえば dataclass、list、TypedDict などです。
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
from pydantic import BaseModel
|
|
56
|
+
from agents import Agent
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class CalendarEvent(BaseModel):
|
|
60
|
+
name: str
|
|
61
|
+
date: str
|
|
62
|
+
participants: list[str]
|
|
63
|
+
|
|
64
|
+
agent = Agent(
|
|
65
|
+
name="Calendar extractor",
|
|
66
|
+
instructions="Extract calendar events from text",
|
|
67
|
+
output_type=CalendarEvent,
|
|
68
|
+
)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
!!! note
|
|
72
|
+
|
|
73
|
+
`output_type` を渡すと、モデルは通常のプレーンテキスト応答の代わりに [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を使用するよう指示されます。
|
|
74
|
+
|
|
75
|
+
## ハンドオフ
|
|
76
|
+
|
|
77
|
+
ハンドオフは、エージェントが委譲できるサブエージェントです。ハンドオフのリストを渡しておくと、エージェントは必要に応じてそれらに処理を委譲できます。これにより、単一のタスクに特化したモジュール式エージェントを編成できる強力なパターンが実現します。詳細は [handoffs](handoffs.md) ドキュメントをご覧ください。
|
|
78
|
+
|
|
79
|
+
```python
|
|
80
|
+
from agents import Agent
|
|
81
|
+
|
|
82
|
+
booking_agent = Agent(...)
|
|
83
|
+
refund_agent = Agent(...)
|
|
84
|
+
|
|
85
|
+
triage_agent = Agent(
|
|
86
|
+
name="Triage agent",
|
|
87
|
+
instructions=(
|
|
88
|
+
"Help the user with their questions."
|
|
89
|
+
"If they ask about booking, handoff to the booking agent."
|
|
90
|
+
"If they ask about refunds, handoff to the refund agent."
|
|
91
|
+
),
|
|
92
|
+
handoffs=[booking_agent, refund_agent],
|
|
93
|
+
)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## 動的 instructions
|
|
97
|
+
|
|
98
|
+
通常はエージェント作成時に instructions を指定しますが、関数を介して動的に instructions を提供することもできます。その関数はエージェントとコンテキストを受け取り、プロンプトを返す必要があります。同期関数と `async` 関数の両方に対応しています。
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
def dynamic_instructions(
|
|
102
|
+
context: RunContextWrapper[UserContext], agent: Agent[UserContext]
|
|
103
|
+
) -> str:
|
|
104
|
+
return f"The user's name is {context.context.name}. Help them with their questions."
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
agent = Agent[UserContext](
|
|
108
|
+
name="Triage agent",
|
|
109
|
+
instructions=dynamic_instructions,
|
|
110
|
+
)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## ライフサイクルイベント (hooks)
|
|
114
|
+
|
|
115
|
+
場合によっては、エージェントのライフサイクルを観察したいことがあります。たとえば、イベントをログに記録したり、特定のイベント発生時にデータを事前取得したりする場合です。`hooks` プロパティを使ってエージェントのライフサイクルにフックできます。[`AgentHooks`][agents.lifecycle.AgentHooks] クラスをサブクラス化し、関心のあるメソッドをオーバーライドしてください。
|
|
116
|
+
|
|
117
|
+
## ガードレール
|
|
118
|
+
|
|
119
|
+
ガードレールを使うと、エージェントの実行と並行してユーザー入力に対するチェックやバリデーションを実行できます。たとえば、ユーザーの入力内容が関連しているかをスクリーニングできます。詳細は [guardrails](guardrails.md) ドキュメントをご覧ください。
|
|
120
|
+
|
|
121
|
+
## エージェントの複製
|
|
122
|
+
|
|
123
|
+
`clone()` メソッドを使用すると、エージェントを複製し、必要に応じて任意のプロパティを変更できます。
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
pirate_agent = Agent(
|
|
127
|
+
name="Pirate",
|
|
128
|
+
instructions="Write like a pirate",
|
|
129
|
+
model="o3-mini",
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
robot_agent = pirate_agent.clone(
|
|
133
|
+
name="Robot",
|
|
134
|
+
instructions="Write like a robot",
|
|
135
|
+
)
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## ツール使用の強制
|
|
139
|
+
|
|
140
|
+
ツールの一覧を渡しても、LLM が必ずツールを使用するとは限りません。[`ModelSettings.tool_choice`][agents.model_settings.ModelSettings.tool_choice] を設定することでツール使用を強制できます。有効な値は次のとおりです。
|
|
141
|
+
|
|
142
|
+
1. `auto` — ツールを使用するかどうかを LLM が判断します。
|
|
143
|
+
2. `required` — LLM にツール使用を必須化します ( ただし使用するツールは自動選択 )。
|
|
144
|
+
3. `none` — LLM にツールを使用しないことを要求します。
|
|
145
|
+
4. 特定の文字列 ( 例: `my_tool` ) — その特定のツールを LLM に使用させます。
|
|
146
|
+
|
|
147
|
+
!!! note
|
|
148
|
+
|
|
149
|
+
無限ループを防ぐため、フレームワークはツール呼び出し後に `tool_choice` を自動的に "auto" にリセットします。この動作は [`agent.reset_tool_choice`][agents.agent.Agent.reset_tool_choice] で設定できます。無限ループが起こる理由は、ツールの結果が LLM に送られ、`tool_choice` により再びツール呼び出しが生成される、という流れが繰り返されるからです。
|
|
150
|
+
|
|
151
|
+
ツール呼び出し後にエージェントを完全に停止させたい場合 ( auto モードで続行させたくない場合 ) は、[`Agent.tool_use_behavior="stop_on_first_tool"`] を設定してください。これにより、ツールの出力を LL M の追加処理なしにそのまま最終応答として返します。
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
search:
|
|
3
|
+
exclude: true
|
|
4
|
+
---
|
|
5
|
+
# SDK の設定
|
|
6
|
+
|
|
7
|
+
## API キーとクライアント
|
|
8
|
+
|
|
9
|
+
デフォルトでは、 SDK はインポートされた時点で LLM リクエストとトレーシングに使用する `OPENAI_API_KEY` 環境変数を探します。アプリ起動前にこの環境変数を設定できない場合は、 [set_default_openai_key()][agents.set_default_openai_key] 関数を利用してキーを設定できます。
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
from agents import set_default_openai_key
|
|
13
|
+
|
|
14
|
+
set_default_openai_key("sk-...")
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
また、使用する OpenAI クライアントを構成することも可能です。デフォルトでは、 SDK は環境変数または上記で設定したデフォルトキーを用いて `AsyncOpenAI` インスタンスを作成します。これを変更するには、 [set_default_openai_client()][agents.set_default_openai_client] 関数を使用します。
|
|
18
|
+
|
|
19
|
+
```python
|
|
20
|
+
from openai import AsyncOpenAI
|
|
21
|
+
from agents import set_default_openai_client
|
|
22
|
+
|
|
23
|
+
custom_client = AsyncOpenAI(base_url="...", api_key="...")
|
|
24
|
+
set_default_openai_client(custom_client)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
さらに、使用する OpenAI API をカスタマイズすることもできます。既定では OpenAI Responses API を利用します。これを Chat Completions API に変更するには、 [set_default_openai_api()][agents.set_default_openai_api] 関数を使用してください。
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
from agents import set_default_openai_api
|
|
31
|
+
|
|
32
|
+
set_default_openai_api("chat_completions")
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## トレーシング
|
|
36
|
+
|
|
37
|
+
トレーシングはデフォルトで有効になっています。前述の OpenAI API キー(環境変数または設定したデフォルトキー)が自動的に使用されます。トレーシングで使用する API キーを個別に設定したい場合は、 [`set_tracing_export_api_key`][agents.set_tracing_export_api_key] 関数を利用してください。
|
|
38
|
+
|
|
39
|
+
```python
|
|
40
|
+
from agents import set_tracing_export_api_key
|
|
41
|
+
|
|
42
|
+
set_tracing_export_api_key("sk-...")
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
トレーシングを完全に無効化するには、 [`set_tracing_disabled()`][agents.set_tracing_disabled] 関数を呼び出します。
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
from agents import set_tracing_disabled
|
|
49
|
+
|
|
50
|
+
set_tracing_disabled(True)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## デバッグログ
|
|
54
|
+
|
|
55
|
+
SDK にはハンドラーが設定されていない Python ロガーが 2 つあります。デフォルトでは、警告とエラーは `stdout` に出力されますが、それ以外のログは抑制されます。
|
|
56
|
+
|
|
57
|
+
詳細なログを有効にするには、 [`enable_verbose_stdout_logging()`][agents.enable_verbose_stdout_logging] 関数を使用します。
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
from agents import enable_verbose_stdout_logging
|
|
61
|
+
|
|
62
|
+
enable_verbose_stdout_logging()
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
必要に応じて、ハンドラー、フィルター、フォーマッターなどを追加してログをカスタマイズすることも可能です。詳しくは [Python ロギングガイド](https://docs.python.org/3/howto/logging.html) を参照してください。
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
import logging
|
|
69
|
+
|
|
70
|
+
logger = logging.getLogger("openai.agents") # or openai.agents.tracing for the Tracing logger
|
|
71
|
+
|
|
72
|
+
# To make all logs show up
|
|
73
|
+
logger.setLevel(logging.DEBUG)
|
|
74
|
+
# To make info and above show up
|
|
75
|
+
logger.setLevel(logging.INFO)
|
|
76
|
+
# To make warning and above show up
|
|
77
|
+
logger.setLevel(logging.WARNING)
|
|
78
|
+
# etc
|
|
79
|
+
|
|
80
|
+
# You can customize this as needed, but this will output to `stderr` by default
|
|
81
|
+
logger.addHandler(logging.StreamHandler())
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### ログに含まれる機微情報
|
|
85
|
+
|
|
86
|
+
特定のログには機微情報(たとえば ユーザー データ)が含まれる場合があります。この情報が記録されるのを防ぎたい場合は、次の環境変数を設定してください。
|
|
87
|
+
|
|
88
|
+
LLM の入力および出力のログを無効にする:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
export OPENAI_AGENTS_DONT_LOG_MODEL_DATA=1
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
ツールの入力および出力のログを無効にする:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
export OPENAI_AGENTS_DONT_LOG_TOOL_DATA=1
|
|
98
|
+
```
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
search:
|
|
3
|
+
exclude: true
|
|
4
|
+
---
|
|
5
|
+
# コンテキスト管理
|
|
6
|
+
|
|
7
|
+
コンテキストという言葉には複数の意味があります。ここでは主に 2 つのコンテキストについて説明します。
|
|
8
|
+
|
|
9
|
+
1. コード内でローカルに利用できるコンテキスト: ツール関数の実行時や `on_handoff` などのコールバック、ライフサイクルフックで必要となるデータや依存関係です。
|
|
10
|
+
2. LLM が参照できるコンテキスト: LLM がレスポンスを生成する際に見えるデータです。
|
|
11
|
+
|
|
12
|
+
## ローカルコンテキスト
|
|
13
|
+
|
|
14
|
+
ローカルコンテキストは [`RunContextWrapper`][agents.run_context.RunContextWrapper] クラスと、その中の [`context`][agents.run_context.RunContextWrapper.context] プロパティで表現されます。仕組みは次のとおりです。
|
|
15
|
+
|
|
16
|
+
1. 任意の Python オブジェクトを作成します。一般的なパターンとして dataclass や Pydantic オブジェクトを使用します。
|
|
17
|
+
2. そのオブジェクトを各種 run メソッド(例: `Runner.run(..., **context=whatever** )`)に渡します。
|
|
18
|
+
3. すべてのツール呼び出しやライフサイクルフックには、ラッパーオブジェクト `RunContextWrapper[T]` が渡されます。ここで `T` はコンテキストオブジェクトの型で、`wrapper.context` からアクセスできます。
|
|
19
|
+
|
|
20
|
+
**最重要ポイント**: あるエージェントの実行において、エージェント・ツール関数・ライフサイクルフックなどはすべて同じ _型_ のコンテキストを使用しなければなりません。
|
|
21
|
+
|
|
22
|
+
コンテキストでは次のような用途が考えられます。
|
|
23
|
+
|
|
24
|
+
- 実行に関するデータ(例: ユーザー名 / uid やその他のユーザー情報)
|
|
25
|
+
- 依存オブジェクト(例: ロガー、データフェッチャーなど)
|
|
26
|
+
- ヘルパー関数
|
|
27
|
+
|
|
28
|
+
!!! danger "Note"
|
|
29
|
+
|
|
30
|
+
コンテキストオブジェクトは LLM には送信されません。あくまでローカルのオブジェクトであり、読み書きやメソッド呼び出しが可能です。
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
import asyncio
|
|
34
|
+
from dataclasses import dataclass
|
|
35
|
+
|
|
36
|
+
from agents import Agent, RunContextWrapper, Runner, function_tool
|
|
37
|
+
|
|
38
|
+
@dataclass
|
|
39
|
+
class UserInfo: # (1)!
|
|
40
|
+
name: str
|
|
41
|
+
uid: int
|
|
42
|
+
|
|
43
|
+
@function_tool
|
|
44
|
+
async def fetch_user_age(wrapper: RunContextWrapper[UserInfo]) -> str: # (2)!
|
|
45
|
+
return f"User {wrapper.context.name} is 47 years old"
|
|
46
|
+
|
|
47
|
+
async def main():
|
|
48
|
+
user_info = UserInfo(name="John", uid=123)
|
|
49
|
+
|
|
50
|
+
agent = Agent[UserInfo]( # (3)!
|
|
51
|
+
name="Assistant",
|
|
52
|
+
tools=[fetch_user_age],
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
result = await Runner.run( # (4)!
|
|
56
|
+
starting_agent=agent,
|
|
57
|
+
input="What is the age of the user?",
|
|
58
|
+
context=user_info,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
print(result.final_output) # (5)!
|
|
62
|
+
# The user John is 47 years old.
|
|
63
|
+
|
|
64
|
+
if __name__ == "__main__":
|
|
65
|
+
asyncio.run(main())
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
1. これがコンテキストオブジェクトです。ここでは dataclass を使っていますが、任意の型を使用できます。
|
|
69
|
+
2. これはツールです。`RunContextWrapper[UserInfo]` を受け取り、実装内でコンテキストを参照しています。
|
|
70
|
+
3. エージェントにジェネリック `UserInfo` を付与することで、型チェッカーが誤りを検出できます(たとえば別のコンテキスト型を受け取るツールを渡した場合など)。
|
|
71
|
+
4. `run` 関数にコンテキストを渡します。
|
|
72
|
+
5. エージェントはツールを正しく呼び出し、年齢を取得します。
|
|
73
|
+
|
|
74
|
+
## エージェント / LLM コンテキスト
|
|
75
|
+
|
|
76
|
+
LLM が呼び出されるとき、LLM が参照できるデータは会話履歴に含まれるものだけです。したがって、新しいデータを LLM に渡したい場合は、そのデータを履歴に含める形で提供する必要があります。方法はいくつかあります。
|
|
77
|
+
|
|
78
|
+
1. Agent の `instructions` に追加する。いわゆる「system prompt」や「developer message」と呼ばれるものです。システムプロンプトは静的な文字列でも、コンテキストを受け取って文字列を返す動的な関数でも構いません。ユーザー名や現在の日付など、常に有用な情報を渡す際によく使われます。
|
|
79
|
+
2. `Runner.run` 呼び出し時の `input` に追加する。`instructions` と似ていますが、[chain of command](https://cdn.openai.com/spec/model-spec-2024-05-08.html#follow-the-chain-of-command) の下位レイヤーにメッセージを配置できます。
|
|
80
|
+
3. 関数ツール経由で公開する。オンデマンドで取得するコンテキストに適しており、LLM が必要に応じてツールを呼び出してデータを取得します。
|
|
81
|
+
4. retrieval や web search を使う。これらは特別なツールで、ファイルやデータベースから関連データを取得する(retrieval)、もしくは Web から取得する(web search)ことができます。レスポンスを関連コンテキストで「グラウンディング」するのに有効です。
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
search:
|
|
3
|
+
exclude: true
|
|
4
|
+
---
|
|
5
|
+
# コード例
|
|
6
|
+
|
|
7
|
+
リポジトリの [examples セクション](https://github.com/openai/openai-agents-python/tree/main/examples) には、 SDK のさまざまなサンプル実装が用意されています。これらの例は、異なるパターンや機能を示す複数のカテゴリーに整理されています。
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## カテゴリー
|
|
11
|
+
|
|
12
|
+
- **[agent_patterns](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns):**
|
|
13
|
+
このカテゴリーの例では、一般的なエージェント設計パターンを紹介しています。
|
|
14
|
+
|
|
15
|
+
- 決定論的ワークフロー
|
|
16
|
+
- ツールとしてのエージェント
|
|
17
|
+
- エージェントの並列実行
|
|
18
|
+
|
|
19
|
+
- **[basic](https://github.com/openai/openai-agents-python/tree/main/examples/basic):**
|
|
20
|
+
SDK の基礎的な機能を示す例です。
|
|
21
|
+
|
|
22
|
+
- 動的なシステムプロンプト
|
|
23
|
+
- ストリーミング出力
|
|
24
|
+
- ライフサイクルイベント
|
|
25
|
+
|
|
26
|
+
- **[tool examples](https://github.com/openai/openai-agents-python/tree/main/examples/tools):**
|
|
27
|
+
Web 検索やファイル検索など、 OpenAI がホストするツールの実装方法と、それらをエージェントに統合する方法を学べます。
|
|
28
|
+
|
|
29
|
+
- **[model providers](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers):**
|
|
30
|
+
OpenAI 以外のモデルを SDK で利用する方法を探ります。
|
|
31
|
+
|
|
32
|
+
- **[handoffs](https://github.com/openai/openai-agents-python/tree/main/examples/handoffs):**
|
|
33
|
+
エージェントのハンドオフを実践的に示す例です。
|
|
34
|
+
|
|
35
|
+
- **[mcp](https://github.com/openai/openai-agents-python/tree/main/examples/mcp):**
|
|
36
|
+
MCP を使ったエージェントの構築方法を学べます。
|
|
37
|
+
|
|
38
|
+
- **[customer_service](https://github.com/openai/openai-agents-python/tree/main/examples/customer_service)** と **[research_bot](https://github.com/openai/openai-agents-python/tree/main/examples/research_bot):**
|
|
39
|
+
より実践的なユースケースを示す、拡張された 2 つの例です。
|
|
40
|
+
|
|
41
|
+
- **customer_service**: 航空会社向けカスタマーサービスシステムの例
|
|
42
|
+
- **research_bot**: シンプルなディープリサーチクローン
|
|
43
|
+
|
|
44
|
+
- **[voice](https://github.com/openai/openai-agents-python/tree/main/examples/voice):**
|
|
45
|
+
TTS と STT モデルを用いた音声エージェントの例をご覧ください。
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
search:
|
|
3
|
+
exclude: true
|
|
4
|
+
---
|
|
5
|
+
# ガードレール
|
|
6
|
+
|
|
7
|
+
ガードレールは エージェント と _並列_ に実行され、 ユーザー入力 のチェックとバリデーションを行います。たとえば、顧客からのリクエストを支援するために非常に賢い (そのため遅く / 高価な) モデルを使うエージェントがあるとします。悪意のある ユーザー がモデルに数学の宿題を手伝わせようとするのは避けたいですよね。その場合、 高速 / 低コスト のモデルでガードレールを実行できます。ガードレールが悪意のある利用を検知した場合、即座にエラーを送出して高価なモデルの実行を停止し、時間と費用を節約できます。
|
|
8
|
+
|
|
9
|
+
ガードレールには 2 種類あります。
|
|
10
|
+
|
|
11
|
+
1. Input ガードレールは最初の ユーザー入力 に対して実行されます
|
|
12
|
+
2. Output ガードレールは最終的なエージェント出力に対して実行されます
|
|
13
|
+
|
|
14
|
+
## Input ガードレール
|
|
15
|
+
|
|
16
|
+
Input ガードレールは 3 つのステップで実行されます。
|
|
17
|
+
|
|
18
|
+
1. まず、ガードレールはエージェントに渡されたものと同じ入力を受け取ります。
|
|
19
|
+
2. 次に、ガードレール関数が実行され [`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を生成し、それが [`InputGuardrailResult`][agents.guardrail.InputGuardrailResult] でラップされます。
|
|
20
|
+
3. 最後に [`.tripwire_triggered`][agents.guardrail.GuardrailFunctionOutput.tripwire_triggered] が true かどうかを確認します。true の場合、[`InputGuardrailTripwireTriggered`][agents.exceptions.InputGuardrailTripwireTriggered] 例外が送出されるので、 ユーザー への適切な応答や例外処理を行えます。
|
|
21
|
+
|
|
22
|
+
!!! Note
|
|
23
|
+
|
|
24
|
+
Input ガードレールは ユーザー入力 に対して実行されることを想定しているため、エージェントのガードレールが実行されるのはそのエージェントが *最初* のエージェントである場合だけです。「なぜ `guardrails` プロパティがエージェントにあり、 `Runner.run` に渡さないのか?」と思うかもしれません。ガードレールは実際の エージェント に密接に関連する場合が多く、エージェントごとに異なるガードレールを実行するため、コードを同じ場所に置くことで可読性が向上するからです。
|
|
25
|
+
|
|
26
|
+
## Output ガードレール
|
|
27
|
+
|
|
28
|
+
Output ガードレールは 3 つのステップで実行されます。
|
|
29
|
+
|
|
30
|
+
1. まず、ガードレールはエージェントに渡されたものと同じ入力を受け取ります。
|
|
31
|
+
2. 次に、ガードレール関数が実行され [`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を生成し、それが [`OutputGuardrailResult`][agents.guardrail.OutputGuardrailResult] でラップされます。
|
|
32
|
+
3. 最後に [`.tripwire_triggered`][agents.guardrail.GuardrailFunctionOutput.tripwire_triggered] が true かどうかを確認します。true の場合、[`OutputGuardrailTripwireTriggered`][agents.exceptions.OutputGuardrailTripwireTriggered] 例外が送出されるので、 ユーザー への適切な応答や例外処理を行えます。
|
|
33
|
+
|
|
34
|
+
!!! Note
|
|
35
|
+
|
|
36
|
+
Output ガードレールは最終的なエージェント出力に対して実行されることを想定しているため、エージェントのガードレールが実行されるのはそのエージェントが *最後* のエージェントである場合だけです。Input ガードレール同様、ガードレールは実際の エージェント に密接に関連するため、コードを同じ場所に置くことで可読性が向上します。
|
|
37
|
+
|
|
38
|
+
## トリップワイヤ
|
|
39
|
+
|
|
40
|
+
入力または出力がガードレールに失敗した場合、ガードレールはトリップワイヤを用いてそれを通知できます。ガードレールがトリップワイヤを発火したことを検知すると、ただちに `{Input,Output}GuardrailTripwireTriggered` 例外を送出してエージェントの実行を停止します。
|
|
41
|
+
|
|
42
|
+
## ガードレールの実装
|
|
43
|
+
|
|
44
|
+
入力を受け取り、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を返す関数を用意する必要があります。次の例では、内部で エージェント を実行してこれを行います。
|
|
45
|
+
|
|
46
|
+
```python
|
|
47
|
+
from pydantic import BaseModel
|
|
48
|
+
from agents import (
|
|
49
|
+
Agent,
|
|
50
|
+
GuardrailFunctionOutput,
|
|
51
|
+
InputGuardrailTripwireTriggered,
|
|
52
|
+
RunContextWrapper,
|
|
53
|
+
Runner,
|
|
54
|
+
TResponseInputItem,
|
|
55
|
+
input_guardrail,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
class MathHomeworkOutput(BaseModel):
|
|
59
|
+
is_math_homework: bool
|
|
60
|
+
reasoning: str
|
|
61
|
+
|
|
62
|
+
guardrail_agent = Agent( # (1)!
|
|
63
|
+
name="Guardrail check",
|
|
64
|
+
instructions="Check if the user is asking you to do their math homework.",
|
|
65
|
+
output_type=MathHomeworkOutput,
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@input_guardrail
|
|
70
|
+
async def math_guardrail( # (2)!
|
|
71
|
+
ctx: RunContextWrapper[None], agent: Agent, input: str | list[TResponseInputItem]
|
|
72
|
+
) -> GuardrailFunctionOutput:
|
|
73
|
+
result = await Runner.run(guardrail_agent, input, context=ctx.context)
|
|
74
|
+
|
|
75
|
+
return GuardrailFunctionOutput(
|
|
76
|
+
output_info=result.final_output, # (3)!
|
|
77
|
+
tripwire_triggered=result.final_output.is_math_homework,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
agent = Agent( # (4)!
|
|
82
|
+
name="Customer support agent",
|
|
83
|
+
instructions="You are a customer support agent. You help customers with their questions.",
|
|
84
|
+
input_guardrails=[math_guardrail],
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
async def main():
|
|
88
|
+
# This should trip the guardrail
|
|
89
|
+
try:
|
|
90
|
+
await Runner.run(agent, "Hello, can you help me solve for x: 2x + 3 = 11?")
|
|
91
|
+
print("Guardrail didn't trip - this is unexpected")
|
|
92
|
+
|
|
93
|
+
except InputGuardrailTripwireTriggered:
|
|
94
|
+
print("Math homework guardrail tripped")
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
1. この エージェント をガードレール関数内で使用します。
|
|
98
|
+
2. これはエージェントの入力 / コンテキストを受け取り、結果を返すガードレール関数です。
|
|
99
|
+
3. ガードレール結果に追加情報を含めることができます。
|
|
100
|
+
4. これはワークフローを定義する実際のエージェントです。
|
|
101
|
+
|
|
102
|
+
Output ガードレールも同様です。
|
|
103
|
+
|
|
104
|
+
```python
|
|
105
|
+
from pydantic import BaseModel
|
|
106
|
+
from agents import (
|
|
107
|
+
Agent,
|
|
108
|
+
GuardrailFunctionOutput,
|
|
109
|
+
OutputGuardrailTripwireTriggered,
|
|
110
|
+
RunContextWrapper,
|
|
111
|
+
Runner,
|
|
112
|
+
output_guardrail,
|
|
113
|
+
)
|
|
114
|
+
class MessageOutput(BaseModel): # (1)!
|
|
115
|
+
response: str
|
|
116
|
+
|
|
117
|
+
class MathOutput(BaseModel): # (2)!
|
|
118
|
+
reasoning: str
|
|
119
|
+
is_math: bool
|
|
120
|
+
|
|
121
|
+
guardrail_agent = Agent(
|
|
122
|
+
name="Guardrail check",
|
|
123
|
+
instructions="Check if the output includes any math.",
|
|
124
|
+
output_type=MathOutput,
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
@output_guardrail
|
|
128
|
+
async def math_guardrail( # (3)!
|
|
129
|
+
ctx: RunContextWrapper, agent: Agent, output: MessageOutput
|
|
130
|
+
) -> GuardrailFunctionOutput:
|
|
131
|
+
result = await Runner.run(guardrail_agent, output.response, context=ctx.context)
|
|
132
|
+
|
|
133
|
+
return GuardrailFunctionOutput(
|
|
134
|
+
output_info=result.final_output,
|
|
135
|
+
tripwire_triggered=result.final_output.is_math,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
agent = Agent( # (4)!
|
|
139
|
+
name="Customer support agent",
|
|
140
|
+
instructions="You are a customer support agent. You help customers with their questions.",
|
|
141
|
+
output_guardrails=[math_guardrail],
|
|
142
|
+
output_type=MessageOutput,
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
async def main():
|
|
146
|
+
# This should trip the guardrail
|
|
147
|
+
try:
|
|
148
|
+
await Runner.run(agent, "Hello, can you help me solve for x: 2x + 3 = 11?")
|
|
149
|
+
print("Guardrail didn't trip - this is unexpected")
|
|
150
|
+
|
|
151
|
+
except OutputGuardrailTripwireTriggered:
|
|
152
|
+
print("Math output guardrail tripped")
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
1. これは実際のエージェントの出力型です。
|
|
156
|
+
2. これはガードレールの出力型です。
|
|
157
|
+
3. これはエージェントの出力を受け取り、結果を返すガードレール関数です。
|
|
158
|
+
4. これはワークフローを定義する実際のエージェントです。
|