এলএলএম মডেল শুধুমাত্র টেক্সট আউটপুট দেয়, কিন্তু বাস্তব অ্যাপ্লিকেশনে API কল, ডেটাবেস রিড বা সিস্টেম কমান্ড চালানো দরকার হয়। ফাংশন কলিং (Function Calling) এই ঘাটতি পূরণ করে, যেখানে মডেল নিজে কোন ফাংশন কল করতে হবে তা বুঝে প্রয়োজনীয় আর্গুমেন্ট তৈরি করে এবং আপনার অ্যাপ্লিকেশন সেই ফাংশন রান করে। Spring AI এই পুরো ফ্লোকে মাত্র কয়েকটি অ্যানোটেশন ও কনফিগারেশনে গুটিয়ে এনেছে, যার ফলে চ্যাট-ভিত্তিক সিস্টেমে রিয়েল-টাইম টুলস যোগ করা যায় অত্যন্ত দ্রুত। এই টিউটোরিয়ালে আপনি শিখবেন কীভাবে Spring AI-তে কাস্টম ফাংশন ডিফাইন, রেজিস্টার ও চ্যাট ক্লায়েন্টে ব্যবহার করতে হয়, এবং সঙ্গে কিছু বাস্তবসম্মত সেরা চর্চাও দেখে নেবেন।

ফাংশন কলিং কী?

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

Spring AI এই মেকানিজমকে স্ট্যান্ডার্ডাইজ করে। আপনি জাভা মেথডকে @Tool দিয়ে চিহ্নিত করলেই সেটি ফাংশন কল হিসেবে রেজিস্টার হয়ে যায়। চ্যাট ক্লায়েন্ট মডেলকে পাঠানোর সময় উপলব্ধ ফাংশনের স্কিমা জানায়, এবং যখন মডেল কোনো ফাংশন কল করতে মনস্থ করে তখন Spring AI সেই মেথড অটোম্যাটিক্যালি চালায়। সমস্ত কমপ্লেক্সিটি সিরিয়ালাইজেশন, ডিসিরিয়ালাইজেশন ও এরর হ্যান্ডলিং ফ্রেমওয়ার্ক সামলে নেয়।

কেন ফাংশন কলিং ব্যবহার করবেন?

শুধুমাত্র টেক্সট জেনারেশন দিয়ে যে সব সমস্যার সমাধান হয় না, সেগুলোতেই ফাংশন কলিং প্রয়োজন হয়:

  • রিয়েল-টাইম ডেটা অ্যাক্সেস: আবহাওয়া, স্টক প্রাইজ বা খেলার স্কোরের মতো তথ্য মডেলের ট্রেনিং ডেটায় থাকে না; ফাংশন কলিং এর মাধ্যমে লাইভ API হিট করে সঠিক ডেটা আনা সম্ভব।
  • সিস্টেম ইন্টিগ্রেশন: টিকিট বুকিং, ইমেইল পাঠানো, CRM রেকর্ড তৈরি — এই সব একশন ফাংশন কলিং ছাড়া করা যায় না।
  • কনটেক্সট এনরিচমেন্ট: ইউজারের আগের অর্ডার বা প্রেফারেন্স ডেটাবেস থেকে টেনে এনে রেসপন্সের প্রাসঙ্গিকতা বাড়ানো।
  • হ্যালুসিনেশন কমানো: যখন মডেল কোনো তথ্য জানে না, তখন অনুমান করার পরিবর্তে সে সরাসরি ফাংশন কল করে নির্ভুল উত্তর সংগ্রহ করতে পারে।

Spring AI-তে ফাংশন কলিং ব্যবহার করলে আপনার কোডবেস ক্লিন থাকে, কারণ ফাংশন লজিক ও চ্যাট ফ্লো সম্পূর্ণ আলাদা থাকে। আপনি প্লাগ-অ্যান্ড-প্লে স্টাইলে যেকোনো নম্বর ফাংশন যোগ করতে পারবেন, এবং মডেল অটোমেটিক বুঝে নেয় কোন ফাংশন কখন দরকার।

Spring AI-তে ফাংশন কলিং বাস্তবায়ন

Spring AI-তে একটি ফাংশন কলিং সেটআপ তিন ধাপে শেষ হয়: (১) ফাংশন ডিফাইন ও অ্যানোটেট করা, (২) চ্যাট ক্লায়েন্টে রেজিস্টার করা, এবং (৩) প্রম্পটের মাধ্যমে কল ট্রিগার করা। নিচের উদাহরণে একটি আবহাওয়া ফাংশন তৈরি করছি যা শহরের নাম ও ইউনিট নেয় এবং বর্তমান আবহাওয়া রিটার্ন করে।

ধাপ ১: সার্ভিস ক্লাসে @Tool ব্যবহার করা

import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Service;

@Service
public class WeatherService {

    @Tool(name = "getCurrentWeather",
          description = "Get current temperature and condition for a city")
    public String getCurrentWeather(
            @ToolParam(description = "City name") String city,
            @ToolParam(description = "Temperature unit, e.g., celsius or fahrenheit") String unit) {
        // Mock response; replace with real API call
        return "City: " + city + ", Temp: 22°C, Condition: Sunny";
    }
}

@Tool-এর namedescription মডেলের কাছে ফাংশনের আইডেন্টিটি প্রকাশ করে — এগুলো যতটা সম্ভব পরিষ্কার রাখুন, কারণ মডেল এগুলোর উপর ভিত্তি করে সিদ্ধান্ত নেয়। @ToolParam অ্যানোটেশন প্রতিটি ইনপুট প্যারামিটার সম্পর্কে মডেলকে গাইড করে।

