Другое

LlamaParse Gemini 2.5: Исправление неработающего системного промпта

Исправление неработающего system_prompt в LlamaParse с Gemini 2.5. Узнайте правильные методы реализации и альтернативные решения для преобразования PDF в Markdown.

Почему параметры system_prompt и system_prompt_append не работают с функцией parse_page_with_agent в LlamaParse при использовании Gemini 2.5 для преобразования PDF в Markdown?

Я использую LlamaParse (Llama Cloud) в Python для преобразования PDF в Markdown. Я хочу настроить вывод с помощью системных промптов (например, принудительного преобразования текста в ВЕРХНИЙ РЕГИСТР или увеличения уровней заголовков Markdown), но ни параметр system_prompt, ни system_prompt_append, похоже, не оказывают никакого эффекта при использовании parse_page_with_agent с Gemini 2.5.

Если системные промпты поддерживаются в данной конфигурации, то какой правильный способ их передачи, чтобы они действительно изменяли генерируемый вывод Markdown?

Вот моя текущая реализация:

python
from pathlib import Path
from llama_parse import LlamaParse

SYSTEM_PROMPT = """Вы постобрабатываете распарсенный Markdown:
- Преобразуйте весь текст в ВЕРХНИЙ РЕГИСТР.
- Увеличьте каждый уровень заголовка Markdown на один (# -> ##, ## -> ### и т.д.).
"""

def setup_parser(api_key: str) -> LlamaParse:
    parser = LlamaParse(
        api_key=api_key,
        parse_mode="parse_page_with_agent",
        model="gemini-2.5-flash",
        high_res_ocr=True,
        adaptive_long_table=True,
        outlined_table_extraction=True,
        output_tables_as_HTML=True,
        page_separator="\n\n",
        # Я пробовал каждый из этих параметров отдельно и вместе:
        system_prompt=SYSTEM_PROMPT,
        system_prompt_append=SYSTEM_PROMPT,
    )
    return parser

async def convert_pdf_to_markdown_async(parser: LlamaParse, pdf_path: Path, out_dir: Path) -> bool:
    try:
        result = await parser.aparse(str(pdf_path))
        docs = result.get_markdown_documents(split_by_page=True)
        md = "\n\n".join(doc.text for doc in docs)
        out_dir.mkdir(parents=True, exist_ok=True)
        (out_dir / (pdf_path.stem + "_llama.md")).write_text(md, encoding="utf-8")
        return True
    except Exception as e:
        print(f"Ошибка при парсинге: {e}")
        return False

Проблема с параметрами system_prompt и system_prompt_append, не работающими с функцией parse_page_with_agent в LlamaParse при использовании Gemini 2.5

Проблема с параметрами system_prompt и system_prompt_append, не работающими с функцией parse_page_with_agent в LlamaParse при использовании Gemini 2.5, вероятно, связана с тем, как Gemini 2.5 обрабатывает системные подсказки и потенциальными ограничениями интеграции с LlamaParse.

На основе результатов исследования, проблема, скорее всего, обусловлена несколькими факторами:

Содержание

Понимание ограничений системных подсказок Gemini 2.5

Модели Gemini 2.5 обрабатывают системные подсказки иначе, чем другие модели. Исследования показывают, что:

  1. Различная структура параметров API: Gemini 2.5 использует system_instruction вместо system_prompt в своих нативных вызовах API. Документация API Google Gemini демонстрирует, что системные инструкции передаются через параметр config с полем system_instruction.

  2. Поведение, специфичное для модели: Согласно обсуждениям на Stack Overflow, Gemini 1.0-pro-001 вообще не поддерживает system_instruction, в то время как версии 1.5 и выше поддерживают эту функцию. Gemini 2.5 должен поддерживать это, но реализация может различаться.

  3. Сложности с режимом агента: Есть данные из обсуждений на Reddit, что режим агента недоступен для Gemini 2.5 Pro, если вы не используете VS Code insiders, что указывает на потенциальные проблемы интеграции.

Проблемы интеграции LlamaParse с Gemini 2.5

Исследования выявили несколько конкретных проблем с LlamaParse и Gemini 2.5:

  1. Несоответствие параметров: LlamaParse может использовать имена параметров (system_prompt, system_prompt_append), которые не напрямую соответствуют тому, как Gemini 2.5 ожидает получать системные инструкции.

  2. Совместимость версий API: Руководство по API LlamaParse v2 упоминает поддержку моделей Gemini 2.5, но могут существовать пробелы в реализации.

  3. Ограничения режима агента: Исследования из проблем на GitHub показывают, что parse_page_with_agent_mode имеет известные проблемы, включая проблемы с тайм-аутами и ошибки реконструкции, которые могут мешать обработке системных подсказок.

Правильные подходы к реализации

На основе результатов исследования, вот правильные способы реализации системных подсказок с Gemini 2.5 в LlamaParse:

Метод 1: Использование нативного формата системных инструкций Gemini

python
from pathlib import Path
from llama_parse import LlamaParse

