মূল কনটেন্টে যান
এআই টিউটোরিয়াল

Unreal Agent দিয়ে অ্যাসিঙ্ক, স্থায়ী AI এজেন্ট ওয়ার্কফ্লো তৈরি করুন

এই টিউটোরিয়ালে Unreal Agent-এর অ্যাসিঙ্ক-প্রথম আর্কিটেকচার, রিপোজিটরি বিন্যাস, মূল কম্পোনেন্ট এবং ইভেন্ট প্রবাহ ব্যাখ্যা করা হয়েছে। ইনপুট কীভাবে সংরক্ষিত সেশন ইতিহাসে পরিণত হয়, টুল কল কীভাবে অ্যাসিঙ্ক্রোনাস অপারেশনে রূপান্তরিত হয়, সেটআপ ও ব্যবহার কীভাবে করতে হয় এবং সিরিয়ালাইজেশন ও ইভেন্ট-লুপের অপরিবর্তনীয় নিয়ম লঙ্ঘন না করে কীভাবে হারনেসটি সম্প্রসারণ করতে হয়, তা আপনি শিখবেন।

Unreal Agent দিয়ে অ্যাসিঙ্ক, স্থায়ী AI এজেন্ট ওয়ার্কফ্লো তৈরি করুন

Unreal Agent কী?

Unreal Agent হলো Unreal Labs-এর async-first এজেন্ট হ্যারনেস। এটি ইনপুট গ্রহণ, সেশন ইতিহাস সংরক্ষণ, মডেল কনটেক্সট প্রস্তুত, LLM টার্ন সমন্বয়, টুল কল অনুবাদ এবং টেকসই অ্যাসিঙ্ক্রোনাস অপারেশন প্রেরণের জন্য কম্পোজেবল অবকাঠামো সরবরাহ করে।

প্রকল্পটি সিঙ্ক্রোনাস সমন্বয়কে অ্যাসিঙ্ক্রোনাস এক্সিকিউশন থেকে পৃথক রাখে। টুল ট্রান্সলেটরগুলো মডেল-উৎপাদিত অনুরোধ যাচাই করে এবং I/O সম্পাদন না করে সিরিয়ালাইজযোগ্য অপারেশন বিবরণ তৈরি করে। এরপর একটি অপারেশন ম্যানেজার কোঅর্ডিনেটরের ইভেন্ট লুপের বাইরে কমিট করা অপারেশনগুলো সম্পাদন করে।

রিপোজিটরি কাঠামো

রিপোজিটরিটি তিনটি প্রধান অংশে সংগঠিত:

  • harness/: পুনর্ব্যবহারযোগ্য এজেন্ট হ্যারনেস লাইব্রেরি।
  • cmd/: লাইব্রেরি দিয়ে তৈরি এক্সিকিউটেবল।
  • benchmarks/: প্রকল্প মূল্যায়নের বেঞ্চমার্ক রানার।

অন্য কোনো অ্যাপ্লিকেশনে ফ্রেমওয়ার্কটি সংযুক্ত করার সময় harness/ দিয়ে শুরু করুন। নির্দিষ্ট এক্সিকিউটেবল এন্ট্রি পয়েন্টের জন্য cmd/ পর্যালোচনা করুন এবং রানটাইম আচরণ পরীক্ষা বা পরিমাপ করতে benchmarks/ ব্যবহার করুন।

মূল ধারণা

ইনপুট ও ইনবক্স

একটি ইনপুট হলো কলার সরবরাহ করা একটি বিশ্বব্যাপী অনন্য শনাক্তকারীসহ ইভেন্ট। ইভেন্টটি পুনরায় সরবরাহ করা হলেও শনাক্তকারীটি অপরিবর্তিত থাকতে হবে।

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

{
  "id": "globally-unique-and-stable-id",
  "type": "external-input",
  "payload": "Example request"
}

