Phase 13: Tools & Protocols

عملکرد فراخوان عمیق غوطه ور کردن OpenAI، انسان شناسی، دوقلوها

سه ارائه دهنده مرزی در سال 2024 در یک حلقه تماس ابزار یکسان جمع شدند و سپس در همه چیز دیگر اختلاف کردند. OpenAI استفاده می کند toolsوtool_calls. استفاده های انسانtool_useوtool_resultبلوک هاfunctionDeclarationsو ارتباط هویت منحصر به فرد. این درس سه مورد را کنار هم جدا می کند تا کد که در یک ارائه دهنده ارسال می شود وقتی آن را پورت می کنید شکسته نشود.

Type: Build

Languages: Python (stdlib, schema translators)

Prerequisites: Phase 13 · 01 (the tool interface)

Time: ~75 minutes

اهداف یادگیری

  • سه تفاوت شکل بین OpenAI، Anthropic و Gemini (اعلان، تماس، نتیجه) که وظیفه را فرا می خواند را بیان کنید.
  • یک بیانیه ابزار را در تمام سه فرمت ارائه دهنده ترجمه کنید و پیش بینی کنید که محدودیت های حالت سخت در کجا متفاوت خواهد بود.
  • استفاده کنیدtool_choiceدر هر ارائه دهنده برای اجبار، ممنوعیت، یا انتخاب خودکار ابزار تماس.
  • محدودیت های سخت هر ارائه دهنده را بدانید (عدد ابزار، عمق طرح، طول استدلال) و امضای خطایی که هر یک از آنها هنگام نقض محدودیت ها منتشر می کند.

مشکل

شکل درخواست درخواست درخواست درخواست درخواست درخواست درخواست درخواست درخواست در هر ارائه دهنده متفاوت است. سه مثال مشخص از دسته های تولید 2026:

OpenAI Chat Completions / Responses API.تو گذر مي کنيtools: [{type: "function", function: {name, description, parameters, strict}}]پاسخ مدل شاملchoices[0].message.tool_calls: [{id, type: "function", function: {name, arguments}}]کجاargumentsیک رشته JSON است که باید آن را تجزیه و تحلیل کنید. حالت سخت (strict: true) از طریق رمزگذاری محدود، رعایت طرح را اجبار می کند.

Anthropic Messages API.تو گذر مي کنيtools: [{name, description, input_schema}]پاسخ به اين سوال اينه:content: [{type: "text"}, {type: "tool_use", id, name, input}].inputشما با یک کلمه جدید پاسخ می دهیدuserپيامى که شامل{type: "tool_result", tool_use_id, content}بلوک

Google Gemini API.تو گذر مي کنيtools: [{functionDeclarations: [{name, description, parameters}]}](در زیر میز قرار گرفته)functionDeclarations) پاسخ به این سوال به عنوانcandidates[0].content.parts: [{functionCall: {name, args, id}}]کجاidدر دوقلوها 3 و بالا همبستگی تماس های موازی منحصر به فرد است.{functionResponse: {name, id, response}}. .

. همان حلقه . نام های مختلف میدان ، انستیتورهای مختلف ، کنوانسیون های مختلف رشته به عنوان شی و مکانیسم های مرتبط مختلف . یک تیم که یک آژانس هواشناسی را در OpenAI می نویسد ، برای دو روز به Anthropic و یک روز دیگر به Gemini فقط برای لوله کشی پرداخت می کند

این درس یک مترجم را ایجاد می کند که سه فرمت را به یک اعلامیه ابزار کانونیک و مسیرهای کنار هم متحد می کند. مرحله 13 · 17 الگوی مشابه را به یک دروازه LLM عمومی می کند.

مفهوم

ساختار مشترک

هر ارائه دهنده به پنج چیز نیاز داره:

  1. Tool list.نام هر ابزار، توصیف و طرح ورودی.
  2. Tool choice.یک ابزار خاص را مجبور کنید، ابزارها را ممنوع کنید، یا اجازه دهید مدل تصمیم بگیرد.
  3. Call emission.تولید ساختار یافته نامگذاری ابزار و استدلال ها
  4. Call id.ارتباط پاسخ به تماس صحیح (موضوع برای موازی).
  5. Result injection.پيام يا بلوک که نتيجه را به تماس باز مي گرداند

تفاوت شکل، زمینه به زمینه

