1. कस्टम एमसीपी सर्वर बनाना और लैंगग्राफ के साथ जोड़ना [0]

thumbnail यह वीडियो बताता है कि कैसे एक कस्टम एमसीपी सर्वर बनाया जाए और उसे लैंगग्राफ एप्लिकेशन से जोड़ा जाए ताकि एक एलएलएम (लार्ज लैंग्वेज मॉडल) स्वचालित रूप से एमसीपी टूल्स का उपयोग कर सके।

1.1. कस्टम एमसीपी सर्वर की आवश्यकता [0]

  1. कस्टम एमसीपी सर्वर बनाने का लक्ष्य है कि एलएलएम (लार्ज लैंग्वेज मॉडल) हमारे बनाए गए सर्वर के साथ इंटरैक्ट करके जवाब प्राप्त कर सके [0]।
  2. पिछले वीडियो में, एमसीपी सर्वर को इंटरनेट से डाउनलोड किए गए कोड का उपयोग करके बनाया गया था, जिसमें गिटहब रिपॉजिटरी से सार्वजनिक रूप से उपलब्ध सर्वर का उपयोग किया गया था [0]।
  3. इस वीडियो में, सर्वर का कोड खरोंच से लिखा जाएगा, जिसे कस्टम एमसीपी सर्वर कहा जाता है [1]।
  4. कस्टम एमसीपी सर्वर की आवश्यकता तब होती है जब:
    1. किसी प्रोजेक्ट में ऐसी कार्यक्षमता की आवश्यकता होती है जिसके लिए कोई मौजूदा एमसीपी सर्वर उपलब्ध नहीं है, जिससे उपयोगकर्ता अपनी आवश्यकताओं के अनुसार सर्वर बना सके [1]।
    2. कंपनी के निजी डेटा (जैसे बिक्री रिकॉर्ड, ग्राहक विवरण, अनुसंधान डेटा, या गुप्त एल्गोरिदम) को सुरक्षित रखने की आवश्यकता होती है, क्योंकि सार्वजनिक सर्वर का उपयोग करने से डेटा सार्वजनिक हो सकता है [1]।
      1. कस्टम एमसीपी सर्वर निजी डेटा को निजी रखता है, और केवल अधिकृत उपयोगकर्ता ही इसे एक्सेस कर सकते हैं, जैसे कि कंपनी के कर्मचारी [2]।

1.2. पर्यावरण सेटअप और मॉड्यूल इंस्टॉलेशन [2]

  1. कस्टम एमसीपी सर्वर बनाने के लिए पहला कदम पर्यावरण सेटअप है, जिसमें आवश्यक मॉड्यूल इंस्टॉल करना शामिल है [2]।
  2. निम्नलिखित मॉड्यूल कमांड प्रॉम्प्ट का उपयोग करके इंस्टॉल किए जाते हैं:
    1. Python HfNVIDIA: एलएलएम (ओपनएआई का एलएलएम) का उपयोग करने और एपीआई कुंजी को फ़ाइल से लोड करने के लिए आवश्यक है [2]।
    2. langchain-mcp-adapters: लैंगचेन या लैंगग्राफ में एमसीपी का उपयोग करने के लिए यह मॉड्यूल आवश्यक है [2]।
    3. langgraph: लैंगग्राफ फ्रेमवर्क की आवश्यकता है [2]।
    4. langchain[openai]: ओपनएआई एलएलएम का उपयोग करने के लिए सभी आवश्यक निर्भरताओं को इंस्टॉल करता है [2]।
    5. mcp: कस्टम एमसीपी सर्वर बनाने के लिए यह मॉड्यूल आवश्यक है [2]।
    6. streamlit: एक वेब एप्लिकेशन बनाने के लिए उपयोग किया जाता है जो एमसीपी सर्वर और एमसीपी क्लाइंट के बीच बातचीत को प्रदर्शित करता है [2]।