এই কাঠামোটি একটি ধারণাগত উদাহরণ, নথিবদ্ধ Unreal Agent API টাইপ নয়। গুরুত্বপূর্ণ শর্ত হলো স্থিতিশীল, বিশ্বব্যাপী অনন্য ইনপুট ID।

সেশন

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

সেশন স্টোরই ক্যানোনিক্যাল ইতিহাস ও অপারেশন স্টেটের মালিক। এটি একটি টুল কলের অনুবাদ-স্থিতি এবং সেই অনুবাদ থেকে তৈরি অপারেশনগুলোও পারমাণবিকভাবে রেকর্ড করে।

LLM টার্ন

LLM টার্ন হলো একটি যৌক্তিক মডেল অনুরোধকে ঘিরে কোঅর্ডিনেটর-পরিচালিত ধারাবাহিকতা। কোঅর্ডিনেটর গৃহীত ইনপুট সংরক্ষণ করে, টার্ন প্রস্তুত করে, টুল ট্রান্সলেটর নির্ধারণ করে, ফলস্বরূপ কাজ রেকর্ড করে এবং কমিট করা অপারেশন প্রেরণ করে।

টুল, ট্রান্সলেটর ও অপারেশন

একটি টুল স্কিমার সঙ্গে একটি ট্রান্সলেটরকে একত্র করে। মডেল কোনো টুল কল তৈরি করলে ট্রান্সলেটর সেটি যাচাই করে এক বা একাধিক অপারেশনে রূপান্তর করে।

টুল ট্রান্সলেটর কোঅর্ডিনেটরের ইভেন্ট লুপে সিঙ্ক্রোনাসভাবে চলে। এটি কোনো I/O সম্পাদন বা লুপ স্থগিত করতে পারবে না।

অনুবাদের ফলাফলকে টুল কল স্টেটাস বলা হয়। এতে হয় একটি যাচাইকরণ ত্রুটি থাকে, নয়তো জমা দেওয়া অপারেশনের রেফারেন্স থাকে। এই স্টেটাস অপারেশনগুলোর এক্সিকিউশন স্টেট থেকে পৃথক।

অপারেশন হলো অ্যাসিঙ্ক্রোনাস কাজের একটি সিরিয়ালাইজযোগ্য, সংস্করণযুক্ত বিবরণ। ট্রান্সলেটর কাজের বিবরণ দেয়; অপারেশন ম্যানেজার তা সম্পাদন করে।

প্রধান উপাদান

  • সেশন ইনবক্স: ভোলাটাইল, সেশন-সীমাবদ্ধ ইনপুট আইডেমপোটেন্সি সরবরাহ করে।
  • কোঅর্ডিনেটর: গৃহীত ইনপুট সংরক্ষণ করে, LLM টার্ন পরিচালনা করে, টুল ট্রান্সলেটর নির্ধারণ করে এবং কমিট করা অপারেশন প্রেরণ করে।
  • সেশন স্টোর: ক্যানোনিক্যাল সেশন ইতিহাস ও অপারেশন স্টেট সংরক্ষণ করে, পুনরুদ্ধার ও ফর্ক সমর্থন করে এবং অপারেশনসহ টুল-কল স্টেটাস পারমাণবিকভাবে রেকর্ড করে।
  • কনটেক্সট বিল্ডার: মেমোরিতে মডেল ইনপুট একত্র করে এবং বাদ পড়া, ছাঁটাই করা বা কমপ্যাক্ট করা কনটেন্টের প্রতিবেদন দেয়। এটি কোনো I/O সম্পাদন করে না এবং এর কোনো পারসিস্টেন্স নির্ভরতা নেই।
  • LLM অ্যাডাপ্টার: প্রস্তুত ইনপুট কোনো মডেল প্রদানকারীর কাছে পাঠায় এবং একটি স্বাভাবিকীকৃত সম্পূর্ণ প্রতিক্রিয়া ফেরত দেয়। এটি অথেন্টিকেশন, বাতিলকরণ এবং প্রদানকারী-সংক্রান্ত ত্রুটির মালিক।
  • টুল রেজিস্ট্রি: Bash, ViewImage এবং skill-use টুলের সংজ্ঞা ও ট্রান্সলেটরের মালিক এবং হোস্টের নির্বাচিত সেট প্রকাশ করে।
  • টুল ট্রান্সলেটর: কল যাচাই করে, স্টেটাস ও অপারেশন তৈরি করে এবং রেকর্ড করা স্টেটাস ও প্রস্তুত অপারেশন আউটপুট মডেলের জন্য ফরম্যাট করে।
  • অপারেশন ম্যানেজার: টেকসই অপারেশনের জন্য অ্যাক্টর রানটাইম সরবরাহ করে। স্থানীয় ইমপ্লিমেন্টেশনটি প্রতিস্থাপন করা যায়।

