কোড বিভক্তিকরণ

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

ডিপেন্ডেন্সি ইনস্টল করা

%pip install -qU langchain-text-splitters

পরবর্তী, "Language" এনামেশনটি ইমপোর্ট করুন এবং দেখুন কোন প্রোগ্রামিং ভাষা কোড বিভক্তিকরণের জন্য সমর্থিত।

from langchain_text_splitters import (
    Language,
    RecursiveCharacterTextSplitter,
)
[e.value for e in Language]
['cpp',
     'go',
     'java',
     'js',
     'php',
     'proto',
     'python',
     'rst',
     'ruby',
     'rust',
     'scala',
     'swift',
     'markdown',
     'latex',
     'html',
     'sol',]
RecursiveCharacterTextSplitter.get_separators_for_language(Language.PYTHON)
['\\nclass ', '\\ndef ', '\\n\\tdef ', '\\n\\n', '\\n', ' ', '']

পাইথন

এখানে পাইথন টেক্সট বিভক্তিকারী ব্যবহারের একটি উদাহরণ দেওয়া হলো।

PYTHON_CODE = """
def hello_world():
    print("Hello, World!")

hello_world()
"""
python_splitter = RecursiveCharacterTextSplitter.from_language(
    language=Language.PYTHON, chunk_size=50, chunk_overlap=0
)
python_docs = python_splitter.create_documents([PYTHON_CODE])
python_docs
    [Document(page_content='def hello_world():\\\\n    print("Hello, World!")', metadata={}),     Document(page_content='# Call the function\\\\nhello_world()', metadata={})]

জাভাস্ক্রিপ্ট

এখানে JS টেক্সট বিভক্তিকারী ব্যবহারের একটি উদাহরণ দেওয়া হলো।

JS_CODE = """
function helloWorld() {
  console.log("Hello, World!");
}

// Call the function
helloWorld();
"""

js_splitter = RecursiveCharacterTextSplitter.from_language(
    language=Language.JS, chunk_size=60, chunk_overlap=0
)
js_docs = js_splitter.create_documents([JS_CODE])
js_docs
[Document(page_content='function helloWorld() {\n  console.log("Hello, World!");\n}', metadata={}),
     Document(page_content='// Call the function\nhelloWorld();', metadata={})]

মার্কডাউন

মার্কডাউন কোড বিভক্তিকরণের একটি উদাহরণ এখানে দেওয়া হলো।

markdown_text = """

⚡ কম্পোজাবিলিটির মাধ্যমে LLMs দিয়ে অ্যাপ্লিকেশন তৈরি ⚡

\`\`\`bash
pip install langchain
\`\`\`

একটি বেগমতি বিকাশ ক্ষেত্রে একটি খুল্যানো উইক প্রকল্প হিসেবে, আমরা দেখার জন্য খুব খুলে আছি।
"""
md_splitter = RecursiveCharacterTextSplitter.from_language(
    language=Language.MARKDOWN, chunk_size=60, chunk_overlap=0
)
md_docs = md_splitter.create_documents([markdown_text])
md_docs
[Document(page_content='# ?️? LangChain', metadata={}),
     Document(page_content='⚡ Building applications with LLMs through composability ⚡', metadata={}),
     Document(page_content='## Quick Install', metadata={}),
     Document(page_content="```bash\n# Hopefully this code block isn't split", metadata={}),
     Document(page_content='pip install langchain', metadata={}),
     Document(page_content='```', metadata={}),
     Document(page_content='As an open source project in a rapidly developing field, we', metadata={}),
     Document(page_content='are extremely open to contributions.', metadata={})]
