1. ফাংশন কল করার পরিচিতি

GPT মডেলে, ফাংশন কল করা হলো API মাধ্যমে মডেলকে বিবরণমূলক ফাংশন সরবরাহ করা, যাতে এটি বুঝতে পারে এবং একটি JSON অবজেক্ট তৈরি করতে পারে যা এক বা একাধিক ফাংশন কল করার জন্য প্যারামিটার ধারণ করে। গাম্ভীর্যপূর্ণ ব্যাপার, চ্যাট পূরণ API সরাসরি ফাংশনের কল না করে, বরং কোডে ফাংশন কল করার জন্য ব্যবহ্রত হতে পারে JSON তৈরি করে।

সহজ ভাষায়, ফাংশন কলিং বৈশিষ্ট্যটি জিপিটি মডেলকে বিবরণমূলক ফাংশন সংজ্ঞার সেট সরবরাহ করা, যাতে মডেলটি ব্যবহারকারীর জিজ্ঞাসা ভিত্তিতে কোন ফাংশন কল করা উচিত, তা নির্ধারণ করে। কারণ মডেলটি বাহ্যিক ফাংশন ব্যবহার না করতে পারে, এটি শুধুমাত্র ফাংশন কল করার জন্য প্যারামিটারসহ একটি অনুরোধ দেয়। মডেলের অনুরোধ ফলাফল পেয়ে প্রোগ্রামটি স্থানীয়ভাবে ফাংশন কল করে। ফাংশন কলের ফলাফলটি তারপর প্রোম্পট এবং মডেলে প্রেরণ করার জন্য প্রেরিত হয় এবং বাস্তব ফলাফলটি ব্যবহারকারীর কাছে ফিরিয়ে প্রেরণ করা হয়।

2. ফাংশন কলিং এর অ্যাপ্লিকেশন সংলগ্নভাব

এটির প্রাথমিক অ্যাপ্লিকেশনের কিছু উদাহরণ এই রকম:

  • বাইরের API গুলি কল করে প্রশ্নের উত্তরে সাহায্যকারী তৈরি করা, যেমন send_email(to: string, body: string) বা get_current_weather(location: string, unit: 'celsius' | 'fahrenheit') অপদাতা ফাংশন সংজ্ঞায়িত করা।
  • প্রাকৃতিক ভাষা কে API কলে রূপান্তর করা, উদাহরণস্বরূপ "আমার শীর্ষ গ্রাহক কে?" কে get_customers(min_revenue: int, created_before: string, limit: int) এ রূপান্তর করে এবং তারপর একটি অভ্যন্তরীণ API কল করা।
  • টেক্সট থেকে স্তরবদ্ধ তথ্য বের করা, উদাহরণস্বরূপ extract_data(name: string, birthday: string) বা sql_query(query: string) সংজ্ঞায়িত করে।

ফাংশন কলিং বৈশিষ্ট্যটি ব্যবহার করে, আমরা আমাদের স্থানীয় সিস্টেম এবং ডেটাবেস সাথে সংযোগ করতে বাধ্য তৈরি করতে পারি, যেমন আই এআই যাচাই করা, স্টক মূল্য যাচাই করা, আরোডার নিতে, বা ফ্লাইট বুকিং করা।

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 পাইথন বাংলাদেশি

জেনেরিক ভাবে ওপেনএআই প্ল্যাটফর্মে ফাংশন কলিং সমর্থন করা উপরের পদক্ষেপগুলি মেনে চলতে হয়। নীচের দেখা যাবে পাইথন কোডের একটি উদাহরণ, যেখানে মূলত আবহান পর্বের কডের উপর বিষয় কেদ্র করে একটি পূর্ন প্রক্রিয়ার স্বদেশ করা হচ্ছে।

পদক্ষেপ 1: মডেলের জন্য ফাংশনগুলি এবং ফাংশন সংজ্ঞার সন্ধান করা

সবপর্ণ জিনিসের আগে, আমরা গিপিটি মডেল দ্বারা কল করা যে ফাংশনগুলি সেট করতে হবে। সাধারণভাবে এটি মানে আমাদের নিজস্ব ফাংশনগুলি সেট করা জন্য যে সেই ফাংশন যা প্যারামিটারসহ নির্দিষ্ট অপারেশন সম্পাদন করতে পারে, যেমন তৃতীয় পক্ষ এপিআইর সাথে যোগাযোগ করতে।।

import json

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

পদক্ষেপ 2: অনুসন্ধান এবং সরঞ্জাম প্যারামিটার ভিত্তিক মডেল কল করুন

পরবর্তীতে, আমাদের প্রয়োজন হবে চ্যাট সম্পূরণ এপিআই দিয়ে GPT মডেল কে কল করা এবং ব্যবহারকারীর অনুসন্ধান (যেমন: "বর্তমান আবহাওয়া কী?") এবং tools প্যারামিটারটি পাঠাব। tools প্যারামিটারে, আমরা চিহ্নিত করা get_current_weather ফাংশনের বর্ণনা থাকবে।

from openai import OpenAI

client = OpenAI()

