性能优化提示
在某些场景下,需要仔细设计数据模式和提取工作流。当您的用例属于以下场景之一时,遵循这些性能提示将帮助您理解大语言模型的局限性,并获得良好的提取结果。
情境:当处理包含重复信息或大量相似实体实例的长篇文档(50页以上)时,您需要确保提取的全面性和准确性。
实现最佳性能的最佳实践:
- 使用针对性提取: 设计提取特定、明确定义字段的架构,而非详尽无遗的列表
- 实施文档分块: 将大型文档按逻辑划分成若干部分(按章节、段落或主题),并分别执行提取操作
- 利用基于页面的提取:如果每个页面包含一个待提取的实体,请使用
PER_PAGE提取目标单独处理每个页面以实现全面覆盖。 - 应用页面范围筛选:使用
page_range选项来专注于目标数据所在的特定区域
应避免的反模式:
- 请求对非常长的文档进行详尽枚举(例如,“从这份100页的目录中提取所有产品名称”)
- 使用过于宽泛、未定义且无结构或限制的提取目标
- 将整个长文档作为单个提取任务处理,而不考虑上下文限制
模式设计示例:
# ❌ Problematic: Asking for exhaustive enumeration on a large documentproblematic_schema = { "all_product_names": { "type": "array", "description": "Every single product mentioned anywhere in this document" }}
# ✅ Better: Targeted, structured extractionbetter_schema = { "primary_products": { "type": "array", "description": "The main 3-5 products featured in this section", }, "product_category": { "type": "string", "description": "The category this section focuses on" }}表格数据转换(CSV/Excel)
Section titled “Tabular Data Transformation (CSV/Excel)”情境:在处理电子表格或CSV文件时,您需要提取并转换结构化数据,同时保持准确性和全面性。
按表大小划分的性能指南:
- 小型表格(少于50行):直接处理,效果极佳
- 中等表格(50-100行):直接处理但需彻底验证
- 大型表格(超过100行): 使用批处理策略以获得最佳结果
实现最佳性能的最佳实践:
- 实施批量处理:将大型表格分成较小的可管理块进行处理(每次处理20-50行)
- 专注于表头/元数据提取:提取表格结构、列定义和摘要信息,以实现全面理解
- 使用基于样本的处理: 在处理大规模数据前,先处理代表性样本来验证您的方法
- 与传统工具结合: 使用 LlamaExtract 进行智能提取,使用 pandas/SQL 进行大规模转换
- 增量验证: 在处理完整数据集之前,先对小批量数据进行提取逻辑测试
应避免的反模式:
- 在单个提取任务中处理数百或数千行数据
- 尝试在不进行批处理的情况下转换海量数据集的每一行
- 使用 LlamaExtract 处理纯计算任务,无需语言理解
大型表格的最优工作流程:
# ✅ Process a large CSV in batchesdef process_large_csv(csv_file, batch_size=50): results = []
for i in range(0, len(csv_data), batch_size): batch = csv_data[i:i+batch_size] # Convert batch to document format result = agent.extract(batch) results.append(result)
return combine_results(results)情境:在创建提取模式时,您希望捕获复杂的业务逻辑和数据转换,同时确保可靠、一致的结果。
实现最佳性能的最佳实践:
- 保持提取简单且专注:设计能够提取干净、结构化数据的字段,无需复杂计算
- 分离提取与转换: 在提取后,在您的应用程序代码中处理业务逻辑、计算和复杂规则
- 使用清晰、单一用途的描述:每个字段应有一个明确、定义清晰的提取目标
- 提供具体示例: 当预期格式可能不明确时,在字段描述中包含具体示例
- 迭代测试: 从简单模式开始,逐步增加复杂度并验证结果
应避免的反模式:
- 在字段描述中直接嵌入复杂的条件逻辑
- 请求需要多个决策点的计算值
- 创建试图同时执行多个操作的字段
- 在提取模式中使用过于复杂的业务规则
模式设计示例:
# ❌ Problematic: Too much logic in the field descriptionproblematic_field = { "calculated_score": { "type": "number", "description": "If revenue > 1M, multiply by 0.8, else if revenue < 500K multiply by 1.2, otherwise use the base score from table 3, but only if the date is after 2020 and the category is not 'exempt'" }}哪些方法效果更好:
# ✅ Better: Simple extraction, handle logic separatelybetter_schema = { "revenue": { "type": "number", "description": "Total revenue in dollars" }, "base_score": { "type": "number", "description": "Base score value from the scoring table" }, "date": { "type": "string", "description": "Date in YYYY-MM-DD format" }, "category": { "type": "string", "description": "Business category" }}
# Then handle calculations in your application code:def calculate_final_score(extracted_data): revenue = extracted_data["revenue"] if revenue > 1000000: return extracted_data["base_score"] * 0.8 elif revenue < 500000: return extracted_data["base_score"] * 1.2 else: return extracted_data["base_score"]推荐方法:首先设计提取模式以捕获清晰的结构化数据,然后在应用程序代码中实现业务逻辑和复杂转换,以实现最高的可靠性和可维护性。
为达到最佳提取成功率:
- 从小规模开始并迭代: 在扩展规模之前,先从数据子集开始验证您的提取方法
- 设计清晰、聚焦的模式:明确定义您想要提取的内容,而非试图捕获“所有内容”。请参阅模式设计章节。
- 利用文档结构: 使用页面范围、章节和分块策略来优化处理
- 全面测试: 在不同文档类型和边界情况下验证您的模式
- 策略性组合工具: 使用 LlamaExtract 进行智能内容理解,传统工具进行大规模数据处理
- 监控与调整: 持续评估提取质量,并根据实际表现调整您的方法
请记住: LlamaExtract 擅长智能理解和结构化文档内容。在使用补充工具进行计算任务和大规模处理时,请专注于发挥这一优势。