ধাপ ২: ChatClient-এ ফাংশন রেজিস্টার করা

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ChatConfig {

    @Bean
    ChatClient chatClient(ChatModel chatModel, WeatherService weatherService) {
        return ChatClient.builder(chatModel)
                .defaultFunctions(weatherService)  // @Tool metered bean
                .build();
    }
}

defaultFunctions(weatherService) কল করলে Spring AI ওই বিনের সব @Tool মেথড স্ক্যান করে ফাংশন কলব্যাক তৈরি করে। আপনি চাইলে শুধুমাত্র নির্দিষ্ট ফাংশনের নামও পাস করতে পারেন, কিংবা আলাদা FunctionCallback বিল্ড করে রেজিস্টার করতে পারেন।

ধাপ ৩: কল ট্রিগার ও রেসপন্স পাওয়া

String response = chatClient.prompt()
        .user("What is the current weather in Dhaka?")
        .call()
        .content();
System.out.println(response);

ইউজারের প্রম্পট থেকে মডেল বুঝতে পারে যে getCurrentWeather ফাংশন দরকার, উপযুক্ত আর্গুমেন্ট তৈরি করে, Spring AI সেই ফাংশন রান করে এবং রিটার্ন ভ্যালু মডেলে ফিড হয়। শেষে ইউজার পায় প্রাকৃতিক ভাষায় সুন্দর একটি আবহাওয়া আপডেট।

Spring AI ওপেনএআই, অ্যানথ্রপিক, অলামা-সহ জনপ্রিয় মডেল প্রোভাইডারদের ফাংশন কলিং ফরম্যাট স্বাভাবিকভাবে হ্যান্ডেল করে — আপনার কোনো প্রোভাইডার-স্পেসিফিক কোড লাগবে না।

ফাংশন কলিংয়ের সেরা চর্চাসমূহ

প্রোডাকশন-রেডি ফাংশন কলিং ইমপ্লিমেন্ট করতে নিচের পয়েন্টগুলো মেনে চলুন:

  • পরিষ্কার ও কনসাইস ডেসক্রিপশন: মডেল ভুল ফাংশন বাছাই না করে সেটা নিশ্চিত করতে description ফিল্ডে ফাংশনের কাজ ও আউটপুট পরিষ্কারভাবে বলুন। অপ্রয়োজনীয় তথ্য দেবেন না।
  • ইনপুট ভ্যালিডেশন: @ToolParam ডেসক্রিপশনই শেষ কথা নয়; ফাংশন বডির শুরুতে দরকারি ভ্যালিডেশন অ্যাড করুন এবং অর্থপূর্ণ এক্সেপশন থ্রো করুন। Spring AI এরর হলে মডেলে সেই এরর ফেরত পাঠিয়ে রি-ট্রাই করার সুযোগ দেয়।
  • সাইড এফেক্ট মিনিমাইজ করা: কোনো ফাংশন যদি ডেটা পরিবর্তন করে (যেমন ডিলিট), তবে মডেল যাতে ভুলবসত একাধিক বার কল না করে সে জন্য কনফার্মেশন স্টেপ বা হিউম্যান-ইন-দ্য-লুপ যুক্ত করুন।
  • স্কোপ ও নেটওয়ার্ক কল: দীর্ঘ-জীবী নেটওয়ার্ক কল বা রিসোর্স-ইনটেনসিভ অপারেশন হলে ক্যাশিং, টাইম আউট এবং রেট-লিমিট বসান। ফাংশন রেসপন্স ছোট ও প্রাসঙ্গিক রাখুন, অযথা ডেটা ডাম্প করবেন না।
  • টেস্ট ও মনিটরিং: “ফাংশন কল হয়েছে কিন্তু রেজাল্ট খারাপ” এরকম কেস ধরতে লগিং ও মেট্রিকস যোগ করুন। মক ফাংশন দিয়ে ইন্টিগ্রেশন টেস্ট লিখুন যাতে চেক করতে পারেন মডেল ঠিক আর্গুমেন্ট দিচ্ছে কিনা।
  • স্ট্রাকচার্ড রিটার্ন টাইপ: প্লেইন স্ট্রিং-এর পরিবর্তে JSON-পার্সেবল অবজেক্ট রিটার্ন করলে মডেল ডেটা এক্সট্রাক্ট করতে বেশি সফল হয়। Spring AI পোজো-ভিত্তিক রিটার্ন টাইপ সমর্থন করে, যা @Tool মেথড থেকে সরাসরি ফেরত দেওয়া যায়।

সারসংক্ষেপ

ফাংশন কলিং আধুনিক এআই অ্যাপ্লিকেশনকে কেবল টেক্সট জেনারেশন থেকে তুলে এনে সত্যিকারের এজেন্টিক আচরণ দেয়। Spring AI এই জটিলতার বড় অংশ কাঁধ থেকে সরিয়ে নেয় — @Tool অ্যানোটেশন, স্বয়ংক্রিয় স্কিমা জেনারেশন এবং সিমলেস চ্যাট ক্লায়েন্ট ইন্টিগ্রেশনের মাধ্যমে। আজকের টিউটোরিয়ালে আপনি দেখলেন কীভাবে মাত্র একটি সার্ভিস ক্লাস ও কয়েক লাইনের কনফিগারেশন দিয়ে একটি ফাংশন কলিং পাইপলাইন তৈরি করতে হয়। বাস্তব প্রকল্পে এই প্যাটার্ন ফলো করলে আপনার এপ্লিকেশন হবে আরও নির্ভুল, দ্রুত এবং কার্যকরী।

Share