tools = [{
    "type": "function",
    "function": {
        "name": "get_current_weather",
        "description": "দেওয়া অবস্থানের জন্য বর্তমান আবহাওয়া পেতে",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {
                    "type": "string",
                    "description": "শহরের নাম, উদাহরণ: 'সান ফ্রাংসিসকো, CA'"
                },
                "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 প্রতিক্রিয়া প্যারামিটারে বর্ণিত থাকবে। তারপরে, tool_calls প্যারামিটারে বর্ণিত ফাংশন কল তথ্যের ভিত্তিতে প্রাক্তন ফাংশন কল স্থানীয়ভাবে পুনর্বিচার করা যাবে।

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.1 'টুলস' প্যারামিটার ফিল্ডের অর্থ

ফাংশন কল করার সময়, আপনাকে টুলস প্যারামিটারে ফাংশনের সংশ্লিষ্ট তথ্য নির্ধারণ করতে হবে। টুলস প্যারামিটারটি একটি অ্যারে, যা বহুগুণ ফাংশন সংজ্ঞানা করে, এবং প্রতিটি ফাংশন সংজ্ঞানা নিম্নলিখিত ফিল্ড সহ অন্তর্ভুক্ত করে:

  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 অনুরোধ ফাংশন কলের উদাহরণ

ওপেনএআই একটি API উপলব্ধ করা যেতে HTTP প্রোটোকলের মাধ্যমে প্রবেশযোগ্য। নীচে, আমরা HTTP API মাধ্যমে ফাংশন কল ফিচার ব্যবহার করার উপায় নির্ধারণ করব। অন্য প্রোগ্রামিং ভাষার প্রকারভেদী তালিকা উপরের উদাহরণের মতো সানান্তরে করতে পারেন।

4.3.1. পদক্ষেপ 1: ব্যবহারকারী অনুসারে মডেল কল করুন এবং ফাংশন ঘোষণা

প্রথমে, আমাদের প্রয়োক্তার জিজ্ঞাসা এবং আমরা যা ফাংশন সমর্থন করি, তাদের তালিকা গপ্ত মডেলকে পাঠাতে হবে, যাতে মডেলটি ব্যবহারকারীর প্রশ্নের ভিত্তিতে ব্যবহারকারীর জিজ্ঞাসার উত্তরের জন্য কোনটি কল করতে হবে তা স্বয়ংক্রিয়ভাবে বিশ্লেষণ করতে পারে।

নিচের উদাহরণে, আমরা GPT কে জানাই যে আমাদের একটি 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": "আজ শাঙ্গাইতে আবহাওয়া কেমন?"
        }
    ],
    "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", // যে জিপ
### 4.3.3. ধাপ 3: ফাংশনের ফলাফল ফিরে আসার পরে মডেলকে আবার কল করুন

কারণ ফাংশন কলটি স্থানীয়ভাবে বাস্তবায়ন হয়, আমাদের প্রশ্নের ফলাফল এবং ব্যবহারকারীর প্রশ্নটি আবার GPT মডেলে পাঠাতে হবে।

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": "{"শহর":"শাঙ্ঘাই", "তাপমাত্রা":"25 ডিগ্রী সেন্টিগ্রেড"}" } ], "tools": [ { "type": "function", "function": { "name": "get_current_weather", "description": "নির্ধারিত অবস্থানের বর্তমান আবহাওয়া তথ্য প্রাপ্ত করুন", "parameters": { "type": "object", "properties": { "অবস্থান": { "type": "string", "description": "আবহাওয়া জানতে যে সিটি, উদাহরণস্বরূপ, 'সান ফ্রান্সিস্কো, ক্যালিফোর্নিয়া'" }, "ইউনিট": { "type": "string", "enum": [ "সেন্টিগ্রেড", "ফারেনহাইট" ], "description": "তাপমাত্রার একক, 'সেন্টিগ্রেড' এর জন্য 'সেন্টিগ্রেড', 'ফারেনহাইট' এর জন্য 'ফারেনহাইট'" } }, "required": [ "অবস্থান", "ইউনিট" ] } } } ] }'


নোট: উপরের অনুরোধটি ফাংশনের বৃত্তান্তের ফলাফল সম্পর্কে GPT মডেলকে জানানোর জন্য অতিরিক্ত ফাংশন বার্তা অন্তর্ভুক্ত করে। GPT ফাংশনের ফলাফল তথ্যের উপর ভিত্তি করে ব্যবহারকারীর প্রশ্নের উত্তর নিবে এবং আবার ফাংশন কল করবে না।

ফাংশনের বার্তাটি ফাংশনের ফেরত মান প্রতিনিধিত্ব করে এবং নীচের ফরম্যাট অনুসরণ করে:

{ "role": "function", // বার্তার প্রকার ফাংশন, বোঝায় বা ফাংশনের ফেরত মান দেওয়া হয়েছে "name": "get_current_weather", // GPT কে বোঝাতে যে বর্তমান বার্তা হল সে দ্বারা get_current_weather ফাংশনের ফেরত মান "content": "{"শহর":"শাঙ্ঘাই", "তাপমাত্রা":"25 ডিগ্রী সেন্টিগ্রেড"}" // ফাংশনের ফেরত মান, JSON ফরম্যাটে অথবা অন্যান্য পাঠ্য বিষয়ক হতে পারে। }


নীচে GPT দ্বারা তৈরি বার্তা দেখুন:

{ "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" } ] }