ডায়ালগফ্লো এসেনশিয়াল এবং অ্যানড্রয়েডের জন্য ভয়েস বট তৈরি করুন ফ্লাটার

1. আপনি শুরু করার আগে

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

এই ল্যাবটিকে একটি সাধারণ ক্লাউড বিকাশকারীর অভিজ্ঞতা প্রতিফলিত করার আদেশ দেওয়া হয়েছে:

  1. এনভায়রনমেন্ট সেটআপ
  • Dialogflow: একটি নতুন Dialogflow ES এজেন্ট তৈরি করুন
  • ডায়ালগফ্লো: ডায়ালগফ্লো কনফিগার করুন
  • গুগল ক্লাউড: একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন
  1. ফ্লটার: একটি চ্যাট অ্যাপ্লিকেশন তৈরি করা
  • একটি ফ্লটার প্রকল্প তৈরি করা হচ্ছে
  • সেটিংস এবং অনুমতি কনফিগার করা হচ্ছে
  • নির্ভরতা যোগ করা হচ্ছে
  • পরিষেবা অ্যাকাউন্টের সাথে লিঙ্ক করা।
  • একটি ভার্চুয়াল ডিভাইস বা শারীরিক ডিভাইসে অ্যাপ্লিকেশন চালানো
  1. ফ্লটার: স্পিচ টু টেক্সট সাপোর্ট দিয়ে চ্যাট ইন্টারফেস তৈরি করা
  • চ্যাট ইন্টারফেস তৈরি করা হচ্ছে
  • চ্যাট ইন্টারফেস লিঙ্ক করা
  • ডায়ালগফ্লো জিআরপিসি প্যাকেজ অ্যাপে একীভূত করা হচ্ছে
  1. ডায়ালগফ্লো: ডায়ালগফ্লো এজেন্টের মডেলিং
  • স্বাগত এবং ফলব্যাক অভিপ্রায় কনফিগার করুন
  • একটি FAQ জ্ঞান বেস ব্যবহার করুন

পূর্বশর্ত

  • বেসিক ডার্ট/ফ্লাটার অভিজ্ঞতা
  • বেসিক Google ক্লাউড প্ল্যাটফর্ম অভিজ্ঞতা
  • Dialogflow ES এর সাথে প্রাথমিক অভিজ্ঞতা

আপনি কি নির্মাণ করবেন

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

আপনি কি শিখবেন

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

আপনি কি প্রয়োজন হবে

  • একটি ডায়ালগফ্লো এজেন্ট তৈরি করতে আপনার একটি Google পরিচয় / Gmail ঠিকানা প্রয়োজন৷
  • একটি পরিষেবা অ্যাকাউন্ট ডাউনলোড করার জন্য আপনার Google ক্লাউড প্ল্যাটফর্মে অ্যাক্সেসের প্রয়োজন হবে৷
  • একটি ফ্লটার দেব পরিবেশ

আপনার ফ্লটার ডেভ পরিবেশ সেট আপ করুন

  1. আপনি যে অপারেটিং সিস্টেমে ফ্লাটার ইনস্টল করছেন সেটি নির্বাচন করুন।
  1. আপনি আমাদের কমান্ড-লাইন সরঞ্জামগুলির সাথে মিলিত যেকোন পাঠ্য সম্পাদক ব্যবহার করে Flutter-এর সাহায্যে অ্যাপ তৈরি করতে পারেন। তবে, এই কর্মশালায় অ্যান্ড্রয়েড স্টুডিও ব্যবহার করা হবে। অ্যান্ড্রয়েড স্টুডিওর জন্য ফ্লাটার এবং ডার্ট প্লাগইনগুলি আপনাকে কোড সমাপ্তি, সিনট্যাক্স হাইলাইটিং, উইজেট সম্পাদনা সহায়তা, রান এবং ডিবাগ সমর্থন এবং আরও অনেক কিছু প্রদান করে। https://flutter.dev/docs/get-started/editor- এ ধাপগুলি অনুসরণ করুন

2. পরিবেশ সেটআপ

Dialogflow: একটি নতুন Dialogflow ES এজেন্ট তৈরি করুন

  1. খুলুন
  2. বাম বারে, লোগোর নীচে, ড্রপডাউনে " নতুন এজেন্ট তৈরি করুন " নির্বাচন করুন৷ (দ্রষ্টব্য, "গ্লোবাল" বলে ড্রপডাউনে ক্লিক করবেন না, FAQ জ্ঞান বেস ব্যবহার করার জন্য আমাদের একটি ডায়ালগফ্লো দৃষ্টান্ত প্রয়োজন হবে।)
  3. একটি এজেন্ট নাম উল্লেখ করুন yourname-dialogflow (আপনার নিজের নাম ব্যবহার করুন)
  4. ডিফল্ট ভাষা হিসাবে, ইংরেজি - en বেছে নিন।
  5. ডিফল্ট টাইম জোন হিসেবে, আপনার সবচেয়ে কাছের টাইম জোন বেছে নিন।
  6. মেগা এজেন্ট নির্বাচন করবেন না । (এই বৈশিষ্ট্যের সাহায্যে আপনি একটি অত্যধিক এজেন্ট তৈরি করতে পারেন, যা "সাব" এজেন্টদের মধ্যে অর্কেস্ট্রেট করতে পারে। আমাদের এখন এটির প্রয়োজন নেই।)
  7. তৈরি করুন ক্লিক করুন।

নতুন প্রকল্প পর্দা তৈরি করুন

ডায়ালগফ্লো কনফিগার করুন

  1. আপনার প্রকল্পের নামের পাশে, বাম মেনুতে গিয়ার আইকনে ক্লিক করুন।

