1. تعارف کی تفصیل

GPT ماڈل میں، "فنکشن کالنگ" سے مراد، ایک API کے ذریعے ماڈل کو وضاحت ناک فنکشن فراہم کرنا ہوتا ہے، جو اسے عقلمندی سے ایک یا مزید فنکشن کو بلانے کی پیرامیٹرز شامل کردیتا ہے۔ اہم نوٹ کرنا ضروری ہے کہ چیٹ مکمل کا API سیدھے طور پر فنکشن کالز کو نہیں چلاتا ہے، بلکہ وہ صرف JSON پیدا کرتا ہے جو کوڈ میں فنکشن کو چلانے کے لئے استعمال کیا جاسکتا ہے۔

سادہ الفاظ میں، فنکشن کالنگ فیچر میں GPT ماڈل کو فنکشن کی تعریفوں (جیسے فنکشن کی تفصیلات اور پیرامیٹر کی تفصیلات) کی ایک سیٹ فراہم کرنا شامل ہوتا ہے۔ ماڈل پھر صارف کی سوال کے مطابق فنکشن کون سا بلانا ہے، یہ فیصلہ کرتا ہے۔ چونکہ ماڈل بیرونی فنکشن کارروائی نہیں کرسکتا، لہذا وہ صرف فنکشن کو بلانے کے لئے درخواست کرتا ہے (فنکشن کال کے پیرامیٹرز شامل ہوتے ہیں)۔ ماڈل کی درخواست کے نتیجے کو ملنے کے بعد، ہمارا پروگرام مقامی طور پر فنکشن کال کو چلاتا ہے۔ فنکشن کال کا نتیجہ پرومپٹ کے ساتھ ملا کر ماڈل کو واپسی ترتیب دینے سے پہلے اسے بھیج دیتے ہیں تاکہ صارف کو آخری نتیجہ مل سکے۔

2. فنکشن کالنگ کے اطلاق کے مواقع

یہاں کچھ عملی استعمالات کی مثالیں ہیں:

  • بیرونی API بلانے کے ذریعے سوالات کے جواب دینے کے لئے ایسسٹنٹ بنانا، جیسے کے send_email(to: string, body: string) یا get_current_weather(location: string, unit: 'celsius' | 'fahrenheit') جیسے فنکشنز کی تعریف کرنا۔
  • طبیعی زبان کو API کالز میں تبدیل کرنا، مثال کے طور پر "Who are my top customers?" کو get_customers(min_revenue: int, created_before: string, limit: int) میں ترجمہ کرنا اور پھر ایک اندرونی API کال کرنا۔
  • متن سے منظم ڈیٹا باہر نکالنا، مثال کے طور پر extract_data(name: string, birthday: string) یا sql_query(query: string) جیسے فنکشنز کی تعریف کرنا۔

فنکشن کالنگ فیچر کا استعمال کرکے، ہم مقامی سسٹمز اور ڈیٹا بیسز سے مختلف AI ایجنٹس کو لاگو کرسکتے ہیں، جیسے کے AI سے تازہ ترین موسم کا سوال کرنا، اسٹاک کے قیمتوں کی جانچ پڑتال کرنا، ٹیک آوٹ کی سفارش کرنا، یا فلائٹ بک کرنا۔

3. فنکشن کالنگ کی حمایت کرنے والے ماڈلز

ماڈلز کا تمام ورژنز فنکشن کالنگ ڈیٹا کے ساتھ تربیت نہیں کرا گیا۔ حالیہ دور میں، فنکشن کالنگ کی حمایت کرنے والے ماڈلز یہ ہیں: gpt-4, gpt-4-turbo-preview, gpt-4-0125-preview, gpt-4-1106-preview, gpt-4-0613, gpt-3.5-turbo, gpt-3.5-turbo-1106, اور gpt-3.5-turbo-0613۔