1.3. कस्टम एमसीपी सर्वर कोड लिखना [2]

  1. कस्टम एमसीपी सर्वर कोड एक अलग पायथन फ़ाइल में लिखा जाएगा, जबकि लैंगग्राफ कनेक्शन कोड दूसरी फ़ाइल में होगा [2]।
  2. एमसीपी सर्वर बनाने के लिए mcp मॉड्यूल को इम्पोर्ट किया जाता है [2]।
  3. एक एमसीपी सर्वर इंस्टेंस बनाया जाता है और उसे एक नाम दिया जाता है, जैसे math [2]।
  4. टूल्स (पायथन फ़ंक्शन) को सर्वर में जोड़ा जाता है:
    1. प्रत्येक पायथन फ़ंक्शन (जैसे add, multiply, divide, square_root, factorial) को @mcp.tool डेकोरेटर का उपयोग करके एक एमसीपी सर्वर टूल के रूप में पंजीकृत किया जाता है [3]।
    2. ये फ़ंक्शन दो पूर्णांक पैरामीटर लेते हैं और एक पूर्णांक आउटपुट देते हैं (उदाहरण के लिए, add दो संख्याओं को जोड़ता है) [3]।
  5. सर्वर को चलाने के लिए, mcp.run_server(transport=mcp.transport.Stdio()) का उपयोग किया जाता है [4]।
    1. Stdio ट्रांसपोर्ट विधि का उपयोग तब किया जाता है जब क्लाइंट और सर्वर दोनों एक ही स्थानीय मशीन पर चल रहे हों [4]।
    2. यदि एमसीपी सर्वर किसी दूरस्थ मशीन या इंटरनेट पर है, तो mcp.transport.StreamableHTTP() का उपयोग किया जाता है [5]।

1.4. कस्टम एमसीपी सर्वर को चलाना [5]

  1. कस्टम एमसीपी सर्वर को चलाने के लिए, कमांड प्रॉम्प्ट में python custom_mcp_server.py कमांड का उपयोग किया जाता है [5]।
  2. सर्वर को चालू रखने के लिए कमांड प्रॉम्प्ट विंडो को खुला रखना महत्वपूर्ण है, क्योंकि इसे बंद करने से सर्वर बंद हो जाएगा [5]।

2. लैंगग्राफ क्लाइंट और एमसीपी सर्वर के बीच कनेक्शन [5]

thumbnail

लैंगग्राफ क्लाइंट कोड एमसीपी सर्वर से जुड़ता है, उपयोगकर्ता के प्रश्नों को एलएलएम के माध्यम से संसाधित करता है, और एमसीपी टूल्स का उपयोग करके प्रतिक्रियाएं उत्पन्न करता है।

2.1. लैंगग्राफ क्लाइंट कोड का सेटअप [5]

  1. लैंगग्राफ क्लाइंट कोड एक अलग पायथन फ़ाइल (mcp_client_langgraph.py) में लिखा जाता है [5]।
  2. आवश्यक मॉड्यूल इम्पोर्ट किए जाते हैं:
    1. asyncio: पायथन को प्रतीक्षा समय के दौरान अन्य प्रक्रियाओं को संभालने की अनुमति देता है, जिससे प्रसंस्करण तेज होता है [5]।
    2. MultiServerMcpClient (langchain_mcp_adapters से): सर्वर और क्लाइंट के बीच बातचीत को सक्षम करता है [6]।
    3. ChatOpenAI (langchain_openai से): ओपनएआई एलएलएम का उपयोग करने के लिए [6]।
    4. StateGraph, MessageState, ToolNode (langgraph.prebuilt से): लैंगग्राफ में ग्राफ और नोड्स बनाने के लिए [6]।
    5. load_dotenv, find_dotenv: .env फ़ाइल से एपीआई कुंजी जैसे पर्यावरण चर को लोड करने के लिए [6]।
  3. ओपनएआई एपीआई कुंजी को .env फ़ाइल में संग्रहीत किया जाता है और load_dotenv() का उपयोग करके लोड किया जाता है [6]।
  4. एक एलएलएम मॉडल (GPT-4) को ChatOpenAI का उपयोग करके परिभाषित किया जाता है और एपीआई कुंजी प्रदान की जाती है [6]।
  5. एमसीपी सर्वर से कनेक्शन MultiServerMcpClient का उपयोग करके स्थापित किया जाता है:
    1. MultiServerMcpClient को client वेरिएबल में कॉल किया जाता है, जिसमें सर्वर का नाम (math), कमांड (python), सर्वर फ़ाइल का पूरा पथ, और ट्रांसपोर्ट विधि (Stdio) शामिल होती है [7]।
    2. Stdio का उपयोग तब किया जाता है जब क्लाइंट और सर्वर दोनों एक ही स्थानीय मशीन पर हों [7]।
    3. यदि सर्वर दूरस्थ है, तो StreamableHTTP ट्रांसपोर्ट विधि और यूआरएल का उपयोग किया जाता है [13]।
  6. client.get_tools() का उपयोग करके कस्टम एमसीपी सर्वर से सभी टूल्स (जैसे add, multiply, divide, square_root, factorial) की सूची प्राप्त की जाती है [7]।
  7. एलएलएम मॉडल को model.bind_tools(tools) का उपयोग करके इन टूल्स के साथ बांधा जाता है, ताकि एलएलएम आवश्यकता पड़ने पर उनका उपयोग कर सके [7]।
  8. एमसीपी सर्वर के टूल्स को ToolNode का उपयोग करके एक नोड में लपेटा जाता है, क्योंकि लैंगग्राफ में सभी कार्य नोड्स के माध्यम से होते हैं [8]।

