PDF → AI-скилл за 3 минуты: как превратить любую техкнигу в рабочий инструмент для команды
Я — Denis Shokhirev, Enterprise AI architect, работаю из Эрлангена на стеке Claude, Supabase, n8n, Doppler и self-hosted Postgres. За последние 6 месяцев внедрил 14 production AI-агентов для B2B-клиентов из DACH — логистика, финтех, индустриал. Недавно CTO финтех-компании попросил: «Нужно, чтобы команда не просто читала ISO-стандарты, а реально работала с ними как инструментом — прямо в Claude». Вот как я решаю такую задачу за 3 минуты. Зачем превращать PDF-книгу в AI-скилл? В реальных проект
Я — Denis Shokhirev, Enterprise AI architect, работаю из Эрлангена на стеке Claude, Supabase, n8n, Doppler и self-hosted Postgres. За последние 6 месяцев внедрил 14 production AI-агентов для B2B-клиентов из DACH — логистика, финтех, индустриал. Недавно CTO финтех-компании попросил: «Нужно, чтобы команда не просто читала ISO-стандарты, а реально работала с ними как инструментом — прямо в Claude». Вот как я решаю такую задачу за 3 минуты.
Зачем превращать PDF-книгу в AI-скилл?
В реальных проектах знания часто зарыты в толстых PDF — стандарты, гайды, процедуры. Даже если документ лежит в Confluence или на общем диске, им мало кто пользуется по-настоящему. AI-агенты позволяют превратить эти PDF в рабочий скилл для всей команды: быстрый доступ к нужным формулировкам, примерам, нюансам, без перелистывания сотен страниц.
Требования к pipeline: стабильность, безопасность, прозрачность
Стек и паттерн
Мой production pipeline: Claude Code + Supabase (файловое хранилище + Postgres) + n8n для оркестрации + Doppler для секретов. RAG (Retrieval-Augmented Generation) — базовый паттерн: chunk’аем PDF, индексируем, подключаем к Claude через API.
Безопасность
99% CVE-уязвимостей в LLM-продуктах связаны с неконтролируемым upload’ом и парсингом файлов (OWASP Top-10 LLM, 2024). Я никогда не пускаю сырой PDF в prompt — только через проверенный парсер (pdfminer.six или PyPDF2), с фильтрацией потенциально опасных вложений и скриптов.
Пошаговый разбор: PDF → Claude-скилл
1. Загрузка и парсинг PDF
Загружаю PDF в Supabase Storage. Для парсинга — PyPDF2: стабильно работает c многостраничными стандартами, не «кусает» формулы. Чистый текст отправляю в Postgres для дальнейшей индексации.
import PyPDF2
import supabase
from supabase import create_client
supabase_url = "ВАШ_URL"
supabase_key = "ВАШ_KEY"
client = create_client(supabase_url, supabase_key)
with open("iso27001.pdf", "rb") as f:
reader = PyPDF2.PdfReader(f)
text = ""
for page in reader.pages:
text += page.extract_text()
client.table("raw_docs").insert({"filename": "iso27001.pdf", "content": text}).execute()
2. Чанкинг: разбиваем на куски для поиска
Claude и другие LLM плохо справляются с длинными контекстами, если просто скормить им весь текст. Я использую recursive character text splitting (по 1000-1500 символов, с overlap 200-300). Для этого — стандартный split из langchain.text_splitter, либо своя функция на Python.
def split_text(text, chunk_size=1200, overlap=250):
chunks = []
start = 0
while start < len(text):
end = min(start + chunk_size, len(text))
chunks.append(text[start:end])
start = end - overlap
return chunks
3. Индексация в Postgres
Все чанки кладу в отдельную таблицу (например, docs_chunks), где для каждого куска храню id, номер страницы, текст, ссылку на оригинал. Для поиска — pgvector (официальное расширение Postgres для хранения эмбеддингов).
import openai
import psycopg2
conn = psycopg2.connect("dbname=ai_docs user=postgres password=секрет")
cur = conn.cursor()
# Получение эмбеддинга через OpenAI API (можно Claude, если есть доступ)
def get_embedding(text):
return openai.Embedding.create(
input=text,
model="text-embedding-ada-002"
)["data"][0]["embedding"]
for chunk in split_text(text):
emb = get_embedding(chunk)
cur.execute(
"INSERT INTO docs_chunks (chunk, embedding) VALUES (%s, %s)",
(chunk, emb)
)
conn.commit()
4. Интеграция с Claude через RAG
n8n-триггер на входящий вопрос от пользователя. Скрипт ищет релевантные чанки через pgvector (top-N по косинусной близости), формирует prompt c цитатами, отправляет в Claude Code через Anthropic SDK.
| Этап | Инструмент | Время (минуты) |
|---|---|---|
| Загрузка PDF | Supabase Storage | 0.5 |
| Парсинг | PyPDF2 | 0.5 |
| Чанкинг | Python/langchain | 1 |
| Индексация | pgvector | 0.5 |
| Интеграция через n8n | Anthropic SDK | 0.5 |
Production-грабли: что ломается на практике
1. Проблемы с формулами и нестандартной версткой
PyPDF2 иногда теряет формулы или колонки. В критичных документах (например, EN ISO 13849-1) приходится вручную валидировать чанки на полноту. Для контроля — отдельный скрипт сравнивает количество строк и ключевых терминов с оригиналом.
2. Фишинг через PDF-вложения
На одном проекте встретил PDF с вложенными JS-скриптами: если не фильтровать, можно получить инъекцию прямо в prompt. Проверяю PDF через встроенный sanitizer из pdfminer.six, удаляю вложения и скрипты до парсинга.
3. Лимиты на размер prompt’а
Claude Code принимает ограниченный контекст (до 200k токенов, см. Anthropic docs). Важно выбрать только самые релевантные чанки, иначе бенефит RAG исчезает.
FAQ
Можно ли использовать open source LLM вместо Claude?
Да, но качество поиска и генерации ниже, а поддержка production-стека сложнее. Для внутреннего PoC — работает, для продакшена в DACH — пока нет.
Как защитить pipeline от утечек?
Никаких публичных API-ключей в коде. Все секреты — только через Doppler. Права на чтение и запись в Supabase/Postgres — по минимуму, только для нужных сервисов.
Сколько времени занимает полный процесс для книги на 400 страниц?
Загрузка и парсинг — до 2 минут, чанкинг и индексация — еще 2-3 минуты. Ручная валидация чанков (если нужна) — до 10 минут.
Как обновлять знания, если выходит новая версия PDF?
В Supabase — просто заменяю файл, запускаю обновленный парсинг и пересчитываю эмбеддинги. Вся история версий хранится в отдельной таблице (например, docs_versions).
Что делать с документами на немецком или французском?
Claude Code хорошо работает с многими языками. Для максимального качества — добавляю языковой тег в metadata чанка и делаю поиск по языку.
В каком этапе pipeline у вас чаще всего вылезают production-баги: парсинг, чанкинг или индексация? Мне интересно услышать реальные кейсы. Я провожу бесплатный 30-мин аудит AI-стека для DACH-команд, кто строит решения под регуляцию. Пишите в LinkedIn или на @ger_dennis_ai.
Turn your process into an AI system
Fixed price. Production quality. DACH B2B focus.