اس کے علاوہ، gpt-4-turbo-preview, gpt-4-0125-preview, gpt-4-1106-preview, اور gpt-3.5-turbo-1106 ماڈلز توازنی طریقے سے فنکشن کالنگ کا ساتھ دیتے ہیں، جو انہیں ممکن بناتا ہے کے وہ ایک ساتھ متعدد فنکشن کالز کو چلائیں اور یہ فنکشن کالز متوازن طریقے سے چلانے کے بعد فعال اور کارگر نتائج حاصل کرسکیں۔

نوٹ: فنکشن کالنگ فیچر کے ساتھ منسلک خطرہ یہ ہے کہ یہ ماڈل غلط پیرامیٹرز (یعنی، پھینٹم پیرامیٹرز) پیدا کرسکتا ہے۔ اس لیے، واقعی دنیا کو متاثر کرنے والی کسی بھی کارروائی سے پہلے (جیسے کے ای میل بھیجنا، آن لائن شائع کرنا، خریداری کرنا، وغیرہ)، مصنوعات کی سطح پر صارف کی تصدیق کے عمل کو جوڑنا ضروری ہے، یہ یقینی بنانا کہ فنکشنز صرف صارف کی تصدیق کے بعد ہی چلائے جائیں۔

4. فنکشن کالنگ کی مثالیں

4.1 پائتھن مثال

OpenAI پلیٹفارم پر فنکشن کالنگ کو تعمیل کرنے کے عام اقدامات عام طور پر مندرجہ ذیل بنیادی قدموں پر مشتمل ہوتے ہیں۔ نیچے دیا گیا مثال پائتھن کوڈ کی مدد سے موسم کا سوال کرنے پر تمام عمل کو تفصیل سے بیان کرے گا۔

قدم 1: ماڈل کے لئے قابل بلائی فنکشن اور فنکشن کی تعریف تیار کریں

سب سے پہلے، ہمیں ایک ایسا فنکشن تعریف کرنا ہے جو GPT ماڈل کے ذریعے بلایا جا سکے۔ عام طور پر یہ یہ مطلب ہوتا ہے کہ ہمیں اپنا خود کا فنکشن تیار کرنا ہوگا جو دئیے گئے پیرامیٹرز کے مطابق مختلف عملیات کرسکتا ہے، جیسے کے کسی تیسرے طرف کی API سے بات چیت کرنا۔

import json

def get_current_weather(location, unit="fahrenheit"):
    return json.dumps({
        "location": location, 
        "temperature": "18", 
        "unit": unit
    })

مرحلہ 2: مکمل کورونا ماڈل کو کوئیری اور ٹولز پیرامیٹر کے استعمال

اگلے، ہمیں چیٹ مکمل کرنے والے اے پی آئی کے ذریعہ GPT ماڈل کو کال کرنی ہوگی اور یوزر کی کوئیری (مثال کے طور پر "موجودہ موسم کیسا ہے") کو بھیجنی ہوگی جو کہ ٹولز پیرامیٹر میں شامل ہے، جو ہم نے فقط تعریف کردی ہے۔

from openai import OpenAI

client = OpenAI()

tools = [{
    "type": "function",
    "function": {
        "name": "get_current_weather",
        "description": "موجودہ مقام کا موسم حاصل کریں",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {
                    "type": "string",
                    "description": "شہر کا نام، مثلاً: 'سان فرانسسکو، کیلیفورنیا'"
                },
                "unit": {
                    "type": "string",
                    "enum": ["سیلسیس", "فارنہائیٹ"]
                }
            },
            "required": ["location"]
        }
    }
}]

response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "سان فرانسسکو میں موجودہ موسم کیسا ہے؟"}],
    tools=tools
)

مرحلہ 3: فعل کو مقامی طور پر اجراء کریں

ماڈل کی طرف سے واپسی کردہ نتیجہ میں عموماً ٹول کالز جوابی پیرامیٹر میں بیان کردی جانے والی فنکشن کے بارے میں معلومات شامل ہوگی۔ ہم پھر ٹول کالز پیرامیٹر میں بیان شدہ فنکشن کال کی معلومات پر مبنی فنکشن کال لوکلی طور پر اجراء کرسکتے ہیں۔