ইনস্টলেশন ও সেটআপ

README-তে কোনো প্যাকেজ ম্যানেজার, ভাষা-নির্দিষ্ট ইনস্টলেশন কমান্ড বা স্থিতিশীল পাবলিক API নির্দিষ্ট করা নেই। তাই সেটআপ শুরু করা উচিত অনুমাননির্ভর প্যাকেজ কমান্ডের পরিবর্তে রিপোজিটরির স্থানীয় চেকআউট এবং এর বিল্ড মেটাডেটা থেকে।

  1. Unreal Agent রিপোজিটরি ক্লোন বা ডাউনলোড করুন।
  2. রিপোজিটরি রুট খুলে সমর্থিত টুলচেইনের জন্য এর বিল্ড ও নির্ভরতা ফাইল পরীক্ষা করুন।
  3. রিপোজিটরির কনফিগার করা টুলিং ব্যবহার করে harness/-এর অধীন লাইব্রেরি বিল্ড বা ইনস্টল করুন।
  4. হ্যারনেস উপাদানগুলো কীভাবে একত্র করা হয় তার এক্সিকিউটেবল উদাহরণের জন্য cmd/ পরীক্ষা করুন।
  5. কোর প্রকল্প সফলভাবে বিল্ড হওয়ার পরেই benchmarks/ ব্যবহার করুন।
cd <unreal-agent-repository>

# লাইব্রেরি, এক্সিকিউটেবল এবং বেঞ্চমার্ক ডিরেক্টরি পরীক্ষা করুন।
ls harness
ls cmd
ls benchmarks

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

প্রাথমিক ব্যবহার: একটি এজেন্ট অনুরোধ অনুসরণ করা

