В настоящее время я реализую RAG в Azure, используя OpenAI и Azure AI Search, ранее известные как Cognitive Services. У меня есть около 50–65 файлов JSON, которые мне нужно найти в корпоративных данных. Оказывается, при ссылке на чат-бот я получаю только текст «цитата» и пытаюсь получить DOI, который представляет собой URL-адрес онлайн-документа, и название научной статьи. Эти файлы сохраняются в формате .txt.
Я отформатировал свой файл JSON таким образом, что ключи «контент» и «заголовок» — единственные, по которым я хочу выполнить семантический поиск, а также сделать их доступными для извлечения, в то время как я просто хочу, чтобы DOI (URL) был доступным для извлечения.
{
"content": "The human eye is a complex organ responsible for vision, capturing light and converting it into neural signals for the brain to interpret. It consists of multiple parts, including the cornea, lens, and retina, each playing a vital role in the process of seeing.",
"date": "2023-07-15",
"Title": "The Magic of Vision",
"editorial_house": "MIT Research Meds and Public Health",
"doi": "https://doi.org/10.1234",
"author": "Dr. John Mayer"
}
Тем не менее, когда я нахожусь на странице поиска Azure AI, мне никогда не удается выбрать другие поля в метаданных:
Как вы можете видеть, появляется только «контент», и я все еще получаю эту непривлекательную цитату в нижних ссылках моих поисков. Как я могу сделать так, чтобы мои данные можно было получить так, как я хочу?
Поскольку я не использую для этого код, а только веб-версию Azure Studio, я не уверен, что единственный способ сделать это — использовать код.
Мой желаемый результат выглядит примерно так:
Это возможно? Возможно ли использовать студию Azure или просто писать код?
Я настраиваю пользовательские сопоставления следующим образом:
Тем не менее, хотя я получаю правильный заголовок и содержание панели цитирования, мне не хватает DOI, который является URL-адресом публикации. Я что-то делаю не так??


Импортируйте данные и определите индекс в обоих направлениях.
На портале после того, как вы нажмете на импорт данных, вы получите возможность подключиться к вашим данным, где вам необходимо настроить режим анализа как json.

тогда вы получите правильные поля.

Здесь вы можете удалить любое ненужное поле.
Другой метод — создать индекс с собственным определением, как показано ниже.
[
{
"name": "content",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": "standard.lucene",
"normalizer": null,
"dimensions": null,
"vectorSearchProfile": null,
"vectorEncoding": null,
"synonymMaps": []
},
{
"name": "date",
"type": "Edm.DateTimeOffset",
"searchable": false,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"normalizer": null,
"dimensions": null,
"vectorSearchProfile": null,
"vectorEncoding": null,
"synonymMaps": []
},
{
"name": "Title",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": "standard.lucene",
"normalizer": null,
"dimensions": null,
"vectorSearchProfile": null,
"vectorEncoding": null,
"synonymMaps": []
},
{
"name": "editorial_house",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": "standard.lucene",
"normalizer": null,
"dimensions": null,
"vectorSearchProfile": null,
"vectorEncoding": null,
"synonymMaps": []
},
{
"name": "doi",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": "standard.lucene",
"normalizer": null,
"dimensions": null,
"vectorSearchProfile": null,
"vectorEncoding": null,
"synonymMaps": []
},
{
"name": "author",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": "standard.lucene",
"normalizer": null,
"dimensions": null,
"vectorSearchProfile": null,
"vectorEncoding": null,
"synonymMaps": []
},
{
"name": "metadata_storage_size",
"type": "Edm.Int64",
"searchable": false,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"normalizer": null,
"dimensions": null,
"vectorSearchProfile": null,
"vectorEncoding": null,
"synonymMaps": []
},
{
"name": "metadata_storage_path",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false,
"key": true,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": "standard.lucene",
"normalizer": null,
"dimensions": null,
"vectorSearchProfile": null,
"vectorEncoding": null,
"synonymMaps": []
}
]
затем настройте индексатор, как показано ниже.

После сохранения перезагрузитесь и запустите индексатор.
На портале при создании индекса вам нужно добавить туда. В SDK Python есть отдельный пакет.
Джей, извини, что беспокою тебя последним вопросом, посмотри, что на панели цитирования я не могу найти DOI, хотя я сопоставил его с полем DOI, я делаю что-то не так?
Здесь цитаты дают вам имя файла, а не URL-адрес doi. Это поведение по умолчанию. Попробуйте сопоставить имя файла с полем doi.
Нет, нет... в моей цитате указано правильное название, но я хочу, чтобы DOI находился на панели цитат под заголовком, возможно ли это? посмотрите на мой ожидаемый результат... где DOI находится под заголовком, возможно ли это?
Попробуйте сопоставить имя файла с doi в разделе пользовательского сопоставления.
Джей, это потрясающе! Я вижу, что это работает для вас, так что, должно быть, у вас плохая кодировка или что-то в этом роде. Джей огромное спасибо за это УДИВИТЕЛЬНОЕ объяснение и за то, что вы потратили время! У меня последний вопрос: код, похожий на dict, который вы любезно предоставили, должен использоваться в Python при перехвате с помощью Azure Blob, или мне следует использовать его в студии поиска Azure AI??