LangChain এর উদ্ভাবনী জগতের মাধ্যমে আমাদের যাত্রা ডাটা ম্যানেজমেন্ট এবং অ্যাপ্লিকেশন কার্যকারিতা রূপান্তরের ক্ষেত্রে এর উল্লেখযোগ্য ক্ষমতা উন্মোচন করেছে।
পূর্ববর্তী আলোচনার মাধ্যমে, আমরা LangChain-এর জটিল ক্ষমতাগুলি অন্বেষণ করার সময় বেশ কয়েকটি বিষয় নিয়ে আলোচনা করেছি। এই প্রবন্ধে, আমরা "MinIO এর সাথে Langchain এজেন্টদের ক্ষমতায়ন"-এ অন্তর্ভুক্ত ধারণাগুলির উপর ভিত্তি করে গড়ে তুলব কারণ আমরা একটি MinIO এজেন্টের কার্যকারিতা প্রসারিত করব যাতে অতিরিক্ত ক্ষমতাগুলিকে এনক্যাপসুলেট করতে এবং LangServe-এর মাধ্যমে কাস্টম এজেন্টকে মোতায়েন করি৷
এই অন্তর্দৃষ্টি উপর বিল্ডিং, আমরা এখন আমাদের ফোকাস চালু
স্বয়ংক্রিয় API এন্ডপয়েন্ট তৈরি: LangServe-এর অটোমেশন ক্ষমতা অনায়াসে প্রয়োজনীয় API এন্ডপয়েন্ট তৈরি করে, উন্নয়ন প্রচেষ্টাকে সুগম করে এবং স্থাপনার সময় উল্লেখযোগ্যভাবে হ্রাস করে।
স্কিমা জেনারেশন এবং ভ্যালিডেশন: এর বুদ্ধিমান স্কিমা অনুমান সহ, ল্যাংসার্ভ নিশ্চিত করে যে APIগুলি সু-সংজ্ঞায়িত ইন্টারফেস অফার করে, সহজে একীকরণের সুবিধা এবং একটি বিরামহীন ব্যবহারকারীর অভিজ্ঞতা।
কাস্টমাইজযোগ্য এন্ডপয়েন্ট কনফিগারেশন: ল্যাংসার্ভ বিভিন্ন অ্যাপ্লিকেশনের প্রয়োজন অনুসারে বিভিন্ন ধরণের এন্ডপয়েন্ট অফার করে, সিঙ্ক্রোনাস অপারেশন থেকে রিয়েল-টাইম আপডেট, ডেভেলপারদের অতুলনীয় নমনীয়তা প্রদান করে।
অনায়াসে ইন্টিগ্রেশন: সম্ভবত এর সবচেয়ে আকর্ষণীয় বৈশিষ্ট্য, ল্যাংসার্ভের বিদ্যমান ল্যাংচেইন কোডের সাথে নির্বিঘ্নে একীভূত করার ক্ষমতা মানে ডেভেলপাররা উল্লেখযোগ্য পরিবর্তন ছাড়াই তাদের বর্তমান কোডবেস এবং দক্ষতা লাভ করতে পারে।
আমরা নিম্নলিখিত ধাপে LangChain-এর সাথে MinIO-কে একীভূত করার প্রক্রিয়ার আরও গভীরে ডুব দেব।
langchain-cli
দিয়ে একটি ল্যাংচেইন অ্যাপ তৈরি করুন।agent.py
ফাইলে একটি কাস্টম LangChain এজেন্ট বিকাশ করুন৷server.py
এ আমাদের এজেন্ট প্রয়োগ করুন।LangServe-এর সাথে LangChain অ্যাপ্লিকেশানগুলি স্থাপন করা একটি নিরবচ্ছিন্ন ইন্টিগ্রেশন যাত্রা নিয়ে আসে, জটিল AI কার্যকারিতা এবং RESTful API এক্সপোজারের মধ্যে ব্যবধান পূরণ করে, ডেভেলপারদের LangChain ক্ষমতার সম্পূর্ণ স্পেকট্রাম দক্ষতার সাথে কাজে লাগাতে সক্ষম করে, আজকের ডিজিটাল ল্যান্ডস্কেপে দ্রুত বুদ্ধিমান অ্যাপ্লিকেশন স্থাপনের জন্য একটি নতুন মান নির্ধারণ করে .
LangChain তাদের langchain-cli
ব্যবহার করে অ্যাপ্লিকেশন তৈরি করার একটি সুবিধাজনক এবং সহজ পদ্ধতি অফার করেpip
দিয়ে ইনস্টল করা যায়। এই প্যাকেজটি একটি ইন্টারফেস প্রদান করে যা ব্যবহারকারীদের বিদ্যমান ব্যবহার করে সহজেই নতুন অ্যাপ্লিকেশন তৈরি করতে দেয়
দ্রষ্টব্য: সমস্ত প্রয়োজনীয় ফাইলগুলি "minio-langserve-deployment " নামের ডিরেক্টরির অধীনে MinIO "ব্লগ-সম্পদ" সংগ্রহস্থলে অবস্থিত।
একটি নতুন LangChain অ্যাপ্লিকেশন তৈরি করতে আমরা একটি ভার্চুয়াল পরিবেশ তৈরি করতে এবং langchain-cli
প্যাকেজ ইনস্টল করতে নিম্নলিখিত কমান্ড দিয়ে শুরু করতে পারি:
mkdir minio-langserve-testing cd minio-Langserve-testing python -m venv .myenv source .myenv/bin/activate pip install langchain-cli
langchain-cli
ব্যবহার করে একটি নতুন অ্যাপ তৈরি করার জন্য আমরা আমাদের টার্মিনালে langchain
টাইপ করতে পারি, নিম্নলিখিত কমান্ডটি my-app
নামে একটি নতুন অ্যাপ্লিকেশন ডিরেক্টরি তৈরি করতে লেখা হয়েছে।
langchain app new my-app
উপরের কমান্ডগুলির সাথে তৈরি করা ল্যাংচেইন অ্যাপটি বিকাশের জন্য একটি সামঞ্জস্যপূর্ণ পরিবেশ তৈরি করে সমস্ত ভারী উত্তোলন করে। সরাসরি বাক্সের বাইরে একটি নতুন LangChain অ্যাপ্লিকেশনের গঠনটি এইরকম দেখাচ্ছে:
./my-app ├── Dockerfile ├── README.md ├── app │ ├── __init__.py │ └── server.py ⇐ (This is where we will import our agent into) ├── packages ⇐ (This directory is where we will write our agent) │ └── README.md └── pyproject.toml
নিম্নলিখিত ধাপে আমরা প্যাকেজ/agent.py নামে একটি নতুন ফাইল লিখে এবং app/server.py
এ পরিবর্তন করে নতুন তৈরি করা LangChain অ্যাপ্লিকেশনে ( my-app
) পরিবর্তন করব।
এই ফাইলগুলি আমরা এই নিবন্ধে আলোচনা করা হবে:
my-app/packages/agent.py
my-app/app/server.py
LangServe-এর সাথে একটি MinIO- ইন্টিগ্রেটেড LangChain এজেন্টের স্থাপনার চিত্রিত করার জন্য, আমরা agent.py
এ এজেন্ট চেইন কোড সংরক্ষণ করে শুরু করব।
প্রথমে, আসুন একটি minio_client
শুরু করি যা "play.min.io:443" পাবলিক সার্ভারের সাথে সংযোগ করে। এই ফাইলটি অবশেষে LangChain-এর agent_executor
কল করবে, যা আমাদের এটি LangServe-এর add_route
র্যাপারে পাঠানোর অনুমতি দেবে।
দ্রষ্টব্য: আগের প্রকাশনা পড়া "
শুরু করতে, একটি পাঠ্য সম্পাদক ব্যবহার করে agent.py ফাইলটি খুলুন:
sudo nano packages/agent.py
ফাইলের শুরুতে, প্রয়োজনীয় প্যাকেজগুলি আমদানি করুন, যেমন os
, io
, minio
এবং ChatOpenAI
:
import os import io from minio import Minio from minio.error import S3Error from langchain_openai import ChatOpenAI os.environ["OPENAI_API_KEY"] = "<<Your API Key Here>>" # Initialize llm llm = ChatOpenAI(api_key=os.environ["OPENAI_API_KEY"]) # Initialize MinIO client minio_client = Minio('play.min.io:443', access_key='minioadmin', secret_key='minioadmin', secure=True)
এই কোড স্নিপেটে, আমরা প্রয়োজনীয় প্যাকেজগুলি আমদানি করি এবং OPENAI_API_KEY
এনভায়রনমেন্ট ভেরিয়েবলে সংরক্ষিত OpenAI API কী সহ ChatOpenAI ভাষার মডেলটি শুরু করি। আমরা "play.min.io" পাবলিক সার্ভারে প্রয়োজনীয় সংযোগের বিশদ প্রদান করে minio_client চালু করি।
এর পরে, আসুন MinIO বালতিটি সংজ্ঞায়িত করি এবং এটি বিদ্যমান না থাকলে এটি তৈরি করি:
# This variable will check if bucket exists bucket_name = "test" try: # Check if bucket exists if not minio_client.bucket_exists(bucket_name): # Create the bucket because it does not exist minio_client.make_bucket(bucket_name) print(f"Bucket '{bucket_name}' created successfully.") else: print(f"Bucket '{bucket_name}' already exists.") except S3Error as err: print(f"Error encountered: {err}")
এখানে, আমরা bucket_name
"test" হিসাবে সংজ্ঞায়িত করি এবং minio_client.bucket_exists()
পদ্ধতি ব্যবহার করে এটি ইতিমধ্যেই বিদ্যমান কিনা তা পরীক্ষা করি। যদি বালতিটি বিদ্যমান না থাকে, আমরা minio_client.make_bucket()
ব্যবহার করে এটি তৈরি করি। যদি বালতিটি ইতিমধ্যেই বিদ্যমান থাকে তবে আমরা একটি বার্তা মুদ্রণ করি যা নির্দেশ করে। প্রক্রিয়া চলাকালীন ঘটতে পারে এমন যেকোন S3Error
ধরতে এবং মুদ্রণ করার জন্য একটি চেষ্টা-ব্যতীত ব্লক ব্যবহার করে আমরা ত্রুটি হ্যান্ডলিং অন্তর্ভুক্ত করি।
মৌলিক সেটআপের সাথে, আমরা এখন MinIO টুল ফাংশন সংজ্ঞায়িত করতে এবং এজেন্ট নির্বাহক তৈরি করতে এগিয়ে যেতে পারি, যা আমরা পরবর্তী ধাপে কভার করব।
ল্যাংচেইন এবং ল্যাংসার্ভ উভয়ই যুক্তি এবং কার্যকারিতা এনক্যাপসুলেট করার জন্য একই পদ্ধতি প্রদান করে, এটিকে নির্বিঘ্নে এজেন্ট এবং চেইন লজিকের সাথে একত্রিত করার অনুমতি দেয়। এটি সংজ্ঞায়িত ফাংশনের ভিতরে একটি বিস্তারিত ডকস্ট্রিং সহ @tool
ডেকোরেটর ব্যবহারের মাধ্যমে অর্জন করা হয়, যা ফাংশনগুলিকে পুনঃব্যবহারযোগ্য উপাদান হিসাবে চিহ্নিত করে যা AI এজেন্ট দ্বারা ব্যবহার এবং ব্যাখ্যা করা যেতে পারে।
আসুন প্রদত্ত কোড উদাহরণগুলি ঘনিষ্ঠভাবে দেখি:
from langchain.agents import tool @tool def upload_file_to_minio(bucket_name: str, object_name: str, data_bytes: bytes): """ Uploads a file to MinIO. Parameters: bucket_name (str): The name of the bucket. object_name (str): The name of the object to create in the bucket. data_bytes (bytes): The raw bytes of the file to upload. """ data_stream = io.BytesIO(data_bytes) minio_client.put_object(bucket_name, object_name, data_stream, length=len(data_bytes)) return f"File {object_name} uploaded successfully to bucket {bucket_name}."
upload_file_to_minio
ফাংশনটি @tool
দিয়ে সজ্জিত, ইঙ্গিত করে যে এটি একটি পুনঃব্যবহারযোগ্য উপাদান। একটি MinIO বালতিতে একটি ফাইল আপলোড করতে প্রয়োজনীয় প্যারামিটার লাগে, যেমন বাকেটের নাম, বস্তুর নাম এবং ফাইলের কাঁচা বাইট। ফাইল আপলোড অপারেশন সঞ্চালনের জন্য ফাংশনটি minio_client
ব্যবহার করে এবং সমাপ্তির পরে একটি সফল বার্তা প্রদান করে।
@tool def download_file_from_minio(file_info): """ Custom function to download a file from MinIO. Expects file_info dict with 'bucket_name', 'object_name', and 'save_path' keys. 'save_path' should be the local path where the file will be saved. """ bucket_name = file_info['bucket_name'] object_name = file_info['object_name'] save_path = file_info['save_path'] minio_client.get_object(bucket_name, object_name, save_path)
একইভাবে, download_file_from_minio
ফাংশনটি @tool
দিয়ে চিহ্নিত করা হয়েছে। এটি একটি MinIO বালতি থেকে একটি ফাইল ডাউনলোড করার জন্য প্রয়োজনীয় তথ্য ধারণকারী একটি file_info
অভিধানের প্রত্যাশা করে, যেমন বাকেটের নাম, বস্তুর নাম এবং স্থানীয় পাথ যেখানে ফাইলটি সংরক্ষণ করা উচিত। ফাংশনটি minio_client
ব্যবহার করে নির্দিষ্ট বালতি থেকে বস্তুটি পুনরুদ্ধার করে এবং নির্দিষ্ট স্থানীয় পাথে সংরক্ষণ করে।
@tool def list_objects_in_minio_bucket(file_info): """ Custom function to list objects in a MinIO bucket. Expects file_info dict with 'bucket_name' key. Returns a list of dictionaries containing 'ObjectKey' and 'Size' keys. """ bucket_name = file_info['bucket_name'] response = minio_client.list_objects(bucket_name) return [{'ObjectKey': obj.object_name, 'Size': obj.size} for obj in response.items]
@tool
দিয়ে সজ্জিত list_objects_in_minio_bucket
ফাংশন একটি MinIO বালতিতে উপস্থিত বস্তুর তালিকা করার জন্য দায়ী। এটি bucket_name
কী সহ একটি file_info
অভিধান আশা করে। ফাংশনটি নির্দিষ্ট বালতিতে বস্তুর তালিকা পুনরুদ্ধার করতে minio_client
ব্যবহার করে এবং প্রতিটি বস্তুর জন্য অবজেক্ট কী এবং আকার ধারণকারী অভিধানের একটি তালিকা প্রদান করে।
এই কার্যকারিতাগুলিকে সরঞ্জাম হিসাবে এনক্যাপসুলেট করে, ল্যাংচেইন এবং ল্যাংসার্ভ এআই এজেন্টকে তাদের যুক্তি এবং সিদ্ধান্ত গ্রহণের প্রক্রিয়ায় নির্বিঘ্নে অন্তর্ভুক্ত করতে সক্ষম করে। এজেন্ট বুদ্ধিমত্তার সাথে হাতে থাকা টাস্কের উপর ভিত্তি করে উপযুক্ত টুলটি নির্বাচন এবং কার্যকর করতে পারে, এর ক্ষমতা বাড়াতে পারে এবং MinIO স্টোরেজ সিস্টেমের সাথে আরও জটিল এবং গতিশীল মিথস্ক্রিয়া করার অনুমতি দেয়।
ল্যাংচেইন কাস্টম লজিক দিয়ে তৈরি করার জন্য অগণিত পদ্ধতি অফার করে, এরকম একটি পদ্ধতি হল "RunnableLambda
যা LangChain দ্বারা প্রদত্ত একটি নির্মাণ যা এআই এজেন্টের যুক্তির মধ্যে ফাংশনগুলিকে এক্সিকিউটেবল ইউনিট হিসাবে বিবেচনা করার অনুমতি দেয়।
from langchain_core.runnables import RunnableLambda upload_file_runnable = RunnableLambda(upload_file_to_minio) download_file_runnable = RunnableLambda(download_file_from_minio) list_objects_runnable = RunnableLambda(list_objects_in_minio_bucket)
RunnableLambda-এর সাহায্যে টুল ফাংশনগুলিকে মোড়ানোর মাধ্যমে, আমরা রানেবল ইনস্ট্যান্স তৈরি করি ( upload_file_runnable
, download_file_runnable
, এবং list_objects_runnable
) যা এজেন্টের দ্বারা কার্যকর করার সময় আহ্বান করা যেতে পারে। এই রানেবলগুলি সংশ্লিষ্ট টুল ফাংশনগুলিকে এনক্যাপসুলেট করে এবং এজেন্টকে তাদের সাথে যোগাযোগ করার জন্য একটি অভিন্ন ইন্টারফেস প্রদান করে।
tools = [upload_file_to_minio, download_file_from_minio, list_objects_in_minio_bucket] llm_with_tools = llm.bind_tools(tools)
টুল তালিকায় মূল টুল ফাংশন রয়েছে ( upload_file_to_minio
, download_file_from_minio
, এবং list_objects_in_minio_bucket
), যা এজেন্টের ক্ষমতার জন্য বিল্ডিং ব্লক হিসাবে কাজ করে। llm.bind_tools(tools)
লাইনটি টুলগুলিকে ভাষা মডেলের সাথে আবদ্ধ করে ( llm
), মডেলের যুক্তির ক্ষমতা এবং টুল দ্বারা প্রদত্ত নির্দিষ্ট কার্যকারিতার মধ্যে একটি সংযোগ স্থাপন করে। ফলস্বরূপ llm_with_tools
বাউন্ড টুল ব্যবহার করার জ্ঞান এবং ক্ষমতার সাথে উন্নত ভাষা মডেলের প্রতিনিধিত্ব করে।
RunnableLambda
এর ব্যবহার এবং ভাষা মডেলে টুলের বাঁধাই শক্তিশালী এবং কাস্টমাইজযোগ্য AI এজেন্ট তৈরিতে LangChain এবং LangServe-এর নমনীয়তা এবং সম্প্রসারণযোগ্যতা প্রদর্শন করে। টুলে থাকা নির্দিষ্ট কার্যকারিতার সাথে ভাষার মডেলের শক্তিকে একত্রিত করে, AI এজেন্ট জটিল কাজগুলি সম্পাদন করার ক্ষমতা অর্জন করে, যেমন MinIO-তে ফাইল আপলোড করা, MinIO থেকে ফাইল ডাউনলোড করা এবং MinIO বালতিতে বস্তুর তালিকা করা।
এরপরে আমরা আমাদের ফোকাস প্রম্পট টেমপ্লেটে স্থানান্তর করি যা AI এজেন্টকে ব্যবহারকারীর ইনপুটগুলি বোঝার এবং প্রতিক্রিয়া জানাতে গাইড করে। এটি ChatPromptTemplate.from_messages()
পদ্ধতি ব্যবহার করে সংজ্ঞায়িত করা হয়, যা ভূমিকা এবং বার্তার বিষয়বস্তু সহ tuples হিসাবে উপস্থাপিত বার্তাগুলির একটি তালিকা নেয়।
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain.agents.format_scratchpad.openai_tools import format_to_openai_tool_messages from langchain.agents.output_parsers.openai_tools import OpenAIToolsAgentOutputParser from langchain_core.messages import AIMessage, HumanMessage prompt_template = ChatPromptTemplate.from_messages([ ("system", "You are a powerful assistant equipped with file management capabilities."), ("user", "{input}"), MessagesPlaceholder(variable_name="agent_scratchpad"), ])
প্রম্পটে তিনটি বার্তা রয়েছে:
একটি "সিস্টেম" বার্তা AI এজেন্টের জন্য ফাইল পরিচালনার ক্ষমতা সহ একটি শক্তিশালী সহকারী হিসাবে প্রসঙ্গ নির্ধারণ করে৷
একটি "ব্যবহারকারী" বার্তা ব্যবহারকারীর ইনপুটকে প্রতিনিধিত্ব করে, {input}
স্থানধারক ব্যবহার করে।
এজেন্টের মধ্যবর্তী পদক্ষেপ এবং চিন্তা প্রক্রিয়া সঞ্চয় করতে "agent_scratchpad" নামে একটি MessagesPlaceholder
।
format_to_openai_tool_messages
ফাংশন এজেন্টের স্ক্র্যাচপ্যাডকে OpenAI-এর সরঞ্জামগুলির জন্য একটি সামঞ্জস্যপূর্ণ বিন্যাসে ফর্ম্যাট করে, যখন OpenAIToolsAgentOutputParser ক্লাস মডেলের প্রতিক্রিয়াকে এজেন্ট দ্বারা ব্যাখ্যাযোগ্য একটি কাঠামোগত বিন্যাসে পার্স করে।
AIMessage
এবং HumanMessage
ক্লাসগুলি এজেন্ট এবং ব্যবহারকারীর মধ্যে আদান-প্রদান করা বার্তাগুলির প্রতিনিধিত্ব করে, এজেন্টের যুক্তির মধ্যে যোগাযোগ পরিচালনা করার জন্য একটি প্রমিত উপায় প্রদান করে।
প্রম্পট টেমপ্লেটটি সংজ্ঞায়িত করার মাধ্যমে, আমরা AI এজেন্টকে ব্যবহারকারীর ইনপুটগুলি বোঝার এবং প্রতিক্রিয়া জানানোর জন্য একটি স্পষ্ট কাঠামো এবং প্রসঙ্গ সরবরাহ করি, কাজটি সমাধান করার সময় এর মধ্যবর্তী পদক্ষেপ এবং চিন্তা প্রক্রিয়ার উপর নজর রাখতে "এজেন্ট_স্ক্র্যাচপ্যাড" প্লেসহোল্ডার ব্যবহার করে।
অবশেষে, আমাদের agent.py
সম্পূর্ণ করতে আমরা আমাদের এজেন্টকে সংজ্ঞায়িত করি এবং একটি AgentExecutor তৈরি করি যা LangServe লাইব্রেরি থেকে add_route
ফাংশন ব্যবহার করে একটি server.py
স্ক্রিপ্ট থেকে আমদানি এবং কল করা যেতে পারে।
আমরা একটি একক এজেন্ট ভেরিয়েবল তৈরি করতে প্রয়োজনীয় উপাদানগুলিকে ইনস্ট্যান্টিয়েট করি এবং তাদের একসাথে চেইন করি।
agent = ( { "input": lambda x: x["input"], "agent_scratchpad": lambda x: format_to_openai_tool_messages(x["intermediate_steps"]), } | prompt_template | llm_with_tools | OpenAIToolsAgentOutputParser() )
এজেন্ট অভিধান এবং শৃঙ্খলিত ক্রিয়াকলাপগুলির সংমিশ্রণ ব্যবহার করে সংজ্ঞায়িত করা হয়। ইনপুট কী ইনকামিং ডেটা থেকে ব্যবহারকারীর ইনপুট বের করে, যখন agent_scratchpad
কী format_to_openai_tool_messages
ফাংশন ব্যবহার করে এজেন্টের চিন্তা প্রক্রিয়ার মধ্যবর্তী ধাপগুলি ফর্ম্যাট করে। এজেন্ট প্রম্পট টেমপ্লেট ( prompt_template
), টুল সহ ভাষা মডেল ( llm_with_tools
), এবং আউটপুট পার্সার ( OpenAIToolsAgentOutputParser()
) অন্তর্ভুক্ত করে।
একটি AgentExecutor
তৈরি করতে, আমরা এটিকে সংজ্ঞায়িত এজেন্ট, উপলভ্য টুলস প্রদান করি এবং বিস্তারিত আউটপুটের জন্য verbose=True
সেট করি।
from langchain.agents import tool, AgentExecutor agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
AgentExecutor
প্রদত্ত এজেন্ট এবং টুল ব্যবহার করে টাস্ক বুঝতে এবং ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে উপযুক্ত টুল নির্বাচন করে। প্রতিটি টুলের জন্য পৃথক প্রম্পট থাকার পরিবর্তে, এজেন্ট একটি একক প্রম্পট টেমপ্লেট ব্যবহার করে যা প্রদত্ত ইনপুটের উপর ভিত্তি করে কীভাবে সরঞ্জামগুলি ব্যবহার করতে হয় তার নির্দেশনা দেয়। কার্যকরী প্রক্রিয়া চলাকালীন এজেন্ট গতিশীলভাবে উপযুক্ত টুল নির্বাচন করে।
LangServe-এর সাথে একীভূত করে আমাদের অ্যাপ্লিকেশন সেট আপ করা আমাদের LangChain অ্যাপ্লিকেশনগুলিকে API হিসাবে স্থাপন এবং পরিচালনা করার জন্য একটি সুগমিত পথ প্রদান করে। ফাস্টএপিআই এর কার্যকারিতা এবং ব্যবহারের সহজতার জন্য বেছে নেওয়া হয়েছে, অ্যাসিঙ্ক্রোনাস ক্রিয়াকলাপ সমর্থন করে এবং স্বয়ংক্রিয়ভাবে API ডকুমেন্টেশন তৈরি করে।
দ্য
আরও গভীরভাবে/ব্যবহারের ক্ষেত্রে প্রদর্শনের জন্য, পরিদর্শন করে অন্বেষণ করা যেতে পারে
langchain-ai/langserve এর অধীনে GitHub সংগ্রহস্থলউদাহরণ ডিরেক্টরি .
from fastapi import FastAPI app = FastAPI( title="MinIO Agent API", version="1.0", description="A conversational agent facilitating data storage and retrieval with MinIO", )
CORS হেডার সেট করার জন্য আমরা আমাদের নিরাপত্তা বাড়ানোর জন্য নিম্নলিখিত লাইন যোগ করতে পারি:
from fastapi.middleware.cors import CORSMiddleware # Set all CORS enabled origins app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], expose_headers=["*"], )
এখন যেহেতু আমরা packages/agent.py
এর সাথে শেষ করেছি আমরা এটি আমদানি করতে পারি এবং আমাদের app/server.py
স্ক্রিপ্টে LangServe লাইব্রেরি থেকে add_route
ফাংশন ব্যবহার করতে পারি।
from packages.agent import agent_executor from langserve import add_routes add_routes( app, agent_executor.with_types(input_type=Input, output_type=Output).with_config( {"run_name": "agent"} ), path=”/invoke” )
add_route(app, agent_executor(…), path="/invoke")
কল করে, আমরা আমাদের সার্ভার অ্যাপ্লিকেশনে ( app
) একটি রুট যোগ করি যা agent_executor()
ফাংশনে /invoke
পাথ ম্যাপ করে। যখন /invoke
এন্ডপয়েন্টে একটি অনুরোধ করা হয় তখন এটি এজেন্ট নির্বাহককে আহ্বান করার অনুমতি দেয়।
এই সেটআপের মাধ্যমে, সার্ভার আগত অনুরোধগুলি পরিচালনা করতে পারে, এজেন্ট নির্বাহকের কাছে পাঠাতে পারে এবং এজেন্টের প্রতিক্রিয়া ক্লায়েন্টের কাছে ফেরত দিতে পারে। এজেন্ট নির্বাহক সংজ্ঞায়িত এজেন্ট ব্যবহার করে, যা প্রম্পট টেমপ্লেট, সরঞ্জাম সহ ভাষা মডেল এবং আউটপুট পার্সারকে অন্তর্ভুক্ত করে, ব্যবহারকারীর ইনপুট প্রক্রিয়া করতে এবং উপলব্ধ সরঞ্জামগুলির উপর ভিত্তি করে একটি উপযুক্ত প্রতিক্রিয়া তৈরি করতে।
LangServe অ্যাপ্লিকেশনটি কিকস্টার্ট করার জন্য, আমরা Uvicornকে ASGI সার্ভার হিসাবে নিয়োগ করি, আমাদের অ্যাপ চালানোর জন্য স্টেজ সেট করে। কোডের এই স্নিপেটটি গুরুত্বপূর্ণ কারণ এটি সার্ভারকে সক্রিয় করে, সার্বজনীন হোস্ট এবং অ্যাপ্লিকেশনের অ্যাক্সেস পয়েন্টের জন্য মনোনীত পোর্ট উল্লেখ করে।
if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)
অ্যাপ্লিকেশনটির মূল এন্ট্রির মধ্যে এই ব্লকটি এম্বেড করার মাধ্যমে, আমরা নিশ্চিত করি যে স্ক্রিপ্টটি সরাসরি সম্পাদিত হলে Uvicorn নেতৃত্ব দেবে, যার ফলে একটি পূর্বনির্ধারিত হোস্ট এবং পোর্টে আমাদের FastAPI অ্যাপ্লিকেশন আলোকিত হবে। এই পদ্ধতিটি কেবল স্থাপন প্রক্রিয়াটিকেই সহজ করে না বরং একটি উন্নয়ন বা উৎপাদন পরিবেশে অ্যাপ্লিকেশন চালানোর জন্য একটি স্পষ্ট এন্ট্রি চিহ্নিত করে।
উপরের কোডটি একটি মডুলার পদ্ধতির প্রদর্শন করা হয়েছে যার মধ্যে রয়েছে "langchain-cli" লাইব্রেরি ব্যবহার করা, একটি নতুন ল্যাংচেইন অ্যাপ তৈরি করা এবং চেইন লজিককে agent.py
এ সংরক্ষণ করা যখন FastAPI এবং LangServe বাস্তবায়ন server.py
এ সংরক্ষিত হয়।
এটি আমাদের চূড়ান্ত পদক্ষেপ, আমরা আমাদের অ্যাপ্লিকেশন তৈরির প্রদর্শনমূলক উদ্দেশ্যে আমাদের অ্যাপ্লিকেশন কোড server.py
এ সংরক্ষণ করব।
আমাদের পরিষেবা চালানোর সবচেয়ে সহজ উপায় হল:
python server.py
এই কমান্ডটি অ্যাপ্লিকেশনটি চালাবে, কোনো লগ বা ত্রুটির বার্তা ফেরত দেওয়ার সময় যা এখনও ডিবাগ করা দরকার।
পাইথন আউটপুটে ল্যাংসার্ভ লগগুলি /invoke/playground
অ্যাপ্লিকেশন এন্ডপয়েন্ট হিসাবে চিহ্নিত করে। আমরা এখন খেলার মাঠ WebUI পরিদর্শন করতে পারি সেইসাথে আমাদের API-এর জন্য স্বয়ংক্রিয় ডকুমেন্টেশন যা আমাদের API-এর /docs
পাথ পরিদর্শন করে উপলব্ধ; আমাদের প্রতিটি অ্যাপ্লিকেশন বৈশিষ্ট্যের জন্য এটি ব্যবহার করে দেখুন বোতাম অন্তর্ভুক্ত করে পরীক্ষা এবং কনফিগার করার জন্য একটি সরলীকৃত পদ্ধতির পাশাপাশি পূর্বনির্ধারিত সিআরএল অনুরোধ যা আমরা WebUI থেকে কার্যকর করতে পারি।
ফলস্বরূপ, আমাদের MinIO- ইন্টিগ্রেটেড LangChain এজেন্ট এখন নিখুঁতভাবে একটি স্থাপনযোগ্য API-এ রূপান্তরিত হয়েছে, ব্যাচ প্রক্রিয়াকরণ থেকে রিয়েল-টাইম ইন্টারঅ্যাকশন পর্যন্ত কার্যকারিতা সহ ব্যবহারকারীদের জন্য বিকাশ ও প্রসারিত করার জন্য প্রস্তুত।
LangServe অ্যাপ্লিকেশানটি আপ এবং চালু হওয়ার সাথে সাথে আমরা এটিকে আমাদের server.py
এর বাইরে থেকে ব্যবহার করতে পারি, আমাদের এন্ডপয়েন্টকে টার্গেট করে এবং এটিকে ল্যাংসারভের RemoteRunnable
মডিউলে মোড়ানোর মাধ্যমে:
from langserve import RemoteRunnable remote_runnable = RemoteRunnable("http://localhost:8000/<path>/")
যোগ করুন
LangChain তার লাইব্রেরি জুড়ে মডিউলের একটি বিস্তৃত অ্যারে নিয়ে গর্ব করে, অত্যাধুনিক AI-চালিত অ্যাপ্লিকেশন তৈরিতে বিকাশকারীদের ক্ষমতায়নের জন্য ডিজাইন করা একটি বৈচিত্র্যময় টুলকিট প্রদর্শন করে। জটিল চেইন নির্মাণ থেকে শুরু করে বিভিন্ন এআই মডেলের সাথে নিরবিচ্ছিন্ন একীকরণ পর্যন্ত, ল্যাংচেইনের মডুলার আর্কিটেকচার বিস্তৃত কার্যকারিতার সুবিধা দেয়, যা এআই এবং মেশিন লার্নিংয়ের ক্ষেত্রে অত্যন্ত কাস্টমাইজযোগ্য এবং উন্নত সমাধান তৈরি করতে সক্ষম করে।
LangServe শুধুমাত্র demystifies না কিন্তু উল্লেখযোগ্যভাবে LangChain অ্যাপ্লিকেশন স্থাপনের প্রক্রিয়া সহজতর করে। উন্নয়ন এবং স্থাপনার মধ্যে ব্যবধান পূরণ করে, এটি নিশ্চিত করে যে উদ্ভাবনী অ্যাপ্লিকেশনগুলি MinIO এবং LangChain ব্যবহার করে দ্রুত ধারণা থেকে বাস্তবে যেতে পারে, বৃহত্তর ইকোসিস্টেমে একীভূত হতে এবং ব্যবহারকারীর অভিজ্ঞতা বাড়াতে প্রস্তুত।
আমাদের অন্বেষণে অন্তর্ভুক্ত উন্নয়নের মাধ্যমে, আমরা MinIO-এর সাথে নিরবচ্ছিন্ন একীকরণ দেখেছি
MinIO-তে, আমরা এই প্রযুক্তি-সমৃদ্ধ যুগে বিকাশকারী সম্প্রদায়ের মধ্যে সৃজনশীলতা এবং সম্ভাবনা দ্বারা উজ্জীবিত। সহযোগিতা এবং জ্ঞান বিনিময়ের জন্য এর চেয়ে ভাল সময় আর নেই। আমরা আপনার সাথে সংযোগ করতে আগ্রহী! আমাদের সাথে যোগ দিন