División de código
Este capítulo presenta el separador de texto de código de LangChain. Si necesitas dividir un código en fragmentos de código, es importante estudiar detenidamente el contenido de este capítulo. CodeTextSplitter brinda soporte para la división de código en varios lenguajes de programación.
Instalación de dependencias
%pip install -qU langchain-text-splitters
A continuación, importa la enumeración "Language" y consulta qué lenguajes de programación tienen soporte para la división de código.
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
Aquí tienes un ejemplo de cómo usar PythonTextSplitter para dividir código.
PYTHON_CODE = """
def hello_world():
print("¡Hola, Mundo!")
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("¡Hola, Mundo!")', metadata={}), Document(page_content='# Llamar a la función\\\\nhello_world()', metadata={})]
JS
Aquí tienes un ejemplo de cómo usar el separador de texto JS para dividir código JS.
JS_CODE = """
function helloWorld() {
console.log("¡Hola, Mundo!");
}
// Llamar a la función
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("¡Hola, Mundo!");\n}', metadata={}), Document(page_content='// Llamar a la función\nhelloWorld();', metadata={})]
Markdown
Aquí tienes un ejemplo de cómo dividir el código markdown.
markdown_text = """
⚡ Construyendo aplicaciones con LLMs a través de la composabilidad ⚡
\`\`\`bash
pip install langchain
\`\`\`
Como proyecto de código abierto en un campo en rápido desarrollo, estamos muy abiertos a las contribuciones.
"""
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='⚡ Construyendo aplicaciones con LLMs a través de la composabilidad ⚡', metadata={}), Document(page_content='## Instalación rápida', metadata={}), Document(page_content="```bash\n# Con suerte, este bloque de código no está dividido", metadata={}), Document(page_content='pip install langchain', metadata={}), Document(page_content='```', metadata={}), Document(page_content='Como proyecto de código abierto en un campo en rápido desarrollo, estamos muy abiertos', metadata={}), Document(page_content='a las contribuciones.', metadata={})]
## Latex
Ejemplo de división de texto Latex
latex_text = """ \documentclass{article}
\begin{document}
\maketitle
\section{Introducción} Los modelos de lenguaje grandes (LLMs) son un tipo de modelo de aprendizaje automático que puede entrenarse en grandes cantidades de datos de texto para generar un lenguaje similar al humano. En los últimos años, los LLMs han avanzado significativamente en una variedad de tareas de procesamiento del lenguaje natural, incluida la traducción de idiomas, la generación de texto y el análisis de sentimientos.
\subsection{Historia de los LLMs} Los primeros LLMs se desarrollaron en los años 80 y 90, pero estaban limitados por la cantidad de datos que se podían procesar y la potencia computacional disponible en ese momento. Sin embargo, en la última década, los avances en hardware y software han hecho posible entrenar LLMs en conjuntos de datos masivos, lo que ha llevado a mejoras significativas en el rendimiento.
\subsection{Aplicaciones de LLMs} Los LLMs tienen muchas aplicaciones en la industria, incluyendo chatbots, creación de contenido y asistentes virtuales. También pueden ser utilizados en el ámbito académico para investigaciones en lingüística, psicología y lingüística computacional.
\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
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>⚡ Construyendo aplicaciones con LLM a través de la composabilidad ⚡</p>
</div>
<div>
Como un proyecto de código abierto en un campo de desarrollo rápido, estamos muy abiertos a contribuciones.
</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>⚡ Construyendo aplicaciones con LLM a través de la composabilidad ⚡', metadata={}),
Document(page_content='</p>\n </div>', metadata={}),
Document(page_content='<div>\n Como un proyecto de código abierto en un campo de desarrollo', metadata={}),
Document(page_content='rápido, estamos muy abiertos a contribuciones.', 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={})
]