SYSTEM_PROMPT = """Вы постобрабатываете разобранный Markdown:
- ПРЕОБРАЗУЙТЕ весь текст В ВЕРХНИЙ РЕГИСТР.
- Увеличьте уровень каждого заголовка Markdown на один (# -> ##, ## -> ### и т.д.).
"""

def setup_parser(api_key: str) -> LlamaParse:
    parser = LlamaParse(
        api_key=api_key,
        parse_mode="parse_page_with_agent",
        model="gemini-2.5-flash",
        high_res_ocr=True,
        adaptive_long_table=True,
        outlined_table_extraction=True,
        output_tables_as_HTML=True,
        page_separator="\n\n",
        # Попробуйте нативный формат Gemini
        system_instruction=SYSTEM_PROMPT,
        # Или попробуйте как часть конфигурации
        system_config={"system_instruction": SYSTEM_PROMPT}
    )
    return parser

Метод 2: Использование постобработки вместо этого

Поскольку системные подсказки могут работать ненадежно, рассмотрите возможность реализации постобработки после разбора:

python
async def convert_pdf_to_markdown_async(parser: LlamaParse, pdf_path: Path, out_dir: Path) -> bool:
    try:
        result = await parser.aparse(str(pdf_path))
        docs = result.get_markdown_documents(split_by_page=True)
        md = "\n\n".join(doc.text for doc in docs)
        
        # Примените ваши преобразования после разбора
        md = md.upper()  # Преобразование в верхний регистр
        md = re.sub(r'^(#{1,6})', lambda m: '#' * (len(m.group(1)) + 1), md, flags=re.MULTILINE)  # Увеличение уровней заголовков
        
        out_dir.mkdir(parents=True, exist_ok=True)
        (out_dir / (pdf_path.stem + "_llama.md")).write_text(md, encoding="utf-8")
        return True
    except Exception as e:
        print(f"Ошибка при разборе: {e}")
        return False

Альтернативные решения

  1. Используйте другую модель: Рассмотрите возможность использования gemini-1.5-pro или gemini-1.5-flash, которые, согласно различным источникам, могут иметь лучшую поддержку системных подсказок.

  2. Пользовательская реализация агента: Вместо того чтобы полагаться на встроенный режим агента LlamaParse, реализуйте собственный рабочий процесс разбора с использованием прямого API Google Gemini с правильными системными инструкциями.

  3. Используйте parse_mode="auto": Попробуйте использовать режим разбора по умолчанию, который может обрабатывать системные подсказки иначе, а затем примените ваши преобразования.

Шаги по устранению неполадок

  1. Проверьте доступность модели: Убедитесь, что ваша модель Gemini 2.5 правильно настроена и доступна через ваш проект Google Cloud.

  2. Проверьте версию LlamaParse: Обновитесь до последней версии LlamaParse, так как поддержка системных подсказок могла быть улучшена в последних выпусках.

  3. Тестируйте с более простыми подсказками: Начните с базовой системной подсказки, чтобы проверить, работает ли какая-либо функциональность системных подсказок вообще.

  4. Используйте Google Cloud Console: Протестируйте вашу системную подсказку с помощью Google Cloud Console, чтобы определить, является ли проблема в Gemini 2.5 или в LlamaParse.

  5. Следите за тайм-аутами: Обращайте внимание на проблемы с тайм-аутами, которые могут мешать обработке системных подсказок, как указано в проблемах на GitHub.

Основная проблема заключается в том, что имена параметров и структура системных подсказок в LlamaParse не соответствуют тому, как Gemini 2.5 ожидает получать системные инструкции. Использование постобработки или реализация пользовательского рабочего процесса может быть наиболее надежным решением до полной интеграции.

Источники

  1. Руководство по API LlamaParse v2 - Поддержка модели Gemini
  2. Документация API Google Gemini - Системные инструкции
  3. Документация Gemini 2.5 Pro
  4. Stack Overflow - Реализация системных подсказок в Gemini Pro
  5. Обсуждение на Reddit - Проблемы режима агента Gemini 2.5 Pro
  6. Проблема на GitHub - Проблемы режима агента LlamaParse

Заключение

Параметры системных подсказок, не работающие с функцией parse_page_with_agent в LlamaParse при использовании Gemini 2.5, вероятно, связаны с несовместимостью параметров между API LlamaParse и ожидаемым форматом системных инструкций Gemini 2.5. Наиболее надежными решениями являются:

  1. Реализовать постобработку после разбора для достижения желаемых преобразований текста
  2. Использовать альтернативные имена параметров, такие как system_instruction вместо system_prompt
  3. Рассмотреть возможность использования моделей gemini-1.5, которые могут иметь лучшую интеграцию с LlamaParse
  4. Реализовать пользовательский рабочий процесс с использованием прямого API Gemini для большего контроля над системными подсказками

Пока интеграция не будет полностью решена, постобработка вывода после разбора, кажется, является наиболее надежным подходом для достижения последовательных результатов с вашими требованиями к преобразованию текста.

Авторы
Проверено модерацией
Модерация