gpt4 book ai didi

python-3.x - 为什么 Azure 认知搜索 Python SDK 不返回 @search.answers arraya,而 API 却返回?

转载 作者:行者123 更新时间:2023-12-03 06:06:50 25 4
gpt4 key购买 nike

我在使用 Azure 认知搜索 Python SDK“azure-search-documents 11.3.0b6”的 Beta 版时遇到问题,该 SDK 可用于查询 Azure 认知搜索索引并提供结果,包括相关内容和可以回答的简短文本段落查询(如果其格式为问题)。

当使用 POSTMAN 直接查询 API 时,它会在名为“@search.answers”的数组中提供答案,但是当使用相同的参数和查询时,我在结果中看不到答案。 SDK 是否存在已知问题,因为它是测试版,或者有人有一个工作版本可以告诉我我做错了什么?谢谢!

索引定义

{
"@odata.context": "https://<servicename>.search.windows.net/$metadata#indexes/$entity",
"@odata.etag": "\"0x8DBC386F9BFC9DA\"",
"name": "<indexname>",
"defaultScoringProfile": null,
"fields": [
{
"name": "id",
"type": "Edm.String",
"searchable": false,
"filterable": true,
"retrievable": true,
"sortable": true,
"facetable": true,
"key": true,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"synonymMaps": []
},
{
"name": "metadata_spo_item_name",
"type": "Edm.String",
"searchable": true,
"filterable": true,
"retrievable": true,
"sortable": true,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"synonymMaps": []
},
{
"name": "metadata_spo_item_path",
"type": "Edm.String",
"searchable": false,
"filterable": false,
"retrievable": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"synonymMaps": []
},
{
"name": "metadata_spo_item_content_type",
"type": "Edm.String",
"searchable": false,
"filterable": true,
"retrievable": true,
"sortable": false,
"facetable": true,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"synonymMaps": []
},
{
"name": "metadata_spo_item_last_modified",
"type": "Edm.DateTimeOffset",
"searchable": false,
"filterable": false,
"retrievable": true,
"sortable": true,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"synonymMaps": []
},
{
"name": "metadata_spo_item_size",
"type": "Edm.Int64",
"searchable": false,
"filterable": false,
"retrievable": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"synonymMaps": []
},
{
"name": "metadata_spo_item_weburi",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"synonymMaps": []
},
{
"name": "content",
"type": "Edm.String",
"searchable": true,
"filterable": false,
"retrievable": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"synonymMaps": []
}
],
"scoringProfiles": [],
"corsOptions": null,
"suggesters": [
{
"name": "sg",
"searchMode": "analyzingInfixMatching",
"sourceFields": [
"metadata_spo_item_name"
]
}
],
"analyzers": [],
"tokenizers": [],
"tokenFilters": [],
"charFilters": [],
"encryptionKey": null,
"similarity": {
"@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
"k1": null,
"b": null
}

}

POSTMAN API 配置和结果 Screenshot of POSTMAN body and results

Python 代码和结果

import os

# load classes from libraries
from dotenv import load_dotenv
from typing import cast
from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient
load_dotenv()

# Load the environment variables
index_name = cast(str, os.getenv("SEARCH_INDEX_NAME"))
endpoint_name = cast(str, os.getenv("SEARCH_ENDPOINT"))
key = cast(str, os.getenv("SEARCH_API_KEY"))

# search function configured with semanatic search configuration
def search(event=None):
search_query = "what is a service that provides site recovery"
search_client = SearchClient(endpoint_name, index_name, AzureKeyCredential(key))
results = search_client.search(
search_text=search_query,
query_speller="lexicon",
query_type="semantic",
semantic_configuration_name="Pilot Semantic",
query_answer="extractive",
query_answer_count=1,
query_caption="extractive",
query_caption_highlight=True,
query_language="en-us",
search_mode="any",
include_total_count=True,
top=1,
select="metadata_spo_item_name"
)
for result in results:
#content = result["content"]
#truncated_content = (content[:300] + '..') if len(content) > 100 else content
#print(truncated_content)
print(result)


if __name__ == "__main__":
search()

Screenshot of Python code and results

最佳答案

要使用 python SDK 获取 @search.answers,您可以在结果输出中使用 results.get_answers()

下面是从答案中获取文本并突出显示的示例代码片段:

semantic_answers = results.get_answers()
for answer in semantic_answers:
if answer.highlights:
print(f"Semantic Answer: {answer.highlights}")
else:
print(f"Semantic Answer: {answer.text}")
print(f"Semantic Answer Score: {answer.score}\n")

我已经使用了最新的测试版:azure-search-documents 11.4.0b8

使用上述SDK版本和代码,我能够得到所需的结果。 enter image description here

有关更多详细信息,您可以查看此 sample notebook.

关于python-3.x - 为什么 Azure 认知搜索 Python SDK 不返回 @search.answers arraya,而 API 却返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77222563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com