নতুন প্রকল্প ড্রপডাউন তৈরি করুন

  1. নিম্নলিখিত এজেন্ট বিবরণ লিখুন: ডায়ালগফ্লো FAQ চ্যাটবট
  2. বিটা বৈশিষ্ট্যগুলি সক্ষম করুন , সুইচটি উল্টান৷

ডায়ালগফ্লো এসেনশিয়াল V2Beta1

  1. স্পিচ ট্যাবে ক্লিক করুন, এবং নিশ্চিত করুন যে অটো স্পিচ অ্যাডাপ্টেশন বাক্সটি সক্রিয় আছে।
  2. ঐচ্ছিকভাবে, আপনি প্রথম সুইচটিও ফ্লিপ করতে পারেন, এটি স্পিচ মডেলকে উন্নত করবে, কিন্তু এটি শুধুমাত্র তখনই উপলব্ধ হবে যখন আপনি ডায়ালগফ্লো ট্রায়াল আপগ্রেড করবেন।
  3. Save এ ক্লিক করুন

Google ক্লাউড: একটি পরিষেবা অ্যাকাউন্ট পান

ডায়ালগফ্লোতে একটি এজেন্ট তৈরি করার পরে, Google ক্লাউড কনসোলে একটি Google ক্লাউড প্রকল্প তৈরি করা উচিত।

  1. গুগল ক্লাউড কনসোল খুলুন:
  2. নিশ্চিত করুন যে আপনি ডায়ালগফ্লো-তে একই Google অ্যাকাউন্ট দিয়ে লগ ইন করেছেন এবং প্রকল্প নির্বাচন করুন: উপরের নীল বারে yourname-dialogflow
  3. এরপরে, উপরের টুলবারে Dialogflow API অনুসন্ধান করুন এবং ড্রপডাউনে Dialogflow API ফলাফলে ক্লিক করুন।

Dialogflow API সক্ষম করুন৷

  1. নীল ম্যানেজ বোতামে ক্লিক করুন এবং বাম মেনু বারে শংসাপত্রে ক্লিক করুন। (যখন ডায়ালগফ্লো এখনও সক্ষম করা হয়নি, প্রথমে সক্ষম করুন টিপুন)

শংসাপত্র GCP কনসোল

  1. শংসাপত্র তৈরি করুন (আপনার স্ক্রিনের শীর্ষে) ক্লিক করুন এবং পরিষেবা অ্যাকাউন্ট নির্বাচন করুন।

শংসাপত্র তৈরি করুন

  1. একটি পরিষেবা অ্যাকাউন্টের নাম উল্লেখ করুন: flutter_dialogflow , id এবং description, এবং Create চাপুন।

একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন

  1. ধাপ 2-এ, আপনাকে ভূমিকা নির্বাচন করতে হবে: Dialogflow API Admin , চালিয়ে যান এবং সম্পন্ন করুন-এ ক্লিক করুন।
  2. flutter_dialogflow পরিষেবা অ্যাকাউন্টে ক্লিক করুন, কী ট্যাবে ক্লিক করুন এবং কী যোগ করুন > নতুন কী তৈরি করুন চাপুন

কী তৈরি করুন

  1. একটি JSON কী তৈরি করুন। এটির নাম পরিবর্তন করে credentials.json করুন এবং এটিকে আপনার হার্ড ড্রাইভের নিরাপদ স্থানে কোথাও সংরক্ষণ করুন। আমরা পরে এটি ব্যবহার করব।

JSON কী

নিখুঁত, আমাদের প্রয়োজনীয় সমস্ত সরঞ্জাম সঠিকভাবে সেট আপ করা হয়েছে। আমরা এখন আমাদের অ্যাপে ডায়ালগফ্লোকে সংহত করে শুরু করতে পারি!

3. ফ্লটার: চ্যাট অ্যাপ্লিকেশন তৈরি করা

বয়লারপ্লেট অ্যাপ তৈরি করুন

  1. অ্যান্ড্রয়েড স্টুডিও খুলুন এবং একটি নতুন ফ্লাটার প্রকল্প শুরু করুন নির্বাচন করুন।
  2. প্রকল্পের ধরন হিসাবে ফ্লটার অ্যাপ্লিকেশন নির্বাচন করুন। তারপর Next এ ক্লিক করুন।
  3. Flutter SDK পাথ যাচাই করুন SDK-এর অবস্থান নির্দিষ্ট করে (টেক্সট ক্ষেত্র ফাঁকা থাকলে SDK ইনস্টল করুন... নির্বাচন করুন)।
  4. একটি প্রকল্পের নাম লিখুন (উদাহরণস্বরূপ, flutter_dialogflow_agent )। তারপর Next এ ক্লিক করুন।
  5. প্যাকেজের নাম পরিবর্তন করুন এবং Finish এ ক্লিক করুন।

নতুন ফ্লটার অ্যাপ্লিকেশন তৈরি করুন

এটি উপাদান উপাদানগুলির সাথে একটি নমুনা অ্যাপ্লিকেশন তৈরি করবে।

অ্যান্ড্রয়েড স্টুডিও SDK ইনস্টল করার জন্য অপেক্ষা করুন এবং প্রকল্পটি তৈরি করুন।

সেটিংস এবং অনুমতি

  1. আমরা যে অডিও রেকর্ডার লাইব্রেরি sound_stream ব্যবহার করব, তার জন্য কমপক্ষে 21 এর minSdk প্রয়োজন। তো চলুন এটিকে ডিফল্ট কনফিগ ব্লকে android/app/build.gradle- এ পরিবর্তন করি। (দ্রষ্টব্য, অ্যান্ড্রয়েড ফোল্ডারে 2টি build.gradle ফাইল রয়েছে, তবে অ্যাপ ফোল্ডারে থাকা একটি সঠিক।)
