You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:23:13