LlamaParse用parse_page_with_agent时system_prompt无效,求正确传参方式
问题描述
我在Python中使用LlamaParse(Llama Cloud)将PDF转换为Markdown,希望通过提示词控制输出格式(比如强制所有文本大写、提升所有Markdown标题层级),但设置system_prompt或system_prompt_append参数都没有效果。如果这个场景支持提示词配置,请问如何正确传递提示词来修改生成的Markdown内容?
代码示例:
from pathlib import Path from llama_parse import LlamaParse SYSTEM_PROMPT = """You post-process the parsed Markdown: - Convert ALL text to UPPERCASE. - Increase every Markdown heading level by one (# -> ##, ## -> ###, etc.). """ 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", # I tried each of these separately and together: 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"Error during parsing: {e}") return False
解决方案
LlamaParse的parse_mode="parse_page_with_agent"模式下,system_prompt和system_prompt_append参数不生效,因为该模式的提示词逻辑由专门的代理参数控制。以下是两种可行的解决方式:
方法1:使用agent_prompt参数(适配代理解析模式)
当使用parse_page_with_agent模式时,需通过agent_prompt传递自定义格式要求,该参数是控制解析代理行为的专属入口。
修改后的初始化代码:
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", agent_prompt=""" 你需要完成PDF到Markdown的解析,并执行以下后处理操作: - 将所有文本转换为大写。 - 将每个Markdown标题的层级提升一级(# -> ##, ## -> ###,以此类推)。 请严格按照要求输出最终的Markdown内容。 """ ) return parser
方法2:基础解析模式+本地后处理
如果代理模式的提示词仍然不可控,可以切换到parse_mode="markdown"基础解析模式,再在本地对生成的Markdown进行格式修正,这种方式稳定性更高。
示例代码:
from pathlib import Path from llama_parse import LlamaParse import re def setup_parser(api_key: str) -> LlamaParse: parser = LlamaParse( api_key=api_key, parse_mode="markdown", high_res_ocr=True, adaptive_long_table=True, outlined_table_extraction=True, output_tables_as_HTML=True, page_separator="\n\n" ) return parser def postprocess_markdown(md_content: str) -> str: # 提升所有标题层级 md_content = re.sub(r'^(#+)', r'\1#', md_content, flags=re.MULTILINE) # 转换文本为大写(保留HTML表格结构不修改) parts = re.split(r'(<table.*?</table>)', md_content, flags=re.DOTALL) processed_parts = [] for part in parts: if part.startswith('<table'): processed_parts.append(part) else: processed_parts.append(part.upper()) return ''.join(processed_parts) 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) # 应用本地后处理 processed_md = postprocess_markdown(md) out_dir.mkdir(parents=True, exist_ok=True) (out_dir / (pdf_path.stem + "_llama.md")).write_text(processed_md, encoding="utf-8") return True except Exception as e: print(f"解析过程中出错:{e}") return False
关键说明
parse_page_with_agent模式依赖LLM代理完成解析,agent_prompt是控制该代理行为的正确参数,system_prompt仅适用于非代理的基础解析模式。- 本地后处理的方式不受Llama Cloud端提示词逻辑限制,适合对格式有严格要求的场景。
内容的提问来源于stack exchange,提问作者Andjela Mihajlovic
相关产品推荐
相关产品推荐

