Skip to main content

Menu

Webinar

Built for the Agentic Era: Introducing MariaDB Enterprise Platform 2027

Register now

Developer

Building AI Applications using frameworks with MariaDB Vector Store

By Diego Dupin

5 min read
Share
pip install langchain-mariadb langchain_community pypdf pymysql langchain-text-splitters langchain-openai mariadb
export OPENAI_API_KEY=...
from langchain_mariadb import MariaDBStore
from langchain_openai import OpenAIEmbeddings
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 1. Load and split the PDF - just two lines!
loader = PyPDFLoader("mariadb-documentation.pdf")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)
texts = text_splitter.split_documents(documents)

# 2. Initialize embeddings and vector store - one line each!
vector_store = MariaDBStore(
    embeddings=OpenAIEmbeddings(),
    embedding_length=1536,
    datasource="mysql+mariadbconnector://myuser:mypassword@localhost:3306/vectordb",
    collection_name="mariadb_docs"
)

# 3. Add documents - just one line!
vector_store.add_documents(texts)
npm install @langchain/community @langchain/core @langchain/openai @langchain/textsplitters mariadb pdf-parse
export OPENAI_API_KEY=...
import { MariaDBStore } from "@langchain/community/vectorstores/mariadb";
import { OpenAIEmbeddings } from "@langchain/openai";
import { PDFLoader } from "@langchain/community/document_loaders/fs/pdf";
import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";
import mariadb from "mariadb";

async function createData() {
// 1. Load and split the PDF - just a few lines!
const loader = new PDFLoader("C:/temp/mariadb_tutorial.pdf");
const docs = await loader.load();
const textSplitter = new RecursiveCharacterTextSplitter({
chunkSize: 1000,
chunkOverlap: 200
});
const splitDocs = await textSplitter.splitDocuments(docs);

const vectorStore = await MariaDBStore.initialize(
new OpenAIEmbeddings(),
{
pool: mariadb.createPool("mariadb://myuser:mypassword@localhost:3306/mydb"),
distanceStrategy: 'COSINE',
}
);
await vectorStore.addDocuments(splitDocs);
}
createData();
spring:
application:
name: mariadb-test
datasource:
url: jdbc:mariadb://localhost/spring-ai
username: myuser
password: mypassword
ai:
vectorstore:
mariadb:
initialize-schema: true
distance-type: COSINE
dimensions: 1536
openai:
api-key: ${OPEN_AI_KEY}
@Service
public class DocumentProcessingService {
@Autowired
private VectorStore vectorStore;

// Just one method to handle everything!
public void processPDF(String pdfPath) {
var reader = new PagePdfDocumentReader(pdfPath);
var splitter = new TokenTextSplitter();
List<Document> documents = splitter.apply(reader.get());
vectorStore.add(documents);
}
}
from langchain_mariadb import MariaDBStore
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain import hub

llm = ChatOpenAI(temperature=0)
vector_store = MariaDBStore(
embeddings=OpenAIEmbeddings(),
embedding_length=1536,
datasource="mysql+mariadbconnector://root:@localhost:3306/vectordb",
collection_name="mariadb_docs"
)

prompt = hub.pull("rlm/rag-prompt")

rag_chain = (
{"context": vector_store.as_retriever(), "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)

response = rag_chain.invoke("How do I create a new table in MariaDB?")

print(f"Response: {response}")
import {MariaDBStore} from "@langchain/community/vectorstores/mariadb";
import {OpenAIEmbeddings} from "@langchain/openai";
import mariadb from "mariadb";
import { ChatOpenAI } from "@langchain/openai";
import { pull } from "langchain/hub";

async function search() {
const vectorStore = await MariaDBStore.initialize(
new OpenAIEmbeddings(),
{
pool: mariadb.createPool("mariadb://myuser:mypassword@localhost:3306/mydb"),
distanceStrategy: 'COSINE',
}
);
let question = "How do I create a new table in MariaDB?";
const llm = new ChatOpenAI({temperature: 0});

const retrievedDocs = await vectorStore.similaritySearch(question);
const docsContent = retrievedDocs.map((doc) => doc.pageContent).join("\n");
const promptTemplate = await pull("rlm/rag-prompt");
const messages = await promptTemplate.invoke({
question: question,
context: docsContent,
});
const answer = await llm.invoke(messages);
console.log(answer.content);
}
search();
@Service
public class SearchService {
@Autowired
private VectorStore vectorStore;

@Autowired
private ChatModel chatModel;

public String search(String query) {
var chatClient = ChatClient.builder(chatModel)
.defaultAdvisors(new QuestionAnswerAdvisor(vectorStore))
.build();
return chatClient
.prompt()
.user(query)
.call()
.content();
}
}