tool_calls = response.choices[0].message.tool_calls

if tool_calls:
    arguments = json.loads(tool_calls[0].function.arguments)
    weather_info = get_current_weather(**arguments)
    print(weather_info) # یہاں ہم فنکشن کال کیا گیا موسم کی معلومات دیکھ سکتے ہیں

مرحلہ 4: ماڈل کو دوبارہ فنکشن واپسی نتیجہ کے ساتھ کال کریں

اب ہم ماڈل کو نیا پیغام بھیج سکتے ہیں، تاکہ ماڈل ان نتائج کا ساتھ دیتے ہوئے، صارف کے لئے ایک مناسب جواب تیار کرسکے۔

follow_up_response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "user", "content": "سان فرانسسکو میں موجودہ موسم کیسا ہے؟"},
        {"role": "function", "name": "get_current_weather", "content": weather_info}
    ],
    tools=tools
)

وضاحت: اوپر دیئے گئے مثال میں، فنکشن کی واپسی مواد کو مندرجہ ذیل فنکشن پیغام کے ذریعہ GPT ماڈل تک بھیجا جاتا ہے:

{"role": "function", "name": "get_current_weather", "content": weather_info}

عمل میں، آپ اس کو بھی سسٹم پیغام موجودہ معلومات کی رہنمائی کے لئے استعمال کرنے کے لئے بصورت حوالہ مواد کے طور پر بھیج سکتے ہیں تاکہ AI سوالات کے جواب دیتے وقت اس پر حوالہ دے۔

مرحلہ 5: ماڈل سے آخری جواب حاصل کریں

آخر میں، ہم ماڈل کا آخری جواب حاصل کرسکتے ہیں اور اسے صارف کو فراہم کرسکتے ہیں۔ اس مرحلے میں، ماڈل صارف کے لیے دوستانہ جواب دے گا جو موسم کی معلومات کے مبنی ہوگا۔

final_output = follow_up_response.choices[0].message.content
print(final_output) # یہ موسم کی معلومات ہے جو ہمیں صارف کو دکھانا ہے

اوپر دیئے گئے مراحل کا پیروی کرتے ہوئے، ہم نے GPT ماڈل اور فنکشن کالز کی مدد سے موسم کی معلومات کی تلاش کا مکمل مثال مکمل کرلی ہے۔

4.2. فنکشن کال فنکشن کی تعریف کی وضاحت

4.2.1 'Tools' پیرامیٹر فیلڈوں کا مطلب

کسی تکمیل کرتے وقت، آپ کو تفصیلات تعین کرنی ہوتی ہیں کہ تکمیل کی 'پہلویں' پیرامیٹر میں تکمیل کی مخصوص معلومات کو شامل کریں۔ 'پہلویں' پیرامیٹر ایک اینٹریز کا اندراج سے بھرپور ایک ایرے ہوتا ہے، اور ہر اینٹری میں مندرجہ ذیل فیلڈ شامل ہوتے ہیں:

  1. type: یہ فیلڈ ٹول کے قسم کو ظاہر کرتا ہے۔ فنکشن کال میں، یہ فیلڈ "function" پر سیٹ ہونا چاہئے۔
  2. function: یہ فیلڈ فنکشن کی تفصیلات شامل کرتا ہے اور مندرجہ ذیل مخصوص فیلڈز کے ساتھ ایک آبجیکٹ ہوتا ہے:
    • name: فنکشن کا نام، جو ایک اسٹرنگ ہوتا ہے۔
    • description: فنکشن کے مقصد کی وضاحت، جو ماڈل کو صارف کی توقعات پوری کرنے والے پیرامیٹرز تیار کرنے میں مدد فراہم کر سکتی ہے۔
    • parameters: فنکشن کے پیرامیٹر کی تعریف کا بیان کرتا ہے اور مندرجہ ذیل ذیلی فیلڈز کا ایک آبجیکٹ ہوتا ہے:
      • type: پیرامیٹر کی قسم کا تعین کرتا ہے، جو زیادہ تر "object" پر سیٹ ہونا چاہئے۔
      • properties: ہر فنکشن پیرامیٹر کی مخصوص تعریفات، جہاں ہر پیرامیٹر کی تعریف، عام طور پر مندرجہ ذیل ذیلی فیلڈز کا آبجیکٹ ہوتا ہے:
        • type: پیرامیٹر کی ڈیٹا کی قسم (جیسے "string", "integer", "boolean" وغیرہ)۔
        • description: پیرامیٹر کی وضاحت، جو ماڈل کو اس کا مقصد سمجھنے میں مدد فراہم کرتی ہے۔
        • enum (اختیاری): جب type "string" ہوتا ہے، تو enum فیلڈ میں ایک ایرے کی ساخت کو ظاہر کر سکتا ہے جو درست قیمتوں کا سیٹ ہوتا ہے۔
      • required: ضروری پیرامیٹرز کے ناموں کو موادے کرنے والی اینٹری کی ایک ایرے۔

