Pemisahan Kode

Pada bab ini, kita akan memperkenalkan pemisah teks kode dari LangChain. Jika Anda perlu memisahkan kode menjadi potongan kode, Anda perlu mempelajari dengan cermat konten bab ini. CodeTextSplitter mendukung pemisahan kode untuk berbagai bahasa pemrograman.

Menginstal Dependensi

%pip install -qU langchain-text-splitters

Selanjutnya, impor penerapan "Language" dan lihat bahasa pemrograman mana yang didukung untuk pemisahan kode.

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

Berikut contoh penggunaan PythonTextSplitter untuk memisahkan kode.

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='# Panggil fungsi\\\\nhello_world()', metadata={})]

JS

Berikut contoh penggunaan pemisah teks JS untuk memisahkan kode JS.

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

// Panggil fungsi
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='// Panggil fungsi\nhelloWorld();', metadata={})]

Markdown

Berikut contoh pemisahan kode markdown.

markdown_text = """

⚡ Membangun aplikasi dengan LLMs melalui komposabilitas ⚡


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

Sebagai proyek sumber terbuka dalam bidang yang berkembang pesat, kami sangat terbuka untuk kontribusi.
"""
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='⚡ Membangun aplikasi dengan LLMs melalui komposabilitas ⚡', metadata={}),
     Document(page_content='## Instalasi Cepat', metadata={}),
     Document(page_content="```bash\n# Berharap blok kode ini tidak terpotong", metadata={}),
     Document(page_content='pip install langchain', metadata={}),
     Document(page_content='```', metadata={}),
     Document(page_content='Sebagai proyek sumber terbuka dalam bidang yang berkembang pesat, kami', metadata={}),
     Document(page_content='sangat terbuka untuk kontribusi.', metadata={})]

Latex

Contoh pembagian teks Latex

latex_text = """
\documentclass{article}

\begin{document}

\maketitle

\section{Pendahuluan}
Large language models (LLMs) adalah jenis model pembelajaran mesin yang dapat dilatih dengan jumlah data teks yang besar untuk menghasilkan bahasa yang mirip manusia. Dalam beberapa tahun terakhir, LLMs telah membuat kemajuan signifikan dalam berbagai tugas pemrosesan bahasa alami, termasuk terjemahan bahasa, pembangkitan teks, dan analisis sentimen.

\subsection{Sejarah LLMs}
LLMs pertama dikembangkan pada tahun 1980-an dan 1990-an, namun terbatas oleh jumlah data yang dapat diproses dan daya komputasi yang tersedia pada saat itu. Namun, dalam dekade terakhir, kemajuan dalam perangkat keras dan perangkat lunak telah membuat dimungkinkan untuk melatih LLMs pada kumpulan data besar, menghasilkan peningkatan kinerja yang signifikan.

\subsection{Aplikasi LLMs}
LLMs memiliki banyak aplikasi di industri, termasuk chatbot, pembuatan konten, dan asisten virtual. Mereka juga dapat digunakan dalam dunia akademis untuk penelitian dalam linguistik, psikologi, dan linguistik komputasional.

\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{Pendahuluan}', metadata={}),
     Document(page_content='Large language models (LLMs) adalah jenis model pembelajaran', metadata={}),
     Document(page_content='mesin yang dapat dilatih dengan jumlah data teks yang besar', metadata={}),
     Document(page_content='untuk menghasilkan bahasa yang mirip manusia. Dalam beberapa', metadata={}),
     Document(page_content='tahun terakhir, LLMs telah membuat kemajuan signifikan dalam', metadata={}),
     Document(page_content='berbagai tugas pemrosesan bahasa alami, termasuk terjemahan', metadata={}),
     Document(page_content='bahasa, pembangkitan teks, dan analisis sentimen.', metadata={}),
     Document(page_content='\\subsection{Sejarah LLMs}', metadata={}),
     Document(page_content='LLMs pertama dikembangkan pada tahun 1980-an dan 1990-an,', metadata={}),
     Document(page_content='namun terbatas oleh jumlah data yang dapat diproses dan daya', metadata={}),
     Document(page_content='komputasi yang tersedia pada saat itu. Namun, dalam dekade', metadata={}),
     Document(page_content='terakhir, kemajuan dalam perangkat keras dan perangkat lunak', metadata={}),
     Document(page_content='telah membuat dimungkinkan untuk melatih LLMs pada kumpulan', metadata={}),
     Document(page_content='data besar, menghasilkan peningkatan kinerja yang signifikan.', metadata={}),
     Document(page_content='\\subsection{Aplikasi LLMs}', metadata={}),
     Document(page_content='LLMs memiliki banyak aplikasi di industri, termasuk chatbot,', metadata={}),
     Document(page_content='pembuatan konten, dan asisten virtual. Mereka juga dapat', metadata={}),
     Document(page_content='digunakan dalam dunia akademis untuk penelitian dalam', metadata={}),
     Document(page_content='linguistik, psikologi, dan linguistik komputasional.', metadata={}),
     Document(page_content='\\end{document}', metadata={})]

HTML

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>⚡ Membangun aplikasi dengan LLMs melalui komposabilitas ⚡</p>
        </div>
        <div>
            Sebagai proyek sumber terbuka dalam bidang yang berkembang pesat, kami sangat terbuka untuk kontribusi.
        </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>⚡ Membangun aplikasi dengan LLMs melalui komposabilitas ⚡', metadata={}),
     Document(page_content='</p>\n        </div>', metadata={}),
     Document(page_content='<div>\n            Sebagai proyek sumber terbuka dalam bidang yang berkembang pesat, kami sangat terbuka untuk kontribusi.', 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={})
]