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

Azure RAG应用:Azure Cognitive Search JSON数组解析查询结果不一致

关于Azure Cognitive Search RAG应用查询准确性的问题

背景信息

  • 正在构建Azure检索增强生成(RAG)应用,基于Azure Cognitive Search处理学员JSON数据
  • 数据结构:每个JSON文件对应一个学员计划(如free-trainees-project-data.json、premium-trainees-project-data.json),采用JSON数组格式
  • Azure工作流程:JSON文件上传至Azure存储容器,配置Cognitive Search使用JSON Array Parsing模式解析数组,通过text-embedding-ada-003模型对overview字段做向量化

当前问题

查询返回结果不可靠,典型场景:

  • 查询「列出Starter计划中无任何学习路径或项目的用户」,返回错误或不完整列表
  • 查询「统计订阅Free计划的用户数量」,返回错误计数

已完成的排查步骤

  • 验证JSON数据结构及Search的JSON解析模式配置正确
  • 确认overview字段作为向量化目标的配置无误
  • 验证Azure Cognitive Search与OpenAI服务的连接正常

疑问

  1. JSON数据结构或向量化流程是否存在错误?
  2. 如何提升此类结构化查询场景下的准确性?

环境:集成OpenAI的Azure Cognitive Search,使用text-embedding-ada-003模型,已提供相关Java代码、Azure索引JSON配置及数据导入向量化截图。


技术建议

1. 排查数据结构与向量化流程的潜在问题

  • 字段映射与索引配置检查:
    • 确认索引中是否为计划类型(如Starter/Free)、学习路径/项目状态等结构化字段单独创建了可筛选、可聚合的字段(而非仅依赖overview的向量化结果)。如果这类字段未被正确索引为Edm.String(可筛选)或Edm.Int32(计数用),会导致结构化查询/统计依赖语义搜索,结果必然不准确。
    • 检查JSON Array Parsing是否正确将数组中的每个学员对象单独索引为文档,而非将整个JSON文件作为单个文档。可通过Search Explorer查看索引中的文档数量与实际学员总数是否匹配。
  • 向量化字段的适用性:
    overview字段适合语义检索,但结构化查询(如筛选计划类型、统计数量、判断是否为空)应依赖原生结构化字段,而非向量化结果。当前若仅对overview做向量化,未对计划、学习路径等字段建立结构化索引,会导致这类查询无法精准匹配。

2. 提升查询准确性的具体方案

  • 优化索引结构:
    • 为每个学员的计划类型(planType)、学习路径数量(learningPathsCount)、项目数量(projectsCount)等字段创建可筛选、可聚合的索引字段。例如:
      {
        "name": "planType",
        "type": "Edm.String",
        "filterable": true,
        "sortable": true,
        "facetable": true
      },
      {
        "name": "hasLearningPathsOrProjects",
        "type": "Edm.Boolean",
        "filterable": true,
        "sortable": true
      }
      
    • 若原始JSON中没有hasLearningPathsOrProjects这类衍生字段,可在数据导入时通过索引器的字段映射或自定义技能生成,或者在查询时通过$filter表达式判断(如learningPaths/any() eq false and projects/any() eq false,需确保数组字段支持过滤)。
  • 调整查询策略:
    • 对于结构化查询(如统计数量、精准筛选),直接使用Azure Cognitive Search的筛选器($filter)和聚合($count或facet),而非依赖语义搜索。例如:
      • 统计Free计划用户数:使用$filter=planType eq 'Free'&$count=true
      • 列出Starter计划无学习路径/项目的用户:使用$filter=planType eq 'Starter' and not learningPaths/any() and not projects/any()
    • 对于混合查询(既需要语义匹配又需要结构化筛选),结合$filter与语义搜索,先通过筛选器缩小范围,再做语义检索。
  • 验证索引器运行状态:
    查看索引器的运行日志,确认是否有文档导入失败、字段映射错误的情况。例如,若JSON中的planType字段存在大小写不一致(如free/Free),需在导入时统一格式,或在查询时使用大小写不敏感的筛选。
  • 向量化补充优化:
    若需要结合语义检索与结构化筛选,可将计划类型、学习路径状态等信息合并到overview字段中,或为结构化字段单独生成嵌入向量(多字段向量化),提升语义查询时的精准度。

内容的提问来源于stack exchange,提问作者Midlaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:32:44