defaultConfig {
   applicationId "com.myname.flutter_dialogflow_agent"
   minSdkVersion 21
   targetSdkVersion 30
   versionCode flutterVersionCode.toInteger()
   versionName flutterVersionName
}
  1. মাইক্রোফোনে অনুমতি দিতে এবং ক্লাউডে চলা ডায়ালগফ্লো এজেন্টের কাছে অ্যাপটিকে পৌঁছানোর অনুমতি দিতে, আমাদের অ্যাপ/src/main/AndroidManifest.xml ফাইলে INTERNET এবং RECORD_AUDIO অনুমতি যোগ করতে হবে। আপনার ফ্লটার প্রোজেক্টে একাধিক AndroidManifest.xml ফাইল আছে, কিন্তু আপনার মূল ফোল্ডারে একটির প্রয়োজন হবে। আপনি ম্যানিফেস্ট ট্যাগের ভিতরে লাইন যোগ করতে পারেন।
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />

নির্ভরতা যোগ করা হচ্ছে

আমরা sound_stream , rxdart এবং dialogflow_grpc প্যাকেজ ব্যবহার করব।

  1. sound_stream নির্ভরতা যোগ করুন
$ flutter pub add sound_stream
Resolving dependencies...
  async 2.8.1 (2.8.2 available)
  characters 1.1.0 (1.2.0 available)
  matcher 0.12.10 (0.12.11 available)
+ sound_stream 0.3.0
  test_api 0.4.2 (0.4.5 available)
  vector_math 2.1.0 (2.1.1 available)
Downloading sound_stream 0.3.0...
Changed 1 dependency!
  1. dialogflow_grpc নির্ভরতা যোগ করুন
flutter pub add dialogflow_grpc
Resolving dependencies...
+ archive 3.1.5
  async 2.8.1 (2.8.2 available)
  characters 1.1.0 (1.2.0 available)
+ crypto 3.0.1
+ dialogflow_grpc 0.2.9
+ fixnum 1.0.0
+ googleapis_auth 1.1.0
+ grpc 3.0.2
+ http 0.13.4
+ http2 2.0.0
+ http_parser 4.0.0
  matcher 0.12.10 (0.12.11 available)
+ protobuf 2.0.0
  test_api 0.4.2 (0.4.5 available)
+ uuid 3.0.4
  vector_math 2.1.0 (2.1.1 available)
Downloading dialogflow_grpc 0.2.9...
Downloading grpc 3.0.2...
Downloading http 0.13.4...
Downloading archive 3.1.5...
Changed 11 dependencies!
  1. rxdart নির্ভরতা যোগ করুন
$ flutter pub add rxdart
Resolving dependencies...
  async 2.8.1 (2.8.2 available)
  characters 1.1.0 (1.2.0 available)
  matcher 0.12.10 (0.12.11 available)
+ rxdart 0.27.2
  test_api 0.4.2 (0.4.5 available)
  vector_math 2.1.0 (2.1.1 available)
Downloading rxdart 0.27.2...
Changed 1 dependency!

পরিষেবা অ্যাকাউন্ট এবং Google ক্লাউড প্রকল্পের তথ্য লোড করা হচ্ছে

  1. আপনার প্রকল্পে একটি ডিরেক্টরি তৈরি করুন এবং এটির নাম দিন: assets
  2. আপনি Google ক্লাউড কনসোল থেকে ডাউনলোড করেছেন এমন credentials.json ফাইলটিকে সম্পদ ফোল্ডারে সরান৷
  3. pubspec.yaml খুলুন এবং ফ্লাটার ব্লকে পরিষেবা অ্যাকাউন্ট যোগ করুন।
flutter:
  uses-material-design: true
  assets:
    - assets/credentials.json

একটি ফিজিক্যাল ডিভাইসে অ্যাপ্লিকেশন চালানো হচ্ছে

যখন আপনার একটি Android ডিভাইস থাকে, আপনি একটি USB তারের মাধ্যমে আপনার ফোন প্লাগ ইন করতে পারেন এবং ডিভাইসে ডিবাগ করতে পারেন৷ আপনার Android ডিভাইসে বিকাশকারী বিকল্প স্ক্রীনের মাধ্যমে এটি সেট আপ করতে এই পদক্ষেপগুলি অনুসরণ করুন৷

একটি ভার্চুয়াল ডিভাইসে অ্যাপ্লিকেশনটি চালানো হচ্ছে

আপনি যদি ভার্চুয়াল ডিভাইসে অ্যাপ্লিকেশনটি চালাতে চান তবে নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করুন:

  1. Tools> AVD Manager এ ক্লিক করুন। (অথবা উপরের টুলবার থেকে AVD ম্যানেজার নির্বাচন করুন, নীচের চিত্রে এটি গোলাপী হাইলাইট করা হয়েছে)

অ্যান্ড্রয়েড স্টুডিও শীর্ষ টুলবার

  1. আমরা একটি টার্গেট অ্যান্ড্রয়েড ভার্চুয়াল ডিভাইস তৈরি করব, যাতে আমরা কোনও শারীরিক ডিভাইস ছাড়াই আমাদের অ্যাপ্লিকেশন পরীক্ষা করতে পারি। বিস্তারিত জানার জন্য, এভিডি পরিচালনা দেখুন। একবার আপনি একটি নতুন ভার্চুয়াল ডিভাইস নির্বাচন করলে, আপনি এটি শুরু করতে ডাবল ক্লিক করতে পারেন।

AVD পরিচালনা করুন