latex_text = """
\documentclass{article}

\begin{document}

\maketitle

\section{Introduction}
বড় ভাষা মডেল (LLMs) হল এমন একটি ধরনের মেশিন লার্নিং মডেল, যা মানুষ মত ভাষা উৎপন্ন করতে বিশাল পরিমাণের টেক্সট ডেটা থেকে প্রশিক্ষিত করা যেতে পারে। সামগ্রিকভাবে, এর উদ্দেশ্যে বড় ভাষা মডেল সম্পর্কিত বিভিন্ন প্রকারের প্রাকৃতিক ভাষা প্রসেসিং কাজে, যেমন ভাষা অনুবাদ, টেক্সট উৎপন্ন ও ভাবনা বিশ্লেষণে, গত কয়েক বছরে অগ্রগতি করেছে।

\subsection{LLM-এর ইতিহাস}
সবচেয়ে প্রারম্ভিক LLMs গণিত হয় ১৯৮০ এবং ১৯৯০ এর দশকে, তবে তারা তখন সেরা প্রকারের প্রসেস করা ডেটা এবং তথ্য প্রযুক্তি দরজা বের করা হত। তবে, গত দশকের দ্বিতীয় অংশে, হার্ডওয়্যার এবং সফটওয়্যারের অগ্রগতির মাধ্যমে LLMs কে বৃহত ডেটাসেটে প্রশিক্ষণ দেওয়া সম্ভব হল, যা করে পারফর্ম্যান্সে অনেক উন্নতি আনা হয়।

\subsection{LLM-এর ব্যবহার}
LLMs-এর বৃহত্তর প্রয়োগ আছে বিভিন্ন শ্রেণীতে, যেমন চ্যাটবট, বিষয়বস্তু নির্মাণ, এবং ভার্চুয়াল সহায়ক। এরা অকাদেমিতেও ব্যবহৃত হতে পারে ভাষাবিজ্ঞান, মনোবিজ্ঞান, এবং অংকে ভাষাবিজ্ঞানে গবেষণা করার জন্য।

\end{document}
"""
latex_splitter = RecursiveCharacterTextSplitter.from_language(
    language=Language.MARKDOWN, chunk_size=60, chunk_overlap=0
)
latex_docs = latex_splitter.create_documents([latex_text])
latex_docs
[Document(page_content='\\documentclass{article}\n\n\x08egin{document}\n\n\\maketitle', metadata={}),
     Document(page_content='\\section{Introduction}', metadata={}),
     Document(page_content='বড় ভাষা মডেল (LLMs) হল এমন একটি ধরনের মেশিন লার্নিং', metadata={}),
     Document(page_content='মডেল, যা মানুষ মত ভাষা উৎপন্ন করতে বিশাল পরিমাণের', metadata={}),
     Document(page_content='টেক্সট ডেটা থেকে প্রশিক্ষিত করা যেতে পারে।', metadata={}),
     Document(page_content='সামগ্রিকভাবে, এর উদ্দেশ্যে বড় ভাষা মডেল সম্পর্কিত', metadata={}),
     Document(page_content='বিভিন্ন প্রকারের প্রাকৃতিক ভাষা প্রসেসিং কাজে, যেমন', metadata={}),
     Document(page_content='ভাষা অনুবাদ, টেক্সট উৎপন্ন ও ভাবনা বিশ্লেষণে, গত', metadata={}),
     Document(page_content='কয়েক বছরে অগ্রগতি করেছে।', metadata={}),
     Document(page_content='\\subsection{LLM-এর ইতিহাস}', metadata={}),
     Document(page_content='সবচেয়ে প্রারম্ভিক LLMs গণিত হয় ১৯৮০ এবং ১৯৯০', metadata={}),
     Document(page_content='এর দশকে, তবে তারা তখন সেরা প্রকারের প্রসেস করা ডেটা', metadata={}),
     Document(page_content='এবং তথ্য প্রযুক্তি দরজা বের করা হত। তবে, গত দশকের', metadata={}),
     Document(page_content='দ্বিতীয় অংশে, হার্ডওয়্যার এবং সফটওয়্যারের অগ্রগতির', metadata={}),
     Document(page_content='মাধ্যমে LLMs কে বৃহত ডেটাসেটে প্রশিক্ষণ দেওয়া সম্ভব হল, যা', metadata={}),
     Document(page_content='করে পারফর্ম্যান্সে অনেক উন্নতি আনা হয়।', metadata={}),
     Document(page_content='\\subsection{LLM-এর ব্যবহার}', metadata={}),
     Document(page_content='LLMs-এর বৃহত্তর প্রয়োগ আছে বিভিন্ন শ্রেণীতে, যেমন', metadata={}),
     Document(page_content='চ্যাটবট, বিষয়বস্তু নির্মাণ, এবং ভার্চুয়াল সহায়ক।', metadata={}),
     Document(page_content='এরা অকাদেমিতেও ব্যবহৃত হতে পারে ভাষাবিজ্ঞান, মনোবিজ্ঞান,', metadata={}),
     Document(page_content='এবং অংকে ভাষাবিজ্ঞানে গবেষণা করার জন্য।', metadata={}),
     Document(page_content='\\end{document}', metadata={})]
html_text = """
<!DOCTYPE html>
<html>
    <head>
        <title>🌐 LangChain</title>
        <style>
            body {
                font-family: Arial, sans-serif;
            }
            h1 {
                color: darkblue;
            }
        </style>
    </head>
    <body>
        <div>
            <h1>🌐 LangChain</h1>
            <p>⚡ LLM ব্যবহার করে অ্যাপ্লিকেশন তৈরি করা ⚡</p>
        </div>
        <div>
            একটি দ্রুত উন্নত ক্ষেত্রে খোলা সোর্স প্রকল্প হিসেবে, আমরা অবদানের জন্য অত্যন্ত খোলা।
        </div>
    </body>
</html>
"""
html_splitter = RecursiveCharacterTextSplitter.from_language(
    language=Language.HTML, chunk_size=60, chunk_overlap=0
)
html_docs = html_splitter.create_documents([html_text])
html_docs
[Document(page_content='<!DOCTYPE html>\n<html>', metadata={}),
     Document(page_content='<head>\n        <title>🌐 LangChain</title>', metadata={}),
     Document(page_content='<style>\n            body {\n                font-family: Arial', metadata={}),
     Document(page_content=', sans-serif;\n            }\n            h1 {', metadata={}),
     Document(page_content='color: darkblue;\n            }\n        </style>\n    </head', metadata={}),
     Document(page_content='>', metadata={}),
     Document(page_content='<body>', metadata={}),
     Document(page_content='<div>\n            <h1>🌐 LangChain</h1>', metadata={}),
     Document(page_content='<p>⚡ LLM ব্যবহার করে অ্যাপ্লিকেশন তৈরি করা ⚡', metadata={}),
     Document(page_content='</p>\n        </div>', metadata={}),
     Document(page_content='<div>\n            একটি দ্রুত উন্নত ক্ষেত্রে খোলা সোর্স প্রকল্প হিসেবে, আমরা অবদানের জন্য অত্যন্ত খোলা।', metadata={}),
     Document(page_content='</div>\n    </body>\n</html>', metadata={})]

Solidity

SOL_CODE = """
pragma solidity ^0.8.20;
contract HelloWorld {
   function add(uint a, uint b) pure public returns(uint) {
       return a + b;
   }
}
"""

sol_splitter = RecursiveCharacterTextSplitter.from_language(
    language=Language.SOL, chunk_size=128, chunk_overlap=0
)
sol_docs = sol_splitter.create_documents([SOL_CODE])
sol_docs
[
    Document(page_content='pragma solidity ^0.8.20;', metadata={}),
    Document(page_content='contract HelloWorld {\n   function add(uint a, uint b) pure public returns(uint) {\n       return a + b;\n   }\n}', metadata={})
]