使用Python调用Azure Cognitive Search向量搜索遇AttributeError问题求助
问题:Azure Cognitive Search向量搜索时出现AttributeError错误
问题代码
query = "What are the advantages of an open-source ai model?" search_client = SearchClient(AZURE_COGNITIVE_SEARCH_SERVICE_ENDPOINT, AZURE_COGNITIVE_SEARCH_INDEX_NAME, credential=AZURE_COGNITIVE_SEARCH_API_KEY) vector_query = VectorizableTextQuery(text=query, k=3, fields="content_vector") results = search_client.search( search_text=None, vector_queries= [vector_query], select=["title", "content_vector", "metadata"], ) for result in results: print(result)
错误信息
AttributeError Traceback (most recent call last) <ipython-input-32-a8dbad346de2> in <cell line: 16>() 14 print(results) 15 ---> 16 for result in results: 17 print(result) 14 frames /usr/local/lib/python3.10/dist-packages/azure/core/pipeline/policies/_authentication.py in on_request(self, request) 97 self._token = self._credential.get_token(*self._scopes, enable_cae=self._enable_cae) 98 else: ---> 99 self._token = self._credential.get_token(*self._scopes) 100 self._update_headers(request.http_request.headers, self._token.token) 101 AttributeError: 'str' object has no attribute 'get_token'
执行print(results)返回:
<iterator object azure.core.paging.ItemPaged at 0x7f17cf3af550>
版本信息
安装命令及版本:
!pip install azure-search-documents --pre --upgrade > Requirement already satisfied: azure-search-documents in > /usr/local/lib/python3.10/dist-packages (11.4.0b11)
解决方案
错误原因是新版azure-search-documents(11.x预览版及以上)的SearchClient不再接受直接传入字符串作为凭证,需要使用AzureKeyCredential类来封装API密钥。
修改步骤:
- 从
azure.core.credentials导入AzureKeyCredential - 初始化
search_client时,用AzureKeyCredential包裹你的API密钥
修改后的完整代码:
from azure.core.credentials import AzureKeyCredential from azure.search.documents import SearchClient from azure.search.documents.models import VectorizableTextQuery query = "What are the advantages of an open-source ai model?" # 用AzureKeyCredential包装API密钥 search_client = SearchClient( AZURE_COGNITIVE_SEARCH_SERVICE_ENDPOINT, AZURE_COGNITIVE_SEARCH_INDEX_NAME, credential=AzureKeyCredential(AZURE_COGNITIVE_SEARCH_API_KEY) ) vector_query = VectorizableTextQuery(text=query, k=3, fields="content_vector") results = search_client.search( search_text=None, vector_queries= [vector_query], select=["title", "content_vector", "metadata"], ) for result in results: print(result)
这样修改后,凭证会被正确识别为认证对象,不会再抛出get_token相关的属性错误。
内容的提问来源于stack exchange,提问作者STORM
相关产品推荐
相关产品推荐

