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

চ্যাট মডেল কী?

স্প্রিং এআই-এ চ্যাট মডেল মূলত ChatModel ইন্টারফেসের মাধ্যমে প্রকাশিত হয়। এটি একটি চ্যাট-ভিত্তিক LLM-এর সঙ্গে সংলাপ পরিচালনার দায়িত্ব নেয়। আপনি যখন কোনো প্রম্পট পাঠান, মডেলটি অভ্যন্তরীণভাবে সেটিকে সংশ্লিষ্ট প্রোভাইডারের API-তে পাঠায় এবং একটি ChatResponse অবজেক্ট ফেরত আনে। এই রেসপন্সে থাকে একাধিক Generation (প্রজন্ম), প্রতিটি জেনারেশনের ভেতরে একটি AssistantMessage এবং প্রয়োজনীয় মেটাডেটা।

কথোপকথনের প্রেক্ষাপট ধরে রাখার জন্য স্প্রিং এআই Message টাইপগুলোর ভূমিকা ব্যবহার করে:

  • UserMessage: ব্যবহারকারী কর্তৃক প্রেরিত বার্তা।
  • AssistantMessage: মডেল থেকে ফেরত আসা প্রতিক্রিয়া।
  • SystemMessage: মডেলের আচরণ ও ব্যক্তিত্ব নির্ধারণের নির্দেশনা।

অতএব, একটি Prompt অবজেক্ট এক বা একাধিক মেসেজ নিয়ে গঠিত, এবং চ্যাট মডেল সেই প্রম্পট প্রক্রিয়া করে কাঙ্ক্ষিত চ্যাট রেসপন্স প্রদান করে।

কেন চ্যাট মডেল ব্যবহার করবেন?

চ্যাট মডেল অ্যাবস্ট্রাকশন ব্যবহারের পেছনে বেশ কিছু ব্যবহারিক কারণ রয়েছে:

  • প্রোভাইডার-নিরপেক্ষতা: কোড পরিবর্তন না করেই ওপেনএআই থেকে অ্যাজিউর ওপেনএআই বা অলামায় সুইচ করা যায়। কেবল কনফিগারেশন আপডেট করাই যথেষ্ট।
  • স্ট্রিমিং সাপোর্ট: রিয়েল-টাইম, টোকেন-বাই-টোকেন আউটপুট প্রয়োজন হলে স্ট্রিমিং API (Flux<ChatResponse>) সহজেই পাওয়া যায়।
  • টুল ও ফাংশন কলিং: টুল কলিংয়ের মাধ্যমে মডেলকে বাহ্যিক ফাংশন বা API-র সাথে যুক্ত করতে ChatModel নেটিভ সাপোর্ট দেয়, যা এজেন্ট-ভিত্তিক আর্কিটেকচারে অপরিহার্য।
  • ইন্টারফেসের সরলতা: call(Prompt) এবং stream(Prompt)—মাত্র দুটি মূল মেথডে পুরো কমপ্লেক্সিটি লুকানো থাকে, যা ডেভেলপার অভিজ্ঞতা দ্রুততর করে।
  • কনটেক্সট ম্যানেজমেন্ট: মেসেজ ইতিহাস সম্বলিত Prompt তৈরি করে সহজেই বহু-পর্বের কথোপকথন ধরে রাখা যায়।

কীভাবে চ্যাট মডেল ব্যবহার করবেন

চ্যাট মডেল ব্যবহারের ধাপগুলো নিচে দেওয়া হলো।

১. নির্ভরতা ও কনফিগারেশন

প্রথমে প্রোজেক্টে স্প্রিং এআই স্টার্টার যুক্ত করুন। উদাহরণ হিসেবে ওপেনএআই ব্যবহার করলে build.gradle বা pom.xml-এ নিচের নির্ভরতা দিন:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

application.yml ফাইলে API কী ও মডেল অপশন কনফিগার করুন:

spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
      chat:
        options:
          model: gpt-4o
          temperature: 0.7

