You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vertex AI Search中layoutBasedChunkingConfig未遵循chunkSize的问题咨询

Vertex AI Search PDF分块配置不生效问题

问题现象

将PDF导入配置了layoutBasedChunkingConfig且chunkSize: 500的数据存储后,生成的分块远大于设置值,配置未生效:

--- Chunk 1 ---
Character Count: 11494
Page Range: 1 - 8
--- Chunk 2 ---
Character Count: 11837
Page Range: 8 - 16
--- Chunk 3 ---
Character Count: 10862
Page Range: 16 - 21

复现步骤

1. 创建数据存储

使用以下curl命令创建包含layoutBasedChunkingConfig和defaultParsingConfig的数据存储:

# PROJECT_ID 和 ACCESS_TOKEN 已预先配置
export DATA_STORE_ID="data-store-id"
export DISPLAY_NAME="data-store"

curl -X POST \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json; charset=utf-8" \
-H "x-goog-user-project: ${PROJECT_ID}" \
-d @- \
"https://discoveryengine.googleapis.com/v1/projects/${PROJECT_ID}/locations/global/collections/default_collection/dataStores?dataStoreId=${DATA_STORE_ID}" <<EOF
{
  "displayName": "${DISPLAY_NAME}",
  "industryVertical": "GENERIC",
  "solutionTypes": ["SOLUTION_TYPE_SEARCH"],
  "contentConfig": "CONTENT_REQUIRED",
  "documentProcessingConfig": {
    "defaultParsingConfig": {
      "layoutParsingConfig": {
        "enableTableAnnotation": true,
        "enableImageAnnotation": true
      }
    },
    "chunkingConfig": {
      "layoutBasedChunkingConfig": {
        "chunkSize": 500,
        "includeAncestorHeadings": true
      }
    }
  }
}
EOF

2. 导入文档

使用以下Python脚本通过JSONL文件导入PDF:

# test_import.py
import json
import uuid
from datetime import datetime, timezone
from google.cloud import discoveryengine_v1 as discoveryengine
from google.cloud import storage

# --- 常量 ---
PROJECT_ID = "your-gcp-project-id"
LOCATION = "global"
DATA_STORE_ID = "data-store-id"
GCS_URI = "gs://your-bucket/your-document.pdf"
ARCHIVE_BUCKET_NAME = "my-bucket" # 用于存储临时jsonl的Bucket

storage_client = storage.Client(project=PROJECT_ID)
client = discoveryengine.DocumentServiceClient()

# --- 生成与导入逻辑 ---
document_id = str(uuid.uuid4())
metadata = {
    "id": document_id,
    "content": {"mimeType": "application/pdf", "uri": GCS_URI},
    "structData": { "title": "Final Test Document" }
}

# 将元数据上传到临时GCS jsonl文件
bucket = storage_client.bucket(ARCHIVE_BUCKET_NAME)
temp_jsonl_filename = f"temp-{document_id}.jsonl"
blob = bucket.blob(temp_jsonl_filename)
blob.upload_from_string(json.dumps(metadata))
temp_jsonl_gcs_uri = f"gs://{ARCHIVE_BUCKET_NAME}/{temp_jsonl_filename}"

# 创建导入请求
gcs_source = discoveryengine.GcsSource(
    input_uris=[temp_jsonl_gcs_uri],
    data_schema="document"
)
parent_path = client.branch_path(
    project=PROJECT_ID,
    location=LOCATION,
    data_store=DATA_STORE_ID,
    branch="0"
)
request = discoveryengine.ImportDocumentsRequest(
    parent=parent_path,
    gcs_source=gcs_source,
    reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL,
)
operation = client.import_documents(request=request)
response = operation.result() # 执行无错误

# 清理临时文件
blob.delete()

预期结果

服务应生成多个大小接近chunkSize设置的500字符小分块。

问题

  1. layoutBasedChunkingConfig是否对特定PDF布局(如官方法律文档)不遵循chunkSize是已知限制?
  2. 是否存在遗漏的参数或设置,可实现更细粒度的分块?
  3. 若此行为属于服务限制,当前最佳实践是否是通过Python库等工具在外部预分块PDF,再将分块作为结构化数据(如structData.description字段)导入?

解答

1. 特定布局的分块限制

是的,layoutBasedChunkingConfig会优先保留文档的逻辑结构完整性,比如法律文档中连续的段落、表格或章节内容,不会强制拆分逻辑单元来满足chunkSize。如果PDF中存在大段无明确分隔(如无标题、段落间隔)的内容,服务会生成较大分块以避免破坏语义连贯性,这是已知的设计行为。

2. 更细粒度分块的配置选项

可以尝试补充以下配置:

  • 在layoutBasedChunkingConfig中添加chunkOverlap参数(如设为50),允许分块间有重叠,但这不会直接缩小分块尺寸;
  • 关闭includeAncestorHeadings,减少每个分块附带的标题内容,但仅适用于不需要上下文标题的场景;
  • 切换为fixedSizeChunkingConfig,强制按字符数拆分,不考虑文档布局。示例配置如下:
"chunkingConfig": {
  "fixedSizeChunkingConfig": {
    "chunkSize": 500,
    "chunkOverlap": 50
  }
}

注意:fixedSizeChunkingConfig会忽略文档布局,可能拆分表格、段落等逻辑单元,影响语义完整性。

3. 外部预分块的最佳实践

如果服务内置分块无法满足需求,外部预分块是当前推荐的方案。具体步骤:

  • 使用PyPDF2、pdfplumber等Python库提取PDF文本并按逻辑单元(段落、标题)拆分;
  • 将每个分块作为独立文档导入,或在structData中存储分块内容,同时保留元数据(如页码、标题);
  • 导入时设置documentProcessingConfig为SKIP_PROCESSING,避免服务再次分块。

内容的提问来源于stack exchange,提问作者Hirokazu Nakai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 14:41:01