एपीआई के लिए फ़ंक्शन स्कीमा परिभाषित करना
अपने फ़ंक्शन के लिए JSON Schema परिभाषाएँ लिखें, उन्हें tools पैरामीटर में भेजें और समझें कि मॉडल उन्हें कब और कैसे कॉल करने का निर्णय लेता है।
एपीआई के लिए फ़ंक्शन स्कीमा परिभाषित करना, CoddyKit पर AI Engineering Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह AI Engineering Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। AI Engineering Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
फ़ंक्शन कॉलिंग क्या है
OpenAI की फ़ंक्शन कॉलिंग (अब जिसे टूल कॉलिंग कहा जाता है) आपको Python फ़ंक्शन का वर्णन संरचित JSON स्कीमा प्रारूप में मॉडल को देने देती है। जब मॉडल तय करता है कि किसी फ़ंक्शन को कॉल करना चाहिए, तो मुक्त पाठ तैयार करने के बजाय वह फ़ंक्शन के नाम और तर्कों वाला संरचित JSON ऑब्जेक्ट लौटाता है — जिसे आपका कोड फिर विश्वसनीय ढंग से चलाता है।
tools पैरामीटर की संरचना
अपने फ़ंक्शन की परिभाषाएँ API को tools पैरामीटर में ऑब्जेक्ट की सूची के रूप में दें। हर ऑब्जेक्ट का type 'function' होता है और उसमें function कुंजी होती है, जिसमें नाम, विवरण और पैरामीटर परिभाषित करने वाला JSON स्कीमा शामिल होता है।
from openai import OpenAI
client = OpenAI()
tools = [
{
'type': 'function',
'function': {
'name': 'get_current_weather',
'description': 'Get the current weather in a given location.',
'parameters': {
'type': 'object',
'properties': {
'location': {
'type': 'string',
'description': 'City and country, e.g. London, UK'
},
'unit': {
'type': 'string',
'enum': ['celsius', 'fahrenheit'],
'description': 'Temperature unit to use.'
}
},
'required': ['location']
}
}
}
]पैरामीटर के लिए JSON स्कीमा
parameters फ़ील्ड JSON स्कीमा विनिर्देशन का पालन करती है। स्ट्रिंग, संख्या, पूर्णांक, बूलियन, ऐरे या ऑब्जेक्ट निर्दिष्ट करने के लिए type का उपयोग करें। मॉडल को हर गुण का अर्थ बताने के लिए description का उपयोग करें। आवश्यक फ़ील्ड को required ऐरे में सूचीबद्ध करें — वैकल्पिक फ़ील्ड को required में शामिल करना आवश्यक नहीं है।
# A more complex schema with multiple types
create_event_tool = {
'type': 'function',
'function': {
'name': 'create_calendar_event',
'description': 'Create a new calendar event. Use when the user wants to schedule a meeting or appointment.',
'parameters': {
'type': 'object',
'properties': {
'title': {'type': 'string', 'description': 'Event title.'},
'start_time': {'type': 'string', 'description': 'ISO 8601 datetime, e.g. 2024-03-15T14:00:00.'},
'duration_minutes': {'type': 'integer', 'description': 'Duration in minutes.', 'minimum': 5},
'attendees': {
'type': 'array',
'items': {'type': 'string'},
'description': 'List of email addresses of attendees.'
},
'location': {'type': 'string', 'description': 'Physical or virtual meeting location.'}
},
'required': ['title', 'start_time', 'duration_minutes']
}
}
}टूल के साथ API कॉल करना
tools सूची सीधे chat.completions.create को दें। मॉडल सामान्य टेक्स्ट संदेश के साथ उत्तर दे सकता है (यदि वह फ़ंक्शन के बिना उत्तर दे सकता है), या वह tool_calls ऑब्जेक्ट के साथ उत्तर दे सकता है, जो आपको फ़ंक्शन चलाने का निर्देश देता है। आप किस स्थिति में हैं, यह जानने के लिए हमेशा finish_reason जाँचें।
response = client.chat.completions.create(
model='gpt-4o',
messages=[
{'role': 'user', 'content': 'What is the weather in Tokyo?'}
],
tools=tools
)
print('Finish reason:', response.choices[0].finish_reason)
# 'tool_calls' means the model wants to call a function
# 'stop' means the model gave a regular text response
choice = response.choices[0].message
if response.choices[0].finish_reason == 'tool_calls':
print('Model wants to call:', choice.tool_calls[0].function.name)tool_choice से टूल चयन नियंत्रित करना
tool_choice पैरामीटर तय करता है कि मॉडल को फ़ंक्शन कॉल करना अनिवार्य है या वह स्वतंत्र रूप से चुन सकता है। इसे 'auto' पर सेट करने से मॉडल स्वयं निर्णय लेता है। इसे 'required' पर सेट करने से टूल कॉल अनिवार्य हो जाती है। इसे किसी विशिष्ट फ़ंक्शन नाम पर सेट करने से ठीक उसी फ़ंक्शन को कॉल करना अनिवार्य हो जाता है — यह उन निष्कर्षण कार्यों के लिए उपयोगी है जिनमें आप हमेशा संरचित आउटपुट चाहते हैं।
# Force the model to always call extract_contact
response = client.chat.completions.create(
model='gpt-4o',
messages=[{'role': 'user', 'content': 'Hi, I am John Smith, john@example.com, +1-555-0100.'}],
tools=[extract_contact_tool],
tool_choice={'type': 'function', 'function': {'name': 'extract_contact'}}
)
# With tool_choice forced, finish_reason will always be 'tool_calls'सीमित विकल्पों के लिए एनम फ़ील्ड
जब किसी पैरामीटर को मानों के एक निश्चित समूह तक सीमित रखना हो, तब अपने JSON Schema में enum फ़ील्ड का उपयोग करें। इससे विश्वसनीयता बहुत बढ़ जाती है — जब मॉडल स्कीमा में अनुमत मानों की पूरी सूची देख सकता है, तो उसके अमान्य विकल्प गढ़ने की संभावना बहुत कम हो जाती है।
classify_sentiment_tool = {
'type': 'function',
'function': {
'name': 'classify_sentiment',
'description': 'Classify the sentiment of a customer review.',
'parameters': {
'type': 'object',
'properties': {
'sentiment': {
'type': 'string',
'enum': ['positive', 'negative', 'neutral', 'mixed'],
'description': 'The sentiment classification.'
},
'confidence': {
'type': 'number',
'minimum': 0.0,
'maximum': 1.0,
'description': 'Model confidence from 0 to 1.'
}
},
'required': ['sentiment', 'confidence']
}
}
}नेस्टेड ऑब्जेक्ट स्कीमा
JSON Schema नेस्टेड ऑब्जेक्ट का समर्थन करता है। जटिल पदानुक्रमित डेटा संरचनाएँ परिभाषित करने के लिए अपने properties के साथ 'type': 'object' का उपयोग करें। यह ईमेल या दस्तावेज़ों जैसे असंरचित पाठ से संरचित डेटा निकालने के लिए आदर्श है।
extract_order_tool = {
'type': 'function',
'function': {
'name': 'extract_order',
'description': 'Extract order details from a customer email.',
'parameters': {
'type': 'object',
'properties': {
'customer': {
'type': 'object',
'properties': {
'name': {'type': 'string'},
'email': {'type': 'string', 'format': 'email'}
},
'required': ['name']
},
'items': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'product_id': {'type': 'string'},
'quantity': {'type': 'integer', 'minimum': 1}
},
'required': ['product_id', 'quantity']
}
}
},
'required': ['customer', 'items']
}
}
}Pydantic मॉडल से स्कीमा बनाना
JSON Schema को हाथ से लिखना उबाऊ और त्रुटि-प्रवण होता है। इसके बजाय, अपनी डेटा संरचना को Pydantic मॉडल के रूप में परिभाषित करें और JSON Schema को स्वचालित रूप से बनाने के लिए .schema() का उपयोग करें। मॉडल की प्रतिक्रिया को डीसीरियलाइज़ करते समय आपको Python-स्तर का सत्यापन भी मिलता है।
from pydantic import BaseModel, Field
from typing import Optional, List
class ContactInfo(BaseModel):
name: str = Field(description='Full name of the person.')
email: Optional[str] = Field(None, description='Email address.')
phone: Optional[str] = Field(None, description='Phone number in E.164 format.')
company: Optional[str] = Field(None, description='Company or organization.')
# Auto-generate the JSON Schema
schema = ContactInfo.schema()
# Build the tool definition
extract_contact_tool = {
'type': 'function',
'function': {
'name': 'extract_contact',
'description': 'Extract contact information from text.',
'parameters': schema
}
}प्रभावी फ़ंक्शन विवरण लिखना
फ़ंक्शन का विवरण वह मुख्य संकेत है जिसका उपयोग मॉडल यह तय करने के लिए करता है कि किसी टूल को कब कॉल करना है। अच्छा विवरण उपयोग के मामले को स्पष्ट करता है, बताता है कि फ़ंक्शन को कब कॉल करना चाहिए और कब नहीं, तथा यह बताता है कि आउटपुट कैसा होगा। अस्पष्ट विवरणों के कारण मॉडल गलत फ़ंक्शन कॉल कर सकता है या सही फ़ंक्शन कॉल करने के अवसर से चूक सकता है।
- अस्पष्ट: 'मौसम का डेटा प्राप्त करें।'
- अच्छा: 'किसी विशिष्ट शहर की वर्तमान मौसम स्थितियाँ प्राप्त करें। इसका उपयोग तब करें जब उपयोगकर्ता स्पष्ट रूप से किसी नामित स्थान के मौसम के बारे में पूछे। तापमान, स्थितियाँ और आर्द्रता लौटाता है।'
स्कीमा के निश्चित अनुपालन के लिए सख्त मोड
संरचित आउटपुट के लिए OpenAI का सख्त मोड यह सुनिश्चित करता है कि मॉडल ऐसा JSON बनाए जो आपके स्कीमा से पूरी तरह मेल खाए — न कोई अतिरिक्त फ़ील्ड और न ही कोई आवश्यक फ़ील्ड गायब। फ़ंक्शन की परिभाषा में 'strict': true सेट करके इसे सक्षम करें। ध्यान दें: सख्त मोड के लिए सभी स्कीमा ऑब्जेक्ट में additionalProperties: false आवश्यक है।
strict_tool = {
'type': 'function',
'function': {
'name': 'classify_ticket',
'description': 'Classify a support ticket into category and priority.',
'strict': True, # Enable strict schema adherence
'parameters': {
'type': 'object',
'additionalProperties': False, # Required for strict mode
'properties': {
'category': {
'type': 'string',
'enum': ['billing', 'technical', 'account', 'other']
},
'priority': {
'type': 'string',
'enum': ['low', 'medium', 'high', 'urgent']
}
},
'required': ['category', 'priority']
}
}
}अपने फ़ंक्शन स्कीमा का परीक्षण
परिनियोजित करने से पहले, प्रत्येक फ़ंक्शन स्कीमा का विविध इनपुट के साथ परीक्षण करें: सामान्य मामले, सीमांत मामले और प्रतिकूल इनपुट। जाँचें कि मॉडल सही फ़ंक्शन कॉल करता है, मान्य आर्ग्युमेंट प्रकार बनाता है, वैकल्पिक फ़ील्ड को सही ढंग से संभालता है और enum की सीमाओं का पालन करता है। प्रोडक्शन कोड लिखने से पहले तेज़ी से बदलाव करने के लिए OpenAI Playground का उपयोग करें।
त्वरित जाँच
OpenAI API के लिए फ़ंक्शन स्कीमा परिभाषित करने की अपनी समझ जाँचें।
पाठ का पुनरावलोकन
इस पाठ में आपने सीखा: फ़ंक्शन स्कीमा पैरामीटर के प्रकार, विवरण और सीमाएँ परिभाषित करने के लिए JSON Schema का उपयोग करते हैं, tool_choice यह नियंत्रित करता है कि मॉडल को फ़ंक्शन कॉल करना आवश्यक है या वह स्वतंत्र रूप से चुन सकता है, और Pydantic मॉडल मैन्युअल स्कीमा लेखन कम करने के लिए JSON Schema स्वतः बना सकते हैं। अब हम आपके अनुप्रयोग में टूल कॉल का पता लगाना, उन्हें निष्पादित करना और परिणाम वापस भेजना सीखेंगे।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “एपीआई के लिए फ़ंक्शन स्कीमा परिभाषित करना” पाठ निःशुल्क है?
हाँ—“एपीआई के लिए फ़ंक्शन स्कीमा परिभाषित करना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और AI Engineering Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। AI Engineering Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“एपीआई के लिए फ़ंक्शन स्कीमा परिभाषित करना” में मैं क्या सीखूँगा?
अपने फ़ंक्शन के लिए JSON Schema परिभाषाएँ लिखें, उन्हें tools पैरामीटर में भेजें और समझें कि मॉडल उन्हें कब और कैसे कॉल करने का निर्णय लेता है। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ AI Engineering Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या AI Engineering Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर AI Engineering Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“एपीआई के लिए फ़ंक्शन स्कीमा परिभाषित करना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस AI Engineering Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर AI Engineering Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- एपीआई के लिए फ़ंक्शन स्कीमा परिभाषित करना
- अपने अनुप्रयोग में टूल कॉल संसाधित करना
- समानांतर फ़ंक्शन कॉलिंग
- प्राकृतिक भाषा डेटाबेस इंटरफ़ेस बनाना