2.2. लैंगग्राफ में नोड्स और फ्लो को परिभाषित करना [9]

  1. एक फ़ंक्शन should_continue बनाया जाता है जो यह जांचता है कि बातचीत के अंतिम संदेश में किसी टूल को कॉल किया गया है या नहीं [9]।
    1. यदि टूल की आवश्यकता है, तो यह टूल्स नोड पर चला जाता है; अन्यथा, बातचीत समाप्त हो जाती है [10]।
  2. एक फ़ंक्शन call_model बनाया जाता है जो उपयोगकर्ता के प्रश्न को एलएलएम मॉडल में भेजता है, जो टूल्स के साथ बंधा हुआ है [11]।
    1. मॉडल यह निर्धारित करता है कि टूल की आवश्यकता है या नहीं, और तदनुसार प्रतिक्रिया उत्पन्न करता है [11]।
  3. लैंगग्राफ का ग्राफ StateGraph का उपयोग करके बनाया जाता है, जिसमें MessageState संदेशों को संग्रहीत करता है [11]।
  4. दो नोड्स ग्राफ में जोड़े जाते हैं:
    1. Call Model नोड, जो call_model फ़ंक्शन को निष्पादित करता है (उपयोगकर्ता के संदेश पर मॉडल चलाता है और प्रतिक्रिया उत्पन्न करता है) [11]।
    2. Tools नोड, जो एमसीपी सर्वर के टूल्स को लपेटता है और ToolNode का उपयोग करता है [11]।
  5. ग्राफ का फ्लो add_edge और add_conditional_edges का उपयोग करके परिभाषित किया जाता है:
    1. start नोड Call Model नोड से जुड़ी होती है [11]।
    2. एक सशर्त एज Call Model नोड से Tools नोड तक जाती है, यदि should_continue फ़ंक्शन इंगित करता है कि टूल की आवश्यकता है [11]।
    3. टूल्स नोड Call Model नोड से वापस जुड़ी होती है, जिसका अर्थ है कि टूल का काम पूरा होने के बाद नियंत्रण Call Model नोड पर वापस आ जाता है [11]।
  6. ग्राफ को builder.compile() का उपयोग करके संकलित किया जाता है [11]।

