跳转到内容

性能优化提示

在某些场景下,需要仔细设计数据模式和提取工作流。当您的用例属于以下场景之一时,遵循这些性能提示将帮助您理解大语言模型的局限性,并获得良好的提取结果。

情境:当处理包含重复信息或大量相似实体实例的长篇文档(50页以上)时,您需要确保提取的全面性和准确性。

实现最佳性能的最佳实践:

  • 使用针对性提取: 设计提取特定、明确定义字段的架构,而非详尽无遗的列表
  • 实施文档分块: 将大型文档按逻辑划分成若干部分(按章节、段落或主题),并分别执行提取操作
  • 利用基于页面的提取:如果每个页面包含一个待提取的实体,请使用 PER_PAGE 提取目标单独处理每个页面以实现全面覆盖。
  • 应用页面范围筛选:使用 page_range 选项来专注于目标数据所在的特定区域

应避免的反模式:

  • 请求对非常长的文档进行详尽枚举(例如,“从这份100页的目录中提取所有产品名称”)
  • 使用过于宽泛、未定义且无结构或限制的提取目标
  • 将整个长文档作为单个提取任务处理,而不考虑上下文限制

模式设计示例:

# ❌ Problematic: Asking for exhaustive enumeration on a large document
problematic_schema = {
"all_product_names": {
"type": "array",
"description": "Every single product mentioned anywhere in this document"
}
}
# ✅ Better: Targeted, structured extraction
better_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文件时,您需要提取并转换结构化数据,同时保持准确性和全面性。

按表大小划分的性能指南:

  • 小型表格(少于50行):直接处理,效果极佳
  • 中等表格(50-100行):直接处理但需彻底验证
  • 大型表格(超过100行): 使用批处理策略以获得最佳结果

实现最佳性能的最佳实践:

  • 实施批量处理:将大型表格分成较小的可管理块进行处理(每次处理20-50行)
  • 专注于表头/元数据提取:提取表格结构、列定义和摘要信息,以实现全面理解
  • 使用基于样本的处理: 在处理大规模数据前,先处理代表性样本来验证您的方法
  • 与传统工具结合: 使用 LlamaExtract 进行智能提取,使用 pandas/SQL 进行大规模转换
  • 增量验证: 在处理完整数据集之前,先对小批量数据进行提取逻辑测试

应避免的反模式:

  • 在单个提取任务中处理数百或数千行数据
  • 尝试在不进行批处理的情况下转换海量数据集的每一行
  • 使用 LlamaExtract 处理纯计算任务,无需语言理解

大型表格的最优工作流程:

# ✅ Process a large CSV in batches
def 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 description
problematic_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 separately
better_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"]

推荐方法:首先设计提取模式以捕获清晰的结构化数据,然后在应用程序代码中实现业务逻辑和复杂转换,以实现最高的可靠性和可维护性。

为达到最佳提取成功率:

  1. 从小规模开始并迭代: 在扩展规模之前,先从数据子集开始验证您的提取方法
  2. 设计清晰、聚焦的模式:明确定义您想要提取的内容,而非试图捕获“所有内容”。请参阅模式设计章节
  3. 利用文档结构: 使用页面范围、章节和分块策略来优化处理
  4. 全面测试: 在不同文档类型和边界情况下验证您的模式
  5. 策略性组合工具: 使用 LlamaExtract 进行智能内容理解,传统工具进行大规模数据处理
  6. 监控与调整: 持续评估提取质量,并根据实际表现调整您的方法

请记住: LlamaExtract 擅长智能理解和结构化文档内容。在使用补充工具进行计算任务和大规模处理时,请专注于发挥这一优势。