Добавление метаданных в результат набора навыков Azure AI Search

У меня есть следующий набор навыков aisearch, который берет документ из хранилища BLOB-объектов Azure и разбивает его на фрагменты, которые позже индексируются для поиска AI.

{
  "@odata.context": "https://ahaisearch.search.windows.net/$metadata#skillsets/$entity",
  "@odata.etag": "...",
  "name": "ai-product-skillset",
  "description": null,
  "skills": [
    {
      "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
      "name": "ai-product-skillset",
      "description": null,
      "context": "/document/content",
      "uri": "https://test.openai.azure.com/openai/preprocessing-jobs?api-version=2023-03-31-preview",
      "httpMethod": "POST",
      "timeout": "PT1M",
      "batchSize": 10,
      "degreeOfParallelism": 10,
      "authResourceId": null,
      "inputs": [
        {
          "name": "document_id",
          "source": "/document/document_id"
        },
        {
          "name": "filename",
          "source": "/document/filename"
        },
        {
          "name": "fieldname",
          "source": "='content'"
        },
        {
          "name": "text",
          "source": "/document/content"
        },
        {
          "name": "url",
          "source": "/document/url"
        }
      ],
      "outputs": [
        {
          "name": "recordId",
          "targetName": "recordId"
        }
      ],
      "httpHeaders": {
        "ingestion-request-id": "...",
        "original-request-id": "ai-product",
        "original-internal-id": "...",
        "num-tokens": "1024",
        "api-key": "...",
        "connection-string": "DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net",
        "container-name": "ai-product-chunks"
      },
      "authIdentity": null
    }
  ],
  "cognitiveServices": null,
  "knowledgeStore": null,
  "indexProjections": null,
  "encryptionKey": null
}

Я хочу добавить поле метаданных к результату, чтобы фрагменты файла результата создавались с такими метаданными, как originalFile : file_name.pdf. Возможно ли это сделать в наборе навыков или требуется дополнительный уровень?

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
136
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Задания предварительной обработки OpenAI https://test.openai.azure.com/openai/preprocessing-jobs?api-version=2023-03-31-preview выполняют только фрагментацию и возвращают только те фрагменты, в которых у вас не будет подробностей метаданных.

Итак, вы можете использовать собственный веб-API, который принимает содержимое документа, метаданные и т. д. и возвращает фрагмент и метаданные.

Ниже приведен пример кода приложения функции Azure, который вам нужно написать.

import azure.functions as func
import logging
import requests
 
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
 
@app.route(route = "http_trigger")
def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    
    #get the content and metadata from request.
    req_body = req.get_json()
    values = req_body.get('values')
    res=[]
    
    for i in values:
        tmp=i
        t = {
        'chunk': #Do chunking on  i['data']['content'],
        'originalFile':i['data']['metadata_filename']
        }
        tmp['data'] = t
        res.append(tmp)
    if res:
        return func.HttpResponse(json.dumps({"values": res}), mimetype = "application/json")

и выполнять сопоставления в индексаторе.

Обратитесь к этому решению стека о том, как сопоставить поля.

Здесь для каждого recordId вы получите несколько фрагментов. Чтобы получить отдельный фрагмент с именем файла, вы создаете вторичный индекс и выполняете индексные проекции. В этом случае вы возвращаете только чанк и метаданные, которые не нужны recordId.

Узнайте больше о индексной проекции здесь.

Спасибо! Это похоже на то, что у меня получилось)

Vlad 19.06.2024 13:05

Рад, что вы узнали об этом подходе, и надеюсь, что мое решение также помогло вам.

JayashankarGS 21.06.2024 11:58

Другие вопросы по теме