জেমা ৪ প্রম্পট ফরম্যাটিং

জেমা ৪ থেকে আমরা নতুন কন্ট্রোল টোকেন চালু করছি। জেমা ৩ এবং এর পূর্ববর্তী সংস্করণগুলোর জন্য পূর্ববর্তী ডকুমেন্টটি দেখুন।

নিম্নলিখিত বিভাগগুলিতে জেমা ৪ দ্বারা ব্যবহৃত কন্ট্রোল টোকেন এবং তাদের ব্যবহারের ক্ষেত্রগুলি নির্দিষ্ট করা হয়েছে। উল্লেখ্য যে, কন্ট্রোল টোকেনগুলি আমাদের টোকেনাইজারের জন্য সংরক্ষিত এবং নির্দিষ্ট।

  • সিস্টেম নির্দেশ বোঝানোর টোকেন: system
  • ব্যবহারকারীর পালা নির্দেশ করার টোকেন: user
  • মডেলের পালা নির্দেশ করার টোকেন: model
  • সংলাপের পালা শুরুর নির্দেশক টোকেন: <|turn>
  • সংলাপের পালা শেষ হওয়ার সংকেত: <turn|>

এখানে একটি সংলাপের উদাহরণ দেওয়া হলো:

<|turn>system
You are a helpful assistant.<turn|>
<|turn>user
Hello.<turn|>

বহু-পদ্ধতি

মাল্টিমোডাল টোকেন উদ্দেশ্য
<|image>
<image|>
ইমেজ এমবেডিং নির্দেশ করুন
<|audio>
<audio|>
অডিও এম্বেডিং নির্দেশ করুন
<|image|>
<|audio|>
বিশেষ স্থানধারক টোকেন

ইমেজ এবং অডিও টোকেনগুলো কোথায় যুক্ত হবে তা নির্দিষ্ট করার জন্য আমরা দুটি বিশেষ প্লেসহোল্ডার টোকেন ( <|image|> এবং <|audio|> ) ব্যবহার করি। টোকেনাইজেশনের পর, মডেলের ভেতরে এই টোকেনগুলোকে আসল সফট এমবেডিং দ্বারা প্রতিস্থাপন করা হয়।

এখানে একটি সংলাপের উদাহরণ দেওয়া হলো:

prompt = """<|turn>user
Describe this image: <|image|>

And translate these audio:

a. <|audio|>
b. <|audio|><turn|>
<|turn>model"""

এজেন্টিক এবং রিজনিং কন্ট্রোল টোকেন

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

ফাংশন কলিং

'টুল ব্যবহার' জীবনচক্রটি পরিচালনা করার জন্য জেমা ৪-কে ছয়টি বিশেষ টোকেনের উপর প্রশিক্ষণ দেওয়া হয়েছে।

টোকেন জোড়া উদ্দেশ্য
<|tool>
<tool|>
একটি টুল সংজ্ঞায়িত করে
<|tool_call>
<tool_call|>
কোনো মডেলের একটি টুল ব্যবহারের অনুরোধ নির্দেশ করে।
<|tool_response>
<tool_response|>
একটি টুলের কার্য সম্পাদনের ফলাফল মডেলে ফেরত প্রদান করে।

স্ট্রিং মানের জন্য বিভাজক: <|"|>

স্ট্রাকচার্ড ডেটা ব্লকের মধ্যে থাকা সমস্ত স্ট্রিং ভ্যালুর জন্য বিভাজক হিসেবে <|"|> এই একটিমাত্র টোকেন ব্যবহার করা হয়।

  • উদ্দেশ্য: এই টোকেনটি নিশ্চিত করে যে, একটি স্ট্রিং-এর ভিতরে থাকা যেকোনো বিশেষ অক্ষর (যেমন { , } , , , বা উদ্ধৃতি চিহ্ন) ডেটা স্ট্রাকচারের অন্তর্নিহিত সিনট্যাক্সের অংশ হিসেবে নয়, বরং আক্ষরিক টেক্সট হিসেবে গণ্য হবে।
  • ব্যবহারবিধি: আপনার ফাংশন ডিক্লারেশন, কল এবং রেসপন্সের সমস্ত স্ট্রিং লিটারেলকে অবশ্যই এই টোকেনটি দিয়ে আবদ্ধ করতে হবে (যেমন, key:<|"|>string value<|"|> )।

চিন্তার ধরণ

থিঙ্কিং মোড সক্রিয় করতে, সিস্টেম নির্দেশনার মধ্যে <|think|> কন্ট্রোল টোকেনটি অন্তর্ভুক্ত করুন।

নিয়ন্ত্রণ টোকেন উদ্দেশ্য
<|think|> চিন্তার মোড সক্রিয় করে
<|channel>
<channel|>
একটি মডেলের অভ্যন্তরীণ প্রক্রিয়া নির্দেশ করে।

এখানে একটি সংলাপের উদাহরণ দেওয়া হলো:

<|turn>system
<|think|><turn|>
<|turn>user
What is the water formula?<turn|>
<|turn>model
<|channel>thought
...
<channel|>The most common interpretation of "the water formula" refers...<turn|>

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

যুক্তি এবং ফাংশন কল করার উদাহরণ

একটি সক্রিয় ভূমিকায়, মডেলটি কোনো ফাংশন কল করার সিদ্ধান্ত নেওয়ার আগে ব্যক্তিগতভাবে "চিন্তা" করতে পারে। এর জীবনচক্রটি এই ক্রম অনুসরণ করে:

  1. ব্যবহারকারীর জিজ্ঞাসা: ব্যবহারকারী একটি প্রশ্ন জিজ্ঞাসা করেন।
  2. অভ্যন্তরীণ যুক্তি: মডেলটি তার চিন্তা চ্যানেলে ব্যক্তিগতভাবে চিন্তা করে।
  3. টুল অনুরোধ: কোনো টুল ব্যবহারের অনুরোধ করার জন্য মডেলটির জেনারেশন থেমে যায়।
  4. সম্পাদন ও সংযোজন: অ্যাপ্লিকেশনটি টুলটি কার্যকর করে এবং প্রতিক্রিয়াটি যুক্ত করে।
  5. চূড়ান্ত প্রতিক্রিয়া: মডেলটি প্রতিক্রিয়াটি পড়ে চূড়ান্ত উত্তরটি তৈরি করে।

নিম্নলিখিত উদাহরণটি একটি আবহাওয়া সরঞ্জাম ব্যবহার করে একটি মডেল প্রদর্শন করে:

<|turn>system
<|think|>You are a helpful assistant.<|tool>declaration:get_current_temperature{...}<tool|><turn|>
<|turn>user
What's the temperature in London?<turn|>
<|turn>model
<|channel>thought
...
<channel|><|tool_call>call:get_current_temperature{location:<|"|>London<|"|>}<tool_call|><|tool_response>

আপনার অ্যাপ্লিকেশনটি মডেলের রেসপন্স পার্স করে ফাংশনের নাম ও আর্গুমেন্টগুলো বের করবে, ফাংশনটি এক্সিকিউট করবে এবং তারপর tool_callstool_responses গুলোকে assistant রোলের অধীনে চ্যাট হিস্ট্রিতে যুক্ত করবে।

<|turn>model
<|tool_call>call:get_current_weather{location:<|"|>London<|"|>}<tool_call|><|tool_response>response:get_current_weather{temperature:15,weather:<|"|>sunny<|"|>}<tool_response|>

অবশেষে, জেমা টুলটির প্রতিক্রিয়া পড়ে ব্যবহারকারীকে উত্তর দেয়।

The temperature in London is 15 degrees and it is sunny.<turn|>

এই উদাহরণটির সম্পূর্ণ JSON চ্যাট ইতিহাস নিচে দেওয়া হলো:

[
  {
    "role": "system",
    "content": "You are a helpful assistant."
  },
  {
    "role": "user",
    "content": "What's the temperature in London?"
  },
  {
    "role": "assistant",
    "tool_calls": [
      {
        "function": {
          "name": "get_current_weather",
          "arguments": {
            "location": "London"
          }
        }
      }
    ],
    "tool_responses": [
      {
        "name": "get_current_weather",
        "response": {
          "temperature": 15,
          "weather": "sunny"
        }
      }
    ],
    "content": "The temperature in London is 15 degrees and it is sunny."
  }
]

পালাবদলের মাঝে চিন্তার প্রেক্ষাপট পরিচালনা করা

একাধিক পালাবিশিষ্ট কথোপকথনে কর্মক্ষমতা বজায় রাখার জন্য মডেলের তৈরি করা চিন্তাভাবনাগুলোকে সঠিকভাবে পরিচালনা করা অত্যন্ত গুরুত্বপূর্ণ।

  • সাধারণ একাধিক-পালা কথোপকথন: পরবর্তী পালার জন্য কথোপকথনের ইতিহাস মডেলকে ফেরত দেওয়ার আগে, আপনাকে অবশ্যই পূর্ববর্তী পালা থেকে মডেলের তৈরি করা চিন্তাগুলো মুছে ফেলতে হবে। যদি আপনি কথোপকথনের মাঝখানে চিন্তা করার মোডটি নিষ্ক্রিয় করতে চান, তাহলে পূর্ববর্তী চিন্তাগুলো মুছে ফেলার সময় আপনি <|think|> টোকেনটি সরিয়ে ফেলতে পারেন।
  • ফাংশন কলিং (ব্যতিক্রম): যদি একটি মডেল টার্নে ফাংশন বা টুল কল জড়িত থাকে, তবে ফাংশন কলগুলোর মধ্যবর্তী সময়ে থট রিমুভ করা যাবে না

এজেন্টিক ওয়ার্কফ্লো এবং দীর্ঘ-চলমান কাজ