AspectOpenAIAnthropicGemini
Declaration envelope{type: "function", function: {...}}{name, description, input_schema}{functionDeclarations: [{...}]}
Schema fieldparametersinput_schemaparameters
Response containertool_calls[] on assistant messagecontent[] of type tool_useparts[] of type functionCall
Arguments typestringified JSONparsed objectparsed object
Id formatcall_... (OpenAI generates)toolu_... (Anthropic)UUID (Gemini 3+)
Result blockrole tool, tool_call_iduser with tool_result, tool_use_idfunctionResponse with matching id
Force-a-tooltool_choice: {type: "function", function: {name}}tool_choice: {type: "tool", name}tool_config: {function_calling_config: {mode: "ANY"}}
Forbid toolstool_choice: "none"tool_choice: {type: "none"}mode: "NONE"
Strict schemastrict: trueschema-is-schema (always enforced)responseSchema at request level

محدوده ای که واقعاً به آن ها می رسی

  • OpenAI.128 ابزار در هر درخواست. عمق طرح 5. رشته استدلال <= 8192 بایت. حالت سخت نیاز به هیچ $refنهoneOf-بله .anyOf-بله .allOfبا همپوشانی، هر ملک ذکر شده در required. .
  • Anthropic.۶۴ ابزار در هر درخواست. عمق طرح به طور موثر بدون محدودیت اما محدودیت عملی ۱۰. هیچ پرچم حالت سخت نیست؛ طرح یک قرارداد است و مدل تمایل به مطابق است.
  • Gemini.64 تابع در هر درخواست. انواع طرح ها زیر مجموعه OpenAPI 3.0 هستند (اختلاف کمی از طرح JSON 2020-12). تماس های موازی از دوقلوها 3 به عنوان یک شناسه منحصر به فرد.

tool_choiceرفتار

سه حالت که همه از آن پشتیبانی می کنند، نام های متفاوتی دارند.

  • Auto.مدل ابزار یا متن رو انتخاب میکنه
  • Required / Any.مدل باید حداقل یک ابزار را فرا بخواند.
  • None.مدل نباید به ابزار زنگ بزنه

و به علاوه يه حالت منحصر به فرد براي هر ارائه دهنده:

  • OpenAI.به اسم یک ابزار خاص مجبور کن
  • Anthropic.یک ابزار خاص را با نام مجبور کنیدdisable_parallel_tool_useپرچم تنها و چند تا را جدا می کند.
  • Gemini. mode: "VALIDATED"هر پاسخ را از طریق یک تأیید کننده اسکیما بدون توجه به هدف مدل هدایت می کند.

تماس های موازی

OpenAIparallel_tool_calls: true(به طور پیش فرض) تماس های متعدد را در یک پیام دستیار ارسال می کند. شما همه آنها را اجرا می کنید و با یک پیام نقش ابزار بسته ای که شامل یک ورودی در هرtool_call_id. انتروپيك تاريخي فقط يه تماس داشتdisable_parallel_tool_use: false(به طور پیش فرض از کلاود 3.5) امکان پذیر است چند. جمیانی 2 اجازه تماس های موازی را داد اما شناخت های ثابت را نداد؛ جمیانی 3 UUID را اضافه کرد تا پاسخ های خارج از نظم به طور تمیز ارتباط برقرار کنند.

پخش

هر سه تماس ابزار پشتیبانی می کنند. فرمت سیم متفاوت است:

  • OpenAI.قطعات دلتا ازtool_calls[i].function.argumentsتا وقتي که به تدريج به اينجا برميگردينfinish_reason: "tool_calls". .
  • Anthropic.وقایع بلاک-ستارت / بلاک-دلتا / بلاک-ستاپinput_json_deltaقطعات بحث های جزئی را دارند.
  • Gemini. streamFunctionCallArguments(جديد در جوميني 3) قطعاتي را با يکfunctionCallIdتا چند تماس موازی بتوانند با هم ارتباط برقرار کنند.

مرحله 13 · 03 به طور عمیق در مورد جمع آوری مجدد موازی + جریان می پردازد. این درس بر شکل های اعلام و تماس یک بار متمرکز است.

خطاها و تعمیر

اشتباهات استدلال غیرفعال نیز متفاوت به نظر می رسند.

  • OpenAI (non-strict).مدل بازپرداختarguments: "{bad json}"، تجزیه JSON شما شکست می خورد، شما یک پیام خطا تزریق و دوباره تماس بگیرید.
  • OpenAI (strict).اعتبارسنجی در زمان رمزگذاری اتفاق می افتد؛ JSON غیرفعال غیرممکن است اما refusalمی تونه ظاهر بشه
  • Anthropic. inputممکن است شامل زمینه های غیر منتظره باشد، طرح توصیه ای است.
  • Gemini.ویژگی OpenAPI 3.0: enumدر زمینه های شی که به طور ساکت نادیده گرفته می شوند، خود را تأیید کنید.

الگوی مترجم