4.2.2 آلہ تعریف کرنے کے مثالیں

اب ہم کچھ مثالیں پیش کریں گے ٹولز کی تعریف کی تشریح میں مدد فراہم کرنے کے لئے۔

مثال 1: موجودہ موسم کی معلومات حاصل کریں

{
    "type": "function",
    "function": {
        "name": "get_current_weather",
        "description": "مخصوص مقام کے لیے موجودہ موسم کی معلومات حاصل کریں",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {
                    "type": "string",
                    "description": "موسم کا سوال کرنے والے شہر، مثلاً، 'سین فرانسسکو، کیلیفورنیا'"
                },
                "unit": {
                    "type": "string",
                    "enum": ["سینٹی گریڈ", "فارن ہائیٹ"],
                    "description": "درجہ حرارت کی یونٹ، 'سینٹی گریڈ' برائے سینٹی گریڈ، 'فارن ہائیٹ' برائے فارن ہائیٹ"
                }
            },
            "required": ["location", "unit"]
        }
    }
}

موجودہ مثال میں ہم نے get_current_weather نام کا فنکشن تعریف کیا ہے تاکہ مخصوص مقام کا موجودہ موسم حاصل کیا جا سکے۔ پیرامیٹرز میں location اور unit شامل ہیں، جہاں unit کے دو درست قیمتیں ہیں: "سینٹی گریڈ" (سینٹی گریڈ) اور "فارن ہائیٹ" (فارن ہائیٹ)۔

مثال 2: مخصوص کارندہ کے لیے البمز تلاش کریں

{
    "type": "function",
    "function": {
        "name": "find_artist_albums",
        "description": "مخصوص کارندے کے لیے تمام البمز تلاش کریں",
        "parameters": {
            "type": "object",
            "properties": {
                "artist_name": {
                    "type": "string",
                    "description": "کارندے کا نام"
                }
            },
            "required": ["artist_name"]
        }
    }
}

اس مثال میں، ہم نے find_artist_albums کا فنکشن بنایا ہے تاکہ مخصوص کارندے کے لیے تمام البمز تلاش کیے جا سکیں۔ یہ فنکشن صرف ایک پیرامیٹر کی ضرورت ہے: artist_name (کارندے کا نام)۔

4.3. HTTP درخواست فنکشن کال کا مثال

OpenAI ایک API فراہم کرتا ہے جو HTTP پروٹوکول کے ذریعے دسترسی پر دستیاب ہے۔ نیچے، ہم HTTP API کے ذریعے فنکشن کال فیچر کو استعمال کرنے کے طریقے کی وضاحت کریں گے۔ دیگر پروگرامنگ زبانوں کے ڈولپرز اس مثال سے استفادہ لے سکتے ہیں۔

4.3.1. اقدام 1: ماڈل کو صارف کی کوئیری اور فعل کی درخواست کے ساتھ کال کریں

