AzureOpenAI Vectorizer未自动生成titleVector等嵌入向量问题咨询
问题描述
尝试使用AzureOpenAI Vectorizer在Azure认知搜索索引中创建嵌入向量,但titleVector和contentVector字段的嵌入未成功生成。上传文档时仅上传了id、title、content字段,认为这些向量会由关联Vector Profile的Vectorizer自动生成,请问该理解是否正确?为何嵌入向量未生成?
原因分析
- 缺少向量字段与文本字段的映射配置:你的理解方向是对的——Azure认知搜索支持通过关联的Vectorizer自动从文本字段生成向量,但你没有在向量字段的定义中指定源文本字段,导致系统不知道要基于哪个字段生成对应向量。
- 索引key字段重复:索引中同时给
id和url字段设置了key=True,但Azure认知搜索索引仅允许存在一个key字段,该错误会导致索引初始化异常,间接影响向量生成逻辑。
修正方案
1. 核心修改点
- 移除
url字段的key=True配置,保留id作为唯一key字段 - 给
titleVector和contentVector添加source_field参数,指定对应的源文本字段
2. 修改后的creating_index函数代码
def creating_index(): # 声明索引字段,类似数据库表列,便于数据检索 fields=[ SimpleField( name="id", type=SearchFieldDataType.String, key=True, sortable=True, filterable=True, facetable=True ), SearchableField( name="title", type=SearchFieldDataType.String ), SearchableField( name="content", type=SearchFieldDataType.String ), SimpleField( name="url", type=SearchFieldDataType.String, sortable=True, filterable=True, facetable=True # 移除key=True,因为id已经是唯一key ), SearchField( name="titleVector", type=SearchFieldDataType.Collection(SearchFieldDataType.Single), searchable=True, vector_search_dimensions=1536, vector_search_profile_name="myHnswProfile", source_field="title" # 指定从title字段生成向量 ), SearchField( name="contentVector", type=SearchFieldDataType.Collection(SearchFieldDataType.Single), searchable=True, vector_search_dimensions=1536, vector_search_profile_name="myHnswProfile", source_field="content" # 指定从content字段生成向量 ), ] # 配置向量搜索 vector_search = VectorSearch( algorithms=[ HnswAlgorithmConfiguration( name="myHnsw" ) ], profiles=[ VectorSearchProfile( name="myHnswProfile", algorithm_configuration_name="myHnsw", vectorizer_name="myVectorizer" ) ], vectorizers=[ AzureOpenAIVectorizer( vectorizer_name="myVectorizer", parameters=AzureOpenAIVectorizerParameters( resource_url="https://genai-training-24.openai.azure.com/", deployment_name="text-embedding-ada-002", model_name="text-embedding-ada-002", api_key=".....048fc03" ) ) ] ) semantic_config = SemanticConfiguration( name="my-semantic-config", prioritized_fields=SemanticPrioritizedFields( title_field=SemanticField(field_name="title"), content_fields=[SemanticField(field_name="content")] ) ) # 创建语义搜索设置 semantic_search = SemanticSearch(configurations=[semantic_config]) # 创建带语义搜索的索引 index = SearchIndex(name="saravanan_index", fields=fields, vector_search=vector_search, semantic_search=semantic_search ) result = index_client.create_or_update_index(index) print(f'{result.name} created')
3. 验证说明
修改索引配置后,重新创建索引,再执行文档上传操作,Azure认知搜索会自动调用你配置的AzureOpenAI Vectorizer,基于title和content字段的内容生成对应的titleVector和contentVector,无需手动传入向量数据,你的初始理解这部分是正确的。
内容的提问来源于stack exchange,提问作者A V Saravanan
相关产品推荐
相关产品推荐