یک اعلامیه ابزار کانونیکی در کد شما به این شکل است (شما شکل را انتخاب می کنید):

pythonTool(
    name="get_weather",
    description="Use when ...",
    input_schema={"type": "object", "properties": {...}, "required": [...]},
    strict=True,
)

سه تا تابع کوچک به سه شکل ارائه دهنده ترجمه می کنند.code/main.pyاین روش درست است و سپس یک ابزار جعلی را از طریق شکل پاسخ هر ارائه دهنده به صورت دور می کند. هیچ شبکه ای مورد نیاز نیست.

تیم های تولید این مترجم را در قالبAbstractToolset(آای پایدانتک)UniversalToolNode(لنگ گراف) یاBaseToolمرحله 13 · 17 یک دروازه را ارسال می کند که یک API به شکل OpenAI را در مقابل هر یک از سه مورد قرار می دهد.

ازش استفاده کن

code/main.pyیک قانون قانونی تعریف می کندToolاین سیستم در حال بررسی پاسخ ارائه دهنده هر شکل را به همان شیء تماس کانونیکی انجام می دهد و نشان می دهد که معنویت زیر پوست یکسان است. آن را اجرا کنید و سه اعلامیه را کنار هم تشخیص دهید.

چه چیزی رو باید ببینیم:

  • سه بلوک اعلامی تنها با نام پاکت و زمینه متفاوت هستند.
  • سه بلوک پاسخ در جایی که تماس زندگی می کند متفاوت است (در سطح بالا tool_calls،content[]بلوکparts[]وارد شدن
  • یکیcanonical_call()استخراجات تابع{id, name, args}از تمام سه شکل پاسخ.

-باده

این درس به ما کمک می کندoutputs/skill-provider-portability-audit.md. در صورت یکپارچه سازی تماس با یک ارائه دهنده، مهارت یک حسابرسی حمل و نقل را ایجاد می کند: کدام ارائه دهنده محدودیت هایی را دارد که به آن اعتماد دارد، کدام زمینه ها نیاز به تغییر نام دارند و چه چیزی در هنگام انتقال به هر ارائه دهنده دیگری قطع می شود.

تمرینات

  1. فرار کنcode/main.pyو بررسی کنید که سه اعلامیه JSON ارائه دهنده همگی یک سریال مشابه را در زیر قرار می دهندToolابزار کاینونیکی را برای اضافه کردن یک پارامتر enum تغییر دهید و تایید کنید که فقط مترجم Gemini برای مدیریت ویژگی OpenAPI نیاز دارد.
  1. اضافه کنیدListToolsResponseپارسر برای هر ارائه دهنده که لیست ابزار را استخراج می کند یک مدل پس از یک list_toolsOpenAI یک تماس بومی ندارد؛ توجه به این عدم همتایی کنید.
  1. اجراtool_choiceتبدیل: نقشه یک کانونیکToolChoice(mode="force", tool_name="x")در هر سه شکل ارائه دهنده.mode="any"وmode="none". جدول تفاوت درس رو چک کن
  1. یکی از سه ارائه دهنده را انتخاب کنید و راهنمای تماس با عملکرد را از پایان به آخر بخوانید. یک زمینه را در مشخصات طرح خود پیدا کنید که دو مورد دیگر از آن پشتیبانی نمی کنند.strict, انسان شناسیdisable_parallel_tool_use، دوقلوfunction_calling_config.allowed_function_names. .
  1. یک ویکتور آزمون بنویسید: یک ابزار که استدلال آن در نقض طرح اعلام شده است. آن را از طریق اعتبار دهنده هر ارائه دهنده اجرا کنید (stdlib در درس 01 به عنوان یک پراکسی انجام می شود) و ثبت کنید که کدام خطا ایجاد می شود. سند که شما در تولید برای دقت استفاده می کنید.

اصطلاحات کلیدی

TermWhat people sayWhat it actually means
Function calling"Tool use"Provider-level API for structured tool-call emission
Tool declaration"Tool spec"Name + description + JSON Schema input payload
tool_choice"Force / forbid"Auto / required / none / specific-name modes
Strict mode"Schema enforcement"OpenAI flag that constrains decoding to match schema
tool_use block"Anthropic's call shape"Inline content block with id, name, input
functionCall part"Gemini's call shape"A parts[] entry containing name, args, and id
Arguments-as-string"Stringified JSON"OpenAI returns args as a JSON string, not an object
Parallel tool calls"Fan-out in one turn"Multiple tool calls in one assistant message
Refusal"Model declines"Strict-mode-only refusal block instead of a call
OpenAPI 3.0 subset"Gemini schema quirk"Gemini uses a JSON-Schema-like dialect with minor differences

خواندن بیشتر

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.