پہلے ہمیں صارف کی کوئیری اور ہماری حمایت کردہ فنکشنز کی فہرست کو جی پی ٹی ماڈل کو بھیجنی ہوگی، تاکہ ماڈل خود بتا سکے کہ صارف کی کوئیری کا جواب دینے کے لئے وہ کس فنکشن کو بلانا چاہتا ہے۔

نیچے دیؓ گئی مثال میں، ہم نے جی پی ٹی کو مطلع کیا ہے کہ ہمارے پاس get_current_weather نام کا فنکشن ہے جو کسی مخصوص شہر کے لئے موسمی معلومات کو سوال کرنے کے لئے استعمال کیا جا سکتا ہے۔

curl --location 'https://api.aiproxy.io/v1/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {OPENAI_KEY}' \
--data '{
    "model": "gpt-3.5-turbo",
    "messages": [
        {
            "role": "user",
            "content": "What's the weather like in Shanghai today?"
        }
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "get_current_weather",
                "description": "مخصوص مقام کے لئے موسم کی معلومات حاصل کریں",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "موسم کا سوال کرنے والے شہر، مثلاً 'کراچی، پاکستان'"
                        },
                        "unit": {
                            "type": "string",
                            "enum": [
                                "سیلسیس",
                                "فارنہائیٹ"
                            ],
                            "description": "درجہ حرارت کی اکائی، 'سیلسیس' برائے سیلسیس، 'فارنہائیٹ' برائے فارنہائیٹ"
                        }
                    },
                    "required": [
                        "location",
                        "unit"
                    ]
                }
            }
        }
    ]
}'

درخواستی پیرامیٹر کی وضاحت:

{
    "model": "gpt-3.5-turbo", // کال کرنے والا جی پی ٹی ماڈل
    "messages": [ // یہ جی پی ٹی کے لئے میسجز کی فہرست ہے، جس میں صارف کی کوئیری شامل ہے
        {
            "role": "user",
            "content": "What's the weather like in Shanghai today?"
        }
    ],
    "tools": [
	  // یہ آپ کی فنکشن کی تعریف ہے، جس میں جی پی ٹی کو دستیاب فنکشن کی معلومات فراہم کر رہے ہیں
    ]
}

ٹولز پیرامیٹر کی تعریف کے لئے سیکشن 4.2.2 کو دیکھنے کے لئے بحث میں ملاحظہ کریں۔

جی پی ٹی ماڈل کی عام پروسیسنگ کے دوران، آپ کو مندرجہ ذیل کی طرح ایک آپی ریسپانس موصول ہوگا:

{
    "model": "gpt-3.5-turbo-0613",
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 122,
        "completion_tokens": 27,
        "total_tokens": 149
    },
    "id": "chatcmpl-8mL4hS4zNMocyR2ajKyAvSTcbNaao",
    "created": 1706531447,
    "choices": [
        {
            "index": 0,
            "delta": null,
            "message": {
                "role": "assistant",
                "tool_calls": [ // ٹول_کالز پیرامیٹر وہ فنکشنوں کی فہرست ہے، جنہیں جی پی ٹی کو بلانا چاہتا ہے
                    {
                        "id": "call_1iF09ttX1R9ESR18Ul2nLe1R",
                        "type": "function",
                        "function": {
                            "name": "get_current_weather",  // بات کرنے والا گی پی ٹی کو کہنا چاہتا ہے کہ یہ get_current_weather فنکشن کو بلانا چاہتا ہے
                            "arguments": "{\n  \"location\": \"Shanghai, China\",\n  \"unit\": \"celsius\"\n}" // یہ ہے get_current_weather فنکشن کو بلانے کے لئے داخلی پیرامیٹر
                        }
                    }
                ]
            },
            "finish_reason": "tool_calls"
        }
    ]
}

4.3.2. اقدام 2: مقامی فنکشن کال کرنے کا انجام

