(1) Она поддерживает хорошо работу с PDF
(2) У этой модели есть кэширование промптов
(3) делать structured data extraction с checklist и custom chain of thought на ней одно удовольствие.
Хотя Anthropic пока и не завел structured outputs на базе constrained decoding (как это сделали в OpenAI), но их модели понимают JSON схему без каких-то нареканий. А выход у них пока без ошибок (если не перегружать контекст и соблюдать signal-noise ratio).
Что я делаю для извлечения данных из сложных PDF недорого:
(1) загружаю системный промпт со схемой в первое сообщение. Помечаю для кэширования через
"cache_control": {"type": "ephemeral"},
. Схему конвертирую в строку (см ниже) и добавляю к общему описанию задачи:
json.dumps(Model.model_json_schema(), indent=2, ensure_ascii=False)
(2) загружаю PDF напрямую во второе сообщение модели. Также помечаю для кэширования.
У меня PDF достается из CAS, но можно грузить хоть откуда. Главное - сконвертировать бинарную начинку в base64 для добавления в API запрос (так сделана работа с документами в бете):
def read_pdf_as_base64(env: Env, hash: str):
with env.storage.read_cas(hash) as file:
return base64.standard_b64encode(file.read()).decode('utf-8')
Кстати, под капотом Anthropic не просто распарсит PDF в текст, но и приложит картинки страниц к этому тексту. Это заметно повышает качество ответов.
(3) помещаю задачу из чеклиста в третье сообщение, уже не кэширую.
(4) в последнее сообщение добавляю
{
"role": "assistant",
"content": "Here is the JSON requested:\n{"
}
(5) к ответу модели добавляю
{
и валидирую загрузкой в исходную pydantic modelИ потом все будет работать так:
results = []
for pdf in pdfs:
for question in checklist:
result = extract_data(schema, pdf, question)
results.append(result)
Причем
schema
кэшируется на все запросы, а содержимое pdf
(самое большое) переиспользуется на все вопросы из чеклиста.Такой процесс в итоге работает точнее и проще, чем комбайн из openAI GPT-4o со structured outputs и предобработкой PDF в отдельных специализированных моделях.
Ваш, @llm_under_hood 🤗
PS: Бенчмарк модели будет попозже