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

Azure AI Search中SharePoint PDF按页拆分及页码获取问题

解决SharePoint PDF文件按页拆分并获取页码用于Azure AI Search的问题

一、修复当前自定义技能的问题

你遇到的核心问题是从SharePoint获取的内容未以二进制形式传入自定义技能,同时代码未处理WebApiSkill的标准请求格式。按以下步骤调整即可解决:

1. 配置索引器传递原始二进制内容

在Azure AI Search的SharePoint索引器配置中,将parsingMode设置为binary,确保索引器将PDF的原始二进制数据(而非提取后的纯文本)传递到技能管道中。

2. 调整自定义技能的Azure Function代码

WebApiSkill发送的请求遵循固定格式(包含values数组,每个元素含recordId和data字段),且二进制内容会被编码为Base64字符串。修改后的代码如下:

import fitz
import json
import base64

def main(req):
    try:
        req_body = req.get_json()
        values = req_body.get('values', [])
        results = []

        for value in values:
            record_id = value.get('recordId')
            data = value.get('data', {})
            pdf_base64 = data.get('pdf_binary')

            if not pdf_base64:
                results.append({
                    "recordId": record_id,
                    "data": {},
                    "errors": [{"message": "缺少pdf_binary输入字段"}],
                    "warnings": []
                })
                continue
            
            # 解码Base64为二进制PDF数据
            pdf_bytes = base64.b64decode(pdf_base64)
            pdf_document = fitz.open(stream=pdf_bytes, filetype="pdf")
            pages = []
            
            for page_num in range(len(pdf_document)):
                page = pdf_document.load_page(page_num)
                text = page.get_text("text")
                pages.append({
                    "page_number": page_num + 1,
                    "content": text
                })
            
            results.append({
                "recordId": record_id,
                "data": {"pages": pages},
                "errors": [],
                "warnings": []
            })
        
        return json.dumps({"values": results})
    except Exception as e:
        return json.dumps({
            "values": [{
                "recordId": "",
                "data": {},
                "errors": [{"message": str(e)}],
                "warnings": []
            }]
        })

3. 配置WebApiSkill的输入

在技能集的WebApiSkill配置中,将输入字段pdf_binary指向/document(原始二进制文档对象),确保二进制数据被传入自定义技能。

二、替代方案:使用Azure Form Recognizer技能

如果不想维护自定义代码,可直接使用Azure Form Recognizer的Layout技能,它能自动提取PDF每页的文本内容并附带页码:

  • 在技能集中添加Form Recognizer技能,选择Layout模型。
  • 配置技能返回pages字段,该字段包含每页的pageNumber和content信息。
  • 后续可基于返回的分页内容进一步分块,同时保留页码字段用于索引和检索。

三、其他思路

若需结合SplitSkill的分块能力,可先通过Form Recognizer或自定义技能提取全文档的文本-页码映射,再将SplitSkill拆分的文本块与对应页码关联。但这种方法复杂度较高,不如直接按页拆分后再分块高效。

内容的提问来源于stack exchange,提问作者Jose LHS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 03:15:12