README-তে নির্দিষ্ট কনস্ট্রাক্টর বা মেথডের নাম প্রকাশ করা হয়নি। তাই ব্যবহার বোঝার সবচেয়ে নির্ভরযোগ্য উপায় হলো নথিবদ্ধ উপাদানগুলোর প্রবাহ অনুসরণ করা।

  1. একটি সেশন তৈরি করুন বা চালু করুন। সেশন স্টোর সংরক্ষিত ইতিহাস ও পুনরুদ্ধার সহায়তা প্রদান করে।
  2. একটি স্থিতিশীল আইডি সহ ইনপুট জমা দিন। একই যৌক্তিক ইভেন্ট পুনরায় সরবরাহ করলে একই আইডি ব্যবহার করুন।
  3. সেশন ইনবক্সের মাধ্যমে ডিডুপ্লিকেট করুন। সক্রিয় সেশনের মধ্যে পুনরাবৃত্ত ইনপুট বাস্তবায়নের আচরণ অনুযায়ী ইনবক্স প্রত্যাখ্যান করে বা উপেক্ষা করে।
  4. গৃহীত ইনপুট সংরক্ষণ করুন। কোঅর্ডিনেটর এটি ক্যানোনিক্যাল অ্যাপেন্ড-অনলি সেশন ইতিহাসে নথিভুক্ত করে।
  5. মডেল কনটেক্সট তৈরি করুন। কনটেক্সট বিল্ডার মেমরিতে মডেলের ইনপুট একত্র করে এবং বাদ দেওয়া, ছাঁটা বা কমপ্যাক্ট করা কনটেন্টের প্রতিবেদন দেয়।
  6. LLM টার্ন চালান। LLM অ্যাডাপ্টার প্রস্তুত করা ইনপুট প্রোভাইডারের কাছে পাঠায় এবং একটি স্বাভাবিকীকৃত সম্পন্ন প্রতিক্রিয়া ফেরত দেয়।
  7. টুল কল সমাধান করুন। কোঅর্ডিনেটর রেজিস্ট্রির মাধ্যমে প্রতিটি অনুমোদিত টুল খুঁজে নেয়।
  8. সিঙ্ক্রোনাসভাবে অনুবাদ করুন। নির্বাচিত ট্রান্সলেটর কলটি যাচাই করে এবং একটি ভ্যালিডেশন ত্রুটি অথবা সিরিয়ালাইজযোগ্য অপারেশন তৈরি করে।
  9. অ্যাটমিকভাবে কমিট করুন। সেশন স্টোর টুল-কলের স্ট্যাটাস ও অপারেশন একসঙ্গে সংরক্ষণ করে।
  10. অ্যাসিঙ্ক্রোনাসভাবে ডিসপ্যাচ করুন। অপারেশন ম্যানেজার কমিট করা অপারেশনগুলো চালায় এবং অনুবাদ স্ট্যাটাস থেকে আলাদাভাবে তাদের এক্সিকিউশন স্টেট ট্র্যাক করে।
  11. মডেলের জন্য ফলাফল ফরম্যাট করুন। ট্রান্সলেটর নথিভুক্ত কল স্ট্যাটাসকে প্রস্তুত অপারেশন আউটপুটের সঙ্গে একত্র করে মডেলের ব্যবহারের উপযোগী ফলাফল তৈরি করে।

টুল-কল লাইফসাইকেলের উদাহরণ

স্থিতিশীল আইডি সহ ইনপুট
  -> ইনবক্স ডিডুপ্লিকেশন
  -> সংরক্ষিত সেশন ইভেন্ট
  -> কনটেক্সট তৈরি
  -> স্বাভাবিকীকৃত LLM প্রতিক্রিয়া
  -> টুল রেজিস্ট্রি অনুসন্ধান
  -> সিঙ্ক্রোনাস ভ্যালিডেশন ও অনুবাদ
  -> স্ট্যাটাস ও অপারেশনের অ্যাটমিক কমিট
  -> অ্যাসিঙ্ক্রোনাস অপারেশন এক্সিকিউশন
  -> মডেলের জন্য ফলাফল ফরম্যাটিং

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

টুল নির্বাচন

টুল রেজিস্ট্রি Bash, ViewImage এবং স্কিল ব্যবহারের সংজ্ঞা ও ট্রান্সলেটর পরিচালনা করে। হোস্ট নির্ধারণ করে কোন টুলগুলো উন্মুক্ত করা হবে।

নির্দিষ্ট ডেপ্লয়মেন্টের জন্য প্রয়োজনীয় সক্ষমতাগুলোই উন্মুক্ত করুন। README অনুমোদন বা স্যান্ডবক্সিং নীতি নির্ধারণ করে না, তাই এসব বিষয় হোস্ট পরিবেশ ও অপারেশন এক্সিকিউশন স্তরকে পরিচালনা করতে হবে।

হারনেস সম্প্রসারণ

Unreal Agent-এর উপাদানগুলো কম্পোজযোগ্য হিসেবে তৈরি। ইন্টারফেস-ভিত্তিক উপাদানগুলোর বিকল্প বাস্তবায়ন ব্যবহার করা যেতে পারে, যদি সেগুলো নথিভুক্ত দায়িত্ব ও ইনভেরিয়েন্ট বজায় রাখে।