ভার্চুয়াল ডিভাইস

  1. প্রধান অ্যান্ড্রয়েড স্টুডিও টুলবারে, ড্রপডাউনের মাধ্যমে লক্ষ্য হিসাবে একটি অ্যান্ড্রয়েড ডিভাইস নির্বাচন করুন এবং নিশ্চিত করুন যে main.dart নির্বাচন করা হয়েছে। তারপর রান বোতাম টিপুন (সবুজ ত্রিভুজ)।

IDE এর নীচে, আপনি কনসোলে লগগুলি দেখতে পাবেন। আপনি লক্ষ্য করবেন যে এটি Android এবং আপনার স্টার্টার ফ্লাটার অ্যাপ ইনস্টল করছে। এটি এক মিনিট সময় নেবে, একবার ভার্চুয়াল ডিভাইস প্রস্তুত হলে, পরিবর্তনগুলি করা খুব দ্রুত হবে৷ আপনার সব শেষ হয়ে গেলে, এটি স্টার্টার ফ্লাটার অ্যাপ খুলবে।

বয়লারপ্লেট অ্যাপ

  1. আমাদের চ্যাটবট অ্যাপের জন্য মাইক্রোফোন সক্রিয় করা যাক। বিকল্পগুলি খুলতে ভার্চুয়াল ডিভাইসের বিকল্প বোতামে ক্লিক করুন। মাইক্রোফোন ট্যাবে, সমস্ত 3টি সুইচ সক্ষম করুন৷

AVD বিকল্প

  1. কত দ্রুত পরিবর্তন করা যায় তা প্রদর্শন করতে হট রিলোড করে দেখুন।

lib/main.dart- এ, MyApp ক্লাসে MyHomePage শিরোনামকে এতে পরিবর্তন করুন: Flutter Dialogflow Agent । এবং PrimarySwatch কে Colors.orange এ পরিবর্তন করুন।

প্রথম কোড

ফাইলটি সংরক্ষণ করুন , অথবা অ্যান্ড্রয়েড স্টুডিও টুলবারে বোল্ট আইকনে ক্লিক করুন৷ আপনি সরাসরি ভার্চুয়াল ডিভাইসে করা পরিবর্তন দেখতে হবে।

4. ফ্লটার: STT সমর্থন সহ চ্যাট ইন্টারফেস তৈরি করা

চ্যাট ইন্টারফেস তৈরি করা হচ্ছে

  1. lib ফোল্ডারে একটি নতুন Flutter উইজেট ফাইল তৈরি করুন। (লিব ফোল্ডারে ডান-ক্লিক করুন, নতুন > ফ্লটার উইজেট > স্টেটফুল উইজেট ), এই ফাইলটিকে কল করুন: chat.dart

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

// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:rxdart/rxdart.dart';
import 'package:sound_stream/sound_stream.dart';

// TODO import Dialogflow


class Chat extends StatefulWidget {
  Chat({Key key}) : super(key: key);

  @override
  _ChatState createState() => _ChatState();
}

class _ChatState extends State<Chat> {
  final List<ChatMessage> _messages = <ChatMessage>[];
  final TextEditingController _textController = TextEditingController();

  bool _isRecording = false;

  RecorderStream _recorder = RecorderStream();
  StreamSubscription _recorderStatus;
  StreamSubscription<List<int>> _audioStreamSubscription;
  BehaviorSubject<List<int>> _audioStream;

  // TODO DialogflowGrpc class instance

  @override
  void initState() {
    super.initState();
    initPlugin();
  }

  @override
  void dispose() {
    _recorderStatus?.cancel();
    _audioStreamSubscription?.cancel();
    super.dispose();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlugin() async {
    _recorderStatus = _recorder.status.listen((status) {
      if (mounted)
        setState(() {
          _isRecording = status == SoundStreamStatus.Playing;
        });
    });

    await Future.wait([
      _recorder.initialize()
    ]);



    // TODO Get a Service account

  }

  void stopStream() async {
    await _recorder.stop();
    await _audioStreamSubscription?.cancel();
    await _audioStream?.close();
  }

  void handleSubmitted(text) async {
    print(text);
    _textController.clear();

    //TODO Dialogflow Code

  }

  void handleStream() async {
    _recorder.start();

    _audioStream = BehaviorSubject<List<int>>();
    _audioStreamSubscription = _recorder.audioStream.listen((data) {
      print(data);
      _audioStream.add(data);
    });


    // TODO Create SpeechContexts
    // Create an audio InputConfig

    // TODO Make the streamingDetectIntent call, with the InputConfig and the audioStream
    // TODO Get the transcript and detectedIntent and show on screen

  }

  // The chat interface
  //
  //------------------------------------------------------------------------------------
  @override
  Widget build(BuildContext context) {
    return Column(children: <Widget>[
      Flexible(
          child: ListView.builder(
            padding: EdgeInsets.all(8.0),
            reverse: true,
            itemBuilder: (_, int index) => _messages[index],
            itemCount: _messages.length,
          )),
      Divider(height: 1.0),
      Container(
          decoration: BoxDecoration(color: Theme.of(context).cardColor),
          child: IconTheme(
            data: IconThemeData(color: Theme.of(context).accentColor),
            child: Container(
              margin: const EdgeInsets.symmetric(horizontal: 8.0),
              child: Row(
                children: <Widget>[
                  Flexible(
                    child: TextField(
                      controller: _textController,
                      onSubmitted: handleSubmitted,
                      decoration: InputDecoration.collapsed(hintText: "Send a message"),
                    ),
                  ),
                  Container(
                    margin: EdgeInsets.symmetric(horizontal: 4.0),
                    child: IconButton(
                      icon: Icon(Icons.send),
                      onPressed: () => handleSubmitted(_textController.text),
                    ),
                  ),
                  IconButton(
                    iconSize: 30.0,
                    icon: Icon(_isRecording ? Icons.mic_off : Icons.mic),
                    onPressed: _isRecording ? stopStream : handleStream,
                  ),
                ],
              ),
            ),
          )
      ),
    ]);
  }
}


//------------------------------------------------------------------------------------
// The chat message balloon
//
//------------------------------------------------------------------------------------
class ChatMessage extends StatelessWidget {
  ChatMessage({this.text, this.name, this.type});

