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

deepseek-recipe দিয়ে বিভিন্ন ফরম্যাটের AI অনুরোধকে DeepSeek V4.1 প্রম্পটে রূপান্তর করুন

Python বা Rust থেকে deepseek-recipe ইনস্টল ও ব্যবহার, Chat Completions অনুরোধকে কথোপকথনে রূপান্তর, DeepSeek V4.1 প্রম্পট রেন্ডার এবং স্ট্রিমিং, টোকেনাইজেশন, ইমেজ প্রিপ্রসেসিং ও আউটপুট পার্সিং সম্পর্কে জানুন।

deepseek-recipe দিয়ে বিভিন্ন ফরম্যাটের AI অনুরোধকে DeepSeek V4.1 প্রম্পটে রূপান্তর

deepseek-recipe কী?

deepseek-recipe হলো Rust লাইব্রেরি ও Python binding-এর একটি সংগ্রহ, যা API পরিষেবাগুলোকে DeepSeek inference backend-এর সঙ্গে সংযুক্ত করে। এটি সমর্থিত API ফরম্যাটের অনুরোধকে একটি অভিন্ন Conversation উপস্থাপনায় রূপান্তর করে, সেই conversation-গুলোকে DeepSeek V4 বা V4.1 prompt হিসেবে রেন্ডার করে এবং মডেলের আউটপুটকে সংশ্লিষ্ট response ফরম্যাটে ফিরিয়ে রূপান্তর করে।

প্রকল্পটি সম্পূর্ণ inference server নয়; এটি একটি protocol ও prompt-processing layer। মডেল inference, HTTP transport এবং tool execution আপনাকে আলাদাভাবে সরবরাহ করতে হবে।

প্রক্রিয়াকরণ pipeline যেভাবে কাজ করে

  1. Messages, Chat Completions অথবা Responses ফরম্যাটে একটি অনুরোধ গ্রহণ করা।
  2. অনুরোধটিকে লাইব্রেরির অভিন্ন Conversation ফরম্যাটে রূপান্তর করা।
  3. Conversation-টিকে DeepSeek V4 অথবা V4.1 prompt হিসেবে রেন্ডার করা, অথবা token ID-তে এনকোড করা।
  4. Prompt অথবা token ID একটি বাহ্যিক inference backend-এ পাঠানো।
  5. উৎপন্ন আউটপুট পার্স করা, যার মধ্যে সমর্থিত thinking content, tool call, JSON object এবং stop sequence অন্তর্ভুক্ত।
  6. ক্লায়েন্টের প্রত্যাশিত ফরম্যাটে সম্পূর্ণ অথবা streaming response ফেরত দেওয়া।

deepseek-recipe নিজে মডেল চালায় না, tool execute করে না এবং HTTP service প্রকাশ করে না। Integration reference হিসেবে repository-তে উদাহরণ Rust ও Python server রয়েছে।

প্রধান বৈশিষ্ট্য

  • অভিন্ন protocol রূপান্তর: Messages, Chat Completions এবং Responses-এর অনুরোধ ও response পরিচালনা করে।
  • DeepSeek prompt encoding: DeepSeek V4 ও V4.1 conversation-কে prompt অথবা token ID হিসেবে রেন্ডার করে।
  • Streaming ও সম্পূর্ণ response: উভয় ধরনের response রূপান্তর সমর্থন করে।
  • Generation settings: thinking mode, reasoning effort, temperature, top_p এবং output token limit বহন করে।
  • Output parsing: thinking content, client tool call, JSON object output এবং stop sequence শনাক্ত করে।
  • Multimodal input: base64 data অথবা বাহ্যিক URL হিসেবে দেওয়া image গ্রহণ করে। Image package-এ OpenCV ব্যবহার করে DeepSeek V4.1 preprocessing রয়েছে।
  • Tool definition: function tool সমর্থন করে। Responses API অতিরিক্তভাবে tool namespace এবং apply_patch custom tool সমর্থন করে।

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

প্রয়োজনীয়তা

Python binding-এর জন্য Python 3.10 বা পরবর্তী সংস্করণ প্রয়োজন। pip দিয়ে প্রকাশিত package ইনস্টল করুন:

python3 -m pip install deepseek-recipe

ইনস্টল করা module-টি deepseek_recipe হিসেবে import করা হয়।

Chat Completions অনুরোধ রূপান্তর

নিচের উদাহরণে একটি Chat Completions অনুরোধ তৈরি করা হয়, সেটিকে অভিন্ন Conversation উপস্থাপনায় রূপান্তর করা হয় এবং সেই conversation-কে DeepSeek V4.1 prompt হিসেবে রেন্ডার করা হয়:

from deepseek_recipe import (
    ChatCompletionRequest,
    ConversionOptions,
    DeepseekV41Encoding,
)

request = ChatCompletionRequest({
    "model": "deepseek-flash",
    "messages": [
        {"role": "user", "content": "Hello"}
    ],
})

converted = request.convert(ConversionOptions())
rendered = DeepseekV41Encoding().render_conversation(
    converted.conversation
)

print(rendered.prompt)

প্রতিটি ধাপ বুঝে নিন

  1. ChatCompletionRequest আগত Chat Completions data পড়ে।
  2. request.convert(ConversionOptions()) অনুরোধটিকে Conversation-এ normalize করে।
  3. DeepseekV41Encoding() DeepSeek V4.1 encoding rule নির্বাচন করে।
  4. render_conversation মডেলের জন্য প্রস্তুত উপস্থাপনা তৈরি করে।
  5. rendered.prompt-এ আপনার বাহ্যিক inference backend-এ পাঠানোর prompt থাকে।

Inference-এর পরে, উৎপন্ন মডেল আউটপুটকে আপনার ক্লায়েন্টের প্রয়োজনীয় API ফরম্যাটে রূপান্তর করতে প্রকল্পের response-conversion ও output-parsing component ব্যবহার করুন। আপনার backend সম্পূর্ণ output ফেরত দেয়, নাকি উৎপন্ন data stream করে, তার ওপর সঠিক integration নির্ভর করে।

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

Crate যোগ করা

একটি Rust project-এ protocol conversion ও encoding crate যোগ করুন:

cargo add deepseek-recipe@0.1 deepseek-recipe-encoding@0.1

Source থেকে build করলে অথবা image processing সক্রিয় করলে, build instruction ও image dependency-এর জন্য repository-র development guide দেখুন।

DeepSeek V4.1 prompt রেন্ডার করা

use deepseek_recipe::openai::ChatCompletionRequest;
use deepseek_recipe::request::{ConversionOptions, ProtocolRequest};
use deepseek_recipe_encoding::PromptEncoding;
use deepseek_recipe_encoding::v4::dsv41::DeepseekV41Encoding;
use serde_json::json;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let request: ChatCompletionRequest = serde_json::from_value(json!({
        "model": "deepseek-flash",
        "messages": [
            {"role": "user", "content": "Hello"}
        ],
    }))?;

    let converted = request.convert(ConversionOptions::default())?;
    let rendered = DeepseekV41Encoding::new()
        .render_conversation(&converted.conversation);

    println!("{}", rendered.prompt);
    Ok(())
}

এখানে Serde JSON-কে ChatCompletionRequest-এ deserialize করে। ProtocolRequest trait অনুরোধ রূপান্তরের সুবিধা দেয়, আর PromptEncoding conversation rendering-এর সুবিধা দেয়। এরপর উৎপন্ন prompt আলাদাভাবে পরিচালিত inference engine-এ পাঠানো যায়।

Encoding ও decoding demo দেখুন

Repository-তে prompt রেন্ডার করা, special token পরিদর্শন করা এবং সম্পূর্ণ মডেল আউটপুটকে Chat Completions, Responses অথবা Messages ফরম্যাটে decode করার জন্য একটি web interface রয়েছে।

Repository root থেকে চালান:

cargo run -p encoding-decoding-demo --locked

তারপর ব্রাউজারে http://127.0.0.1:7778 খুলুন।

সার্ভারে লাইব্রেরিগুলো সংযুক্ত করার আগে প্রম্পটের কাঠামো যাচাই করতে এবং তৈরি করা আউটপুট কীভাবে সমর্থিত API রেসপন্স ফরম্যাটে ফিরে আসে তা বুঝতে এই ডেমোটি উপযোগী।

প্যাকেজের সংক্ষিপ্ত বিবরণ

  • deepseek-recipe: প্রোটোকল রূপান্তর এবং মডেল-আউটপুট পার্সিং।
  • deepseek-recipe-core: কথোপকথন, বার্তা, ছবি এবং টুলের জন্য শেয়ার করা টাইপ।
  • deepseek-recipe-encoding: DeepSeek V4 এবং V4.1 প্রম্পট রেন্ডারিং ও টোকেন এনকোডিং।
  • deepseek-recipe-image: ছবি আনা এবং প্রিপ্রসেসিং।
  • deepseek-recipe-python: deepseek_recipe ইমপোর্টের মাধ্যমে উন্মুক্ত Python বাইন্ডিং।
  • encoding-decoding-demo: ব্রাউজার-ভিত্তিক প্রম্পট ও আউটপুট পরিদর্শন।
  • server-rs: মক ইনফারেন্স ব্যবহার করা একটি Axum API উদাহরণ।
  • server-py: মক ইনফারেন্স ব্যবহার করা একটি FastAPI উদাহরণ।

