Para RAG e pipelines de LLM

PDF para Markdown para RAG

Converta PDFs em Markdown limpo e pronto para chunking para recuperação e ingestão de LLM: tabelas e fórmulas intactas, digitalizados com OCR, bem menos tokens que o texto bruto do PDF. Controle tudo pela API REST ou pelo MCP hospedado.

Resposta breve

Markdown é a entrada limpa que o RAG quer

Fazer embedding de texto bruto de PDF dá ao recuperador fragmentos ruidosos: títulos, listas e tabelas colapsam, a ordem de leitura se quebra e entra lixo binário e de layout. Converta o PDF para Markdown primeiro e a estrutura do documento sobrevive, então você pode fazer chunking por títulos e seções, manter tabelas e fórmulas como fatos e gastar bem menos tokens por passagem. Fragmentos mais limpos na entrada, melhor recuperação na saída.

Por que importa

O que o Markdown limpo traz para o seu pipeline

Limites de fragmento limpos

Os títulos e seções sobrevivem, então dividir pela estrutura produz fragmentos coerentes e autônomos em vez de cortes no meio da frase.

Menos tokens

O Markdown simples é muito mais barato de fazer embedding e de enviar como contexto que os despejos brutos de PDF ou o HTML, então você indexa e recupera mais por menos.

As tabelas continuam fatos

As colunas viram tabelas Markdown de verdade, não linhas embaralhadas, então os números tabulares continuam recuperáveis em vez de ficarem bagunçados.

Fórmulas preservadas

A notação matemática é mantida em vez de achatada em caracteres ilegíveis que contaminam os embeddings.

Os digitalizados viram texto

O OCR converte os PDFs apenas de imagem e digitalizados em Markdown selecionável em muitos idiomas, então os digitalizados também são indexáveis.

Links e notas de rodapé

Os hiperlinks e as notas de rodapé são preservados como links Markdown em vez de descartados, mantendo as referências intactas.

Como fazer

Ingira um PDF em quatro passos

Um ciclo de vida previsível sobre HTTPS com uma chave de API bearer. O MCP hospedado expõe os mesmos passos como ferramentas de agente.

1

Crie um job

Faça POST da URL do PDF (ou dos bytes enviados) em /api/v2/jobs. Você recebe um id de job e um status.

2

Consulte até ready

Faça GET /api/v2/jobs/{id} até que status seja ready ou error. Em error, leia error_code/error_message. Nos planos pagos, registre um webhook em vez de consultar.

3

Obtenha o Markdown

Faça GET /api/v2/jobs/{id}/download. Respeite truncated e pages: truncated significa que um documento longo foi devolvido parcialmente até o limite de tempo.

4

Chunking e embedding

Divida por títulos/seções, faça embedding dos fragmentos e indexe-os no seu banco de dados vetorial. A estrutura do Markdown mantém os limites limpos.

# 1. criar um job a partir de uma URL de PDF
curl -s -X POST https://pdf2md.dev/api/v2/jobs \
  -H "Authorization: Bearer p2m_your_key" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/paper.pdf"}'
# -> { "job_id": "...", "status": "queued" }
# 2. consultar o status até ready ou error
curl -s https://pdf2md.dev/api/v2/jobs/JOB_ID \
  -H "Authorization: Bearer p2m_your_key"
# -> { "status": "ready", "pages": 24, "truncated": false }
#    em caso de falha: { "status": "error", "error_code": "...", "error_message": "..." }
# 3. obter o Markdown, depois fazer chunking + embedding
curl -s https://pdf2md.dev/api/v2/jobs/JOB_ID/download \
  -H "Authorization: Bearer p2m_your_key"

Prefere ferramentas de agente? O MCP hospedado expõe o mesmo ciclo de vida (pdf_to_markdown_create_job_from_url, _get_job, _get_markdown) para que Claude, ChatGPT e os frameworks de agentes ingiram PDFs sem servidor local.

Chunking

Estratégias de chunking para Markdown

O Markdown limpo te dá costuras naturais por onde dividir, então os fragmentos ficam coerentes e recuperáveis.

Divida por títulos

Use a hierarquia de títulos como limites de fragmento para que cada um seja uma seção autônoma com seu próprio contexto.

Mantenha as tabelas inteiras

Nunca divida dentro de uma tabela Markdown; meia tabela perde o sentido. Mantenha cada tabela, e seu cabeçalho, em um único fragmento.

Adicione um pouco de sobreposição

Uma pequena sobreposição de uma ou duas frases entre fragmentos adjacentes preserva o contexto nos limites e melhora a recuperação.

Leve o caminho do título