২. ChatModel ইনজেক্ট করে চ্যাট কল

ChatModel ইন্টারফেসটি সরাসরি অটোওয়্যার করে ব্যবহার করা সবচেয়ে সংক্ষিপ্ত পদ্ধতি:

@RestController
public class ChatController {

    private final ChatModel chatModel;

    public ChatController(ChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        Prompt prompt = new Prompt(new UserMessage(message));
        ChatResponse response = chatModel.call(prompt);
        return response.getResult().getOutput().getContent();
    }
}

উপরের কোড ব্লকে একটি UserMessage দিয়ে প্রম্পট তৈরি করে call() মেথডে পাঠানো হয়েছে। রেসপন্সের getResult().getOutput().getContent() থেকে কেবল টেক্সট অংশ ফেরত আসে।

৩. ChatClient বিল্ডার (ফ্লুয়েন্ট API)

স্প্রিং এআই ১.০.০ থেকে ChatClient একটি ফ্লুয়েন্ট API প্রদান করে, যা প্রম্পট বিল্ডিং ও রেসপন্স হ্যান্ডলিং আরও সহজ করে তোলে:

@Bean
public ChatClient chatClient(ChatModel chatModel) {
    return ChatClient.builder(chatModel).build();
}

// ব্যবহার
String reply = chatClient.prompt()
        .user("বাংলা ভাষায় কৃত্রিম বুদ্ধিমত্তার ভবিষ্যৎ কী?")
        .call()
        .content();

এছাড়াও system() মেথড দিয়ে সিস্টেম বার্তা সেট করা যায় এবং .stream() দিয়ে টোকেন স্ট্রিম পাওয়া যায়:

Flux<String> flux = chatClient.prompt()
        .user("একটি ছোট গল্প বলুন।")
        .stream()
        .content();

সেরা অনুশীলন

চ্যাট মডেল নিয়ে কাজ করার সময় নিচের বিষয়গুলো মেনে চলুন:

  • সিস্টেম মেসেজের সঠিক ব্যবহার: মডেলের টোন, ভাষা ও সীমাবদ্ধতা নির্ধারণে সর্বদা একটি SystemMessage যুক্ত করুন। এটি অপ্রত্যাশিত আউটপুট রোধ করে।
  • টেম্পারেচার ও maxTokens নিয়ন্ত্রণ: temperature কম রাখলে ফ্যাকচুয়াল ও ধারাবাহিক আউটপুট মেলে; বেশি রাখলে সৃজনশীলতা বাড়ে। maxTokens দিয়ে খরচ ও দৈর্ঘ্য সীমিত রাখুন।
  • প্রোভাইডার পরিবর্তনের প্রস্তুতি: লোকাল ডেভেলপমেন্টে অলামা, প্রোডাকশনে ওপেনএআই—এমন প্রোফাইল-ভিত্তিক কনফিগারেশন ব্যবহার করুন।
  • স্ট্রিমিং ও ব্যাক-প্রেশার: রিঅ্যাক্টিভ স্ট্রিমিং ব্যবহার করলে ব্যাক-প্রেশার হ্যান্ডলিং নিশ্চিত করুন, যাতে বড় রেসপন্সে মেমোরি লিক না হয়।
  • কথোপকথনের ইতিহাস সংরক্ষণ: Prompt-এ পূর্ববর্তী মেসেজগুলো তালিকা আকারে যোগ করুন। স্প্রিং এআই-এর InMemoryChatMemory বা CassandraChatMemory ব্যবহার করে কনটেক্সট ধরে রাখা আরও সহজ হয়।
  • টুল কলিং সতর্কতা: টুল/ফাংশন ডেফিনেশনে ইনপুট ও আউটপুট স্কিমা স্পষ্টভাবে ডকুমেন্ট করুন; মডেলের হ্যালুসিনেশন এড়াতে ফাংশনের দায়িত্ব সীমিত রাখুন।

সারসংক্ষেপ

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

Share