  final String text;
  final String name;
  final bool type;

  List<Widget> otherMessage(context) {
    return <Widget>[
      new Container(
        margin: const EdgeInsets.only(right: 16.0),
        child: CircleAvatar(child: new Text('B')),
      ),
      new Expanded(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text(this.name,
                style: TextStyle(fontWeight: FontWeight.bold)),
            Container(
              margin: const EdgeInsets.only(top: 5.0),
              child: Text(text),
            ),
          ],
        ),
      ),
    ];
  }

  List<Widget> myMessage(context) {
    return <Widget>[
      Expanded(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.end,
          children: <Widget>[
            Text(this.name, style: Theme.of(context).textTheme.subtitle1),
            Container(
              margin: const EdgeInsets.only(top: 5.0),
              child: Text(text),
            ),
          ],
        ),
      ),
      Container(
        margin: const EdgeInsets.only(left: 16.0),
        child: CircleAvatar(
            child: Text(
              this.name[0],
              style: TextStyle(fontWeight: FontWeight.bold),
            )),
      ),
    ];
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      margin: const EdgeInsets.symmetric(vertical: 10.0),
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: this.type ? myMessage(context) : otherMessage(context),
      ),
    );
  }
}

উইজেট বিল্ডের জন্য chat.dart ফাইলে অনুসন্ধান করুন এটি চ্যাটবট ইন্টারফেস তৈরি করে, যার মধ্যে রয়েছে:

  • ListView যা ব্যবহারকারী এবং চ্যাটবট থেকে সমস্ত চ্যাট বেলুন ধারণ করে। এটি ChatMessage ক্লাস ব্যবহার করে, যা একটি অবতার এবং পাঠ্য সহ চ্যাট বার্তা তৈরি করে।
  • টেক্সট কোয়েরি প্রবেশের জন্য TextField
  • ডায়ালগফ্লোতে পাঠ্য প্রশ্ন পাঠানোর জন্য পাঠান আইকন সহ আইকন বোতাম
  • ডায়ালগফ্লোতে অডিও স্ট্রীম পাঠানোর জন্য একটি মাইক্রোফোন সহ আইকন বোতাম , যা একবার চাপলে অবস্থা পরিবর্তন করে।

চ্যাট ইন্টারফেস লিঙ্ক করা

  1. main.dart খুলুন এবং Widget build পরিবর্তন করুন, তাই এটি শুধুমাত্র Chat() ইন্টারফেসকে ইনস্ট্যান্টিয়েট করে। অন্য সব ডেমো কোড মুছে ফেলা যাবে.
import 'package:flutter/material.dart';
import 'chat.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // This is the theme of your application.
        //
        // Try running your application with "flutter run". You'll see the
        // application has a blue toolbar. Then, without quitting the app, try
        // changing the primarySwatch below to Colors.green and then invoke
        // "hot reload" (press "r" in the console where you ran "flutter run",
        // or simply save your changes to "hot reload" in a Flutter IDE).
        // Notice that the counter didn't reset back to zero; the application
        // is not restarted.
        primarySwatch: Colors.orange,
      ),
      home: MyHomePage(title: 'Flutter Dialogflow Agent'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  // This widget is the home page of your application. It is stateful, meaning
  // that it has a State object (defined below) that contains fields that affect
  // how it looks.

  // This class is the configuration for the state. It holds the values (in this
  // case the title) provided by the parent (in this case the App widget) and
  // used by the build method of the State. Fields in a Widget subclass are
  // always marked "final".

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    // This method is rerun every time setState is called, for instance as done
    // by the _incrementCounter method above.
    //
    // The Flutter framework has been optimized to make rerunning build methods
    // fast, so that you can just rebuild anything that needs updating rather
    // than having to individually change instances of widgets.
    return Scaffold(
      appBar: AppBar(
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: Text(widget.title),
      ),
      body: Center(
        // Center is a layout widget. It takes a single child and positions it
        // in the middle of the parent.
        child: Chat())
    );
  }
}
  1. অ্যাপ্লিকেশন চালান. ( যদি অ্যাপটি আগে শুরু হয়ে থাকে। ভার্চুয়াল ডিভাইস বন্ধ করুন এবং main.dart পুনরায় চালান )। আপনি যখন প্রথমবার চ্যাট ইন্টারফেসের সাথে আপনার অ্যাপ চালান। আপনি মাইক্রোফোনের অনুমতি দিতে চান কিনা তা জিজ্ঞাসা করে আপনি একটি অনুমতি পপ-আপ পাবেন। ক্লিক করুন: অ্যাপটি ব্যবহার করার সময়

অনুমতি

  1. পাঠ্য এলাকা এবং বোতামগুলির সাথে খেলুন। আপনি যখন একটি পাঠ্য ক্যোয়ারী টাইপ করেন এবং এন্টার টিপুন, বা পাঠান বোতামটি আলতো চাপুন, আপনি Android স্টুডিওর রান ট্যাবে লগ ইন করা পাঠ্য ক্যোয়ারী দেখতে পাবেন। আপনি যখন মাইক্রোফোন বোতামটি আলতো চাপবেন এবং এটি বন্ধ করবেন, আপনি রান ট্যাবে লগ ইন করা অডিও স্ট্রিম দেখতে পাবেন।

