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

在Azure认知搜索服务中存储PDF提取分块关联的文档页面时触发自定义WebApiSkill错误

在Azure认知搜索服务中存储PDF提取分块关联的文档页面时触发自定义WebApiSkill错误

各位大佬,我最近在Azure认知搜索里搭建PDF文档处理流水线,想用自定义WebApiSkill对PDF提取的文本做分块,同时把每个文本块和原始文档的页码关联起来,但运行时一直触发Skill错误——要么索引里的分块内容丢失页码信息,要么直接处理失败,头都大了。

先贴一下我的自定义Skill代码(目前还卡在页码关联和错误排查上):

import re
import json
import logging
import azure.functions as func

@app.route(route="CustomSplitSkill", auth_level=func.AuthLevel.FUNCTION)
def CustomSplitPageSkill(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    try:
        req_body = req.get_json()
    except ValueError:
        return func.HttpResponse("Invalid input", status_code=400)

    try:
        # 认知搜索要求请求体顶级key是'values'
        response_body = {"values": []}
        for value in req_body.get('values', []):
            recordId = value.get('recordId')
            text = value.get('data', {}).get('text', '')
            # 这里本来应该能拿到PDF提取的页码,但现在取不到
            page_number = value.get('data', {}).get('pageNumber', None)

            # 清洗文本:移除连续点、后续数字及标点换行,替换为空格
            cleaned_text = re.sub(r'\.+\d+[\.,!?\n]+', ' ', text)
            
            # 按段落分隔拆分文本
            chunks = re.split(r'\n\s*\n', cleaned_text)
            
            # 构造返回的分块结果
            for chunk in chunks:
                if chunk.strip():
                    # 问题核心:要么拿不到页码,要么构造响应时格式不对导致报错
                    response_entry = {
                        "recordId": recordId,
                        "data": {
                            "chunkedText": chunk.strip(),
                            "pageNumber": page_number
                        },
                        "errors": [],
                        "warnings": []
                    }
                    response_body["values"].append(response_entry)
        
        return func.HttpResponse(json.dumps(response_body), mimetype="application/json")
    except Exception as e:
        logging.error(f"Error processing request: {str(e)}")
        return func.HttpResponse(f"Internal server error: {str(e)}", status_code=500)

具体困惑点

  1. 我确认用认知搜索内置PDF技能提取时已经输出了pageNumber字段,但自定义Skill的请求data里就是找不到,是不是技能定义里参数传递漏了?
  2. 现在经常返回500错误,除了页码获取的问题,我的代码还有哪些不符合认知搜索自定义Skill规范的地方?
  3. 如果一个页面的文本被拆成多个块,怎么保证每个块都能关联到对应的原始页码?

有没有大佬遇到过类似场景,麻烦指点一下,感激不尽!

备注:内容来源于stack exchange,提问作者Mike B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:09:39