{"id":89825,"date":"2026-08-03T22:00:38","date_gmt":"2026-08-03T14:00:38","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/89825.html"},"modified":"2026-08-03T22:00:38","modified_gmt":"2026-08-03T14:00:38","slug":"openai-agents-python-sdk-%e6%ba%90%e7%a0%81%e8%a7%a3%e6%9e%90-%e7%ac%ac%e5%8d%81%e4%ba%8c%e7%af%87%ef%bc%9a%e6%a8%a1%e5%9e%8b%e9%80%82%e9%85%8d%e5%b1%82%ef%bc%9aresponses%e3%80%81chat-completions","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/89825.html","title":{"rendered":"openai-agents-python-sdk \u6e90\u7801\u89e3\u6790 | \u7b2c\u5341\u4e8c\u7bc7\uff1a\u6a21\u578b\u9002\u914d\u5c42\uff1aResponses\u3001Chat Completions \u4e0e\u7b2c\u4e09\u65b9 Provider"},"content":{"rendered":"<h2><\/h2>\n<h3>\u672c\u7bc7\u5bfc\u8bfb<\/h3>\n<p>\u524d\u5341\u4e00\u7bc7\u5df2\u7ecf\u628a Agents SDK \u7684\u8fd0\u884c\u4e3b\u7ebf\u62c6\u5f00\u4e86&#xff1a;<\/p>\n<li>Agent \u5b9a\u4e49\u89d2\u8272\u3001\u5de5\u5177\u3001handoffs \u548c\u8f93\u51fa\u7c7b\u578b\u3002<\/li>\n<li>Runner \u63a8\u8fdb\u4e00\u6b21 run\u3002<\/li>\n<li>Function Tool \u628a Python \u51fd\u6570\u66b4\u9732\u7ed9\u6a21\u578b\u3002<\/li>\n<li>Handoff \u548c Agent-as-tool \u7ec4\u7ec7\u591a Agent \u5de5\u4f5c\u6d41\u3002<\/li>\n<li>Streaming \u628a\u8fd0\u884c\u8fc7\u7a0b\u53d8\u6210\u4e8b\u4ef6\u6d41\u3002<\/li>\n<li>Sessions \u4fdd\u5b58\u591a\u8f6e\u5386\u53f2\u3002<\/li>\n<li>Guardrails \u63a7\u5236\u8f93\u5165\u3001\u8f93\u51fa\u548c\u5de5\u5177\u8fb9\u754c\u3002<\/li>\n<li>Tracing \u8bb0\u5f55\u4e00\u6b21 run \u7684\u53ef\u89c2\u6d4b\u94fe\u8def\u3002<\/li>\n<p>\u8fd9\u4e9b\u673a\u5236\u6700\u7ec8\u90fd\u8981\u843d\u5230\u4e00\u4e2a\u6838\u5fc3\u52a8\u4f5c\u4e0a&#xff1a;<\/p>\n<p>\u8c03\u7528\u6a21\u578b&#xff0c;\u62ff\u5230\u6a21\u578b\u54cd\u5e94&#xff0c;\u518d\u628a\u6a21\u578b\u54cd\u5e94\u5f52\u4e00\u5316\u6210 SDK \u80fd\u5904\u7406\u7684 items\u3002<\/p>\n<p>\u8fd9\u5c31\u662f\u6a21\u578b\u9002\u914d\u5c42\u7684\u804c\u8d23\u3002<\/p>\n<p>\u672c\u7bc7\u91cd\u70b9\u56de\u7b54\u4e94\u4e2a\u95ee\u9898&#xff1a;<\/p>\n<li>SDK \u5982\u4f55\u62bd\u8c61 Model \u548c ModelProvider\u3002<\/li>\n<li>Runner \u5982\u4f55\u51b3\u5b9a\u4e00\u6b21 run \u7528\u54ea\u4e2a\u6a21\u578b\u3002<\/li>\n<li>OpenAI Responses \u548c Chat Completions \u4e24\u6761\u8def\u5f84\u6709\u4ec0\u4e48\u5dee\u5f02\u3002<\/li>\n<li>ModelSettings \u5982\u4f55\u5408\u5e76\u3001\u8f6c\u6362\u548c\u4e0b\u53d1\u3002<\/li>\n<li>LiteLLM\u3001Any-LLM\u3001OpenAI-compatible endpoint \u5982\u4f55\u63a5\u5165\u3002<\/li>\n<h3>\u5148\u7ed9\u7ed3\u8bba&#xff1a;Runner \u4e0d\u5173\u5fc3\u5177\u4f53 Provider<\/h3>\n<p>Agents SDK \u7684\u6838\u5fc3 run loop \u4e0d\u76f4\u63a5\u4f9d\u8d56 OpenAI Responses\u3001Chat Completions\u3001LiteLLM \u6216 Any-LLM \u7684\u8bf7\u6c42\u7ed3\u6784\u3002<\/p>\n<p>\u5b83\u4f9d\u8d56\u7684\u662f\u7edf\u4e00\u63a5\u53e3&#xff1a;<\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Model<\/span><span class=\"token punctuation\">(<\/span>abc<span class=\"token punctuation\">.<\/span>ABC<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">async<\/span> <span class=\"token keyword\">def<\/span> <span class=\"token function\">get_response<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> ModelResponse<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">stream_response<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> AsyncIterator<span class=\"token punctuation\">[<\/span>TResponseStreamEvent<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><\/p>\n<p>\u4e5f\u5c31\u662f\u8bf4&#xff0c;run loop \u53ea\u9700\u8981&#xff1a;<\/p>\n<li>\u628a\u672c\u8f6e\u8f93\u5165\u3001\u5de5\u5177\u3001handoffs\u3001\u8f93\u51fa schema\u3001model settings \u4ea4\u7ed9 Model\u3002<\/li>\n<li>\u62ff\u56de\u7edf\u4e00\u7684 ModelResponse \u6216\u7edf\u4e00\u7684 Responses \u98ce\u683c stream events\u3002<\/li>\n<li>\u7ee7\u7eed\u6267\u884c\u5de5\u5177\u3001handoff\u3001\u8f93\u51fa\u6821\u9a8c\u548c\u4e0b\u4e00\u8f6e\u3002<\/li>\n<p>\u771f\u6b63\u77e5\u9053\u201c\u600e\u4e48\u8c03\u7528\u67d0\u4e2a\u540e\u7aef\u201d\u7684&#xff0c;\u662f model adapter&#xff1a;<\/p>\n<table>\n<tr>Adapter\u8d1f\u8d23\u4ec0\u4e48<\/tr>\n<tbody>\n<tr>\n<td>OpenAIResponsesModel<\/td>\n<td>\u8c03\u7528 OpenAI Responses API<\/td>\n<\/tr>\n<tr>\n<td>OpenAIResponsesWSModel<\/td>\n<td>\u901a\u8fc7 WebSocket \u8c03\u7528 OpenAI Responses API<\/td>\n<\/tr>\n<tr>\n<td>OpenAIChatCompletionsModel<\/td>\n<td>\u8c03\u7528 Chat Completions API&#xff0c;\u5e76\u505a\u683c\u5f0f\u8f6c\u6362<\/td>\n<\/tr>\n<tr>\n<td>LitellmModel<\/td>\n<td>\u901a\u8fc7 LiteLLM \u8c03\u7528\u7b2c\u4e09\u65b9 provider<\/td>\n<\/tr>\n<tr>\n<td>AnyLLMModel<\/td>\n<td>\u901a\u8fc7 any-llm \u8c03\u7528 Responses \u6216 Chat Completions \u98ce\u683c provider<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u56e0\u6b64&#xff0c;\u6a21\u578b\u9002\u914d\u5c42\u7684\u6838\u5fc3\u8bbe\u8ba1\u662f&#xff1a;<\/p>\n<p>Runner \u53ea\u770b Model \u62bd\u8c61&#xff1b;<br \/>\nProvider \u8d1f\u8d23\u628a\u540d\u5b57\u89e3\u6790\u6210 Model&#xff1b;<br \/>\nAdapter \u8d1f\u8d23 provider-specific \u8bf7\u6c42\u3001\u80fd\u529b\u6821\u9a8c\u3001\u9519\u8bef\u548c usage \u5f52\u4e00\u5316\u3002<\/p>\n<h3>\u7b2c\u5341\u4e8c\u7bc7\u5173\u6ce8\u7684\u6e90\u7801\u5165\u53e3<\/h3>\n<p>\u672c\u7bc7\u4e3b\u8981\u6d89\u53ca\u8fd9\u4e9b\u6587\u4ef6&#xff1a;<\/p>\n<table>\n<tr>\u6587\u4ef6\u4f5c\u7528<\/tr>\n<tbody>\n<tr>\n<td>src\/agents\/models\/interface.py<\/td>\n<td>Model\u3001ModelProvider\u3001ModelTracing \u62bd\u8c61<\/td>\n<\/tr>\n<tr>\n<td>src\/agents\/models\/openai_provider.py<\/td>\n<td>OpenAI \u9ed8\u8ba4 provider<\/td>\n<\/tr>\n<tr>\n<td>src\/agents\/models\/multi_provider.py<\/td>\n<td>\u524d\u7f00\u8def\u7531 provider<\/td>\n<\/tr>\n<tr>\n<td>src\/agents\/models\/openai_responses.py<\/td>\n<td>OpenAI Responses adapter<\/td>\n<\/tr>\n<tr>\n<td>src\/agents\/models\/openai_chatcompletions.py<\/td>\n<td>Chat Completions adapter<\/td>\n<\/tr>\n<tr>\n<td>src\/agents\/models\/chatcmpl_converter.py<\/td>\n<td>Responses items \u4e0e Chat messages \u8f6c\u6362<\/td>\n<\/tr>\n<tr>\n<td>src\/agents\/model_settings.py<\/td>\n<td>ModelSettings \u5b9a\u4e49\u548c\u5408\u5e76\u903b\u8f91<\/td>\n<\/tr>\n<tr>\n<td>src\/agents\/models\/default_models.py<\/td>\n<td>\u9ed8\u8ba4\u6a21\u578b\u548c\u9ed8\u8ba4 settings<\/td>\n<\/tr>\n<tr>\n<td>src\/agents\/run_internal\/turn_preparation.py<\/td>\n<td>run loop \u89e3\u6790\u6a21\u578b\u548c settings<\/td>\n<\/tr>\n<tr>\n<td>src\/agents\/run_internal\/run_loop.py<\/td>\n<td>\u8c03\u7528 model.get_response() \/ stream_response()<\/td>\n<\/tr>\n<tr>\n<td>src\/agents\/run_internal\/model_retry.py<\/td>\n<td>runner-managed retry<\/td>\n<\/tr>\n<tr>\n<td>src\/agents\/extensions\/models\/litellm_model.py<\/td>\n<td>LiteLLM adapter<\/td>\n<\/tr>\n<tr>\n<td>src\/agents\/extensions\/models\/any_llm_model.py<\/td>\n<td>Any-LLM adapter<\/td>\n<\/tr>\n<tr>\n<td>docs\/models\/index.md<\/td>\n<td>\u6a21\u578b\u914d\u7f6e\u6587\u6863<\/td>\n<\/tr>\n<tr>\n<td>examples\/model_providers<\/td>\n<td>\u7b2c\u4e09\u65b9 provider \u793a\u4f8b<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5efa\u8bae\u9605\u8bfb\u987a\u5e8f&#xff1a;<\/p>\n<li>\u5148\u8bfb interface.py&#xff0c;\u7406\u89e3 SDK \u5bf9\u6a21\u578b\u7684\u6700\u4f4e\u8981\u6c42\u3002<\/li>\n<li>\u518d\u8bfb turn_preparation.py&#xff0c;\u770b Runner \u5982\u4f55\u89e3\u6790\u6a21\u578b\u3002<\/li>\n<li>\u7136\u540e\u8bfb openai_provider.py&#xff0c;\u770b\u9ed8\u8ba4 provider \u5982\u4f55\u9009\u62e9 Responses \u6216 Chat Completions\u3002<\/li>\n<li>\u6700\u540e\u5bf9\u6bd4 openai_responses.py \u4e0e openai_chatcompletions.py\u3002<\/li>\n<h3>ModelTracing&#xff1a;\u6a21\u578b\u8c03\u7528\u7684 trace \u5f00\u5173<\/h3>\n<p>ModelTracing \u662f\u6a21\u578b adapter \u63a5\u6536\u7684 tracing \u914d\u7f6e&#xff1a;<\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ModelTracing<\/span><span class=\"token punctuation\">(<\/span>enum<span class=\"token punctuation\">.<\/span>Enum<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    DISABLED <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><br \/>\n    ENABLED <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1<\/span><br \/>\n    ENABLED_WITHOUT_DATA <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">2<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">is_disabled<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token builtin\">bool<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> self <span class=\"token operator\">&#061;&#061;<\/span> ModelTracing<span class=\"token punctuation\">.<\/span>DISABLED<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">include_data<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token builtin\">bool<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> self <span class=\"token operator\">&#061;&#061;<\/span> ModelTracing<span class=\"token punctuation\">.<\/span>ENABLED<\/p>\n<p>\u5b83\u6765\u81ea RunConfig&#xff1a;<\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">get_model_tracing_impl<\/span><span class=\"token punctuation\">(<\/span><br \/>\n    tracing_disabled<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">bool<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    trace_include_sensitive_data<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">bool<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> ModelTracing<span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> tracing_disabled<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> ModelTracing<span class=\"token punctuation\">.<\/span>DISABLED<br \/>\n    <span class=\"token keyword\">if<\/span> trace_include_sensitive_data<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> ModelTracing<span class=\"token punctuation\">.<\/span>ENABLED<br \/>\n    <span class=\"token keyword\">return<\/span> ModelTracing<span class=\"token punctuation\">.<\/span>ENABLED_WITHOUT_DATA<\/p>\n<p>\u542b\u4e49\u5f88\u660e\u786e&#xff1a;<\/p>\n<table>\n<tr>\u914d\u7f6e\u884c\u4e3a<\/tr>\n<tbody>\n<tr>\n<td>tracing_disabled&#061;True<\/td>\n<td>\u6a21\u578b span \u7981\u7528<\/td>\n<\/tr>\n<tr>\n<td>trace_include_sensitive_data&#061;True<\/td>\n<td>span \u8bb0\u5f55\u8f93\u5165\u8f93\u51fa<\/td>\n<\/tr>\n<tr>\n<td>trace_include_sensitive_data&#061;False<\/td>\n<td>span \u5b58\u5728&#xff0c;\u4f46\u4e0d\u8bb0\u5f55\u8f93\u5165\u8f93\u51fa<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u8fd9\u5c31\u662f\u7b2c\u5341\u4e00\u7bc7\u63d0\u5230\u7684\u654f\u611f\u6570\u636e\u8fb9\u754c\u5728\u6a21\u578b\u5c42\u7684\u843d\u70b9\u3002<\/p>\n<h3>Model \u63a5\u53e3<\/h3>\n<p>Model \u662f\u6240\u6709\u6a21\u578b adapter \u7684\u516c\u5171\u63a5\u53e3&#xff1a;<\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Model<\/span><span class=\"token punctuation\">(<\/span>abc<span class=\"token punctuation\">.<\/span>ABC<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">async<\/span> <span class=\"token keyword\">def<\/span> <span class=\"token function\">get_response<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        self<span class=\"token punctuation\">,<\/span><br \/>\n        system_instructions<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token builtin\">input<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        model_settings<span class=\"token punctuation\">,<\/span><br \/>\n        tools<span class=\"token punctuation\">,<\/span><br \/>\n        output_schema<span class=\"token punctuation\">,<\/span><br \/>\n        handoffs<span class=\"token punctuation\">,<\/span><br \/>\n        tracing<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token operator\">*<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        previous_response_id<span class=\"token punctuation\">,<\/span><br \/>\n        conversation_id<span class=\"token punctuation\">,<\/span><br \/>\n        prompt<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> ModelResponse<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><\/p>\n<p>stream_response(&#8230;) \u53c2\u6570\u51e0\u4e4e\u76f8\u540c&#xff0c;\u53ea\u662f\u8fd4\u56de\u5f02\u6b65\u4e8b\u4ef6\u6d41&#xff1a;<\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">stream_response<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> AsyncIterator<span class=\"token punctuation\">[<\/span>TResponseStreamEvent<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><\/p>\n<p>\u6ce8\u610f\u51e0\u4e2a\u8bbe\u8ba1\u70b9&#xff1a;<\/p>\n<li>input \u4f7f\u7528 Responses \u98ce\u683c\u7684 SDK canonical items\u3002<\/li>\n<li>tools \u662f SDK \u7edf\u4e00\u7684 Tool \u5bf9\u8c61\u3002<\/li>\n<li>handoffs \u4e5f\u4ea4\u7ed9 model adapter \u8f6c\u6362\u6210\u6a21\u578b\u53ef\u89c1\u5de5\u5177\u3002<\/li>\n<li>output_schema \u7531 adapter \u8f6c\u6362\u4e3a provider \u652f\u6301\u7684\u7ed3\u6784\u5316\u8f93\u51fa\u914d\u7f6e\u3002<\/li>\n<li>previous_response_id\u3001conversation_id\u3001prompt \u662f Responses \u7279\u6027&#xff0c;\u4f46\u63a5\u53e3\u7edf\u4e00\u66b4\u9732\u3002<\/li>\n<p>\u8fd9\u610f\u5473\u7740 Chat Completions adapter \u4e5f\u4f1a\u6536\u5230\u8fd9\u4e9b\u53c2\u6570&#xff0c;\u4f46\u5b83\u4e0d\u4e00\u5b9a\u652f\u6301\u3002<\/p>\n<p>\u5b83\u7684\u5904\u7406\u7b56\u7565\u662f&#xff1a;<\/p>\n<li>\u9ed8\u8ba4\u517c\u5bb9\u6a21\u5f0f\u4e0b\u8bb0\u5f55 warning \u5e76\u5ffd\u7565\u4e0d\u652f\u6301\u7684\u7279\u6027\u3002<\/li>\n<li>strict_feature_validation&#061;True \u65f6\u76f4\u63a5\u629b UserError\u3002<\/li>\n<h3>ModelProvider \u63a5\u53e3<\/h3>\n<p>ModelProvider \u53ea\u505a\u4e00\u4ef6\u4e8b&#xff1a;\u628a\u6a21\u578b\u540d\u89e3\u6790\u6210 Model \u5b9e\u4f8b\u3002<\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ModelProvider<\/span><span class=\"token punctuation\">(<\/span>abc<span class=\"token punctuation\">.<\/span>ABC<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token decorator annotation punctuation\">&#064;abc<span class=\"token punctuation\">.<\/span>abstractmethod<\/span><br \/>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">get_model<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> model_name<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">|<\/span> <span class=\"token boolean\">None<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> Model<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><\/p>\n<p>    <span class=\"token keyword\">async<\/span> <span class=\"token keyword\">def<\/span> <span class=\"token function\">aclose<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token boolean\">None<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">None<\/span><\/p>\n<p>\u8fd9\u4e2a\u63a5\u53e3\u7684\u8fb9\u754c\u5f88\u91cd\u8981&#xff1a;<\/p>\n<li>Model \u8d1f\u8d23\u4e00\u6b21\u5177\u4f53\u6a21\u578b\u8c03\u7528\u3002<\/li>\n<li>ModelProvider \u8d1f\u8d23\u6a21\u578b\u540d\u89e3\u6790\u3001\u7f13\u5b58\u3001\u8fde\u63a5\u590d\u7528\u548c\u8d44\u6e90\u5173\u95ed\u3002<\/li>\n<p>\u4f8b\u5982 OpenAI WebSocket Responses \u6a21\u578b\u53ef\u80fd\u6301\u6709\u6301\u4e45\u8fde\u63a5&#xff0c;\u6240\u4ee5 OpenAIProvider.aclose() \u8981\u5173\u95ed\u7f13\u5b58\u7684 websocket model\u3002<\/p>\n<p>\u666e\u901a HTTP Responses model \u4e0d\u9700\u8981\u5728 provider \u91cc\u7f13\u5b58\u5b9e\u4f8b\u3002<\/p>\n<h3>Runner \u5982\u4f55\u9009\u62e9\u6a21\u578b<\/h3>\n<p>turn_preparation.py \u4e2d\u7684 get_model(&#8230;) \u662f\u6a21\u578b\u89e3\u6790\u5165\u53e3&#xff1a;<\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">get_model<\/span><span class=\"token punctuation\">(<\/span>agent<span class=\"token punctuation\">:<\/span> Agent<span class=\"token punctuation\">[<\/span>Any<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> run_config<span class=\"token punctuation\">:<\/span> RunConfig<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> Model<span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">isinstance<\/span><span class=\"token punctuation\">(<\/span>run_config<span class=\"token punctuation\">.<\/span>model<span class=\"token punctuation\">,<\/span> Model<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> run_config<span class=\"token punctuation\">.<\/span>model<br \/>\n    <span class=\"token keyword\">elif<\/span> <span class=\"token builtin\">isinstance<\/span><span class=\"token punctuation\">(<\/span>run_config<span class=\"token punctuation\">.<\/span>model<span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> run_config<span class=\"token punctuation\">.<\/span>model_provider<span class=\"token punctuation\">.<\/span>get_model<span class=\"token punctuation\">(<\/span>run_config<span class=\"token punctuation\">.<\/span>model<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">elif<\/span> <span class=\"token builtin\">isinstance<\/span><span class=\"token punctuation\">(<\/span>agent<span class=\"token punctuation\">.<\/span>model<span class=\"token punctuation\">,<\/span> Model<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> agent<span class=\"token punctuation\">.<\/span>model<\/p>\n<p>    <span class=\"token keyword\">return<\/span> run_config<span class=\"token punctuation\">.<\/span>model_provider<span class=\"token punctuation\">.<\/span>get_model<span class=\"token punctuation\">(<\/span>agent<span class=\"token punctuation\">.<\/span>model<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u4f18\u5148\u7ea7\u662f&#xff1a;<\/p>\n<table>\n<tr>\u4f18\u5148\u7ea7\u6765\u6e90<\/tr>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>RunConfig.model \u662f\u5177\u4f53 Model \u5b9e\u4f8b<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>RunConfig.model \u662f\u5b57\u7b26\u4e32&#xff0c;\u901a\u8fc7 RunConfig.model_provider \u89e3\u6790<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>Agent.model \u662f\u5177\u4f53 Model \u5b9e\u4f8b<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>Agent.model \u662f\u5b57\u7b26\u4e32\u6216 None&#xff0c;\u901a\u8fc7 RunConfig.model_provider \u89e3\u6790<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u8fd9\u8bf4\u660e RunConfig.model \u53ef\u4ee5\u8986\u76d6 Agent \u81ea\u5df1\u7684\u6a21\u578b\u3002<\/p>\n<p>\u4f8b\u5982&#xff1a;<\/p>\n<p>agent <span class=\"token operator\">&#061;<\/span> Agent<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Assistant&#034;<\/span><span class=\"token punctuation\">,<\/span> model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;gpt-5.4-mini&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>result <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">await<\/span> Runner<span class=\"token punctuation\">.<\/span>run<span class=\"token punctuation\">(<\/span><br \/>\n    agent<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;\u4f60\u597d&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    run_config<span class=\"token operator\">&#061;<\/span>RunConfig<span class=\"token punctuation\">(<\/span>model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;gpt-5.6-sol&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u672c\u6b21 run \u5b9e\u9645\u4f7f\u7528 gpt-5.6-sol\u3002<\/p>\n<h3>ModelSettings \u5982\u4f55\u89e3\u6790<\/h3>\n<p>\u6a21\u578b settings \u4e0d\u662f\u7b80\u5355\u62ff Agent \u4e0a\u7684\u914d\u7f6e\u3002<\/p>\n<p>\u6e90\u7801\u4e2d\u6709\u4e00\u5c42\u9ed8\u8ba4 settings \u5bf9\u9f50\u903b\u8f91&#xff1a;<\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">get_model_settings<\/span><span class=\"token punctuation\">(<\/span>agent<span class=\"token punctuation\">:<\/span> Agent<span class=\"token punctuation\">[<\/span>Any<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> run_config<span class=\"token punctuation\">:<\/span> RunConfig<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> ModelSettings<span class=\"token punctuation\">:<\/span><br \/>\n    model_settings <span class=\"token operator\">&#061;<\/span> agent<span class=\"token punctuation\">.<\/span>model_settings<br \/>\n    <span class=\"token keyword\">if<\/span> model_settings <span class=\"token operator\">&#061;&#061;<\/span> _implicit_model_settings_for_agent<span class=\"token punctuation\">(<\/span>agent<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        model_settings <span class=\"token operator\">&#061;<\/span> _model_settings_for_resolved_name<span class=\"token punctuation\">(<\/span>agent<span class=\"token punctuation\">,<\/span> run_config<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> model_settings<span class=\"token punctuation\">.<\/span>resolve<span class=\"token punctuation\">(<\/span>run_config<span class=\"token punctuation\">.<\/span>model_settings<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u542b\u4e49\u662f&#xff1a;<\/p>\n<li>\u5982\u679c Agent \u4f7f\u7528\u7684\u662f\u9690\u5f0f\u9ed8\u8ba4 settings&#xff0c;\u4e14 run-level model \u8986\u76d6\u4e86\u6a21\u578b\u540d&#xff0c;\u9ed8\u8ba4 settings \u8981\u8ddf\u7740\u65b0\u7684\u6a21\u578b\u540d\u91cd\u65b0\u8ba1\u7b97\u3002<\/li>\n<li>\u5982\u679c Agent \u660e\u786e\u8bbe\u7f6e\u8fc7 ModelSettings&#xff0c;\u5219\u4fdd\u6301\u7528\u6237\u663e\u5f0f\u914d\u7f6e\u3002<\/li>\n<li>\u6700\u540e\u7528 run_config.model_settings \u8986\u76d6 Agent settings\u3002<\/li>\n<p>ModelSettings.resolve(&#8230;) \u7684\u8986\u76d6\u89c4\u5219\u662f&#xff1a;<\/p>\n<p>changes <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    field<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">getattr<\/span><span class=\"token punctuation\">(<\/span>override<span class=\"token punctuation\">,<\/span> field<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> field <span class=\"token keyword\">in<\/span> fields<span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">getattr<\/span><span class=\"token punctuation\">(<\/span>override<span class=\"token punctuation\">,<\/span> field<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">is<\/span> <span class=\"token keyword\">not<\/span> <span class=\"token boolean\">None<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u5373\u975e None \u5b57\u6bb5\u8986\u76d6\u3002<\/p>\n<p>\u4e24\u4e2a\u7279\u6b8a\u5408\u5e76&#xff1a;<\/p>\n<li>extra_args \u4f1a\u5408\u5e76 dict&#xff0c;\u800c\u4e0d\u662f\u6574\u4f53\u66ff\u6362\u3002<\/li>\n<li>retry \u4f1a\u6df1\u5ea6\u5408\u5e76 backoff \u7b49\u5b57\u6bb5\u3002<\/li>\n<h3>\u9ed8\u8ba4\u6a21\u578b\u548c\u9ed8\u8ba4 Settings<\/h3>\n<p>\u5f53\u524d\u6e90\u7801\u4e2d\u9ed8\u8ba4\u6a21\u578b\u6765\u81ea&#xff1a;<\/p>\n<p>OPENAI_DEFAULT_MODEL_ENV_VARIABLE_NAME <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;OPENAI_DEFAULT_MODEL&#034;<\/span><\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">get_default_model<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> os<span class=\"token punctuation\">.<\/span>getenv<span class=\"token punctuation\">(<\/span>OPENAI_DEFAULT_MODEL_ENV_VARIABLE_NAME<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;gpt-5.4-mini&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>lower<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u9ed8\u8ba4\u662f&#xff1a;<\/p>\n<p>gpt-5.4-mini<\/p>\n<p>GPT-5 \u7cfb\u5217\u4f1a\u6709\u9ed8\u8ba4 ModelSettings&#xff1a;<\/p>\n<p>_GPT_5_NONE_DEFAULT_MODEL_SETTINGS <span class=\"token operator\">&#061;<\/span> ModelSettings<span class=\"token punctuation\">(<\/span><br \/>\n    reasoning<span class=\"token operator\">&#061;<\/span>Reasoning<span class=\"token punctuation\">(<\/span>effort<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;none&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    verbosity<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;low&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u4f8b\u5982 gpt-5.4-mini \u9ed8\u8ba4\u662f&#xff1a;<\/p>\n<p>ModelSettings<span class=\"token punctuation\">(<\/span><br \/>\n    reasoning<span class=\"token operator\">&#061;<\/span>Reasoning<span class=\"token punctuation\">(<\/span>effort<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;none&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    verbosity<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;low&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u975e GPT-5 \u6a21\u578b\u9ed8\u8ba4\u662f\u7a7a ModelSettings()\u3002<\/p>\n<p>\u8fd9\u89e3\u91ca\u4e86\u4e00\u4e2a\u5e38\u89c1\u73b0\u8c61&#xff1a;<\/p>\n<p>Agent<span class=\"token punctuation\">(<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;A&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u4e0d\u4f20\u6a21\u578b\u65f6&#xff0c;\u5e76\u4e0d\u662f\u5b8c\u5168\u6ca1\u6709\u6a21\u578b\u914d\u7f6e\u3002\u9ed8\u8ba4\u6a21\u578b\u5982\u679c\u662f GPT-5 \u7cfb\u5217&#xff0c;SDK \u4f1a\u7ed9\u5b83\u8865\u4e00\u7ec4\u4f4e\u5ef6\u8fdf\u9ed8\u8ba4 settings\u3002<\/p>\n<h3>OpenAIProvider&#xff1a;\u9ed8\u8ba4\u6a21\u578b Provider<\/h3>\n<p>OpenAIProvider \u662f\u9ed8\u8ba4 provider\u3002<\/p>\n<p>\u5b83\u7684\u6784\u9020\u53c2\u6570\u5305\u62ec&#xff1a;<\/p>\n<p>OpenAIProvider<span class=\"token punctuation\">(<\/span><br \/>\n    api_key<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    base_url<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    websocket_base_url<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    openai_client<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    organization<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    project<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    use_responses<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    use_responses_websocket<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    strict_feature_validation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    responses_websocket_options<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    buffer_streamed_tool_calls<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u51e0\u4e2a\u5173\u952e\u70b9&#xff1a;<\/p>\n<li>\u5982\u679c\u4f20\u5165 openai_client&#xff0c;\u4e0d\u80fd\u518d\u4f20 api_key\u3001base_url\u3001websocket_base_url\u3002<\/li>\n<li>\u5982\u679c\u6ca1\u6709\u4f20 client&#xff0c;\u4f1a\u61d2\u52a0\u8f7d AsyncOpenAI\u3002<\/li>\n<li>HTTP client \u662f\u5171\u4eab\u7684&#xff0c;\u907f\u514d\u6bcf\u6b21\u8bf7\u6c42\u65b0\u5efa\u8fde\u63a5\u6c60\u3002<\/li>\n<li>\u9ed8\u8ba4\u4f7f\u7528 Responses API\u3002<\/li>\n<li>\u53ef\u4ee5\u5207\u6362\u5230 Chat Completions\u3002<\/li>\n<li>Responses \u8fd8\u53ef\u4ee5\u5207\u6362 HTTP \u6216 websocket transport\u3002<\/li>\n<p>\u9ed8\u8ba4 client \u89e3\u6790&#xff1a;<\/p>\n<p>self<span class=\"token punctuation\">.<\/span>_client <span class=\"token operator\">&#061;<\/span> _openai_shared<span class=\"token punctuation\">.<\/span>get_default_openai_client<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> AsyncOpenAI<span class=\"token punctuation\">(<\/span><br \/>\n    api_key<span class=\"token operator\">&#061;<\/span>self<span class=\"token punctuation\">.<\/span>_stored_api_key <span class=\"token keyword\">or<\/span> _openai_shared<span class=\"token punctuation\">.<\/span>get_default_openai_key<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    base_url<span class=\"token operator\">&#061;<\/span>self<span class=\"token punctuation\">.<\/span>_stored_base_url <span class=\"token keyword\">or<\/span> os<span class=\"token punctuation\">.<\/span>getenv<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;OPENAI_BASE_URL&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    websocket_base_url<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>_stored_websocket_base_url <span class=\"token keyword\">or<\/span> os<span class=\"token punctuation\">.<\/span>getenv<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;OPENAI_WEBSOCKET_BASE_URL&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    http_client<span class=\"token operator\">&#061;<\/span>shared_http_client<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u8fd9\u8bf4\u660e\u4f60\u53ef\u4ee5\u7528\u73af\u5883\u53d8\u91cf\u6216\u4ee3\u7801\u5168\u5c40\u914d\u7f6e OpenAI client\u3002<\/p>\n<h3>\u5207\u6362\u9ed8\u8ba4 OpenAI API<\/h3>\n<p>\u9ed8\u8ba4\u662f Responses&#xff1a;<\/p>\n<p>set_default_openai_api<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;responses&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u4e5f\u53ef\u4ee5\u5207\u6362\u4e3a Chat Completions&#xff1a;<\/p>\n<p><span class=\"token keyword\">from<\/span> agents <span class=\"token keyword\">import<\/span> set_default_openai_api<\/p>\n<p>set_default_openai_api<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;chat_completions&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u5207\u6362\u540e&#xff0c;OpenAIProvider().get_model(&#034;&#8230;&#034;) \u4f1a\u8fd4\u56de\u4e0d\u540c adapter&#xff1a;<\/p>\n<table>\n<tr>\u914d\u7f6e\u8fd4\u56de<\/tr>\n<tbody>\n<tr>\n<td>Responses HTTP<\/td>\n<td>OpenAIResponsesModel<\/td>\n<\/tr>\n<tr>\n<td>Responses WebSocket<\/td>\n<td>OpenAIResponsesWSModel<\/td>\n<\/tr>\n<tr>\n<td>Chat Completions<\/td>\n<td>OpenAIChatCompletionsModel<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5982\u679c\u53ea\u60f3\u672c\u6b21 run \u4f7f\u7528 Chat Completions&#xff0c;\u66f4\u63a8\u8350\u76f4\u63a5\u4f20 provider&#xff1a;<\/p>\n<p>provider <span class=\"token operator\">&#061;<\/span> OpenAIProvider<span class=\"token punctuation\">(<\/span>use_responses<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>result <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">await<\/span> Runner<span class=\"token punctuation\">.<\/span>run<span class=\"token punctuation\">(<\/span><br \/>\n    agent<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;\u4f60\u597d&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    run_config<span class=\"token operator\">&#061;<\/span>RunConfig<span class=\"token punctuation\">(<\/span>model_provider<span class=\"token operator\">&#061;<\/span>provider<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u8fd9\u6837\u4e0d\u4f1a\u5f71\u54cd\u8fdb\u7a0b\u5185\u5176\u4ed6 run\u3002<\/p>\n<h3>OpenAI Responses Model<\/h3>\n<p>OpenAIResponsesModel \u7684\u975e\u6d41\u5f0f\u8c03\u7528\u662f&#xff1a;<\/p>\n<p><span class=\"token keyword\">with<\/span> response_span<span class=\"token punctuation\">(<\/span>disabled<span class=\"token operator\">&#061;<\/span>tracing<span class=\"token punctuation\">.<\/span>is_disabled<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> span_response<span class=\"token punctuation\">:<\/span><br \/>\n    response <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">await<\/span> self<span class=\"token punctuation\">.<\/span>_fetch_response<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u5b83\u6700\u7ec8\u8c03\u7528&#xff1a;<\/p>\n<p>response <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">await<\/span> client<span class=\"token punctuation\">.<\/span>responses<span class=\"token punctuation\">.<\/span>create<span class=\"token punctuation\">(<\/span><span class=\"token operator\">**<\/span>create_kwargs<span class=\"token punctuation\">)<\/span><\/p>\n<p>_build_response_create_kwargs(&#8230;) \u8d1f\u8d23\u6784\u9020 Responses \u8bf7\u6c42\u3002<\/p>\n<p>\u6838\u5fc3\u5b57\u6bb5\u5305\u62ec&#xff1a;<\/p>\n<p>create_kwargs <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token string\">&#034;previous_response_id&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;conversation&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;instructions&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;model&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;input&#034;<\/span><span class=\"token punctuation\">:<\/span> list_input<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;include&#034;<\/span><span class=\"token punctuation\">:<\/span> include<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;tools&#034;<\/span><span class=\"token punctuation\">:<\/span> tools_param<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;prompt&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;temperature&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;top_p&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;truncation&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;max_output_tokens&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;tool_choice&#034;<\/span><span class=\"token punctuation\">:<\/span> tool_choice_param<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;parallel_tool_calls&#034;<\/span><span class=\"token punctuation\">:<\/span> parallel_tool_calls<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;text&#034;<\/span><span class=\"token punctuation\">:<\/span> response_format<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;store&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;prompt_cache_options&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;reasoning&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;metadata&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;context_management&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u8fd9\u6761\u8def\u5f84\u5929\u7136\u652f\u6301 Responses \u7684\u80fd\u529b&#xff1a;<\/p>\n<li>previous_response_id<\/li>\n<li>conversation<\/li>\n<li>prompt<\/li>\n<li>Responses tool surfaces<\/li>\n<li>hosted tools<\/li>\n<li>response include<\/li>\n<li>context management<\/li>\n<li>Responses structured output<\/li>\n<li>Responses streaming terminal events<\/li>\n<p>\u6240\u4ee5 OpenAI-only \u5e94\u7528\u9ed8\u8ba4\u63a8\u8350\u8d70 Responses\u3002<\/p>\n<h3>Responses \u5de5\u5177\u8f6c\u6362<\/h3>\n<p>Responses adapter \u4f1a\u628a SDK tools \u548c handoffs \u8f6c\u6210 Responses \u5de5\u5177\u53c2\u6570\u3002<\/p>\n<p>converted_tools <span class=\"token operator\">&#061;<\/span> Converter<span class=\"token punctuation\">.<\/span>convert_tools<span class=\"token punctuation\">(<\/span><br \/>\n    tools<span class=\"token punctuation\">,<\/span><br \/>\n    handoffs<span class=\"token punctuation\">,<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span>effective_computer_tool_model<span class=\"token punctuation\">,<\/span><br \/>\n    tool_choice<span class=\"token operator\">&#061;<\/span>model_settings<span class=\"token punctuation\">.<\/span>tool_choice<span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>Converter.convert_tool_choice(&#8230;) \u652f\u6301\u7684\u9009\u62e9\u5305\u62ec&#xff1a;<\/p>\n<li>auto<\/li>\n<li>required<\/li>\n<li>none<\/li>\n<li>function tool name<\/li>\n<li>file_search<\/li>\n<li>web_search<\/li>\n<li>computer<\/li>\n<li>image_generation<\/li>\n<li>code_interpreter<\/li>\n<li>mcp<\/li>\n<li>MCPToolChoice<\/li>\n<p>\u540c\u65f6\u5b83\u4f1a\u6821\u9a8c\u4e0d\u5408\u6cd5\u7ec4\u5408\u3002\u4f8b\u5982 deferred-loading function tools \u6ca1\u6709 ToolSearchTool() \u65f6&#xff0c;tool_choice&#061;&#034;required&#034; \u53ef\u80fd\u4f1a\u88ab\u62d2\u7edd\u3002<\/p>\n<p>\u8fd9\u7c7b\u6821\u9a8c\u653e\u5728 adapter \u5c42\u662f\u5408\u7406\u7684&#xff1a;\u53ea\u6709 adapter \u77e5\u9053\u76ee\u6807 API \u652f\u6301\u4ec0\u4e48\u3002<\/p>\n<h3>Responses \u8f93\u51fa\u683c\u5f0f<\/h3>\n<p>\u7ed3\u6784\u5316\u8f93\u51fa\u901a\u8fc7 text \u5b57\u6bb5\u4f20\u7ed9 Responses API&#xff1a;<\/p>\n<p><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token string\">&#034;format&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;json_schema&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#034;name&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;final_output&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#034;schema&#034;<\/span><span class=\"token punctuation\">:<\/span> output_schema<span class=\"token punctuation\">.<\/span>json_schema<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#034;strict&#034;<\/span><span class=\"token punctuation\">:<\/span> output_schema<span class=\"token punctuation\">.<\/span>is_strict_json_schema<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u5982\u679c\u6ca1\u6709\u7ed3\u6784\u5316\u8f93\u51fa&#xff0c;\u8fd4\u56de omit\u3002<\/p>\n<p>\u5982\u679c\u8bbe\u7f6e\u4e86 ModelSettings.verbosity&#xff0c;adapter \u4f1a\u628a\u5b83\u653e\u5230 response format \u76f8\u5173\u7ed3\u6784\u4e2d&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> model_settings<span class=\"token punctuation\">.<\/span>verbosity <span class=\"token keyword\">is<\/span> <span class=\"token keyword\">not<\/span> <span class=\"token boolean\">None<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> response_format <span class=\"token keyword\">is<\/span> <span class=\"token keyword\">not<\/span> omit<span class=\"token punctuation\">:<\/span><br \/>\n        response_format<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;verbosity&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> model_settings<span class=\"token punctuation\">.<\/span>verbosity<br \/>\n    <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        response_format <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;verbosity&#034;<\/span><span class=\"token punctuation\">:<\/span> model_settings<span class=\"token punctuation\">.<\/span>verbosity<span class=\"token punctuation\">}<\/span><\/p>\n<p>\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48 ModelSettings \u4e0d\u662f\u7b80\u5355\u7167\u642c\u5230 API \u53c2\u6570&#xff0c;\u800c\u662f\u9700\u8981 adapter \u9010\u9879\u89e3\u91ca\u3002<\/p>\n<h3>OpenAI Chat Completions Model<\/h3>\n<p>Chat Completions adapter \u7684\u6838\u5fc3\u5de5\u4f5c\u662f\u8f6c\u6362\u3002<\/p>\n<p>SDK \u5185\u90e8\u8f93\u5165\u662f Responses \u98ce\u683c items&#xff0c;\u4f46 Chat Completions API \u8981\u7684\u662f messages&#xff1a;<\/p>\n<p>converted_messages <span class=\"token operator\">&#061;<\/span> Converter<span class=\"token punctuation\">.<\/span>items_to_messages<span class=\"token punctuation\">(<\/span><br \/>\n    <span class=\"token builtin\">input<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span>self<span class=\"token punctuation\">.<\/span>model<span class=\"token punctuation\">,<\/span><br \/>\n    base_url<span class=\"token operator\">&#061;<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">.<\/span>_client<span class=\"token punctuation\">.<\/span>base_url<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    strict_feature_validation<span class=\"token operator\">&#061;<\/span>self<span class=\"token punctuation\">.<\/span>_strict_feature_validation<span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u5982\u679c\u6709 system instructions&#xff0c;\u4f1a\u63d2\u5230 messages \u5f00\u5934&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> system_instructions<span class=\"token punctuation\">:<\/span><br \/>\n    converted_messages<span class=\"token punctuation\">.<\/span>insert<span class=\"token punctuation\">(<\/span><br \/>\n        <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;content&#034;<\/span><span class=\"token punctuation\">:<\/span> system_instructions<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;role&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">&#034;system&#034;<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p>\u6700\u7ec8\u8c03\u7528&#xff1a;<\/p>\n<p>ret <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">await<\/span> self<span class=\"token punctuation\">.<\/span>_get_client<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>chat<span class=\"token punctuation\">.<\/span>completions<span class=\"token punctuation\">.<\/span>create<span class=\"token punctuation\">(<\/span><span class=\"token operator\">**<\/span>create_kwargs<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u6838\u5fc3\u5b57\u6bb5\u5305\u62ec&#xff1a;<\/p>\n<p>create_kwargs <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token string\">&#034;model&#034;<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>model<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;messages&#034;<\/span><span class=\"token punctuation\">:<\/span> converted_messages<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;tools&#034;<\/span><span class=\"token punctuation\">:<\/span> tools_param<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;temperature&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;top_p&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;frequency_penalty&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;presence_penalty&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;max_tokens&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;tool_choice&#034;<\/span><span class=\"token punctuation\">:<\/span> tool_choice<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;response_format&#034;<\/span><span class=\"token punctuation\">:<\/span> response_format<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;parallel_tool_calls&#034;<\/span><span class=\"token punctuation\">:<\/span> parallel_tool_calls<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;stream&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;stream_options&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;store&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;reasoning_effort&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;verbosity&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;top_logprobs&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>Chat Completions \u8def\u5f84\u4f1a\u628a\u8fd4\u56de\u7684 ChatCompletionMessage \u518d\u8f6c\u6362\u56de Responses \u98ce\u683c output items&#xff1a;<\/p>\n<p>items <span class=\"token operator\">&#061;<\/span> Converter<span class=\"token punctuation\">.<\/span>message_to_output_items<span class=\"token punctuation\">(<\/span>message<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u8fd9\u4fdd\u8bc1 run loop \u540e\u7eed\u4ecd\u7136\u5904\u7406\u7edf\u4e00\u7684 SDK item\u3002<\/p>\n<h3>Chat Completions \u4e0d\u652f\u6301\u7684\u80fd\u529b<\/h3>\n<p>Chat Completions adapter \u4f1a\u6536\u5230\u63a5\u53e3\u4e2d\u7684 Responses-only \u53c2\u6570&#xff0c;\u4f8b\u5982&#xff1a;<\/p>\n<li>previous_response_id<\/li>\n<li>conversation_id<\/li>\n<li>prompt<\/li>\n<li>reasoning.mode<\/li>\n<li>reasoning.context<\/li>\n<li>\u4e00\u4e9b Responses-only tool surface<\/li>\n<p>\u9ed8\u8ba4\u517c\u5bb9\u6a21\u5f0f\u4e0b&#xff0c;\u5b83\u4f1a warning \u5e76\u5ffd\u7565\u3002<\/p>\n<p>\u5982\u679c\u542f\u7528 strict validation&#xff1a;<\/p>\n<p>provider <span class=\"token operator\">&#061;<\/span> OpenAIProvider<span class=\"token punctuation\">(<\/span><br \/>\n    use_responses<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    strict_feature_validation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u8fd9\u4e9b\u4e0d\u5339\u914d\u4f1a\u53d8\u6210 UserError\u3002<\/p>\n<p>\u5f00\u53d1\u671f\u5efa\u8bae\u6253\u5f00 strict validation&#xff0c;\u907f\u514d\u67d0\u4e9b\u5b57\u6bb5\u88ab\u9759\u9ed8\u964d\u7ea7\u3002<\/p>\n<p>\u751f\u4ea7\u671f\u662f\u5426\u6253\u5f00&#xff0c;\u8981\u770b\u4f60\u662f\u5426\u4f9d\u8d56\u517c\u5bb9\u8001 provider \u7684\u5bb9\u5fcd\u884c\u4e3a\u3002<\/p>\n<h3>Responses \u4e0e Chat Completions \u5bf9\u6bd4<\/h3>\n<table>\n<tr>\u7ef4\u5ea6ResponsesChat Completions<\/tr>\n<tbody>\n<tr>\n<td>SDK \u9ed8\u8ba4\u63a8\u8350<\/td>\n<td>\u662f<\/td>\n<td>\u5426<\/td>\n<\/tr>\n<tr>\n<td>OpenAI hosted tools<\/td>\n<td>\u652f\u6301\u66f4\u591a<\/td>\n<td>\u652f\u6301\u6709\u9650<\/td>\n<\/tr>\n<tr>\n<td>previous_response_id<\/td>\n<td>\u652f\u6301<\/td>\n<td>\u4e0d\u652f\u6301<\/td>\n<\/tr>\n<tr>\n<td>conversation_id<\/td>\n<td>\u652f\u6301<\/td>\n<td>\u4e0d\u652f\u6301<\/td>\n<\/tr>\n<tr>\n<td>prompt-managed request<\/td>\n<td>\u652f\u6301<\/td>\n<td>\u4e0d\u652f\u6301<\/td>\n<\/tr>\n<tr>\n<td>Responses tool search<\/td>\n<td>\u652f\u6301<\/td>\n<td>\u4e0d\u652f\u6301<\/td>\n<\/tr>\n<tr>\n<td>\u8f93\u5165\u683c\u5f0f<\/td>\n<td>Responses items<\/td>\n<td>chat messages<\/td>\n<\/tr>\n<tr>\n<td>SDK \u8f6c\u6362\u6210\u672c<\/td>\n<td>\u4f4e<\/td>\n<td>\u9ad8<\/td>\n<\/tr>\n<tr>\n<td>\u7b2c\u4e09\u65b9 provider \u517c\u5bb9\u6027<\/td>\n<td>\u53d6\u51b3\u4e8e provider<\/td>\n<td>\u901a\u5e38\u66f4\u597d<\/td>\n<\/tr>\n<tr>\n<td>stream terminal \u8bed\u4e49<\/td>\n<td>\u539f\u751f Responses events<\/td>\n<td>\u9700\u8981\u8f6c\u6362\u6210 Responses \u98ce\u683c events<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5b9e\u7528\u5efa\u8bae&#xff1a;<\/p>\n<li>OpenAI-only \u65b0\u9879\u76ee\u4f18\u5148 Responses\u3002<\/li>\n<li>OpenAI-compatible \u7b2c\u4e09\u65b9 provider \u901a\u5e38\u5148\u8bd5 Chat Completions\u3002<\/li>\n<li>\u5982\u679c\u4f9d\u8d56 server-managed conversation\u3001Responses hosted tools\u3001tool search&#xff0c;\u7528 Responses\u3002<\/li>\n<li>\u5982\u679c\u5fc5\u987b\u6df7\u7528\u4e24\u79cd adapter&#xff0c;\u9010\u9879\u9a8c\u8bc1\u5de5\u5177\u3001\u7ed3\u6784\u5316\u8f93\u51fa\u3001streaming \u548c retry \u884c\u4e3a\u3002<\/li>\n<h3>Streaming \u7ec8\u6b62\u8bed\u4e49<\/h3>\n<p>Responses stream \u7684\u7ec8\u6b62\u4e8b\u4ef6\u4e0d\u662f\u7b80\u5355\u7684\u201c\u6d41\u7ed3\u675f\u5c31\u6210\u529f\u201d\u3002<\/p>\n<p>Responses adapter \u4f1a\u68c0\u67e5&#xff1a;<\/p>\n<li>response.completed<\/li>\n<li>response.failed<\/li>\n<li>response.incomplete<\/li>\n<li>error<\/li>\n<li>response.error<\/li>\n<p>\u5982\u679c\u6536\u5230 failed \u6216 incomplete terminal&#xff0c;\u4f1a\u8f6c\u6362\u6210 ModelBehaviorError\u3002<\/p>\n<p>Chat Completions stream \u5219\u9700\u8981 ChatCmplStreamHandler \u628a chat chunks \u8f6c\u6362\u6210 Responses \u98ce\u683c events\u3002<\/p>\n<p>\u8fd9\u4e5f\u662f adapter \u5c42\u7684\u804c\u8d23&#xff1a;\u4e0d\u540c provider \u7684 stream \u534f\u8bae\u4e0d\u540c&#xff0c;\u4f46 run loop \u53ea\u6d88\u8d39\u7edf\u4e00\u7684 TResponseStreamEvent\u3002<\/p>\n<h3>ModelResponse&#xff1a;\u7edf\u4e00\u8fd4\u56de\u503c<\/h3>\n<p>\u65e0\u8bba\u5e95\u5c42\u662f Responses \u8fd8\u662f Chat Completions&#xff0c;\u6700\u7ec8\u90fd\u8981\u8fd4\u56de&#xff1a;<\/p>\n<p>ModelResponse<span class=\"token punctuation\">(<\/span><br \/>\n    output<span class=\"token operator\">&#061;<\/span>response<span class=\"token punctuation\">.<\/span>output<span class=\"token punctuation\">,<\/span><br \/>\n    usage<span class=\"token operator\">&#061;<\/span>usage<span class=\"token punctuation\">,<\/span><br \/>\n    response_id<span class=\"token operator\">&#061;<\/span>response<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    request_id<span class=\"token operator\">&#061;<\/span><span class=\"token builtin\">getattr<\/span><span class=\"token punctuation\">(<\/span>response<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;_request_id&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">None<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u6216\u7531 Chat Completions \u8f6c\u6362\u540e\u7684&#xff1a;<\/p>\n<p>ModelResponse<span class=\"token punctuation\">(<\/span><br \/>\n    output<span class=\"token operator\">&#061;<\/span>items<span class=\"token punctuation\">,<\/span><br \/>\n    usage<span class=\"token operator\">&#061;<\/span>usage<span class=\"token punctuation\">,<\/span><br \/>\n    response_id<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>output \u662f SDK \u540e\u7eed\u5904\u7406\u7684\u5173\u952e&#xff1a;<\/p>\n<li>message output \u8fdb\u5165\u6700\u7ec8\u8f93\u51fa\u5224\u65ad\u3002<\/li>\n<li>function call \u8fdb\u5165\u5de5\u5177\u6267\u884c\u3002<\/li>\n<li>handoff tool call \u8fdb\u5165 Agent \u5207\u6362\u3002<\/li>\n<li>reasoning item \u8fdb\u5165\u5386\u53f2\u548c\u8ffd\u8e2a\u3002<\/li>\n<p>\u53ea\u8981 adapter \u5f52\u4e00\u5316\u6b63\u786e&#xff0c;run loop \u4e0d\u9700\u8981\u77e5\u9053\u5e95\u5c42 provider\u3002<\/p>\n<h3>ModelSettings \u5230\u8bf7\u6c42\u53c2\u6570\u7684\u6620\u5c04<\/h3>\n<p>ModelSettings \u662f SDK \u7edf\u4e00\u6a21\u578b\u914d\u7f6e&#xff1a;<\/p>\n<table>\n<tr>\u5b57\u6bb5\u5e38\u89c1\u7528\u9014<\/tr>\n<tbody>\n<tr>\n<td>temperature<\/td>\n<td>\u91c7\u6837\u6e29\u5ea6<\/td>\n<\/tr>\n<tr>\n<td>top_p<\/td>\n<td>nucleus sampling<\/td>\n<\/tr>\n<tr>\n<td>frequency_penalty<\/td>\n<td>\u9891\u7387\u60e9\u7f5a<\/td>\n<\/tr>\n<tr>\n<td>presence_penalty<\/td>\n<td>\u5b58\u5728\u60e9\u7f5a<\/td>\n<\/tr>\n<tr>\n<td>tool_choice<\/td>\n<td>\u5de5\u5177\u9009\u62e9<\/td>\n<\/tr>\n<tr>\n<td>parallel_tool_calls<\/td>\n<td>\u662f\u5426\u5141\u8bb8\u5e76\u884c\u5de5\u5177\u8c03\u7528<\/td>\n<\/tr>\n<tr>\n<td>truncation<\/td>\n<td>Responses \u622a\u65ad\u7b56\u7565<\/td>\n<\/tr>\n<tr>\n<td>max_tokens<\/td>\n<td>\u6700\u5927\u8f93\u51fa token<\/td>\n<\/tr>\n<tr>\n<td>reasoning<\/td>\n<td>\u63a8\u7406\u6a21\u578b\u914d\u7f6e<\/td>\n<\/tr>\n<tr>\n<td>verbosity<\/td>\n<td>\u8f93\u51fa\u8be6\u7565<\/td>\n<\/tr>\n<tr>\n<td>metadata<\/td>\n<td>provider metadata<\/td>\n<\/tr>\n<tr>\n<td>store<\/td>\n<td>\u662f\u5426\u670d\u52a1\u7aef\u5b58\u50a8\u54cd\u5e94<\/td>\n<\/tr>\n<tr>\n<td>response_include<\/td>\n<td>Responses include<\/td>\n<\/tr>\n<tr>\n<td>top_logprobs<\/td>\n<td>top token logprobs<\/td>\n<\/tr>\n<tr>\n<td>retry<\/td>\n<td>runner-managed retry<\/td>\n<\/tr>\n<tr>\n<td>context_management<\/td>\n<td>Responses context management<\/td>\n<\/tr>\n<tr>\n<td>prompt_cache_options<\/td>\n<td>prompt cache \u914d\u7f6e<\/td>\n<\/tr>\n<tr>\n<td>extra_args<\/td>\n<td>\u76f4\u63a5\u4f20\u7ed9 provider \u7684\u989d\u5916\u53c2\u6570<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4f46\u4e0d\u662f\u6bcf\u4e2a adapter \u90fd\u652f\u6301\u6240\u6709\u5b57\u6bb5\u3002<\/p>\n<p>\u4f8b\u5982&#xff1a;<\/p>\n<li>Responses \u4f7f\u7528 max_output_tokens\u3002<\/li>\n<li>Chat Completions \u4f7f\u7528 max_tokens\u3002<\/li>\n<li>Responses \u4f7f\u7528 text \u8868\u793a\u7ed3\u6784\u5316\u8f93\u51fa\u3002<\/li>\n<li>Chat Completions \u4f7f\u7528 response_format\u3002<\/li>\n<li>Chat Completions \u53ea\u4f7f\u7528 reasoning.effort&#xff0c;\u4e0d\u652f\u6301 reasoning.mode \u548c reasoning.context\u3002<\/li>\n<p>\u6240\u4ee5 ModelSettings \u662f\u7edf\u4e00\u5165\u53e3&#xff0c;\u4e0d\u662f\u7edf\u4e00 wire format\u3002<\/p>\n<h3>extra_args \u7684\u91cd\u590d\u952e\u4fdd\u62a4<\/h3>\n<p>\u4e24\u4e2a OpenAI adapter \u90fd\u4f1a\u68c0\u67e5 extra_args \u4e0e\u663e\u5f0f\u53c2\u6570\u662f\u5426\u91cd\u590d\u3002<\/p>\n<p>\u4f8b\u5982 Responses&#xff1a;<\/p>\n<p>duplicate_extra_arg_keys <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">sorted<\/span><span class=\"token punctuation\">(<\/span><br \/>\n    k<br \/>\n    <span class=\"token keyword\">for<\/span> k <span class=\"token keyword\">in<\/span> extra_args<br \/>\n    <span class=\"token keyword\">if<\/span> k <span class=\"token keyword\">in<\/span> create_kwargs <span class=\"token keyword\">and<\/span> <span class=\"token keyword\">not<\/span> _is_openai_omitted_value<span class=\"token punctuation\">(<\/span>create_kwargs<span class=\"token punctuation\">[<\/span>k<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u5982\u679c\u91cd\u590d&#xff0c;\u4f1a\u629b&#xff1a;<\/p>\n<p>responses.create() got multiple values for keyword argument &#039;&#8230;&#039;<\/p>\n<p>\u8fd9\u53ef\u4ee5\u907f\u514d\u540c\u4e00\u4e2a\u5b57\u6bb5\u65e2\u901a\u8fc7 ModelSettings.temperature \u4f20&#xff0c;\u53c8\u901a\u8fc7 extra_args&#061;{&#034;temperature&#034;: &#8230;} \u4f20&#xff0c;\u9020\u6210\u884c\u4e3a\u4e0d\u786e\u5b9a\u3002<\/p>\n<p>\u5efa\u8bae&#xff1a;<\/p>\n<li>SDK \u5df2\u6709\u5b57\u6bb5&#xff0c;\u4f18\u5148\u7528 ModelSettings \u76f4\u63a5\u5b57\u6bb5\u3002<\/li>\n<li>SDK \u6682\u672a\u66b4\u9732\u7684\u65b0 provider \u53c2\u6570&#xff0c;\u518d\u7528 extra_args\u3002<\/li>\n<li>\u4e0d\u8981\u540c\u65f6\u4f7f\u7528\u4e24\u6761\u8def\u5f84\u4f20\u540c\u4e00\u4e2a\u53c2\u6570\u3002<\/li>\n<h3>Runner-managed Retry<\/h3>\n<p>\u6a21\u578b\u91cd\u8bd5\u4e0d\u662f\u9ed8\u8ba4\u5f00\u542f\u7684\u3002<\/p>\n<p>\u9700\u8981\u663e\u5f0f\u8bbe\u7f6e&#xff1a;<\/p>\n<p><span class=\"token keyword\">from<\/span> agents <span class=\"token keyword\">import<\/span> ModelRetrySettings<span class=\"token punctuation\">,<\/span> ModelSettings<span class=\"token punctuation\">,<\/span> retry_policies<\/p>\n<p>model_settings <span class=\"token operator\">&#061;<\/span> ModelSettings<span class=\"token punctuation\">(<\/span><br \/>\n    retry<span class=\"token operator\">&#061;<\/span>ModelRetrySettings<span class=\"token punctuation\">(<\/span><br \/>\n        max_retries<span class=\"token operator\">&#061;<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        policy<span class=\"token operator\">&#061;<\/span>retry_policies<span class=\"token punctuation\">.<\/span>network_error<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>run loop \u8c03\u7528\u6a21\u578b\u65f6\u4f1a\u5305\u4e00\u5c42&#xff1a;<\/p>\n<p>new_response <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">await<\/span> get_response_with_retry<span class=\"token punctuation\">(<\/span><br \/>\n    get_response<span class=\"token operator\">&#061;<\/span><span class=\"token keyword\">lambda<\/span><span class=\"token punctuation\">:<\/span> model<span class=\"token punctuation\">.<\/span>get_response<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    rewind<span class=\"token operator\">&#061;<\/span>rewind_model_request<span class=\"token punctuation\">,<\/span><br \/>\n    retry_settings<span class=\"token operator\">&#061;<\/span>model_settings<span class=\"token punctuation\">.<\/span>retry<span class=\"token punctuation\">,<\/span><br \/>\n    get_retry_advice<span class=\"token operator\">&#061;<\/span>model<span class=\"token punctuation\">.<\/span>get_retry_advice<span class=\"token punctuation\">,<\/span><br \/>\n    previous_response_id<span class=\"token operator\">&#061;<\/span>previous_response_id<span class=\"token punctuation\">,<\/span><br \/>\n    conversation_id<span class=\"token operator\">&#061;<\/span>conversation_id<span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u91cd\u8bd5\u9700\u8981\u8003\u8651 replay safety\u3002<\/p>\n<p>\u7279\u522b\u662f&#xff1a;<\/p>\n<li>\u4f7f\u7528 previous_response_id\u3002<\/li>\n<li>\u4f7f\u7528 conversation_id\u3002<\/li>\n<li>\u6d41\u5f0f\u54cd\u5e94\u5df2\u7ecf\u5f00\u59cb\u8f93\u51fa\u3002<\/li>\n<li>\u53ef\u80fd\u5df2\u7ecf\u53d1\u751f\u5de5\u5177\u526f\u4f5c\u7528\u3002<\/li>\n<p>\u8fd9\u4e9b\u573a\u666f\u4e0d\u80fd\u7b80\u5355\u6309 HTTP 500 \u6216\u7f51\u7edc\u9519\u8bef\u91cd\u653e\u3002<\/p>\n<p>Adapter \u53ef\u4ee5\u901a\u8fc7 get_retry_advice(&#8230;) \u63d0\u4f9b provider-specific \u5efa\u8bae\u3002OpenAI\u3001LiteLLM\u3001Any-LLM adapter \u90fd\u4f1a\u590d\u7528 OpenAI \u98ce\u683c retry advice \u63d0\u53d6\u903b\u8f91\u3002<\/p>\n<h3>Provider-managed retry \u4e0e Runner retry<\/h3>\n<p>OpenAI SDK\u3001LiteLLM\u3001any-llm \u81ea\u8eab\u4e5f\u53ef\u80fd\u6709\u91cd\u8bd5\u673a\u5236\u3002<\/p>\n<p>Runner-managed retry \u5728\u91cd\u653e\u65f6\u4f1a\u901a\u8fc7 contextvar \u7981\u7528 provider-managed retries&#xff1a;<\/p>\n<p>provider_managed_retries_disabled<span class=\"token punctuation\">(<\/span>disabled<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>adapter \u91cc\u4f1a\u68c0\u67e5&#xff1a;<\/p>\n<p><span class=\"token keyword\">if<\/span> should_disable_provider_managed_retries<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> client<span class=\"token punctuation\">.<\/span>with_options<span class=\"token punctuation\">(<\/span>max_retries<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u8fd9\u6837\u907f\u514d\u4e24\u5c42 retry \u53e0\u52a0&#xff0c;\u5bfc\u81f4\u8bf7\u6c42\u6b21\u6570\u96be\u4ee5\u63a7\u5236\u3002<\/p>\n<p>\u6587\u7ae0\u91cc\u7684\u5b9e\u8df5\u5efa\u8bae\u662f&#xff1a;\u5982\u679c\u4f60\u9700\u8981\u53ef\u89e3\u91ca\u3001\u53ef\u5ba1\u8ba1\u7684\u91cd\u8bd5\u7b56\u7565&#xff0c;\u4f18\u5148\u4f7f\u7528 runner-managed retry&#xff0c;\u5e76\u660e\u786e policy\u3002<\/p>\n<h3>MultiProvider&#xff1a;\u57fa\u4e8e\u524d\u7f00\u7684\u8def\u7531<\/h3>\n<p>MultiProvider \u662f\u9ed8\u8ba4 RunConfig.model_provider\u3002<\/p>\n<p>\u5b83\u652f\u6301\u6309\u6a21\u578b\u540d\u524d\u7f00\u8def\u7531&#xff1a;<\/p>\n<table>\n<tr>\u6a21\u578b\u540d\u9ed8\u8ba4\u8def\u7531<\/tr>\n<tbody>\n<tr>\n<td>gpt-5.4-mini<\/td>\n<td>OpenAI provider<\/td>\n<\/tr>\n<tr>\n<td>openai\/gpt-4.1<\/td>\n<td>OpenAI provider&#xff0c;\u9ed8\u8ba4\u53bb\u6389 openai\/<\/td>\n<\/tr>\n<tr>\n<td>litellm\/openrouter\/openai\/gpt-5.4-mini<\/td>\n<td>LitellmProvider<\/td>\n<\/tr>\n<tr>\n<td>any-llm\/openrouter\/openai\/gpt-5.4-mini<\/td>\n<td>AnyLLMProvider<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6e90\u7801\u4e2d\u9ed8\u8ba4\u8bf4\u660e&#xff1a;<\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">MultiProvider<\/span><span class=\"token punctuation\">(<\/span>ModelProvider<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;Maps model based on prefix.&#034;&#034;&#034;<\/span><\/p>\n<p>\u5982\u679c\u9047\u5230\u672a\u77e5\u524d\u7f00&#xff0c;\u9ed8\u8ba4\u629b UserError\u3002<\/p>\n<p>\u5982\u679c\u4f60\u4f7f\u7528 OpenAI-compatible endpoint&#xff0c;\u5e76\u4e14\u540e\u7aef\u671f\u671b\u5b8c\u6574 namespaced model id&#xff0c;\u53ef\u4ee5\u914d\u7f6e&#xff1a;<\/p>\n<p>provider <span class=\"token operator\">&#061;<\/span> MultiProvider<span class=\"token punctuation\">(<\/span><br \/>\n    openai_base_url<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;https:\/\/openrouter.ai\/api\/v1&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    openai_api_key<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;&#8230;&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    openai_prefix_mode<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;model_id&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    unknown_prefix_mode<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;model_id&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u8fd9\u6837 openai\/gpt-4.1 \u4e0d\u4f1a\u88ab\u5f53\u6210 OpenAI alias \u53bb\u6389\u524d\u7f00\u3002<\/p>\n<h3>OpenAI-compatible endpoint<\/h3>\n<p>\u6700\u5c0f\u63a5\u5165\u65b9\u5f0f\u662f\u81ea\u5b9a\u4e49 AsyncOpenAI&#xff1a;<\/p>\n<p><span class=\"token keyword\">from<\/span> openai <span class=\"token keyword\">import<\/span> AsyncOpenAI<br \/>\n<span class=\"token keyword\">from<\/span> agents <span class=\"token keyword\">import<\/span> OpenAIChatCompletionsModel<\/p>\n<p>client <span class=\"token operator\">&#061;<\/span> AsyncOpenAI<span class=\"token punctuation\">(<\/span><br \/>\n    api_key<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;provider_api_key&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    base_url<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;https:\/\/provider.example.com\/v1&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>model <span class=\"token operator\">&#061;<\/span> OpenAIChatCompletionsModel<span class=\"token punctuation\">(<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;provider-model-name&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    openai_client<span class=\"token operator\">&#061;<\/span>client<span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u7136\u540e\u653e\u5230 Agent&#xff1a;<\/p>\n<p>agent <span class=\"token operator\">&#061;<\/span> Agent<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Assistant&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    instructions<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4f60\u662f\u4e00\u4e2a\u7b80\u6d01\u52a9\u624b\u3002&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span>model<span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u5982\u679c\u8981\u6309 run \u751f\u6548&#xff0c;\u53ef\u4ee5\u5199 ModelProvider&#xff1a;<\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">CustomModelProvider<\/span><span class=\"token punctuation\">(<\/span>ModelProvider<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">get_model<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> model_name<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">|<\/span> <span class=\"token boolean\">None<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> Model<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> OpenAIChatCompletionsModel<span class=\"token punctuation\">(<\/span><br \/>\n            model<span class=\"token operator\">&#061;<\/span>model_name <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;provider-model-name&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            openai_client<span class=\"token operator\">&#061;<\/span>client<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">)<\/span><\/p>\n<p>\u518d\u4f20\u5165&#xff1a;<\/p>\n<p>result <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">await<\/span> Runner<span class=\"token punctuation\">.<\/span>run<span class=\"token punctuation\">(<\/span><br \/>\n    agent<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;\u4f60\u597d&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    run_config<span class=\"token operator\">&#061;<\/span>RunConfig<span class=\"token punctuation\">(<\/span>model_provider<span class=\"token operator\">&#061;<\/span>CustomModelProvider<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u8fd9\u9002\u5408\u4e00\u4e2a run \u5185\u6240\u6709 Agent \u90fd\u8d70\u540c\u4e00\u4e2a\u81ea\u5b9a\u4e49 provider \u7684\u573a\u666f\u3002<\/p>\n<h3>LiteLLM adapter<\/h3>\n<p>LitellmModel \u901a\u8fc7 LiteLLM \u8c03\u7528\u7b2c\u4e09\u65b9 provider\u3002<\/p>\n<p>\u76f4\u63a5\u4f7f\u7528&#xff1a;<\/p>\n<p><span class=\"token keyword\">from<\/span> agents<span class=\"token punctuation\">.<\/span>extensions<span class=\"token punctuation\">.<\/span>models<span class=\"token punctuation\">.<\/span>litellm_model <span class=\"token keyword\">import<\/span> LitellmModel<\/p>\n<p>agent <span class=\"token operator\">&#061;<\/span> Agent<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Assistant&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span>LitellmModel<span class=\"token punctuation\">(<\/span><br \/>\n        model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;openrouter\/openai\/gpt-5.4-mini&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        api_key<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;&#8230;&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u6216\u4f7f\u7528 MultiProvider \u524d\u7f00&#xff1a;<\/p>\n<p>agent <span class=\"token operator\">&#061;<\/span> Agent<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Assistant&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;litellm\/openrouter\/openai\/gpt-5.4-mini&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>LiteLLM adapter \u57fa\u672c\u8d70 Chat Completions \u98ce\u683c&#xff1a;<\/p>\n<li>\u628a SDK items \u8f6c\u6210 chat messages\u3002<\/li>\n<li>\u628a SDK tools \u8f6c\u6210 chat completion tools\u3002<\/li>\n<li>\u8c03\u7528 litellm.acompletion(&#8230;)\u3002<\/li>\n<li>\u628a\u8fd4\u56de message \u8f6c\u6210 SDK output items\u3002<\/li>\n<li>\u4f7f\u7528 generation_span \u505a tracing\u3002<\/li>\n<p>\u6e90\u7801\u4e2d\u8c03\u7528\u5f62\u6001&#xff1a;<\/p>\n<p>ret <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">await<\/span> litellm<span class=\"token punctuation\">.<\/span>acompletion<span class=\"token punctuation\">(<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span>self<span class=\"token punctuation\">.<\/span>model<span class=\"token punctuation\">,<\/span><br \/>\n    messages<span class=\"token operator\">&#061;<\/span>converted_messages<span class=\"token punctuation\">,<\/span><br \/>\n    tools<span class=\"token operator\">&#061;<\/span>converted_tools <span class=\"token keyword\">or<\/span> <span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    temperature<span class=\"token operator\">&#061;<\/span>model_settings<span class=\"token punctuation\">.<\/span>temperature<span class=\"token punctuation\">,<\/span><br \/>\n    tool_choice<span class=\"token operator\">&#061;<\/span>self<span class=\"token punctuation\">.<\/span>_remove_not_given<span class=\"token punctuation\">(<\/span>tool_choice<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    response_format<span class=\"token operator\">&#061;<\/span>self<span class=\"token punctuation\">.<\/span>_remove_not_given<span class=\"token punctuation\">(<\/span>response_format<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    parallel_tool_calls<span class=\"token operator\">&#061;<\/span>parallel_tool_calls<span class=\"token punctuation\">,<\/span><br \/>\n    api_key<span class=\"token operator\">&#061;<\/span>self<span class=\"token punctuation\">.<\/span>api_key<span class=\"token punctuation\">,<\/span><br \/>\n    base_url<span class=\"token operator\">&#061;<\/span>self<span class=\"token punctuation\">.<\/span>base_url<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token operator\">**<\/span>extra_kwargs<span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u9002\u5408&#xff1a;<\/p>\n<li>\u9700\u8981\u63a5\u5165\u591a\u4e2a\u7b2c\u4e09\u65b9 provider\u3002<\/li>\n<li>provider \u5df2\u88ab LiteLLM \u652f\u6301\u3002<\/li>\n<li>\u80fd\u63a5\u53d7 Chat Completions \u98ce\u683c\u7684\u80fd\u529b\u8fb9\u754c\u3002<\/li>\n<h3>Any-LLM adapter<\/h3>\n<p>AnyLLMModel \u7684\u7279\u70b9\u662f\u53ef\u4ee5\u6309 provider \u80fd\u529b\u9009\u62e9 Responses \u6216 Chat Completions&#xff1a;<\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">_selected_api<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> Literal<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;responses&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;chat_completions&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> self<span class=\"token punctuation\">.<\/span>api <span class=\"token keyword\">is<\/span> <span class=\"token keyword\">not<\/span> <span class=\"token boolean\">None<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;responses&#034;<\/span> <span class=\"token keyword\">if<\/span> self<span class=\"token punctuation\">.<\/span>_supports_responses<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token string\">&#034;chat_completions&#034;<\/span><\/p>\n<p>\u76f4\u63a5\u4f7f\u7528&#xff1a;<\/p>\n<p><span class=\"token keyword\">from<\/span> agents<span class=\"token punctuation\">.<\/span>extensions<span class=\"token punctuation\">.<\/span>models<span class=\"token punctuation\">.<\/span>any_llm_model <span class=\"token keyword\">import<\/span> AnyLLMModel<\/p>\n<p>agent <span class=\"token operator\">&#061;<\/span> Agent<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Assistant&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span>AnyLLMModel<span class=\"token punctuation\">(<\/span><br \/>\n        model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;openrouter\/openai\/gpt-5.4-mini&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        api_key<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;&#8230;&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u6216\u4f7f\u7528 MultiProvider \u524d\u7f00&#xff1a;<\/p>\n<p>agent <span class=\"token operator\">&#061;<\/span> Agent<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Assistant&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;any-llm\/openrouter\/openai\/gpt-5.4-mini&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u5982\u679c provider \u652f\u6301 Responses&#xff0c;\u5b83\u4f1a\u8d70 _get_response_via_responses(&#8230;)&#xff1b;\u5426\u5219\u8d70 _get_response_via_chat(&#8230;)\u3002<\/p>\n<p>\u8fd9\u6bd4 LiteLLM \u591a\u4e86\u4e00\u4e2a\u9009\u62e9\u5c42&#xff1a;<\/p>\n<table>\n<tr>AdapterAPI \u98ce\u683c<\/tr>\n<tbody>\n<tr>\n<td>LiteLLM<\/td>\n<td>Chat Completions \u98ce\u683c<\/td>\n<\/tr>\n<tr>\n<td>Any-LLM<\/td>\n<td>Responses \u6216 Chat Completions&#xff0c;\u53d6\u51b3\u4e8e provider \u80fd\u529b<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4f46\u9009\u62e9\u66f4\u591a\u4e5f\u610f\u5473\u7740\u66f4\u8981\u6d4b\u8bd5 provider \u80fd\u529b\u5dee\u5f02\u3002<\/p>\n<h3>\u975e OpenAI Provider \u4e0e Tracing<\/h3>\n<p>\u7b2c\u4e09\u65b9 provider \u793a\u4f8b\u91cc\u901a\u5e38\u4f1a\u8c03\u7528&#xff1a;<\/p>\n<p>set_tracing_disabled<span class=\"token punctuation\">(<\/span>disabled<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u539f\u56e0\u662f\u9ed8\u8ba4 tracing \u4f1a\u4e0a\u4f20\u5230 OpenAI traces backend&#xff0c;\u9700\u8981 OpenAI API key\u3002<\/p>\n<p>\u5982\u679c\u4f60\u7684\u6a21\u578b provider \u4e0d\u662f OpenAI&#xff0c;\u4f46\u4ecd\u60f3\u4f7f\u7528 OpenAI tracing&#xff0c;\u53ef\u4ee5\u5355\u72ec\u8bbe\u7f6e tracing export key&#xff1a;<\/p>\n<p><span class=\"token keyword\">from<\/span> agents <span class=\"token keyword\">import<\/span> set_tracing_export_api_key<\/p>\n<p>set_tracing_export_api_key<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;sk-&#8230;&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u6216\u8005\u63a5\u5165\u81ea\u5b9a\u4e49 tracing processor\u3002<\/p>\n<p>\u751f\u4ea7\u5efa\u8bae&#xff1a;<\/p>\n<li>\u975e OpenAI provider \u9ed8\u8ba4\u5148\u5173\u95ed OpenAI tracing\u3002<\/li>\n<li>\u5982\u9700 trace&#xff0c;\u63a5\u5165\u4f01\u4e1a\u5185\u90e8 tracing processor\u3002<\/li>\n<li>\u4e0d\u8981\u628a\u7b2c\u4e09\u65b9 provider \u7684 API key \u5199\u8fdb trace metadata\u3002<\/li>\n<h3>\u6df7\u7528\u6a21\u578b\u65f6\u7684\u8fb9\u754c<\/h3>\n<p>Agents SDK \u5141\u8bb8\u4e00\u4e2a workflow \u4e2d\u4e0d\u540c Agent \u4f7f\u7528\u4e0d\u540c\u6a21\u578b\u3002<\/p>\n<p>\u4f8b\u5982&#xff1a;<\/p>\n<p>triage_agent <span class=\"token operator\">&#061;<\/span> Agent<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Triage agent&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;gpt-5.4-mini&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>expert_agent <span class=\"token operator\">&#061;<\/span> Agent<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Expert agent&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span>OpenAIChatCompletionsModel<span class=\"token punctuation\">(<\/span><br \/>\n        model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;provider-model&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        openai_client<span class=\"token operator\">&#061;<\/span>custom_client<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u4f46\u6df7\u7528\u6a21\u578b\u8981\u6ce8\u610f&#xff1a;<\/p>\n<li>\u5de5\u5177\u80fd\u529b\u662f\u5426\u4e00\u81f4\u3002<\/li>\n<li>handoff \u662f\u5426\u80fd\u88ab\u76ee\u6807 adapter \u8f6c\u6210\u5de5\u5177\u3002<\/li>\n<li>output schema \u662f\u5426\u88ab\u76ee\u6807 provider \u652f\u6301\u3002<\/li>\n<li>reasoning items \u662f\u5426\u80fd\u6b63\u786e replay\u3002<\/li>\n<li>stream event \u662f\u5426\u80fd\u5f52\u4e00\u5316\u3002<\/li>\n<li>usage \u662f\u5426\u5b8c\u6574\u3002<\/li>\n<li>retry \u662f\u5426 replay-safe\u3002<\/li>\n<p>\u6587\u6863\u4e5f\u5efa\u8bae&#xff1a;\u540c\u4e00\u4e2a workflow \u5c3d\u91cf\u4f7f\u7528\u540c\u4e00\u79cd model shape\u3002\u53ea\u6709\u786e\u5b9e\u9700\u8981\u65f6\u518d\u6df7\u7528\u3002<\/p>\n<h3>\u5b9e\u8df5\u4e00&#xff1a;\u663e\u5f0f\u4f7f\u7528 OpenAI Responses<\/h3>\n<p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b OpenAIProvider \u5df2\u7ecf\u8d70 Responses\u3002<\/p>\n<p>\u4f60\u4ecd\u7136\u53ef\u4ee5\u663e\u5f0f\u5199\u6e05\u695a&#xff1a;<\/p>\n<p><span class=\"token keyword\">from<\/span> agents <span class=\"token keyword\">import<\/span> Agent<span class=\"token punctuation\">,<\/span> OpenAIProvider<span class=\"token punctuation\">,<\/span> RunConfig<span class=\"token punctuation\">,<\/span> Runner<\/p>\n<p>agent <span class=\"token operator\">&#061;<\/span> Agent<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Assistant&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    instructions<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4f60\u662f\u4e00\u4e2a\u7b80\u6d01\u52a9\u624b\u3002&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;gpt-5.4-mini&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>provider <span class=\"token operator\">&#061;<\/span> OpenAIProvider<span class=\"token punctuation\">(<\/span>use_responses<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>result <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">await<\/span> Runner<span class=\"token punctuation\">.<\/span>run<span class=\"token punctuation\">(<\/span><br \/>\n    agent<span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token string\">&#034;\u7528\u4e00\u53e5\u8bdd\u89e3\u91ca Responses API\u3002&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    run_config<span class=\"token operator\">&#061;<\/span>RunConfig<span class=\"token punctuation\">(<\/span>model_provider<span class=\"token operator\">&#061;<\/span>provider<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u5982\u679c\u8981\u542f\u7528 websocket transport&#xff1a;<\/p>\n<p>provider <span class=\"token operator\">&#061;<\/span> OpenAIProvider<span class=\"token punctuation\">(<\/span><br \/>\n    use_responses<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    use_responses_websocket<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>WebSocket transport \u9002\u5408\u9700\u8981\u590d\u7528\u8fde\u63a5\u6216\u7279\u5b9a\u4f4e\u5ef6\u8fdf\u573a\u666f&#xff0c;\u4f46\u8981\u6ce8\u610f\u8fde\u63a5\u751f\u547d\u5468\u671f\u548c keepalive \u914d\u7f6e\u3002<\/p>\n<h3>\u5b9e\u8df5\u4e8c&#xff1a;\u5207\u6362\u5230 Chat Completions<\/h3>\n<p>\u5982\u679c provider \u4e0d\u652f\u6301 Responses&#xff0c;\u53ef\u4ee5\u7528 Chat Completions&#xff1a;<\/p>\n<p><span class=\"token keyword\">from<\/span> openai <span class=\"token keyword\">import<\/span> AsyncOpenAI<br \/>\n<span class=\"token keyword\">from<\/span> agents <span class=\"token keyword\">import<\/span> Agent<span class=\"token punctuation\">,<\/span> OpenAIChatCompletionsModel<\/p>\n<p>client <span class=\"token operator\">&#061;<\/span> AsyncOpenAI<span class=\"token punctuation\">(<\/span><br \/>\n    api_key<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;provider_api_key&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    base_url<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;https:\/\/provider.example.com\/v1&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>agent <span class=\"token operator\">&#061;<\/span> Agent<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Assistant&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    instructions<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4f60\u662f\u4e00\u4e2a\u7b80\u6d01\u52a9\u624b\u3002&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span>OpenAIChatCompletionsModel<span class=\"token punctuation\">(<\/span><br \/>\n        model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;provider-model&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        openai_client<span class=\"token operator\">&#061;<\/span>client<span class=\"token punctuation\">,<\/span><br \/>\n        strict_feature_validation<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u5f00\u53d1\u671f\u5efa\u8bae\u6253\u5f00 strict_feature_validation&#061;True\u3002<\/p>\n<p>\u5982\u679c\u53d1\u73b0\u4ee3\u7801\u4f9d\u8d56 conversation_id\u3001prompt\u3001Responses tool search \u7b49\u80fd\u529b&#xff0c;\u5c31\u5e94\u8be5\u5207\u56de Responses \u6216\u8c03\u6574\u529f\u80fd\u8bbe\u8ba1\u3002<\/p>\n<h3>\u5b9e\u8df5\u4e09&#xff1a;\u4f7f\u7528 LiteLLM<\/h3>\n<p><span class=\"token keyword\">from<\/span> agents <span class=\"token keyword\">import<\/span> Agent<span class=\"token punctuation\">,<\/span> Runner<span class=\"token punctuation\">,<\/span> function_tool<span class=\"token punctuation\">,<\/span> set_tracing_disabled<\/p>\n<p>set_tracing_disabled<span class=\"token punctuation\">(<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;function_tool<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">get_weather<\/span><span class=\"token punctuation\">(<\/span>city<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token string-interpolation\"><span class=\"token string\">f&#034;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>city<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u5929\u6c14\u6674\u3002&#034;<\/span><\/span><\/p>\n<p>agent <span class=\"token operator\">&#061;<\/span> Agent<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Assistant&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    instructions<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4f60\u53ea\u7528\u4ff3\u53e5\u56de\u7b54\u3002&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;litellm\/openrouter\/openai\/gpt-5.4-mini&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    tools<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span>get_weather<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>result <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">await<\/span> Runner<span class=\"token punctuation\">.<\/span>run<span class=\"token punctuation\">(<\/span>agent<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u4e1c\u4eac\u5929\u6c14\u600e\u4e48\u6837&#xff1f;&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>\u8fd9\u91cc litellm\/ \u524d\u7f00\u4f1a\u88ab MultiProvider \u8def\u7531\u5230 LitellmProvider\u3002<\/p>\n<p>\u5982\u679c\u8981\u4f20\u663e\u5f0f key&#xff0c;\u4f7f\u7528 LitellmModel(&#8230;) \u76f4\u63a5\u6784\u9020\u66f4\u6e05\u695a\u3002<\/p>\n<h3>\u5b9e\u8df5\u56db&#xff1a;\u4f7f\u7528 Any-LLM<\/h3>\n<p><span class=\"token keyword\">from<\/span> agents <span class=\"token keyword\">import<\/span> Agent<span class=\"token punctuation\">,<\/span> Runner<span class=\"token punctuation\">,<\/span> set_tracing_disabled<\/p>\n<p>set_tracing_disabled<span class=\"token punctuation\">(<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>agent <span class=\"token operator\">&#061;<\/span> Agent<span class=\"token punctuation\">(<\/span><br \/>\n    name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;Assistant&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    instructions<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4f60\u662f\u4e00\u4e2a\u7b80\u6d01\u52a9\u624b\u3002&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;any-llm\/openrouter\/openai\/gpt-5.4-mini&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>result <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">await<\/span> Runner<span class=\"token punctuation\">.<\/span>run<span class=\"token punctuation\">(<\/span>agent<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u4f60\u597d&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>Any-LLM \u4f1a\u89e3\u6790 provider&#xff1a;<\/p>\n<p>openrouter\/openai\/gpt-5.4-mini<\/p>\n<p>provider \u662f openrouter&#xff0c;provider model \u662f openai\/gpt-5.4-mini\u3002<\/p>\n<p>\u5982\u679c\u4f60\u8981\u5f3a\u5236 API \u7c7b\u578b&#xff1a;<\/p>\n<p>AnyLLMModel<span class=\"token punctuation\">(<\/span><br \/>\n    model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;openrouter\/openai\/gpt-5.4-mini&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    api<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;chat_completions&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p>\u8fd9\u9002\u5408 provider \u540c\u65f6\u652f\u6301\u591a\u79cd API&#xff0c;\u4f46\u4f60\u5e0c\u671b\u56fa\u5b9a\u884c\u4e3a\u7684\u573a\u666f\u3002<\/p>\n<h3>\u6d4b\u8bd5\u5efa\u8bae<\/h3>\n<p>\u6a21\u578b\u9002\u914d\u5c42\u6d4b\u8bd5\u4e0d\u80fd\u53ea\u6d4b final output\u3002<\/p>\n<p>\u81f3\u5c11\u8986\u76d6&#xff1a;<\/p>\n<li>RunConfig.model \u8986\u76d6 Agent.model\u3002<\/li>\n<li>ModelSettings run-level \u8986\u76d6 agent-level\u3002<\/li>\n<li>extra_args \u4e0e\u663e\u5f0f\u5b57\u6bb5\u91cd\u590d\u65f6\u62a5\u9519\u3002<\/li>\n<li>Responses \u8def\u5f84\u80fd\u4f20 previous_response_id \u548c conversation_id\u3002<\/li>\n<li>Chat Completions strict validation \u80fd\u62d2\u7edd Responses-only \u5b57\u6bb5\u3002<\/li>\n<li>Function tool call \u80fd\u4ece provider response \u8f6c\u6210 SDK item\u3002<\/li>\n<li>streaming \u7ec8\u6b62\u4e8b\u4ef6\u80fd\u6b63\u786e\u5904\u7406 failed\/incomplete\u3002<\/li>\n<li>usage \u80fd\u5f52\u4e00\u5316\u3002<\/li>\n<li>retry policy \u53ea\u5728 replay-safe \u573a\u666f\u91cd\u8bd5\u3002<\/li>\n<li>provider aclose() \u80fd\u91ca\u653e\u7f13\u5b58\u8d44\u6e90\u3002<\/li>\n<p>\u672c\u4ed3\u5e93\u5df2\u6709\u76f8\u5173\u6d4b\u8bd5&#xff1a;<\/p>\n<li>tests\/models\/test_openai_responses.py<\/li>\n<li>tests\/models\/test_openai_chatcompletions.py<\/li>\n<li>tests\/models\/test_openai_chatcompletions_converter.py<\/li>\n<li>tests\/models\/test_model_retry.py<\/li>\n<li>tests\/models\/test_default_models.py<\/li>\n<li>tests\/models\/test_litellm_chatcompletions_stream.py<\/li>\n<li>tests\/models\/test_any_llm_model.py<\/li>\n<li>tests\/test_config.py<\/li>\n<p>\u65b0\u589e provider \u6216 adapter \u65f6&#xff0c;\u5e94\u4f18\u5148\u53c2\u8003\u8fd9\u4e9b\u6d4b\u8bd5\u98ce\u683c\u3002<\/p>\n<h3>\u5e38\u89c1\u9519\u8bef<\/h3>\n<p>\u7b2c\u4e00&#xff0c;\u628a ModelSettings \u5f53\u6210\u6240\u6709 provider \u90fd\u652f\u6301\u7684\u53c2\u6570\u96c6\u5408\u3002<\/p>\n<p>\u5b83\u662f SDK \u7edf\u4e00\u914d\u7f6e\u5165\u53e3&#xff0c;\u4e0d\u4ee3\u8868\u6240\u6709 adapter \u90fd\u80fd\u539f\u6837\u652f\u6301\u6bcf\u4e2a\u5b57\u6bb5\u3002<\/p>\n<p>\u7b2c\u4e8c&#xff0c;\u7528 Chat Completions \u4f46\u4f9d\u8d56 Responses-only \u529f\u80fd\u3002<\/p>\n<p>\u4f8b\u5982 conversation_id\u3001prompt\u3001tool search\u3001deferred-loading Responses tools\u3002<\/p>\n<p>\u7b2c\u4e09&#xff0c;\u6df7\u7528 Responses \u4e0e Chat Completions \u540e\u6ca1\u6709\u6d4b streaming\u3002<\/p>\n<p>\u975e\u6d41\u5f0f\u80fd\u8dd1\u4e0d\u4ee3\u8868 streaming event \u5f52\u4e00\u5316\u6b63\u786e\u3002<\/p>\n<p>\u7b2c\u56db&#xff0c;\u5ffd\u7565 strict validation\u3002<\/p>\n<p>\u5f00\u53d1\u671f\u4e0d\u5f00 strict validation&#xff0c;\u5bb9\u6613\u628a\u5b57\u6bb5\u9759\u9ed8\u964d\u7ea7\u6210 warning\u3002<\/p>\n<p>\u7b2c\u4e94&#xff0c;\u628a extra_args \u5f53\u6210\u4e07\u80fd\u51fa\u53e3\u3002<\/p>\n<p>\u91cd\u590d\u4f20\u53c2\u4f1a\u62a5\u9519&#xff1b;\u672a\u77e5 provider \u53c2\u6570\u4e5f\u53ef\u80fd\u53ea\u5728\u8fd0\u884c\u65f6\u5931\u8d25\u3002<\/p>\n<p>\u7b2c\u516d&#xff0c;\u7b2c\u4e09\u65b9 provider \u4e0d\u5173\u95ed tracing\u3002<\/p>\n<p>\u6ca1\u6709 OpenAI tracing key \u65f6&#xff0c;\u9ed8\u8ba4 exporter \u53ef\u80fd\u51fa\u73b0 401 \u6216\u8df3\u8fc7\u4e0a\u62a5\u3002<\/p>\n<p>\u7b2c\u4e03&#xff0c;\u91cd\u8bd5\u7b56\u7565\u8fc7\u4e8e\u7c97\u66b4\u3002<\/p>\n<p>\u5e26 conversation_id \u6216\u5df2\u5f00\u59cb streaming \u7684\u8bf7\u6c42\u4e0d\u80fd\u7b80\u5355\u91cd\u653e\u3002<\/p>\n<p>\u7b2c\u516b&#xff0c;\u6ca1\u6709\u5173\u95ed\u6301\u4e45 provider \u8d44\u6e90\u3002<\/p>\n<p>WebSocket Responses model \u548c\u67d0\u4e9b\u7b2c\u4e09\u65b9 client \u53ef\u80fd\u6301\u6709\u8fde\u63a5&#xff0c;\u5e94\u5728\u751f\u547d\u5468\u671f\u7ed3\u675f\u65f6\u8c03\u7528 provider\/model \u7684 close\u3002<\/p>\n<h3>\u672c\u7bc7\u5c0f\u7ed3<\/h3>\n<p>\u672c\u7bc7\u62c6\u89e3\u4e86 Agents SDK \u7684\u6a21\u578b\u9002\u914d\u5c42\u3002<\/p>\n<p>\u6838\u5fc3\u7ed3\u8bba&#xff1a;<\/p>\n<li>Runner \u53ea\u4f9d\u8d56 Model \u62bd\u8c61&#xff0c;\u4e0d\u4f9d\u8d56\u5177\u4f53 provider \u8bf7\u6c42\u7ed3\u6784\u3002<\/li>\n<li>ModelProvider \u8d1f\u8d23\u628a\u6a21\u578b\u540d\u89e3\u6790\u6210\u5177\u4f53 Model\u3002<\/li>\n<li>RunConfig.model \u4f18\u5148\u7ea7\u9ad8\u4e8e Agent.model\u3002<\/li>\n<li>ModelSettings \u4f7f\u7528\u975e None \u8986\u76d6&#xff0c;\u5e76\u7279\u6b8a\u5408\u5e76 extra_args \u548c retry\u3002<\/li>\n<li>\u5f53\u524d\u6e90\u7801\u9ed8\u8ba4\u6a21\u578b\u662f gpt-5.4-mini&#xff0c;\u5e76\u5e26 GPT-5 \u9ed8\u8ba4 settings\u3002<\/li>\n<li>OpenAIProvider \u9ed8\u8ba4\u8d70 Responses&#xff0c;\u53ef\u5207\u6362 Chat Completions \u6216 Responses WebSocket\u3002<\/li>\n<li>Responses adapter \u539f\u751f\u652f\u6301 server-managed state\u3001prompt\u3001Responses tools\u3001context management \u7b49\u80fd\u529b\u3002<\/li>\n<li>Chat Completions adapter \u9700\u8981\u5728 SDK Responses items \u4e0e chat messages \u4e4b\u95f4\u8f6c\u6362\u3002<\/li>\n<li>LiteLLM \u66f4\u504f Chat Completions \u98ce\u683c&#xff0c;Any-LLM \u53ef\u6309 provider \u80fd\u529b\u9009\u62e9 Responses \u6216 Chat Completions\u3002<\/li>\n<li>\u65b0\u589e\u6216\u5207\u6362 provider \u65f6&#xff0c;\u5fc5\u987b\u9a8c\u8bc1\u5de5\u5177\u3001handoff\u3001\u7ed3\u6784\u5316\u8f93\u51fa\u3001streaming\u3001usage\u3001retry \u548c tracing\u3002<\/li>\n<p>\u4e0b\u4e00\u7bc7\u4f1a\u8fdb\u5165 MCP \u96c6\u6210&#xff1a;\u8ba9 Agent \u4f7f\u7528\u5916\u90e8\u5de5\u5177\u751f\u6001&#xff0c;\u7406\u89e3 MCP server \u5982\u4f55\u6620\u5c04\u4e3a SDK tools&#xff0c;\u4ee5\u53ca\u8fde\u63a5\u3001\u7f13\u5b58\u3001\u8fc7\u6ee4\u548c\u5ba1\u6279\u5982\u4f55\u5de5\u4f5c\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u7bc7\u5bfc\u8bfb<br \/>\n\u524d\u5341\u4e00\u7bc7\u5df2\u7ecf\u628a Agents SDK \u7684\u8fd0\u884c\u4e3b\u7ebf\u62c6\u5f00\u4e86&#xff1a;<br \/>\nAgent \u5b9a\u4e49\u89d2\u8272\u3001\u5de5\u5177\u3001handoffs \u548c\u8f93\u51fa\u7c7b\u578b\u3002Runner \u63a8\u8fdb\u4e00\u6b21 run\u3002Function Tool \u628a Python \u51fd\u6570\u66b4\u9732\u7ed9\u6a21\u578b\u3002Handoff \u548c Agent-as-tool \u7ec4\u7ec7\u591a Agent \u5de5\u4f5c\u6d41\u3002Streaming \u628a\u8fd0\u884c\u8fc7\u7a0b\u53d8\u6210\u4e8b\u4ef6\u6d41\u3002Sessions \u4fdd\u5b58\u591a\u8f6e\u5386\u53f2\u3002Guardrails \u63a7\u5236\u8f93\u5165\u3001\u8f93\u51fa\u548c\u5de5\u5177\u8fb9\u754c\u3002Tracing \u8bb0\u5f55\u4e00\u6b21 run \u7684\u53ef\u89c2\u6d4b\u94fe\u8def\u3002<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[10200,81,190],"topic":[],"class_list":["post-89825","post","type-post","status-publish","format-standard","hentry","category-server","tag-openai-agent","tag-python","tag-190"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>openai-agents-python-sdk \u6e90\u7801\u89e3\u6790 | \u7b2c\u5341\u4e8c\u7bc7\uff1a\u6a21\u578b\u9002\u914d\u5c42\uff1aResponses\u3001Chat Completions \u4e0e\u7b2c\u4e09\u65b9 Provider - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/89825.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"openai-agents-python-sdk \u6e90\u7801\u89e3\u6790 | \u7b2c\u5341\u4e8c\u7bc7\uff1a\u6a21\u578b\u9002\u914d\u5c42\uff1aResponses\u3001Chat Completions \u4e0e\u7b2c\u4e09\u65b9 Provider - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u672c\u7bc7\u5bfc\u8bfb \u524d\u5341\u4e00\u7bc7\u5df2\u7ecf\u628a Agents SDK \u7684\u8fd0\u884c\u4e3b\u7ebf\u62c6\u5f00\u4e86&#xff1a; Agent \u5b9a\u4e49\u89d2\u8272\u3001\u5de5\u5177\u3001handoffs \u548c\u8f93\u51fa\u7c7b\u578b\u3002Runner \u63a8\u8fdb\u4e00\u6b21 run\u3002Function Tool \u628a Python \u51fd\u6570\u66b4\u9732\u7ed9\u6a21\u578b\u3002Handoff \u548c Agent-as-tool \u7ec4\u7ec7\u591a Agent \u5de5\u4f5c\u6d41\u3002Streaming \u628a\u8fd0\u884c\u8fc7\u7a0b\u53d8\u6210\u4e8b\u4ef6\u6d41\u3002Sessions \u4fdd\u5b58\u591a\u8f6e\u5386\u53f2\u3002Guardrails \u63a7\u5236\u8f93\u5165\u3001\u8f93\u51fa\u548c\u5de5\u5177\u8fb9\u754c\u3002Tracing \u8bb0\u5f55\u4e00\u6b21 run \u7684\u53ef\u89c2\u6d4b\u94fe\u8def\u3002\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/89825.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-03T14:00:38+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/89825.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/89825.html\",\"name\":\"openai-agents-python-sdk \u6e90\u7801\u89e3\u6790 | \u7b2c\u5341\u4e8c\u7bc7\uff1a\u6a21\u578b\u9002\u914d\u5c42\uff1aResponses\u3001Chat Completions \u4e0e\u7b2c\u4e09\u65b9 Provider - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-08-03T14:00:38+00:00\",\"dateModified\":\"2026-08-03T14:00:38+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/89825.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/89825.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/89825.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"openai-agents-python-sdk \u6e90\u7801\u89e3\u6790 | \u7b2c\u5341\u4e8c\u7bc7\uff1a\u6a21\u578b\u9002\u914d\u5c42\uff1aResponses\u3001Chat Completions \u4e0e\u7b2c\u4e09\u65b9 Provider\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"openai-agents-python-sdk \u6e90\u7801\u89e3\u6790 | \u7b2c\u5341\u4e8c\u7bc7\uff1a\u6a21\u578b\u9002\u914d\u5c42\uff1aResponses\u3001Chat Completions \u4e0e\u7b2c\u4e09\u65b9 Provider - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/89825.html","og_locale":"zh_CN","og_type":"article","og_title":"openai-agents-python-sdk \u6e90\u7801\u89e3\u6790 | \u7b2c\u5341\u4e8c\u7bc7\uff1a\u6a21\u578b\u9002\u914d\u5c42\uff1aResponses\u3001Chat Completions \u4e0e\u7b2c\u4e09\u65b9 Provider - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u672c\u7bc7\u5bfc\u8bfb \u524d\u5341\u4e00\u7bc7\u5df2\u7ecf\u628a Agents SDK \u7684\u8fd0\u884c\u4e3b\u7ebf\u62c6\u5f00\u4e86&#xff1a; Agent \u5b9a\u4e49\u89d2\u8272\u3001\u5de5\u5177\u3001handoffs \u548c\u8f93\u51fa\u7c7b\u578b\u3002Runner \u63a8\u8fdb\u4e00\u6b21 run\u3002Function Tool \u628a Python \u51fd\u6570\u66b4\u9732\u7ed9\u6a21\u578b\u3002Handoff \u548c Agent-as-tool \u7ec4\u7ec7\u591a Agent \u5de5\u4f5c\u6d41\u3002Streaming \u628a\u8fd0\u884c\u8fc7\u7a0b\u53d8\u6210\u4e8b\u4ef6\u6d41\u3002Sessions \u4fdd\u5b58\u591a\u8f6e\u5386\u53f2\u3002Guardrails \u63a7\u5236\u8f93\u5165\u3001\u8f93\u51fa\u548c\u5de5\u5177\u8fb9\u754c\u3002Tracing \u8bb0\u5f55\u4e00\u6b21 run \u7684\u53ef\u89c2\u6d4b\u94fe\u8def\u3002","og_url":"https:\/\/www.wsisp.com\/helps\/89825.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-08-03T14:00:38+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"14 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/89825.html","url":"https:\/\/www.wsisp.com\/helps\/89825.html","name":"openai-agents-python-sdk \u6e90\u7801\u89e3\u6790 | \u7b2c\u5341\u4e8c\u7bc7\uff1a\u6a21\u578b\u9002\u914d\u5c42\uff1aResponses\u3001Chat Completions \u4e0e\u7b2c\u4e09\u65b9 Provider - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-08-03T14:00:38+00:00","dateModified":"2026-08-03T14:00:38+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/89825.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/89825.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/89825.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"openai-agents-python-sdk \u6e90\u7801\u89e3\u6790 | \u7b2c\u5341\u4e8c\u7bc7\uff1a\u6a21\u578b\u9002\u914d\u5c42\uff1aResponses\u3001Chat Completions \u4e0e\u7b2c\u4e09\u65b9 Provider"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/89825","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=89825"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/89825\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=89825"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=89825"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=89825"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=89825"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}