جیسے ہی جی پی ٹی ماڈل خود بخود کسی خاص فنکشن کو نہیں چلا سکتا اور صرف ہمیں بتا سکتا ہے کہ وہ کون سا فنکشن بلانا چاہتا ہے، ہمارے مقامی پروگرام کو ٹول_کالز پیرامیٹر کے اندراج کے مطابق خاص فنکشن کال کرنے کی ضرورت ہوتی ہے۔ مختلف پروگرامنگ زبانوں میں مقامی فنکشن کو کال کرنے کا طریقہ مختلف ہوتا ہے۔ مثال کے طور پر، پائتھن میں، آپ پہلے کے سیکشن میں دی گئی بحث پر ملاحظہ کر سکتے ہیں۔

4.3.3. مرحلہ 3: ماڈل کو دوبارہ فنکشن کے واپسی نتیجے کے ساتھ کال کریں

کیونکہ فنکشن کی کال محلی طور پر نہایت ہوتی ہے، لہذا ہمیں فنکشن کی اجراء کی نتیجے اور صارف کا سوال مکمل جواب حاصل کرنے کیلئے دوبارہ جی پی ٹی ماڈل کو پاس کرنا ہوگا۔

curl --location 'https://api.aiproxy.io/v1/chat/completions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer sk-Roc5MX1zEuVxiuaMaETV6wZ2jXcCehjUCzwP9AcNErUiwppQ' \
--data '{
    "model": "gpt-3.5-turbo",
    "messages": [
        {
            "role": "user",
            "content": "آج شانگھائی میں موسم کیسا ہے؟"
        },
        {
            "role": "function",
            "name": "get_current_weather",
            "content": "{\"city\":\"Shanghai\", \"temperature\":\"25 degrees Celsius\"}"
        }
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "get_current_weather",
                "description": "مخصوص مقام کے فعلی موسم کی معلومات حاصل کریں",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {
                            "type": "string",
                            "description": "موسم کی براہ راست سوال کی گئی شہر، مثلاً 'سان فرانسسکو، کیلیفورنیا'"
                        },
                        "unit": {
                            "type": "string",
                            "enum": [
                                "celsius",
                                "fahrenheit"
                            ],
                            "description": "درجہ حرارت کی اکائی، 'celsius' برائے سینٹی گریڈ، 'fahrenheit' برائے فارن ہائیٹ"
                        }
                    },
                    "required": [
                        "location",
                        "unit"
                    ]
                }
            }
        }
    ]
}'

نوٹ: مندرجہ بالا درخواست میں فنکشن پیغام شامل کیا ہے تاکہ جی پی ٹی ماڈل کو فنکشن کے واپسی قیمت کی معلومات دیں۔ جی پی ٹی سیدھا فنکشن کی واپسی معلومات پر کارروائی کر کے صارف کے سوال کا جواب دیتا ہے۔

فنکشن پیغام فنکشن کی واپسی قیمت کو ظاہر کرتا ہے اور مندرجہ زیر شکل کو مانتا ہے:

{
    "role": "function", // پیغام کی قسم فنکشن ہے، جو فنکشن کی واپسی قیمت کو ظاہر کرتا ہے
    "name": "get_current_weather", // جی پی ٹی کو مطلع کرنے کے لئے کہ موجودہ پیغام فنکشن get_current_weather کی واپسی قیمت ہے
    "content": "{\"city\":\"Shanghai\", \"temperature\":\"25 degrees Celsius\"}" // فنکشن کی واپسی قیمت، جو کے جسوں فارمیٹ یا دیگر متنی مواد میں ہوسکتی ہے۔
}

نیچے جی پی ٹی ماڈل کی طرف سے تیار کردہ حتمی جواب ہے:

{
    "model": "gpt-3.5-turbo-0613",
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 144,
        "completion_tokens": 17,
        "total_tokens": 161
    },
    "id": "chatcmpl-8mLmvvKAjSql7rGF8fvQeddKhWYvr",
    "created": 1706534189,
    "choices": [
        {
            "index": 0,
            "delta": null,
            "message": {
                "role": "assistant",
                "content": "آج شانگھائی میں موسم 25 درجہ سینٹی گریڈ کا ہے۔"
            },
            "finish_reason": "stop"
        }
    ]
}