Code Splitting
In diesem Kapitel wird der Code-Text-Splitter von LangChain vorgestellt. Wenn Sie Code in Code-Snippets aufteilen müssen, sollten Sie den Inhalt dieses Kapitels sorgfältig studieren. Der CodeTextSplitter unterstützt das Aufteilen von Code in mehreren Programmiersprachen.
Abhängigkeiten installieren
%pip install -qU langchain-text-splitters
Importieren Sie als nächstes die "Language"-Aufzählung und sehen Sie, welche Programmiersprachen für das Code-Splitting unterstützt werden.
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
Hier ist ein Beispiel für die Verwendung des PythonTextSplitter zum Aufteilen von Code.
PYTHON_CODE = """
def hello_world():
print("Hallo, Welt!")
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("Hallo, Welt!")', metadata={}), Document(page_content='# Funktion aufrufen\\\\nhello_world()', metadata={})]
JS
Hier ist ein Beispiel für die Verwendung des JS-Textsplitters zum Aufteilen von JS-Code.
JS_CODE = """
function halloWelt() {
console.log("Hallo, Welt!");
}
// Funktion aufrufen
halloWelt();
"""
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 halloWelt() {\n console.log("Hallo, Welt!");\n}', metadata={}),
Document(page_content='// Funktion aufrufen\nhalloWelt();', metadata={})]
Markdown
Hier ist ein Beispiel zum Aufteilen von Markdown-Code.
markdown_text = """
⚡ Anwendungen mit LLMs durch Komponierbarkeit erstellen ⚡
\`\`\`bash
pip install langchain
\`\`\`
Als Open-Source-Projekt in einem schnelllebigen Bereich sind wir äußerst offen für Beiträge.
"""
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='⚡ Anwendungen mit LLMs durch Komponierbarkeit erstellen ⚡', metadata={}),
Document(page_content='## Schnellinstallation', metadata={}),
Document(page_content="```bash\n# Hoffentlich wird dieser Codeblock nicht aufgeteilt", metadata={}),
Document(page_content='pip install langchain', metadata={}),
Document(page_content='```', metadata={}),
Document(page_content='Als Open-Source-Projekt in einem schnelllebigen Bereich sind wir', metadata={}),
Document(page_content='äußerst offen für Beiträge.', metadata={})]
% Beispiel für die Aufteilung von Latex-Text
latex_text = """
\documentclass{article}
\begin{document}
\maketitle
\section{Einleitung}
Große Sprachmodelle (LLMs) sind eine Art von maschinellem Lernmodell, das auf umfangreichen Textdaten trainiert werden kann, um eine menschenähnliche Sprache zu generieren. In den letzten Jahren haben LLMs bedeutende Fortschritte in einer Vielzahl von natürlichsprachlichen Verarbeitungsaufgaben gemacht, einschließlich Sprachübersetzung, Textgenerierung und Stimmungsanalyse.
\subsection{Geschichte der LLMs}
Die frühesten LLMs wurden in den 1980er und 1990er Jahren entwickelt, waren jedoch durch die Menge an verarbeitbaren Daten und die damals verfügbare Rechenleistung begrenzt. In den letzten Jahren haben jedoch Fortschritte in Hardware und Software es möglich gemacht, LLMs auf umfangreichen Datensätzen zu trainieren, was zu signifikanten Leistungsverbesserungen geführt hat.
\subsection{Anwendungen von LLMs}
LLMs haben viele Anwendungen in der Industrie, einschließlich Chatbots, Content-Erstellung und virtuellen Assistenten. Sie können auch in der akademischen Forschung in den Bereichen Linguistik, Psychologie und Computerlinguistik verwendet werden.
\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
[Dokumentenseite(page_content='\\documentclass{article}\n\n\x08egin{document}\n\n\\maketitle', metadata={}),
Dokumentenseite(page_content='\\section{Einleitung}', metadata={}),
Dokumentenseite(page_content='Große Sprachmodelle (LLMs) sind eine Art von maschinellem Lernmodell', metadata={}),
Dokumentenseite(page_content='das auf umfangreichen Textdaten trainiert werden kann, um', metadata={}),
Dokumentenseite(page_content='eine menschenähnliche Sprache zu generieren. In den letzten', metadata={}),
Dokumentenseite(page_content='Jahren haben LLMs bedeutende Fortschritte in einer Vielzahl', metadata={}),
Dokumentenseite(page_content='von natürlichsprachlichen Verarbeitungsaufgaben gemacht,', metadata={}),
Dokumentenseite(page_content='einschließlich Sprachübersetzung, Textgenerierung und', metadata={}),
Dokumentenseite(page_content='Stimmungsanalyse.', metadata={}),
Dokumentenseite(page_content='\\subsection{Geschichte der LLMs}', metadata={}),
Dokumentenseite(page_content='Die frühesten LLMs wurden in den 1980er und 1990er Jahren', metadata={}),
Dokumentenseite(page_content='entwickelt, waren jedoch durch die Menge an verarbeitbaren', metadata={}),
Dokumentenseite(page_content='Daten und die damals verfügbare Rechenleistung begrenzt. In', metadata={}),
Dokumentenseite(page_content='den letzten Jahren haben jedoch Fortschritte in Hardware', metadata={}),
Dokumentenseite(page_content='und Software es möglich gemacht, LLMs auf umfangreichen', metadata={}),
Dokumentenseite(page_content='Datensätzen zu trainieren, was zu signifikanten', metadata={}),
Dokumentenseite(page_content='Leistungsverbesserungen geführt hat.', metadata={}),
Dokumentenseite(page_content='\\subsection{Anwendungen von LLMs}', metadata={}),
Dokumentenseite(page_content='LLMs haben viele Anwendungen in der Industrie, einschließlich', metadata={}),
Dokumentenseite(page_content='Chatbots, Content-Erstellung und virtuellen Assistenten.', metadata={}),
Dokumentenseite(page_content='Sie können auch in der akademischen Forschung in den', metadata={}),
Dokumentenseite(page_content='Bereichen Linguistik, Psychologie und Computerlinguistik', metadata={}),
Dokumentenseite(page_content='verwendet werden.', metadata={}),
Dokumentenseite(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>⚡ Anwendungen mit LLMs durch Komponierbarkeit erstellen ⚡</p>
</div>
<div>
Als Open-Source-Projekt in einem sich schnell entwickelnden Bereich sind wir äußerst offen für Beiträge.
</div>
</body>
</html>
"""
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