অডিও স্ট্রিম লগ

দুর্দান্ত, আমরা এখন ডায়ালগফ্লো-এর সাথে অ্যাপ্লিকেশনটিকে সংহত করতে প্রস্তুত!

Dialogflow_gRPC এর সাথে আপনার ফ্লটার অ্যাপকে একীভূত করা

  1. chat.dart খুলুন এবং নিম্নলিখিত আমদানি যোগ করুন:
import 'package:dialogflow_grpc/dialogflow_grpc.dart';
import 'package:dialogflow_grpc/generated/google/cloud/dialogflow/v2beta1/session.pb.dart';
  1. ফাইলের শীর্ষে, ডানদিকে // TODO DialogflowGrpcV2Beta1 class instance নীচে নিম্নলিখিত লাইনটি যোগ করুন, ডায়ালগফ্লো ক্লাসের উদাহরণ ধরে রাখতে:
DialogflowGrpcV2Beta1 dialogflow;
  1. initPlugin() পদ্ধতির জন্য অনুসন্ধান করুন, এবং TODO মন্তব্যের নীচে নীচের কোডটি যোগ করুন:
    // Get a Service account
    final serviceAccount = ServiceAccount.fromString(
        '${(await rootBundle.loadString('assets/credentials.json'))}');
    // Create a DialogflowGrpc Instance
    dialogflow = DialogflowGrpcV2Beta1.viaServiceAccount(serviceAccount);

এটি পরিষেবা অ্যাকাউন্টের সাথে আপনার Google ক্লাউড প্রকল্পে অনুমোদিত একটি ডায়ালগফ্লো উদাহরণ তৈরি করবে৷ (নিশ্চিত করুন যে আপনার সম্পদ ফোল্ডারে credentials.json আছে!)

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

একটি detectIntent কল করা হচ্ছে

  1. এখন handleSubmitted() পদ্ধতিটি খুঁজুন, এখানে যাদুটি আসে। TODO মন্তব্যের ঠিক নিচে, নিম্নলিখিত কোডটি যোগ করুন। এই কোডটি ব্যবহারকারীর টাইপ করা বার্তাটিকে ListView-এ যোগ করবে:
ChatMessage message = ChatMessage(
 text: text,
 name: "You",
 type: true,
);

setState(() {
 _messages.insert(0, message);
});
  1. এখন, আগের কোডের ঠিক নীচে, আমরা detectIntent কল করব, আমরা ইনপুট থেকে টেক্সট পাস করব, এবং একটি ভাষা কোড। - ফলাফল ( data.queryResult.fulfillment এর মধ্যে) ListView এ মুদ্রিত হবে:
DetectIntentResponse data = await dialogflow.detectIntent(text, 'en-US');
String fulfillmentText = data.queryResult.fulfillmentText;
if(fulfillmentText.isNotEmpty) {
  ChatMessage botMessage = ChatMessage(
    text: fulfillmentText,
    name: "Bot",
    type: false,
  );

  setState(() {
    _messages.insert(0, botMessage);
  });
}
  1. ভার্চুয়াল ডিভাইসটি শুরু করুন এবং অভিপ্রায় কল সনাক্তকরণ পরীক্ষা করুন। প্রকার: hiএটি আপনাকে ডিফল্ট স্বাগত বার্তা সহ অভিবাদন জানাতে হবে। আপনি যখন অন্য কিছু টাইপ করেন, তখন এটি আপনাকে ডিফল্ট ফলব্যাক ফিরিয়ে দেবে।

