Парсинг PDF для RAG: GPT-4o + embeddings
Превращаем сложные PDF (слайды, отчёты) в retrieval-ready контент: двойной парсинг текстом (pdfminer) и изображениями (GPT-4o vision), чанкинг по страницам, эмбеддинги text-embedding-3-small, cosine similarity для поиска.
Возьмите любой PDF (технический отчёт, слайдек). Реализуйте двойной парсинг: pdfminer для текста + GPT-4o для первых 3 страниц. Создайте DataFrame с эмбеддингами и сделайте 3 поисковых запроса. Сравните качество результатов при поиске только по тексту vs только по GPT-4o-описаниям.
Проверка задания
Скопируйте и адаптируйте под свой контекст. Текст в треугольных скобках — то, что нужно заменить.
from pdf2image import convert_from_path
from pdfminer.high_level import extract_text
import base64, io, os
from openai import OpenAI
import pandas as pd
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
client = OpenAI()
def get_img_uri(img):
buf = io.BytesIO()
img.save(buf, format="PNG")
return "data:image/png;base64," + base64.b64encode(buf.getvalue()).decode()
def analyze_page(img):
uri = get_img_uri(img)
r = client.chat.completions.create(
model="gpt-4o",
messages=[{"role":"user","content":[
{"type":"text","text":"Describe this page in detail for a knowledge base."},
{"type":"image_url","image_url":{"url":uri}}
]}],
max_tokens=400,
)
return r.choices[0].message.content