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?
Вот моя текущая реализация:
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
- Проблемы интеграции LlamaParse с Gemini 2.5
- Правильные подходы к реализации
- Альтернативные решения
- Шаги по устранению неполадок
Понимание ограничений системных подсказок Gemini 2.5
Модели Gemini 2.5 обрабатывают системные подсказки иначе, чем другие модели. Исследования показывают, что:
-
Различная структура параметров API: Gemini 2.5 использует
system_instructionвместоsystem_promptв своих нативных вызовах API. Документация API Google Gemini демонстрирует, что системные инструкции передаются через параметрconfigс полемsystem_instruction. -
Поведение, специфичное для модели: Согласно обсуждениям на Stack Overflow, Gemini 1.0-pro-001 вообще не поддерживает
system_instruction, в то время как версии 1.5 и выше поддерживают эту функцию. Gemini 2.5 должен поддерживать это, но реализация может различаться. -
Сложности с режимом агента: Есть данные из обсуждений на Reddit, что режим агента недоступен для Gemini 2.5 Pro, если вы не используете VS Code insiders, что указывает на потенциальные проблемы интеграции.
Проблемы интеграции LlamaParse с Gemini 2.5
Исследования выявили несколько конкретных проблем с LlamaParse и Gemini 2.5:
-
Несоответствие параметров: LlamaParse может использовать имена параметров (
system_prompt,system_prompt_append), которые не напрямую соответствуют тому, как Gemini 2.5 ожидает получать системные инструкции. -
Совместимость версий API: Руководство по API LlamaParse v2 упоминает поддержку моделей Gemini 2.5, но могут существовать пробелы в реализации.
-
Ограничения режима агента: Исследования из проблем на GitHub показывают, что
parse_page_with_agent_modeимеет известные проблемы, включая проблемы с тайм-аутами и ошибки реконструкции, которые могут мешать обработке системных подсказок.
Правильные подходы к реализации
На основе результатов исследования, вот правильные способы реализации системных подсказок с Gemini 2.5 в LlamaParse:
Метод 1: Использование нативного формата системных инструкций Gemini
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: Использование постобработки вместо этого
Поскольку системные подсказки могут работать ненадежно, рассмотрите возможность реализации постобработки после разбора:
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
Альтернативные решения
-
Используйте другую модель: Рассмотрите возможность использования gemini-1.5-pro или gemini-1.5-flash, которые, согласно различным источникам, могут иметь лучшую поддержку системных подсказок.
-
Пользовательская реализация агента: Вместо того чтобы полагаться на встроенный режим агента LlamaParse, реализуйте собственный рабочий процесс разбора с использованием прямого API Google Gemini с правильными системными инструкциями.
-
Используйте
parse_mode="auto": Попробуйте использовать режим разбора по умолчанию, который может обрабатывать системные подсказки иначе, а затем примените ваши преобразования.
Шаги по устранению неполадок
-
Проверьте доступность модели: Убедитесь, что ваша модель Gemini 2.5 правильно настроена и доступна через ваш проект Google Cloud.
-
Проверьте версию LlamaParse: Обновитесь до последней версии LlamaParse, так как поддержка системных подсказок могла быть улучшена в последних выпусках.
-
Тестируйте с более простыми подсказками: Начните с базовой системной подсказки, чтобы проверить, работает ли какая-либо функциональность системных подсказок вообще.
-
Используйте Google Cloud Console: Протестируйте вашу системную подсказку с помощью Google Cloud Console, чтобы определить, является ли проблема в Gemini 2.5 или в LlamaParse.
-
Следите за тайм-аутами: Обращайте внимание на проблемы с тайм-аутами, которые могут мешать обработке системных подсказок, как указано в проблемах на GitHub.
Основная проблема заключается в том, что имена параметров и структура системных подсказок в LlamaParse не соответствуют тому, как Gemini 2.5 ожидает получать системные инструкции. Использование постобработки или реализация пользовательского рабочего процесса может быть наиболее надежным решением до полной интеграции.
Источники
- Руководство по API LlamaParse v2 - Поддержка модели Gemini
- Документация API Google Gemini - Системные инструкции
- Документация Gemini 2.5 Pro
- Stack Overflow - Реализация системных подсказок в Gemini Pro
- Обсуждение на Reddit - Проблемы режима агента Gemini 2.5 Pro
- Проблема на GitHub - Проблемы режима агента LlamaParse
Заключение
Параметры системных подсказок, не работающие с функцией parse_page_with_agent в LlamaParse при использовании Gemini 2.5, вероятно, связаны с несовместимостью параметров между API LlamaParse и ожидаемым форматом системных инструкций Gemini 2.5. Наиболее надежными решениями являются:
- Реализовать постобработку после разбора для достижения желаемых преобразований текста
- Использовать альтернативные имена параметров, такие как
system_instructionвместоsystem_prompt - Рассмотреть возможность использования моделей gemini-1.5, которые могут иметь лучшую интеграцию с LlamaParse
- Реализовать пользовательский рабочий процесс с использованием прямого API Gemini для большего контроля над системными подсказками
Пока интеграция не будет полностью решена, постобработка вывода после разбора, кажется, является наиболее надежным подходом для достижения последовательных результатов с вашими требованиями к преобразованию текста.