Anteponha o título da seção (ou o caminho de títulos) a cada fragmento para que o embedding capture de onde ele veio.

Tamanho adequado

Mire em algumas centenas de tokens por fragmento: grande demais dilui a relevância, pequeno demais perde contexto. A estrutura do Markdown facilita o ajuste.

Remova o que se repete

Tire cabeçalhos e rodapés repetidos para que não dominem os embeddings; o conversor já elimina a maior parte do ruído de layout.

No código

Uma ingestão mínima em Python

Criar, consultar, obter e depois dividir por títulos, pronto para fazer embedding e indexar no seu banco de dados vetorial.

# pip install requests
import requests, time, re
API = "https://pdf2md.dev/api/v2"
H = {"Authorization": "Bearer p2m_your_key"}
job = requests.post(f"{API}/jobs", headers=H,
    json={"url": "https://example.com/paper.pdf"}).json()
jid = job["job_id"]
while True:
    j = requests.get(f"{API}/jobs/{jid}", headers=H).json()
    if j["status"] in ("ready", "error"): break
    time.sleep(3)
md = requests.get(f"{API}/jobs/{jid}/download", headers=H).text
# divisão simples por títulos de nível superior -> fragmentos prontos para embedding
chunks = re.split(r"\n(?=# )", md)

Por que as tabelas são recuperadas melhor

Uma tabela embaralhada faz embedding como ruído, então o número de que você precisa raramente bate com uma consulta. Como tabela Markdown de verdade, as linhas e os cabeçalhos ficam alinhados, então os dados tabulares como preços, métricas e datas continuam pesquisáveis e citáveis nas respostas.

Consulta vs webhooks

Para alguns poucos documentos, consulte GET /api/v2/jobs/{id} a cada poucos segundos. Para pipelines massivos ou de backend em um plano pago, registre um webhook (ou passe callback_url) e nós fazemos POST em ready ou error, então você pula a consulta por completo.

Integre no seu pipeline

O mesmo conversor é uma API REST e um endpoint MCP hospedado, com descoberta legível por máquina para que scripts e agentes o controlem diretamente.

Perguntas frequentes

Perguntas comuns

Por que Markdown para RAG em vez do texto bruto do PDF?

A extração bruta perde a estrutura (os títulos, listas e tabelas colapsam e a ordem de leitura se quebra), o que produz fragmentos ruidosos. O Markdown preserva a estrutura, então o chunking por títulos dá passagens mais limpas e recuperáveis, e usa bem menos tokens que os despejos brutos ou o HTML.

As tabelas e fórmulas sobrevivem?

Sim. As colunas viram tabelas Markdown de verdade em vez de linhas embaralhadas, e a notação matemática é preservada em vez de achatada, então os dados numéricos e tabulares continuam recuperáveis. Mais sobre extrair tabelas.

Posso automatizar isso em um pipeline?

Sim. Use a API REST (criar, consultar, baixar) com uma chave de API bearer, ou o MCP hospedado para frameworks de agentes. Nos planos pagos, um webhook elimina a consulta. Não há nada para hospedar. Veja o tutorial de Python para um exemplo completo.

Como lido com documentos longos?

Cada conversão roda até um orçamento de tempo por plano; um documento longo é devolvido parcialmente com truncated=true em vez de falhar. Leia truncated e divida os arquivos muito grandes, ou use um plano superior com um orçamento maior.

Ele lida com PDFs digitalizados para a ingestão?

Sim. Os PDFs apenas de imagem e digitalizados são processados com OCR para Markdown selecionável em muitos idiomas, então os digitalizados viram texto recuperável no seu índice.

Como devo fazer o chunking do Markdown para RAG?

Divida pela hierarquia de títulos para que cada fragmento seja uma seção autônoma, mantenha as tabelas inteiras, adicione uma pequena sobreposição entre fragmentos e anteponha o título da seção para que o embedding conheça o contexto. Mire em algumas centenas de tokens por fragmento.

Por que as tabelas Markdown são recuperadas melhor que o texto bruto?

A extração bruta embaralha as colunas em ruído, então o valor de que você precisa raramente bate com uma consulta. Uma tabela Markdown de verdade mantém linhas e cabeçalhos alinhados, então os dados tabulares continuam pesquisáveis e citáveis.

Existe um plano gratuito para testes?

Sim. Uma conta Google gratuita habilita uma chave de API e o MCP hospedado: 3 espaços, arquivos de 10 MB, um orçamento de tempo de 15 minutos e retenção de 1 hora. Os planos pagos ampliam cada limite e adicionam webhooks e criação em lote.