একটি স্ট্রিমিং ডিটেক্ট ইনটেন্ট কল করা হচ্ছে

  1. এখন handleStream() পদ্ধতিটি খুঁজুন, এখানেই অডিও স্ট্রিমিংয়ের জন্য যাদুটি আসে। প্রথম TODO-এর অধীনে প্রথমে, ভয়েস মডেলকে পক্ষপাতিত্ব করার জন্য একটি বায়াসলিস্ট সহ একটি অডিও InputConfigV2beta1 তৈরি করুন৷ যেহেতু আমরা একটি ফোন (ভার্চুয়াল ডিভাইস) ব্যবহার করছি, স্যাম্পলহার্টজ হবে 16000 এবং এনকোডিং হবে লিনিয়ার 16৷ এটি আপনার মেশিনের হার্ডওয়্যার/মাইক্রোফোন ব্যবহার করার উপর নির্ভর করে৷ আমার অভ্যন্তরীণ ম্যাকবুক মাইকের জন্য, 16000 ভাল ছিল। ( https://pub.dev/packages/sound_stream প্যাকেজের তথ্য দেখুন)
var biasList = SpeechContextV2Beta1(
    phrases: [
      'Dialogflow CX',
      'Dialogflow Essentials',
      'Action Builder',
      'HIPAA'
    ],
    boost: 20.0
);

    // See: https://cloud.google.com/dialogflow/es/docs/reference/rpc/google.cloud.dialogflow.v2#google.cloud.dialogflow.v2.InputAudioConfig
var config = InputConfigV2beta1(
    encoding: 'AUDIO_ENCODING_LINEAR_16',
    languageCode: 'en-US',
    sampleRateHertz: 16000,
    singleUtterance: false,
    speechContexts: [biasList]
);
  1. এর পরে, আমরা dialogflow অবজেক্টে streamingDetectIntent পদ্ধতিকে কল করব, যা আমাদের ডায়ালগফ্লো সেশন ধারণ করে:
final responseStream = dialogflow.streamingDetectIntent(config, _audioStream);
  1. রেসপন্স স্ট্রিমের সাহায্যে, আমরা অবশেষে ইনকামিং ট্রান্সক্রিপ্ট, শনাক্ত করা ব্যবহারকারীর ক্যোয়ারী এবং শনাক্ত করা মিলিত অভিপ্রায় প্রতিক্রিয়া শুনতে পারি। আমরা এটি স্ক্রিনে একটি ChatMessage এ প্রিন্ট করব:
// Get the transcript and detectedIntent and show on screen
responseStream.listen((data) {
  //print('----');
  setState(() {
    //print(data);
    String transcript = data.recognitionResult.transcript;
    String queryText = data.queryResult.queryText;
    String fulfillmentText = data.queryResult.fulfillmentText;

    if(fulfillmentText.isNotEmpty) {

      ChatMessage message = new ChatMessage(
        text: queryText,
        name: "You",
        type: true,
      );

      ChatMessage botMessage = new ChatMessage(
        text: fulfillmentText,
        name: "Bot",
        type: false,
      );

      _messages.insert(0, message);
      _textController.clear();
      _messages.insert(0, botMessage);

    }
    if(transcript.isNotEmpty) {
      _textController.text = transcript;
    }

  });
},onError: (e){
  //print(e);
},onDone: () {
  //print('done');
});

এই হল, আপনার অ্যাপ্লিকেশন শুরু করুন এবং এটি ভার্চুয়াল ডিভাইসে পরীক্ষা করুন, মাইক্রোফোন বোতাম টিপুন এবং বলুন: "হ্যালো"

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

5. ডায়ালগফ্লো: ডায়ালগফ্লো এজেন্টের মডেলিং

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

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

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

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

ডায়ালগফ্লো ইএস প্রসঙ্গ নামক একটি ধারণা নিয়ে কাজ করে। ঠিক একজন মানুষের মতো, ডায়ালগফ্লো ES 2য় এবং 3য় টার্ন-টেকিং টার্নে প্রসঙ্গ মনে রাখতে পারে। এইভাবে এটি পূর্ববর্তী ব্যবহারকারীর উচ্চারণগুলির উপর নজর রাখতে পারে।

ডায়ালগফ্লো ইন্টেন্টস সম্পর্কে এখানে আরও তথ্য রয়েছে

ডিফল্ট স্বাগত অভিপ্রায় পরিবর্তন করা হচ্ছে

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

এখানে ডিফল্ট স্বাগত অভিপ্রায়ের জন্য স্বাগত বার্তা রয়েছে:

ব্যবহারকারী

এজেন্ট

এই যে আছে

"হাই, আমি ডায়ালগফ্লো FAQ বট, আমি ডায়ালগফ্লোতে প্রশ্নের উত্তর দিতে পারি।"

"আপনি কি জানতে চান?"

  1. ইন্টেন্টস > ডিফল্ট ওয়েলকাম ইন্টেন্টে ক্লিক করুন
  2. রেসপন্সে নিচে স্ক্রোল করুন।
  3. সমস্ত পাঠ্য প্রতিক্রিয়া সাফ করুন।
  4. ডিফল্ট ট্যাবে, নিম্নলিখিত 2টি প্রতিক্রিয়া তৈরি করুন:
  • হাই, আমি ডায়ালগফ্লো FAQ বট, আমি ডায়ালগফ্লোতে প্রশ্নের উত্তর দিতে পারি। আপনি কি জানতে চান?
  • হাউডি, আমি ডায়ালগফ্লো FAQ বট, ডায়ালগফ্লো সম্পর্কে আপনার কি প্রশ্ন আছে? আমি কিভাবে সাহায্য করতে পারি?

কনফিগারেশন এই স্ক্রিনশটের অনুরূপ হওয়া উচিত।

ডিফল্ট স্বাগতম অভিপ্রায় সম্পাদনা করুন

  1. Save এ ক্লিক করুন
  2. আসুন এই অভিপ্রায় পরীক্ষা করা যাক. প্রথমে, আমরা এটি ডায়ালগফ্লো সিমুলেটরে পরীক্ষা করতে পারি। প্রকার: হ্যালো । এটি এই বার্তাগুলির মধ্যে একটি ফিরিয়ে দেওয়া উচিত:
  • হাই, আমি ডায়ালগফ্লো FAQ বট, আমি ডায়ালগফ্লোতে প্রশ্নের উত্তর দিতে পারি। আপনি কি জানতে চান?
  • হাউডি, আমি ডায়ালগফ্লো FAQ বট, ডায়ালগফ্লো সম্পর্কে আপনার কি প্রশ্ন আছে? আমি কিভাবে সাহায্য করতে পারি?

ডিফল্ট ফলব্যাক অভিপ্রায় পরিবর্তন করা হচ্ছে

  1. ইন্টেন্টস > ডিফল্ট ফলব্যাক ইন্টেন্টে ক্লিক করুন
  2. রেসপন্সে নিচে স্ক্রোল করুন।
  3. সমস্ত পাঠ্য প্রতিক্রিয়া সাফ করুন।
  4. ডিফল্ট ট্যাবে, নিম্নলিখিত প্রতিক্রিয়া তৈরি করুন:
  • দুর্ভাগ্যক্রমে আমি এই প্রশ্নের উত্তর জানি না। আপনি কি আমাদের ওয়েবসাইট চেক করেছেন? http://www.dialogflow.com?
  1. Save এ ক্লিক করুন

একটি অনলাইন নলেজ বেসের সাথে সংযুক্ত হচ্ছে

জ্ঞান সংযোগকারী সংজ্ঞায়িত উদ্দেশ্য পরিপূরক. তারা স্বয়ংক্রিয় প্রতিক্রিয়া খুঁজে পেতে জ্ঞান নথি পার্স. (উদাহরণস্বরূপ, CSV ফাইল, অনলাইন ওয়েবসাইট বা এমনকি PDF ফাইল থেকে প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী বা নিবন্ধ!) সেগুলি কনফিগার করার জন্য, আপনি এক বা একাধিক জ্ঞানের ভিত্তি নির্ধারণ করেন, যা জ্ঞান নথির সংগ্রহ।

জ্ঞান সংযোগকারী সম্পর্কে আরও পড়ুন।

এর চেষ্টা করা যাক.

  1. মেনুতে জ্ঞান (বিটা) নির্বাচন করুন।

জ্ঞানভাণ্ডার

  1. ডান নীল বোতামে ক্লিক করুন: জ্ঞানের ভিত্তি তৈরি করুন
  2. একটি নলেজ বেস নাম হিসাবে টাইপ করুন; ডায়ালগফ্লো প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী এবং সংরক্ষণ টিপুন।
  3. প্রথম একটি লিঙ্ক তৈরি করুন ক্লিক করুন

নলেজ বেস প্রথম এক

  1. এটি একটি উইন্ডো খুলবে।

নিম্নলিখিত কনফিগারেশন ব্যবহার করুন:

নথির নাম: DialogflowFAQ নলেজ টাইপ: FAQ মাইম টাইপ: text/html

  1. আমরা যে URL থেকে ডেটা লোড করি তা হল:

https://www.leeboonstra.dev/faqs/

  1. তৈরি করুন ক্লিক করুন

একটি জ্ঞান ভিত্তি তৈরি করা হয়েছে:

জ্ঞানভাণ্ডার তৈরি হয়েছে

  1. প্রতিক্রিয়া বিভাগে স্ক্রোল করুন এবং প্রতিক্রিয়া যোগ করুন ক্লিক করুন

নিম্নলিখিত উত্তরগুলি তৈরি করুন এবং সংরক্ষণ করুন টিপুন।

$Knowledge.Answer[1]
  1. View Detail এ ক্লিক করুন

বিস্তারিত দেখুন

  1. FAQ ওয়েবপৃষ্ঠা আপডেট হলে স্বয়ংক্রিয়ভাবে পরিবর্তন আনতে স্বয়ংক্রিয় পুনরায় লোড সক্ষম করুন নির্বাচন করুন এবং সংরক্ষণ করুন টিপুন।

এটি ডায়ালগফ্লোতে আপনার প্রয়োগ করা সমস্ত প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী প্রদর্শন করবে৷ এটা সহজ!

জেনে রাখুন যে আপনি আপনার এজেন্টকে প্রায়শই জিজ্ঞাসিত প্রশ্নগুলি আমদানি করতে FAQ সহ একটি অনলাইন HTML ওয়েবসাইটে নির্দেশ করতে পারেন৷ এমনকি পাঠ্যের একটি ব্লক সহ একটি পিডিএফ আপলোড করাও সম্ভব, এবং ডায়ালগফ্লো নিজেই প্রশ্ন নিয়ে আসবে।

এখন প্রায়শই জিজ্ঞাসিত প্রশ্নগুলিকে 'অতিরিক্ত' হিসাবে দেখা উচিত আপনার এজেন্টদের সাথে যোগ করার জন্য, আপনার উদ্দেশ্য প্রবাহের পাশে। নলেজ বেস প্রায়শই জিজ্ঞাসিত প্রশ্নগুলি মডেলটিকে প্রশিক্ষণ দিতে পারে না৷ সুতরাং সম্পূর্ণ ভিন্ন উপায়ে প্রশ্ন জিজ্ঞাসা করা, একটি মিল নাও পেতে পারে কারণ এটি প্রাকৃতিক ভাষা বোঝার (মেশিন লার্নিং মডেল) ব্যবহার করে না। এই কারণেই মাঝে মাঝে আপনার প্রায়শই জিজ্ঞাসিত প্রশ্নগুলিকে উদ্দেশ্যগুলিতে রূপান্তর করা মূল্যবান।

  1. ডানদিকে সিমুলেটরে প্রশ্নগুলি পরীক্ষা করুন।
  2. যখন এটি সব কাজ করে, আপনার Flutter অ্যাপে ফিরে যান এবং এই নতুন সামগ্রীর সাথে আপনার চ্যাট এবং ভয়েস বট পরীক্ষা করুন! ডায়ালগফ্লোতে আপনি যে প্রশ্নগুলি লোড করেছেন তা জিজ্ঞাসা করুন৷

ফলাফল

6. অভিনন্দন

অভিনন্দন, আপনি সফলভাবে একটি ডায়ালগফ্লো চ্যাটবট ইন্টিগ্রেশন সহ আপনার প্রথম ফ্লাটার অ্যাপ তৈরি করেছেন, ভাল হয়েছে!

আমরা কভার করেছি কি

  • ডায়ালগফ্লো এসেনশিয়াল দিয়ে কীভাবে একটি চ্যাটবট তৈরি করবেন
  • কীভাবে একটি ফ্লাটার অ্যাপে ডায়ালগফ্লোকে সংহত করবেন
  • ডায়ালগফ্লো দিয়ে কীভাবে পাঠ্য অভিপ্রায় সনাক্ত করা যায়
  • ডায়ালগফ্লোতে মাইক্রোফোনের মাধ্যমে কীভাবে একটি ভয়েস স্ট্রিম করা যায়
  • কিভাবে জ্ঞান বেস সংযোগকারী ব্যবহার করতে

এরপর কি?

এই কোড ল্যাব উপভোগ করেছেন? এই মহান ডায়ালগফ্লো ল্যাবগুলি দেখুন!

আমি কীভাবে ডার্ট/ফ্লটারের জন্য ডায়ালগফ্লো জিআরপিসি প্যাকেজ তৈরি করেছি তাতে আগ্রহী?