2.3. लैंगग्राफ क्लाइंट को चलाना [11]

  1. लैंगग्राफ क्लाइंट कोड को चलाने के लिए, कमांड प्रॉम्प्ट में python mcp_client_langgraph.py कमांड का उपयोग किया जाता है [12]।
  2. उपयोगकर्ता के प्रश्न को graph.invoke({"messages": [("user", "What is 3 + 5 * 12?")]}) का उपयोग करके एलएलएम में भेजा जाता है [11]।
  3. एलएलएम प्रश्न को समझता है, एमसीपी सर्वर से टूल्स का उपयोग करता है, और अंतिम संदेश के रूप में आउटपुट उत्पन्न करता है [11]।
  4. उदाहरण के लिए, "What is 3 + 5 * 12?" का उत्तर 96 है [13]।
  5. ट्रांसपोर्ट विधि को Stdio से StreamableHTTP में बदला जा सकता है यदि सर्वर दूरस्थ मशीन पर है, जिसके लिए सर्वर और क्लाइंट दोनों फ़ाइलों में कोड को संशोधित करने और एक यूआरएल प्रदान करने की आवश्यकता होती है [13]।
  6. उपयोगकर्ता से इनपुट लेने के लिए, input() फ़ंक्शन का उपयोग किया जा सकता है [13]।

3. स्ट्रीमलिट वेब ऐप के साथ एकीकरण [14]

thumbnail

स्ट्रीमलिट का उपयोग करके एक वेब एप्लिकेशन बनाया जाता है जो कस्टम एमसीपी सर्वर और लैंगग्राफ क्लाइंट के साथ बातचीत को एक उपयोगकर्ता-अनुकूल इंटरफ़ेस में एकीकृत करता है।

3.1. स्ट्रीमलिट ऐप बनाना [14]

  1. एक नई पायथन फ़ाइल (web_app.py) बनाई जाती है जिसमें स्ट्रीमलिट ऐप का कोड होता है [15]।
  2. सभी आवश्यक मॉड्यूल, जिसमें streamlit भी शामिल है, इम्पोर्ट किए जाते हैं [15]।
  3. ओपनएआई एपीआई कुंजी लोड की जाती है, चैट मॉडल परिभाषित किया जाता है, और एमसीपी सर्वर को StreamableHTTP ट्रांसपोर्ट विधि का उपयोग करके क्लाइंट से जोड़ा जाता है [15]।
  4. एमसीपी टूल्स प्राप्त किए जाते हैं, मॉडल को टूल्स के साथ बांधा जाता है, और टूल्स को एक नोड में लपेटा जाता है [15]।
  5. should_continue और call_model फ़ंक्शन परिभाषित किए जाते हैं, और लैंगग्राफ का ग्राफ और फ्लो बनाया जाता है [15]।
  6. एक main फ़ंक्शन बनाया जाता है जो स्ट्रीमलिट UI को संभालता है:
    1. st.set_page_config() का उपयोग करके पेज का शीर्षक और आइकन सेट किया जाता है [15]।
    2. st.title() का उपयोग करके "MCP Math Chat Streamlit" शीर्षक प्रदर्शित किया जाता है [15]।
    3. st.text_input() का उपयोग करके उपयोगकर्ता से प्रश्न लेने के लिए एक इनपुट बॉक्स बनाया जाता है [15]।
    4. जब उपयोगकर्ता प्रश्न दर्ज करता है और "Send" पर क्लिक करता है, तो लैंगग्राफ का ग्राफ प्रश्न को संसाधित करता है, और परिणाम st.write() का उपयोग करके प्रदर्शित किया जाता है [15]।

3.2. स्ट्रीमलिट ऐप को चलाना [15]

  1. स्ट्रीमलिट ऐप को चलाने के लिए, कमांड प्रॉम्प्ट में streamlit run web_app.py कमांड का उपयोग किया जाता है [15]।
  2. ऐप एक वेब ब्राउज़र में खुलता है, जहाँ उपयोगकर्ता गणित से संबंधित प्रश्न पूछ सकता है और कस्टम एमसीपी सर्वर और लैंगग्राफ द्वारा उत्पन्न प्रतिक्रियाएं देख सकता है [15]।
  3. यह एक उपयोगकर्ता-अनुकूल इंटरफ़ेस प्रदान करता है जो कस्टम एमसीपी सर्वर और एलएलएम के बीच बातचीत को प्रदर्शित करता है [15]।