在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)
具体困惑点
- 我确认用认知搜索内置PDF技能提取时已经输出了
pageNumber字段,但自定义Skill的请求data里就是找不到,是不是技能定义里参数传递漏了? - 现在经常返回500错误,除了页码获取的问题,我的代码还有哪些不符合认知搜索自定义Skill规范的地方?
- 如果一个页面的文本被拆成多个块,怎么保证每个块都能关联到对应的原始页码?
有没有大佬遇到过类似场景,麻烦指点一下,感激不尽!
备注:内容来源于stack exchange,提问作者Mike B
相关产品推荐
相关产品推荐

