openai-agents 0.0.8__tar.gz → 0.0.10__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.8 → openai_agents-0.0.10}/Makefile +5 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/PKG-INFO +1 -1
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/agents.md +4 -4
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/config.md +1 -1
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/examples.md +15 -9
- openai_agents-0.0.10/docs/ja/agents.md +147 -0
- openai_agents-0.0.10/docs/ja/config.md +94 -0
- openai_agents-0.0.10/docs/ja/context.md +77 -0
- openai_agents-0.0.10/docs/ja/examples.md +40 -0
- openai_agents-0.0.10/docs/ja/guardrails.md +154 -0
- openai_agents-0.0.10/docs/ja/handoffs.md +113 -0
- openai_agents-0.0.10/docs/ja/index.md +52 -0
- openai_agents-0.0.10/docs/ja/mcp.md +60 -0
- openai_agents-0.0.10/docs/ja/models.md +106 -0
- openai_agents-0.0.10/docs/ja/multi_agent.md +37 -0
- openai_agents-0.0.10/docs/ja/quickstart.md +189 -0
- openai_agents-0.0.10/docs/ja/results.md +52 -0
- openai_agents-0.0.10/docs/ja/running_agents.md +95 -0
- openai_agents-0.0.10/docs/ja/streaming.md +87 -0
- openai_agents-0.0.10/docs/ja/tools.md +270 -0
- openai_agents-0.0.10/docs/ja/tracing.md +116 -0
- openai_agents-0.0.10/docs/ja/visualization.md +84 -0
- openai_agents-0.0.10/docs/ja/voice/pipeline.md +75 -0
- openai_agents-0.0.10/docs/ja/voice/quickstart.md +194 -0
- openai_agents-0.0.10/docs/ja/voice/tracing.md +14 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/models.md +13 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/quickstart.md +1 -1
- openai_agents-0.0.10/docs/scripts/translate_docs.py +267 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/tools.md +21 -0
- openai_agents-0.0.10/examples/agent_patterns/streaming_guardrails.py +93 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/research_bot/agents/search_agent.py +5 -5
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/tools/computer_use.py +5 -3
- openai_agents-0.0.10/mkdocs.yml +191 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/pyproject.toml +4 -1
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/agent.py +1 -1
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/function_schema.py +1 -1
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/items.py +3 -1
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/mcp/util.py +5 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/model_settings.py +13 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/models/interface.py +8 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/models/openai_chatcompletions.py +40 -8
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/models/openai_responses.py +13 -2
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/result.py +8 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/run.py +22 -2
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/tracing/scope.py +4 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/tracing/setup.py +3 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/tracing/span_data.py +60 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/fake_model.py +5 -1
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/mcp/test_mcp_util.py +36 -7
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_agent_hooks.py +2 -2
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_items_helpers.py +6 -6
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_openai_chatcompletions.py +45 -5
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_openai_chatcompletions_stream.py +3 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_responses_tracing.py +96 -12
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_run_step_execution.py +10 -10
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_run_step_processing.py +16 -16
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/voice/test_workflow.py +4 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/uv.lock +27 -1
- openai_agents-0.0.8/mkdocs.yml +0 -149
- {openai_agents-0.0.8 → openai_agents-0.0.10}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/.github/ISSUE_TEMPLATE/model_provider.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/.github/workflows/docs.yml +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/.github/workflows/issues.yml +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/.github/workflows/publish.yml +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/.github/workflows/tests.yml +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/.gitignore +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/.prettierrc +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/.vscode/settings.json +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/LICENSE +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/README.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/assets/images/favicon-platform.svg +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/assets/images/graph.png +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/assets/images/mcp-tracing.jpg +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/assets/images/orchestration.png +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/assets/logo.svg +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/context.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/guardrails.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/handoffs.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/index.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/mcp.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/multi_agent.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/agent.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/agent_output.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/exceptions.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/extensions/handoff_filters.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/extensions/handoff_prompt.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/function_schema.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/guardrail.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/handoffs.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/index.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/items.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/lifecycle.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/mcp/server.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/mcp/util.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/model_settings.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/models/interface.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/models/openai_chatcompletions.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/models/openai_responses.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/result.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/run.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/run_context.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/stream_events.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/tool.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/tracing/create.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/tracing/index.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/tracing/processor_interface.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/tracing/processors.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/tracing/scope.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/tracing/setup.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/tracing/span_data.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/tracing/spans.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/tracing/traces.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/tracing/util.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/usage.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/voice/events.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/voice/exceptions.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/voice/input.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/voice/model.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/voice/models/openai_provider.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/voice/models/openai_stt.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/voice/models/openai_tts.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/voice/pipeline.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/voice/pipeline_config.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/voice/result.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/voice/utils.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/ref/voice/workflow.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/results.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/running_agents.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/streaming.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/stylesheets/extra.css +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/tracing.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/visualization.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/voice/pipeline.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/voice/quickstart.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/docs/voice/tracing.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/agent_patterns/README.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/agent_patterns/agents_as_tools.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/agent_patterns/deterministic.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/agent_patterns/forcing_tool_use.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/agent_patterns/input_guardrails.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/agent_patterns/llm_as_a_judge.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/agent_patterns/output_guardrails.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/agent_patterns/parallelization.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/agent_patterns/routing.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/basic/agent_lifecycle_example.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/basic/dynamic_system_prompt.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/basic/hello_world.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/basic/hello_world_jupyter.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/basic/lifecycle_example.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/basic/stream_items.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/basic/stream_text.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/basic/tools.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/customer_service/main.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/financial_research_agent/README.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/financial_research_agent/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/financial_research_agent/agents/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/financial_research_agent/agents/financials_agent.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/financial_research_agent/agents/planner_agent.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/financial_research_agent/agents/risk_agent.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/financial_research_agent/agents/search_agent.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/financial_research_agent/agents/verifier_agent.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/financial_research_agent/agents/writer_agent.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/financial_research_agent/main.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/financial_research_agent/manager.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/financial_research_agent/printer.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/handoffs/message_filter.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/handoffs/message_filter_streaming.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/mcp/filesystem_example/README.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/mcp/filesystem_example/main.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/mcp/filesystem_example/sample_files/favorite_books.txt +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/mcp/filesystem_example/sample_files/favorite_cities.txt +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/mcp/filesystem_example/sample_files/favorite_songs.txt +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/mcp/git_example/README.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/mcp/git_example/main.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/mcp/sse_example/README.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/mcp/sse_example/main.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/mcp/sse_example/server.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/model_providers/README.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/model_providers/custom_example_agent.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/model_providers/custom_example_global.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/model_providers/custom_example_provider.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/research_bot/README.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/research_bot/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/research_bot/agents/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/research_bot/agents/planner_agent.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/research_bot/agents/writer_agent.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/research_bot/main.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/research_bot/manager.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/research_bot/printer.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/research_bot/sample_outputs/product_recs.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/research_bot/sample_outputs/product_recs.txt +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/research_bot/sample_outputs/vacation.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/research_bot/sample_outputs/vacation.txt +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/tools/file_search.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/tools/web_search.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/voice/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/voice/static/README.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/voice/static/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/voice/static/main.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/voice/static/util.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/voice/streamed/README.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/voice/streamed/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/voice/streamed/main.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/examples/voice/streamed/my_workflow.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/_config.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/_debug.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/_run_impl.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/agent_output.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/computer.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/exceptions.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/extensions/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/extensions/handoff_filters.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/extensions/handoff_prompt.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/extensions/visualization.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/guardrail.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/handoffs.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/lifecycle.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/logger.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/mcp/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/mcp/server.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/models/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/models/_openai_shared.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/models/fake_id.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/models/openai_provider.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/py.typed +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/run_context.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/stream_events.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/strict_schema.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/tool.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/tracing/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/tracing/create.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/tracing/logger.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/tracing/processor_interface.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/tracing/processors.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/tracing/spans.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/tracing/traces.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/tracing/util.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/usage.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/util/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/util/_coro.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/util/_error_tracing.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/util/_json.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/util/_pretty_print.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/util/_transforms.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/util/_types.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/version.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/events.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/exceptions.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/imports.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/input.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/model.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/models/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/models/openai_model_provider.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/models/openai_stt.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/models/openai_tts.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/pipeline.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/pipeline_config.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/result.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/utils.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/src/agents/voice/workflow.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/README.md +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/conftest.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/mcp/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/mcp/conftest.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/mcp/helpers.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/mcp/test_caching.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/mcp/test_connect_disconnect.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/mcp/test_mcp_tracing.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/mcp/test_runner_calls_mcp.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/mcp/test_server_errors.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_agent_config.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_agent_runner.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_agent_runner_streamed.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_agent_tracing.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_computer_action.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_config.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_doc_parsing.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_extension_filters.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_function_schema.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_function_tool.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_function_tool_decorator.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_global_hooks.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_guardrails.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_handoff_tool.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_max_turns.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_openai_chatcompletions_converter.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_openai_responses_converter.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_output_tool.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_pretty_print.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_responses.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_result_cast.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_run_config.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_strict_schema.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_tool_choice_reset.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_tool_converter.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_tool_use_behavior.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_trace_processor.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_tracing.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_tracing_errors.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_tracing_errors_streamed.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/test_visualization.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/testing_processor.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/tracing/test_processor_api_key.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/voice/__init__.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/voice/conftest.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/voice/fake_models.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/voice/helpers.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/voice/test_input.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/voice/test_openai_stt.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/voice/test_openai_tts.py +0 -0
- {openai_agents-0.0.8 → openai_agents-0.0.10}/tests/voice/test_pipeline.py +0 -0
|
@@ -32,11 +32,11 @@ Agents are generic on their `context` type. Context is a dependency-injection to
|
|
|
32
32
|
```python
|
|
33
33
|
@dataclass
|
|
34
34
|
class UserContext:
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
uid: str
|
|
36
|
+
is_pro_user: bool
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
async def fetch_purchases() -> list[Purchase]:
|
|
39
|
+
return ...
|
|
40
40
|
|
|
41
41
|
agent = Agent[UserContext](
|
|
42
42
|
...,
|
|
@@ -63,7 +63,7 @@ Alternatively, you can customize the logs by adding handlers, filters, formatter
|
|
|
63
63
|
```python
|
|
64
64
|
import logging
|
|
65
65
|
|
|
66
|
-
logger =
|
|
66
|
+
logger = logging.getLogger("openai.agents") # or openai.agents.tracing for the Tracing logger
|
|
67
67
|
|
|
68
68
|
# To make all logs show up
|
|
69
69
|
logger.setLevel(logging.DEBUG)
|
|
@@ -5,32 +5,38 @@ Check out a variety of sample implementations of the SDK in the examples section
|
|
|
5
5
|
|
|
6
6
|
## Categories
|
|
7
7
|
|
|
8
|
-
- **agent_patterns:**
|
|
8
|
+
- **[agent_patterns](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns):**
|
|
9
9
|
Examples in this category illustrate common agent design patterns, such as
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
- Deterministic workflows
|
|
12
12
|
- Agents as tools
|
|
13
13
|
- Parallel agent execution
|
|
14
14
|
|
|
15
|
-
- **basic:**
|
|
15
|
+
- **[basic](https://github.com/openai/openai-agents-python/tree/main/examples/basic):**
|
|
16
16
|
These examples showcase foundational capabilities of the SDK, such as
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
- Dynamic system prompts
|
|
19
19
|
- Streaming outputs
|
|
20
20
|
- Lifecycle events
|
|
21
21
|
|
|
22
|
-
- **tool examples:**
|
|
22
|
+
- **[tool examples](https://github.com/openai/openai-agents-python/tree/main/examples/tools):**
|
|
23
23
|
Learn how to implement OAI hosted tools such as web search and file search,
|
|
24
24
|
and integrate them into your agents.
|
|
25
25
|
|
|
26
|
-
- **model providers:**
|
|
26
|
+
- **[model providers](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers):**
|
|
27
27
|
Explore how to use non-OpenAI models with the SDK.
|
|
28
28
|
|
|
29
|
-
- **handoffs:**
|
|
29
|
+
- **[handoffs](https://github.com/openai/openai-agents-python/tree/main/examples/handoffs):**
|
|
30
30
|
See practical examples of agent handoffs.
|
|
31
31
|
|
|
32
|
-
- **
|
|
32
|
+
- **[mcp](https://github.com/openai/openai-agents-python/tree/main/examples/mcp):**
|
|
33
|
+
Learn how to build agents with MCP.
|
|
34
|
+
|
|
35
|
+
- **[customer_service](https://github.com/openai/openai-agents-python/tree/main/examples/customer_service)** and **[research_bot](https://github.com/openai/openai-agents-python/tree/main/examples/research_bot):**
|
|
33
36
|
Two more built-out examples that illustrate real-world applications
|
|
34
|
-
|
|
37
|
+
|
|
35
38
|
- **customer_service**: Example customer service system for an airline.
|
|
36
39
|
- **research_bot**: Simple deep research clone.
|
|
40
|
+
|
|
41
|
+
- **[voice](https://github.com/openai/openai-agents-python/tree/main/examples/voice):**
|
|
42
|
+
See examples of voice agents, using our TTS and STT models.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# エージェント
|
|
2
|
+
|
|
3
|
+
エージェントは、アプリケーションの中核となる基本コンポーネントです。エージェントとは、instructions とツールで構成された大規模言語モデル(LLM)のことです。
|
|
4
|
+
|
|
5
|
+
## 基本設定
|
|
6
|
+
|
|
7
|
+
エージェントで最も一般的に設定するプロパティは以下の通りです。
|
|
8
|
+
|
|
9
|
+
- `instructions`:developer message や システムプロンプト(system prompt)とも呼ばれます。
|
|
10
|
+
- `model`:どの LLM を使用するか、また `model_settings` で temperature や top_p などのモデル調整パラメーターを設定できます。
|
|
11
|
+
- `tools`:エージェントがタスクを達成するために使用できるツールです。
|
|
12
|
+
|
|
13
|
+
```python
|
|
14
|
+
from agents import Agent, ModelSettings, function_tool
|
|
15
|
+
|
|
16
|
+
@function_tool
|
|
17
|
+
def get_weather(city: str) -> str:
|
|
18
|
+
return f"The weather in {city} is sunny"
|
|
19
|
+
|
|
20
|
+
agent = Agent(
|
|
21
|
+
name="Haiku agent",
|
|
22
|
+
instructions="Always respond in haiku form",
|
|
23
|
+
model="o3-mini",
|
|
24
|
+
tools=[get_weather],
|
|
25
|
+
)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## コンテキスト
|
|
29
|
+
|
|
30
|
+
エージェントは `context` 型に対して汎用的です。コンテキストは依存性注入ツールであり、`Runner.run()` に渡すオブジェクトです。これはすべてのエージェント、ツール、ハンドオフなどに渡され、エージェント実行時の依存関係や状態をまとめて管理します。任意の Python オブジェクトを context として指定できます。
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
@dataclass
|
|
34
|
+
class UserContext:
|
|
35
|
+
uid: str
|
|
36
|
+
is_pro_user: bool
|
|
37
|
+
|
|
38
|
+
async def fetch_purchases() -> list[Purchase]:
|
|
39
|
+
return ...
|
|
40
|
+
|
|
41
|
+
agent = Agent[UserContext](
|
|
42
|
+
...,
|
|
43
|
+
)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 出力タイプ
|
|
47
|
+
|
|
48
|
+
デフォルトでは、エージェントはプレーンテキスト(つまり `str`)出力を生成します。特定の型の出力をエージェントに生成させたい場合は、`output_type` パラメーターを使用できます。一般的な選択肢として [Pydantic](https://docs.pydantic.dev/) オブジェクトがありますが、Pydantic の [TypeAdapter](https://docs.pydantic.dev/latest/api/type_adapter/) でラップできる型(dataclasses、リスト、TypedDict など)であればサポートしています。
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
from pydantic import BaseModel
|
|
52
|
+
from agents import Agent
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class CalendarEvent(BaseModel):
|
|
56
|
+
name: str
|
|
57
|
+
date: str
|
|
58
|
+
participants: list[str]
|
|
59
|
+
|
|
60
|
+
agent = Agent(
|
|
61
|
+
name="Calendar extractor",
|
|
62
|
+
instructions="Extract calendar events from text",
|
|
63
|
+
output_type=CalendarEvent,
|
|
64
|
+
)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
!!! note
|
|
68
|
+
|
|
69
|
+
`output_type` を指定すると、モデルは通常のプレーンテキスト応答の代わりに [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を使用するよう指示されます。
|
|
70
|
+
|
|
71
|
+
## ハンドオフ
|
|
72
|
+
|
|
73
|
+
ハンドオフは、エージェントが委任できるサブエージェントです。ハンドオフのリストを指定すると、エージェントは必要に応じてそれらに処理を委任できます。これは、単一タスクに特化したモジュール型のエージェントをオーケストレーションする強力なパターンです。詳細は [handoffs](handoffs.md) ドキュメントをご覧ください。
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
from agents import Agent
|
|
77
|
+
|
|
78
|
+
booking_agent = Agent(...)
|
|
79
|
+
refund_agent = Agent(...)
|
|
80
|
+
|
|
81
|
+
triage_agent = Agent(
|
|
82
|
+
name="Triage agent",
|
|
83
|
+
instructions=(
|
|
84
|
+
"Help the user with their questions."
|
|
85
|
+
"If they ask about booking, handoff to the booking agent."
|
|
86
|
+
"If they ask about refunds, handoff to the refund agent."
|
|
87
|
+
),
|
|
88
|
+
handoffs=[booking_agent, refund_agent],
|
|
89
|
+
)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## 動的 instructions
|
|
93
|
+
|
|
94
|
+
多くの場合、エージェント作成時に instructions を指定できますが、関数を使って動的に instructions を提供することも可能です。この関数はエージェントと context を受け取り、プロンプトを返す必要があります。通常の関数と `async` 関数の両方が利用可能です。
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
def dynamic_instructions(
|
|
98
|
+
context: RunContextWrapper[UserContext], agent: Agent[UserContext]
|
|
99
|
+
) -> str:
|
|
100
|
+
return f"The user's name is {context.context.name}. Help them with their questions."
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
agent = Agent[UserContext](
|
|
104
|
+
name="Triage agent",
|
|
105
|
+
instructions=dynamic_instructions,
|
|
106
|
+
)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## ライフサイクルイベント(フック)
|
|
110
|
+
|
|
111
|
+
エージェントのライフサイクルを監視したい場合があります。たとえば、イベントを記録したり、特定のイベント発生時にデータを事前取得したりしたい場合です。`hooks` プロパティを使ってエージェントのライフサイクルにフックできます。[`AgentHooks`][agents.lifecycle.AgentHooks] クラスをサブクラス化し、関心のあるメソッドをオーバーライドしてください。
|
|
112
|
+
|
|
113
|
+
## ガードレール
|
|
114
|
+
|
|
115
|
+
ガードレールを使うと、エージェントの実行と並行して user 入力のチェックやバリデーションを行えます。たとえば、user の入力が関連性のある内容かどうかをスクリーニングできます。詳細は [guardrails](guardrails.md) ドキュメントをご覧ください。
|
|
116
|
+
|
|
117
|
+
## エージェントのクローン/コピー
|
|
118
|
+
|
|
119
|
+
エージェントの `clone()` メソッドを使うことで、エージェントを複製し、任意のプロパティを変更できます。
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
pirate_agent = Agent(
|
|
123
|
+
name="Pirate",
|
|
124
|
+
instructions="Write like a pirate",
|
|
125
|
+
model="o3-mini",
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
robot_agent = pirate_agent.clone(
|
|
129
|
+
name="Robot",
|
|
130
|
+
instructions="Write like a robot",
|
|
131
|
+
)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## ツール使用の強制
|
|
135
|
+
|
|
136
|
+
ツールのリストを指定しても、必ずしも LLM がツールを使用するとは限りません。[`ModelSettings.tool_choice`][agents.model_settings.ModelSettings.tool_choice] を設定することでツールの使用を強制できます。有効な値は以下の通りです。
|
|
137
|
+
|
|
138
|
+
1. `auto`:LLM がツールを使うかどうかを自動で判断します。
|
|
139
|
+
2. `required`:LLM にツールの使用を必須とします(どのツールを使うかは賢く選択されます)。
|
|
140
|
+
3. `none`:LLM にツールを _使わない_ ことを要求します。
|
|
141
|
+
4. 特定の文字列(例:`my_tool`)を指定すると、その特定のツールの使用を必須とします。
|
|
142
|
+
|
|
143
|
+
!!! note
|
|
144
|
+
|
|
145
|
+
無限ループを防ぐため、フレームワークはツール呼び出し後に自動的に `tool_choice` を "auto" にリセットします。この挙動は [`agent.reset_tool_choice`][agents.agent.Agent.reset_tool_choice] で設定可能です。無限ループは、ツールの execution results が LLM に送信され、`tool_choice` のために再度ツール呼び出しが発生し、これが繰り返されることで発生します。
|
|
146
|
+
|
|
147
|
+
ツール呼び出し後にエージェントを完全に停止させたい場合(auto モードで継続させたくない場合)は、[`Agent.tool_use_behavior="stop_on_first_tool"`] を設定できます。これにより、ツールの出力がそのまま最終応答として使用され、以降の LLM 処理は行われません。
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# SDK の設定
|
|
2
|
+
|
|
3
|
+
## API キーとクライアント
|
|
4
|
+
|
|
5
|
+
デフォルトでは、SDK はインポート時に LLM リクエストやトレーシングのために `OPENAI_API_KEY` 環境変数を探します。アプリの起動前にこの環境変数を設定できない場合は、[set_default_openai_key()][agents.set_default_openai_key] 関数を使ってキーを設定できます。
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
from agents import set_default_openai_key
|
|
9
|
+
|
|
10
|
+
set_default_openai_key("sk-...")
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
また、使用する OpenAI クライアントを設定することも可能です。デフォルトでは、SDK は環境変数または上記で設定したデフォルトキーを使って `AsyncOpenAI` インスタンスを作成します。これを変更したい場合は、[set_default_openai_client()][agents.set_default_openai_client] 関数を利用してください。
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
from openai import AsyncOpenAI
|
|
17
|
+
from agents import set_default_openai_client
|
|
18
|
+
|
|
19
|
+
custom_client = AsyncOpenAI(base_url="...", api_key="...")
|
|
20
|
+
set_default_openai_client(custom_client)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
さらに、使用する OpenAI API をカスタマイズすることもできます。デフォルトでは OpenAI Responses API を使用していますが、[set_default_openai_api()][agents.set_default_openai_api] 関数を使って Chat Completions API を利用するように上書きできます。
|
|
24
|
+
|
|
25
|
+
```python
|
|
26
|
+
from agents import set_default_openai_api
|
|
27
|
+
|
|
28
|
+
set_default_openai_api("chat_completions")
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## トレーシング
|
|
32
|
+
|
|
33
|
+
トレーシングはデフォルトで有効になっています。デフォルトでは、上記のセクションで説明した OpenAI API キー(環境変数または設定したデフォルトキー)を使用します。トレーシング専用の API キーを設定したい場合は、[`set_tracing_export_api_key`][agents.set_tracing_export_api_key] 関数を利用してください。
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
from agents import set_tracing_export_api_key
|
|
37
|
+
|
|
38
|
+
set_tracing_export_api_key("sk-...")
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
また、[`set_tracing_disabled()`][agents.set_tracing_disabled] 関数を使ってトレーシングを完全に無効化することもできます。
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
from agents import set_tracing_disabled
|
|
45
|
+
|
|
46
|
+
set_tracing_disabled(True)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## デバッグログ
|
|
50
|
+
|
|
51
|
+
SDK には、ハンドラーが設定されていない 2 つの Python ロガーがあります。デフォルトでは、警告やエラーは `stdout` に送信されますが、それ以外のログは抑制されます。
|
|
52
|
+
|
|
53
|
+
詳細なログ出力を有効にするには、[`enable_verbose_stdout_logging()`][agents.enable_verbose_stdout_logging] 関数を使用してください。
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
from agents import enable_verbose_stdout_logging
|
|
57
|
+
|
|
58
|
+
enable_verbose_stdout_logging()
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
また、ハンドラーやフィルター、フォーマッターなどを追加してログをカスタマイズすることも可能です。詳細は [Python ロギングガイド](https://docs.python.org/3/howto/logging.html) をご覧ください。
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
import logging
|
|
65
|
+
|
|
66
|
+
logger = logging.getLogger("openai.agents") # or openai.agents.tracing for the Tracing logger
|
|
67
|
+
|
|
68
|
+
# To make all logs show up
|
|
69
|
+
logger.setLevel(logging.DEBUG)
|
|
70
|
+
# To make info and above show up
|
|
71
|
+
logger.setLevel(logging.INFO)
|
|
72
|
+
# To make warning and above show up
|
|
73
|
+
logger.setLevel(logging.WARNING)
|
|
74
|
+
# etc
|
|
75
|
+
|
|
76
|
+
# You can customize this as needed, but this will output to `stderr` by default
|
|
77
|
+
logger.addHandler(logging.StreamHandler())
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### ログ内の機微なデータ
|
|
81
|
+
|
|
82
|
+
一部のログには機微なデータ(たとえば ユーザー データ)が含まれる場合があります。これらのデータのログ出力を無効にしたい場合は、以下の環境変数を設定してください。
|
|
83
|
+
|
|
84
|
+
LLM の入力および出力のログ出力を無効にするには:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
export OPENAI_AGENTS_DONT_LOG_MODEL_DATA=1
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
ツールの入力および出力のログ出力を無効にするには:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
export OPENAI_AGENTS_DONT_LOG_TOOL_DATA=1
|
|
94
|
+
```
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# コンテキスト管理
|
|
2
|
+
|
|
3
|
+
コンテキストは多義的な用語です。主に関心を持つべきコンテキストには、次の 2 つの大きなクラスがあります。
|
|
4
|
+
|
|
5
|
+
1. コード内でローカルに利用可能なコンテキスト:これは、ツール関数の実行時や `on_handoff` のようなコールバック、ライフサイクルフックなどで必要となるデータや依存関係です。
|
|
6
|
+
2. LLM に利用可能なコンテキスト:これは、LLM がレスポンスを生成する際に参照できるデータです。
|
|
7
|
+
|
|
8
|
+
## ローカルコンテキスト
|
|
9
|
+
|
|
10
|
+
これは [`RunContextWrapper`][agents.run_context.RunContextWrapper] クラスおよびその中の [`context`][agents.run_context.RunContextWrapper.context] プロパティによって表現されます。仕組みは以下の通りです。
|
|
11
|
+
|
|
12
|
+
1. 任意の Python オブジェクトを作成します。一般的なパターンとしては、dataclass や Pydantic オブジェクトを使います。
|
|
13
|
+
2. そのオブジェクトを各種 run メソッド(例:`Runner.run(..., **context=whatever**))`)に渡します。
|
|
14
|
+
3. すべてのツール呼び出しやライフサイクルフックなどには、ラッパーオブジェクト `RunContextWrapper[T]` が渡されます。ここで `T` はコンテキストオブジェクトの型を表し、`wrapper.context` からアクセスできます。
|
|
15
|
+
|
|
16
|
+
**最も重要**な注意点:特定のエージェント実行において、すべてのエージェント、ツール関数、ライフサイクルなどは、同じ _型_ のコンテキストを使用する必要があります。
|
|
17
|
+
|
|
18
|
+
コンテキストは以下のような用途で利用できます。
|
|
19
|
+
|
|
20
|
+
- 実行時のコンテキストデータ(例:ユーザー名/uid やユーザーに関するその他の情報など)
|
|
21
|
+
- 依存関係(例:ロガーオブジェクト、データフェッチャーなど)
|
|
22
|
+
- ヘルパー関数
|
|
23
|
+
|
|
24
|
+
!!! danger "注意"
|
|
25
|
+
|
|
26
|
+
コンテキストオブジェクトは **LLM には送信されません**。これは純粋にローカルなオブジェクトであり、読み書きやメソッド呼び出しが可能です。
|
|
27
|
+
|
|
28
|
+
```python
|
|
29
|
+
import asyncio
|
|
30
|
+
from dataclasses import dataclass
|
|
31
|
+
|
|
32
|
+
from agents import Agent, RunContextWrapper, Runner, function_tool
|
|
33
|
+
|
|
34
|
+
@dataclass
|
|
35
|
+
class UserInfo: # (1)!
|
|
36
|
+
name: str
|
|
37
|
+
uid: int
|
|
38
|
+
|
|
39
|
+
@function_tool
|
|
40
|
+
async def fetch_user_age(wrapper: RunContextWrapper[UserInfo]) -> str: # (2)!
|
|
41
|
+
return f"User {wrapper.context.name} is 47 years old"
|
|
42
|
+
|
|
43
|
+
async def main():
|
|
44
|
+
user_info = UserInfo(name="John", uid=123)
|
|
45
|
+
|
|
46
|
+
agent = Agent[UserInfo]( # (3)!
|
|
47
|
+
name="Assistant",
|
|
48
|
+
tools=[fetch_user_age],
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
result = await Runner.run( # (4)!
|
|
52
|
+
starting_agent=agent,
|
|
53
|
+
input="What is the age of the user?",
|
|
54
|
+
context=user_info,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
print(result.final_output) # (5)!
|
|
58
|
+
# The user John is 47 years old.
|
|
59
|
+
|
|
60
|
+
if __name__ == "__main__":
|
|
61
|
+
asyncio.run(main())
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
1. これはコンテキストオブジェクトです。ここでは dataclass を使用していますが、任意の型を利用できます。
|
|
65
|
+
2. これはツールです。`RunContextWrapper[UserInfo]` を受け取っていることが分かります。ツールの実装はコンテキストから値を読み取ります。
|
|
66
|
+
3. エージェントにはジェネリック型 `UserInfo` を指定しています。これにより、型チェッカーがエラーを検出できます(例えば、異なるコンテキスト型を受け取るツールを渡そうとした場合など)。
|
|
67
|
+
4. コンテキストは `run` 関数に渡されます。
|
|
68
|
+
5. エージェントは正しくツールを呼び出し、年齢を取得します。
|
|
69
|
+
|
|
70
|
+
## エージェント/LLM コンテキスト
|
|
71
|
+
|
|
72
|
+
LLM が呼び出される際、**唯一** 参照できるデータは会話履歴からのものです。つまり、LLM に新しいデータを利用させたい場合は、そのデータを履歴に含める必要があります。これを実現する方法はいくつかあります。
|
|
73
|
+
|
|
74
|
+
1. エージェントの `instructions` に追加する。この方法は「システムプロンプト」や「開発者メッセージ」とも呼ばれます。システムプロンプトは静的な文字列でも、コンテキストを受け取って文字列を出力する動的な関数でも構いません。たとえば、ユーザー名や現在の日付など、常に有用な情報に適しています。
|
|
75
|
+
2. `Runner.run` 関数を呼び出す際に `input` に追加する。この方法は `instructions` と似ていますが、[chain of command](https://cdn.openai.com/spec/model-spec-2024-05-08.html#follow-the-chain-of-command) の下位メッセージとして追加できます。
|
|
76
|
+
3. 関数ツールを通じて公開する。この方法は _オンデマンド_ のコンテキストに適しています。LLM が必要なタイミングでツールを呼び出し、データを取得できます。
|
|
77
|
+
4. リトリーバルや Web 検索を利用する。これらはファイルやデータベース(リトリーバル)、または Web(Web 検索)から関連データを取得できる特別なツールです。関連するコンテキストデータに基づいたレスポンスを「グラウンディング」するのに役立ちます。
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# コード例
|
|
2
|
+
|
|
3
|
+
SDK のさまざまなサンプル実装については、[リポジトリ](https://github.com/openai/openai-agents-python/tree/main/examples) のコード例セクションをご覧ください。これらのコード例は、異なるパターンや機能を示すいくつかのカテゴリーに整理されています。
|
|
4
|
+
|
|
5
|
+
## カテゴリー
|
|
6
|
+
|
|
7
|
+
- **[agent_patterns](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns):**
|
|
8
|
+
このカテゴリーのコード例では、よく使われるエージェント設計パターンを紹介しています。
|
|
9
|
+
|
|
10
|
+
- 決定論的なワークフロー
|
|
11
|
+
- ツールとしてのエージェント
|
|
12
|
+
- エージェントの並列実行
|
|
13
|
+
|
|
14
|
+
- **[basic](https://github.com/openai/openai-agents-python/tree/main/examples/basic):**
|
|
15
|
+
これらのコード例では、SDK の基本的な機能を紹介しています。
|
|
16
|
+
|
|
17
|
+
- 動的なシステムプロンプト
|
|
18
|
+
- ストリーミング出力
|
|
19
|
+
- ライフサイクルイベント
|
|
20
|
+
|
|
21
|
+
- **[tool examples](https://github.com/openai/openai-agents-python/tree/main/examples/tools):**
|
|
22
|
+
OpenAI がホストするツール(Web 検索やファイル検索など)の実装方法や、それらをエージェントに統合する方法を学べます。
|
|
23
|
+
|
|
24
|
+
- **[model providers](https://github.com/openai/openai-agents-python/tree/main/examples/model_providers):**
|
|
25
|
+
OpenAI 以外のモデルを SDK で利用する方法を紹介しています。
|
|
26
|
+
|
|
27
|
+
- **[handoffs](https://github.com/openai/openai-agents-python/tree/main/examples/handoffs):**
|
|
28
|
+
エージェントのハンドオフの実践的なコード例をご覧いただけます。
|
|
29
|
+
|
|
30
|
+
- **[mcp](https://github.com/openai/openai-agents-python/tree/main/examples/mcp):**
|
|
31
|
+
Model context protocol (MCP) を使ったエージェントの構築方法を学べます。
|
|
32
|
+
|
|
33
|
+
- **[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):**
|
|
34
|
+
実際のユースケースを示す、より発展的な 2 つのコード例です。
|
|
35
|
+
|
|
36
|
+
- **customer_service**: 航空会社向けカスタマーサービスシステムの例。
|
|
37
|
+
- **research_bot**: シンプルなディープリサーチクローン。
|
|
38
|
+
|
|
39
|
+
- **[voice](https://github.com/openai/openai-agents-python/tree/main/examples/voice):**
|
|
40
|
+
TTS および STT モデルを利用した音声エージェントのコード例をご覧いただけます。
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# ガードレール
|
|
2
|
+
|
|
3
|
+
ガードレールは、エージェントと _並行して_ 実行され、ユーザー入力のチェックやバリデーションを行うことができます。例えば、非常に賢い(そのため遅くて高価な)モデルを使ってカスタマーリクエストに対応するエージェントがあるとします。悪意のあるユーザーがモデルに数学の宿題を手伝わせるようなリクエストを送ることは避けたいでしょう。そこで、ガードレールを高速かつ安価なモデルで実行できます。ガードレールが悪意のある利用を検知した場合、即座にエラーを発生させ、高価なモデルの実行を止めて時間やコストを節約できます。
|
|
4
|
+
|
|
5
|
+
ガードレールには 2 種類あります:
|
|
6
|
+
|
|
7
|
+
1. 入力ガードレール:最初のユーザー入力に対して実行されます
|
|
8
|
+
2. 出力ガードレール:最終的なエージェント出力に対して実行されます
|
|
9
|
+
|
|
10
|
+
## 入力ガードレール
|
|
11
|
+
|
|
12
|
+
入力ガードレールは 3 ステップで実行されます:
|
|
13
|
+
|
|
14
|
+
1. まず、ガードレールはエージェントに渡されたものと同じ入力を受け取ります。
|
|
15
|
+
2. 次に、ガードレール関数が実行され、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を生成し、それが [`InputGuardrailResult`][agents.guardrail.InputGuardrailResult] でラップされます。
|
|
16
|
+
3. 最後に、[`.tripwire_triggered`][agents.guardrail.GuardrailFunctionOutput.tripwire_triggered] が true かどうかを確認します。true の場合、[`InputGuardrailTripwireTriggered`][agents.exceptions.InputGuardrailTripwireTriggered] 例外が発生し、ユーザーへの適切な対応や例外処理が可能です。
|
|
17
|
+
|
|
18
|
+
!!! Note
|
|
19
|
+
|
|
20
|
+
入力ガードレールはユーザー入力に対して実行されることを想定しているため、エージェントのガードレールは *最初* のエージェントでのみ実行されます。「なぜ `guardrails` プロパティがエージェントにあり、`Runner.run` に渡さないのか?」と疑問に思うかもしれません。これは、ガードレールが実際のエージェントに関連することが多いためです。異なるエージェントごとに異なるガードレールを実行するため、コードを同じ場所にまとめておくと可読性が向上します。
|
|
21
|
+
|
|
22
|
+
## 出力ガードレール
|
|
23
|
+
|
|
24
|
+
出力ガードレールも 3 ステップで実行されます:
|
|
25
|
+
|
|
26
|
+
1. まず、ガードレールはエージェントに渡されたものと同じ入力を受け取ります。
|
|
27
|
+
2. 次に、ガードレール関数が実行され、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を生成し、それが [`OutputGuardrailResult`][agents.guardrail.OutputGuardrailResult] でラップされます。
|
|
28
|
+
3. 最後に、[`.tripwire_triggered`][agents.guardrail.GuardrailFunctionOutput.tripwire_triggered] が true かどうかを確認します。true の場合、[`OutputGuardrailTripwireTriggered`][agents.exceptions.OutputGuardrailTripwireTriggered] 例外が発生し、ユーザーへの適切な対応や例外処理が可能です。
|
|
29
|
+
|
|
30
|
+
!!! Note
|
|
31
|
+
|
|
32
|
+
出力ガードレールは最終的なエージェント出力に対して実行されることを想定しているため、エージェントのガードレールは *最後* のエージェントでのみ実行されます。入力ガードレールと同様に、ガードレールが実際のエージェントに関連することが多いため、コードを同じ場所にまとめておくと可読性が向上します。
|
|
33
|
+
|
|
34
|
+
## トリップワイヤー
|
|
35
|
+
|
|
36
|
+
入力または出力がガードレールに失敗した場合、ガードレールはトリップワイヤーでこれを通知できます。トリップワイヤーが発動したガードレールを検知した時点で、即座に `{Input,Output}GuardrailTripwireTriggered` 例外を発生させ、エージェントの実行を停止します。
|
|
37
|
+
|
|
38
|
+
## ガードレールの実装
|
|
39
|
+
|
|
40
|
+
入力を受け取り、[`GuardrailFunctionOutput`][agents.guardrail.GuardrailFunctionOutput] を返す関数を用意する必要があります。この例では、内部でエージェントを実行することでこれを実現します。
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
from pydantic import BaseModel
|
|
44
|
+
from agents import (
|
|
45
|
+
Agent,
|
|
46
|
+
GuardrailFunctionOutput,
|
|
47
|
+
InputGuardrailTripwireTriggered,
|
|
48
|
+
RunContextWrapper,
|
|
49
|
+
Runner,
|
|
50
|
+
TResponseInputItem,
|
|
51
|
+
input_guardrail,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
class MathHomeworkOutput(BaseModel):
|
|
55
|
+
is_math_homework: bool
|
|
56
|
+
reasoning: str
|
|
57
|
+
|
|
58
|
+
guardrail_agent = Agent( # (1)!
|
|
59
|
+
name="Guardrail check",
|
|
60
|
+
instructions="Check if the user is asking you to do their math homework.",
|
|
61
|
+
output_type=MathHomeworkOutput,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@input_guardrail
|
|
66
|
+
async def math_guardrail( # (2)!
|
|
67
|
+
ctx: RunContextWrapper[None], agent: Agent, input: str | list[TResponseInputItem]
|
|
68
|
+
) -> GuardrailFunctionOutput:
|
|
69
|
+
result = await Runner.run(guardrail_agent, input, context=ctx.context)
|
|
70
|
+
|
|
71
|
+
return GuardrailFunctionOutput(
|
|
72
|
+
output_info=result.final_output, # (3)!
|
|
73
|
+
tripwire_triggered=result.final_output.is_math_homework,
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
agent = Agent( # (4)!
|
|
78
|
+
name="Customer support agent",
|
|
79
|
+
instructions="You are a customer support agent. You help customers with their questions.",
|
|
80
|
+
input_guardrails=[math_guardrail],
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
async def main():
|
|
84
|
+
# This should trip the guardrail
|
|
85
|
+
try:
|
|
86
|
+
await Runner.run(agent, "Hello, can you help me solve for x: 2x + 3 = 11?")
|
|
87
|
+
print("Guardrail didn't trip - this is unexpected")
|
|
88
|
+
|
|
89
|
+
except InputGuardrailTripwireTriggered:
|
|
90
|
+
print("Math homework guardrail tripped")
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
1. このエージェントをガードレール関数内で使用します。
|
|
94
|
+
2. これはエージェントの入力やコンテキストを受け取り、結果を返すガードレール関数です。
|
|
95
|
+
3. ガードレールの結果に追加情報を含めることができます。
|
|
96
|
+
4. これはワークフローを定義する実際のエージェントです。
|
|
97
|
+
|
|
98
|
+
出力ガードレールも同様です。
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
from pydantic import BaseModel
|
|
102
|
+
from agents import (
|
|
103
|
+
Agent,
|
|
104
|
+
GuardrailFunctionOutput,
|
|
105
|
+
OutputGuardrailTripwireTriggered,
|
|
106
|
+
RunContextWrapper,
|
|
107
|
+
Runner,
|
|
108
|
+
output_guardrail,
|
|
109
|
+
)
|
|
110
|
+
class MessageOutput(BaseModel): # (1)!
|
|
111
|
+
response: str
|
|
112
|
+
|
|
113
|
+
class MathOutput(BaseModel): # (2)!
|
|
114
|
+
reasoning: str
|
|
115
|
+
is_math: bool
|
|
116
|
+
|
|
117
|
+
guardrail_agent = Agent(
|
|
118
|
+
name="Guardrail check",
|
|
119
|
+
instructions="Check if the output includes any math.",
|
|
120
|
+
output_type=MathOutput,
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
@output_guardrail
|
|
124
|
+
async def math_guardrail( # (3)!
|
|
125
|
+
ctx: RunContextWrapper, agent: Agent, output: MessageOutput
|
|
126
|
+
) -> GuardrailFunctionOutput:
|
|
127
|
+
result = await Runner.run(guardrail_agent, output.response, context=ctx.context)
|
|
128
|
+
|
|
129
|
+
return GuardrailFunctionOutput(
|
|
130
|
+
output_info=result.final_output,
|
|
131
|
+
tripwire_triggered=result.final_output.is_math,
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
agent = Agent( # (4)!
|
|
135
|
+
name="Customer support agent",
|
|
136
|
+
instructions="You are a customer support agent. You help customers with their questions.",
|
|
137
|
+
output_guardrails=[math_guardrail],
|
|
138
|
+
output_type=MessageOutput,
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
async def main():
|
|
142
|
+
# This should trip the guardrail
|
|
143
|
+
try:
|
|
144
|
+
await Runner.run(agent, "Hello, can you help me solve for x: 2x + 3 = 11?")
|
|
145
|
+
print("Guardrail didn't trip - this is unexpected")
|
|
146
|
+
|
|
147
|
+
except OutputGuardrailTripwireTriggered:
|
|
148
|
+
print("Math output guardrail tripped")
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
1. これは実際のエージェントの出力型です。
|
|
152
|
+
2. これはガードレールの出力型です。
|
|
153
|
+
3. これはエージェントの出力を受け取り、結果を返すガードレール関数です。
|
|
154
|
+
4. これはワークフローを定義する実際のエージェントです。
|