একটি টুল ট্রান্সলেটর বাস্তবায়ন

একটি কাস্টম ট্রান্সলেটরের এই ক্রম অনুসরণ করা উচিত:

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

অনুবাদকে নির্ধারিত ও দ্রুত রাখুন। ট্রান্সলেটরের মধ্যে নেটওয়ার্ক অনুরোধ করা, ফাইল অ্যাক্সেস করা, সাবপ্রসেসের জন্য অপেক্ষা করা বা অন্য কোনো I/O সম্পাদন করবেন না।

অপারেশন ম্যানেজার প্রতিস্থাপন

স্থানীয় অপারেশন ম্যানেজার পরিবর্তনযোগ্য। নথিভুক্ত একটি সম্প্রসারণ হলো একটি প্রক্সি ম্যানেজার, যা অপারেশনগুলো সিরিয়ালাইজ করে দূরবর্তী স্যান্ডবক্স প্রসেসের ভেতরে চলমান অন্য একটি স্থানীয় অপারেশন ম্যানেজারের কাছে পাঠায়।

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

স্টোরেজ বাস্তবায়ন

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

প্রকল্পটি সেশনগুলোর পশ্চাদমুখী সামঞ্জস্য বজায় রাখার লক্ষ্য রাখে। কোনো সেশন ভার্সন সমর্থিত না হলে, ডেটা নীরবে ভুলভাবে পড়ার পরিবর্তে পুনরায় চালু করার সময় স্পষ্ট ত্রুটি দেখিয়ে ব্যর্থ হতে হবে।

উন্নত পরামর্শ

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

গুরুত্বপূর্ণ অপরিবর্তনীয় শর্ত

এক্সটেনশনগুলোকে নিম্নলিখিত নিশ্চয়তাগুলো বজায় রাখতে হবে:

  • সেশন-স্টোরের আইটেমগুলো সিরিয়ালাইজযোগ্য থাকবে।
  • স্টোরেজ ফরম্যাট সংস্করণযুক্ত থাকবে।
  • অসমর্থিত সেশন সংস্করণ স্পষ্ট রিজিউম ত্রুটি তৈরি করবে।
  • অপারেশনগুলো সিরিয়ালাইজযোগ্য ও সংস্করণযুক্ত থাকবে।
  • কনটেক্সট তৈরি করার সময় কোনো I/O হবে না এবং কোনো পারসিস্টেন্স নির্ভরতা গ্রহণ করা হবে না।
  • টুল ট্রান্সলেশনের সময় কোনো I/O হবে না এবং কোঅর্ডিনেটরের ইভেন্ট লুপ কখনো স্থগিত হবে না।

উপসংহার

Unreal Agent এমন এজেন্ট তৈরির জন্য একটি মডুলার ভিত্তি দেয়, যাদের স্থায়ী সেশন, ডিডুপ্লিকেট করা ইনপুট, সমন্বিত LLM টার্ন, যাচাইকৃত টুল কল এবং স্থায়ী অ্যাসিনক্রোনাস কাজ প্রয়োজন। এর কেন্দ্রীয় নকশা নীতি হলো সিঙ্ক্রোনাস ট্রান্সলেশন ও অ্যাসিনক্রোনাস এক্সিকিউশনের মধ্যে একটি পরিষ্কার সীমানা। বিদ্যমান এক্সিকিউটেবলগুলো দিয়ে শুরু করুন, নথিভুক্ত ইভেন্ট প্রবাহ অনুসরণ করুন এবং কম্পোনেন্ট প্রতিস্থাপন বা সম্প্রসারণের সময় সিরিয়ালাইজেশন, সংস্করণ নির্ধারণ ও অ্যাটমিকিটি বজায় রাখুন।