যেহেতু সাধারণ পালাবদলের মাঝে প্রাথমিক চিন্তাগুলো মুছে ফেলা হয়, তাই দীর্ঘমেয়াদী এজেন্ট তৈরি করার সময় ডেভেলপাররা মডেলটিকে চক্রাকার যুক্তির ফাঁদে পড়া থেকে বিরত রাখতে যুক্তির প্রেক্ষাপট ধরে রাখতে চাইতে পারেন।

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

ইন্টিগ্রেশন নোট

  • অভ্যন্তরীণ অবস্থা: <|channel> এবং <channel|> টোকেনগুলো সাধারণত চেইন-অফ-থট (CoT) প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। সাধারণ ব্যবহারকারী-মুখী অ্যাপ্লিকেশনগুলিতে, এই বিষয়বস্তু সাধারণত অন্তিম ব্যবহারকারীর কাছ থেকে গোপন রাখা হয়।
  • টুল লুপ: tool_call এবং tool_response টোকেনগুলো মডেল এবং আপনার অ্যাপ্লিকেশন এনভায়রনমেন্টের মধ্যে একটি 'হ্যান্ডশেক' সহজ করে। অ্যাপ্লিকেশনটি tool_call গ্রহণ করে, এর অন্তর্নিহিত কোডটি এক্সিকিউট করে এবং tool_response টোকেনগুলোর মধ্যে দিয়ে ফলাফলটি মডেলে ফেরত পাঠায়।
  • মডেলের আচরণ: বড় মডেলগুলো (যেমন, gemma-4-26B-A4B-it, gemma-4-31B-it) মাঝে মাঝে থিংকিং মোড স্পষ্টভাবে বন্ধ থাকা সত্ত্বেও একটি থট চ্যানেল তৈরি করতে পারে। এই ধরনের ব্যতিক্রমী ক্ষেত্রে মডেলের আচরণ স্থিতিশীল করতে, প্রম্পটে একটি খালি থিংকিং টোকেন যোগ করার কথা বিবেচনা করুন।

টিপস: চিন্তাহীন ডেটাসেট দিয়ে বড় মডেল সূক্ষ্মভাবে সমন্বয় করা

এমন একটি ডেটাসেট দিয়ে বড় জেমা মডেল ফাইন-টিউনিং করার সময়, যেখানে চিন্তাভাবনার সুযোগ নেই, আপনি আপনার ট্রেনিং প্রম্পটগুলিতে খালি চ্যানেলটি যোগ করে আরও ভালো ফলাফল পেতে পারেন:

<|turn>model
<|channel>thought
<channel|>

পরামর্শ: সিস্টেম নির্দেশাবলী ব্যবহার করে অভিযোজিত চিন্তার দক্ষতা

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

'উচ্চ' বা 'নিম্ন' চিন্তার জন্য কোনো হার্ডকোডেড ফ্রেমওয়ার্ক প্যারামিটারের উপর নির্ভর করার পরিবর্তে, আপনি সিস্টেম ইনস্ট্রাকশন (SI) ব্যবহার করে মডেলটিকে একটি সংক্ষিপ্ত চিন্তার মোডে পরিচালিত করতে পারেন। মডেলটিকে দক্ষতার সাথে বা কম গভীরতায় চিন্তা করার জন্য স্পষ্টভাবে নির্দেশ দেওয়ার মাধ্যমে (এই ধারণাটিকে আমরা 'LOW' চিন্তার নির্দেশ বলি), আপনি অভিযোজিত চিন্তার দক্ষতা অর্জন করতে পারেন।

  • ব্যয় হ্রাস: পরীক্ষায় দেখা গেছে যে, একটি "LOW" থিঙ্কিং সিস্টেম ইনস্ট্রাকশন প্রয়োগ করলে উৎপন্ন থিঙ্কিং টোকেনের সংখ্যা প্রায় ২০% কমে যেতে পারে।
  • ধারণার প্রমাণ: যেহেতু এই আচরণটি বিশেষভাবে প্রশিক্ষিত হওয়ার পরিবর্তে মডেলের নির্দেশযোগ্যতার একটি উপজাত, তাই কোনো একক 'নিখুঁত' নির্দেশ নেই। 'LOW' নির্দেশটি একটি ধারণার প্রমাণ।
  • কাস্টমাইজেশন: আমরা ডেভেলপারদেরকে তাদের নিজস্ব কাস্টম সিস্টেম ইনস্ট্রাকশন নিয়ে পরীক্ষা-নিরীক্ষা করতে বিশেষভাবে উৎসাহিত করি। আপনি আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে ল্যাটেন্সি, খরচ এবং আউটপুট কোয়ালিটির মধ্যে নিখুঁত ভারসাম্য আনতে মডেলের চিন্তাভাবনার প্রক্রিয়ার গভীরতা, দৈর্ঘ্য এবং ধরন সূক্ষ্মভাবে সমন্বয় করতে পারেন।