উন্নত ইন্টিগ্রেশন টিপস

প্রোটোকল হ্যান্ডলিং ও ইনফারেন্স আলাদা রাখুন

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

ইচ্ছাকৃতভাবে প্রম্পট বা টোকেন আইডি বেছে নিন

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

স্ট্রিমিংকে শুরু থেকে শেষ পর্যন্ত একটি ফিচার হিসেবে পরিকল্পনা করুন

Rust এবং Python উভয়ই মডেল আউটপুটকে স্ট্রিমিং রেসপন্সে রূপান্তর সমর্থন করে। আপনার ট্রান্সপোর্ট এবং ইনফারেন্স ব্যাকএন্ডকেও ডেটা স্ট্রিম করতে হবে; লাইব্রেরি এই স্তরগুলো সরবরাহ করে না। ক্রমশ আসা মডেল আউটপুটকে ক্লায়েন্ট-সামনাসামনি API-তে সংযুক্ত করার সময় স্ট্রিমিং রেসপন্স নির্দেশিকা অনুসরণ করুন।

ইনফারেন্সের আগে ছবি হ্যান্ডেল করুন

রিকোয়েস্টে base64 কনটেন্ট বা বাহ্যিক URL-এর মাধ্যমে ছবির উল্লেখ থাকতে পারে। নির্দিষ্ট ইমেজ কম্পোনেন্টটি OpenCV ব্যবহার করে ছবি আনা এবং DeepSeek V4.1 প্রিপ্রসেসিং সমর্থন করে। সোর্স থেকে বিল্ড করার সময় প্রয়োজনীয় ইমেজ নির্ভরতাগুলো ইনস্টল করা আছে কি না নিশ্চিত করুন।

টুল এক্সিকিউশন লাইব্রেরির বাইরে রাখুন

প্রকল্পটি টুলের সংজ্ঞা উপস্থাপন করতে এবং ক্লায়েন্টের টুল কল পার্স করতে পারে, কিন্তু এই টুলগুলো এক্সিকিউট করে না। প্রতিটি কল যাচাই করা, উপযুক্ত ফাংশন বা কাস্টম টুল চালানো এবং ফলাফলকে পরবর্তী কথোপকথনের টার্নে যোগ করা আপনার অ্যাপ্লিকেশনের দায়িত্ব।

বর্তমান সীমারেখাগুলো মেনে চলুন

প্রকল্পটির ওপর ভিত্তি করে API ডিজাইন করার আগে বর্তমানে সমর্থিত নয় এমন ফিচারগুলো বিবেচনায় নিন:

  • logprobs বা top_logprobs-এর মাধ্যমে টোকেনের সম্ভাব্যতা।
  • ডকুমেন্ট কনটেন্ট, অডিও বা ভিডিও ইনপুট এবং file_id-এর মাধ্যমে পুনরুদ্ধার।
  • web_search-এর মতো সার্ভার-এক্সিকিউটেড টুল।
  • JSON Schema এবং নিয়মিত-এক্সপ্রেশনভিত্তিক আউটপুট সীমাবদ্ধতা।
  • টুলের strict সেটিং প্রয়োগ।
  • n > 1 হলে একাধিক Chat Completions choice।
  • apply_patch ছাড়া Responses-এর অন্যান্য কাস্টম টুল সংজ্ঞা।
  • Responses কথোপকথন সংরক্ষণ বা previous_response_id-এর মাধ্যমে কনটেক্সট পুনরুদ্ধার।
  • encrypted_content-এর মাধ্যমে এনক্রিপ্ট করা চিন্তন-সংক্রান্ত কনটেন্ট।

উপসংহার

deepseek-recipe একাধিক API প্রোটোকল স্বাভাবিকীকরণ, DeepSeek V4 এবং V4.1 ইনপুট তৈরি এবং তৈরি করা আউটপুটকে ক্লায়েন্ট-সামনাসামনি রেসপন্সে রূপান্তরের জন্য পুনর্ব্যবহারযোগ্য Rust ও Python কম্পোনেন্ট সরবরাহ করে। প্রাথমিক রিকোয়েস্ট রূপান্তর উদাহরণ দিয়ে শুরু করুন, ডেমোর মাধ্যমে আচরণ পরিদর্শন করুন, তারপর রূপান্তর পাইপলাইনকে আপনার নিজস্ব ইনফারেন্স, ট্রান্সপোর্ট এবং টুল-এক্সিকিউশন অবকাঠামোর সঙ্গে সংযুক্ত করুন।

প্রকল্পের কোড এবং সর্বসাধারণের জন্য উন্মুক্ত ডকুমেন্টেশন MIT License-এর অধীনে উপলব্ধ।