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

如何在azure-search-openai-demo中实现单文件搜索?

如何将azure-search-openai-demo的搜索范围限制为单个文件

要实现仅搜索指定单个文件,核心是给Azure Cognitive Search的查询添加文件名筛选条件,需从「前端传参」和「后端搜索逻辑修改」两部分入手:

1. 前端请求添加目标文件名参数

调用/chat_stream接口时,在请求JSON的context.overrides中新增target_filename字段,指定要搜索的完整文件名(含扩展名,比如annual-report.pdf):

{
  "messages": [{"role": "user", "content": "请提炼这份文件的核心观点"}],
  "context": {
    "overrides": {
      "target_filename": "annual-report.pdf"
    }
  }
}

2. 后端修改搜索逻辑

步骤1:确保参数传递

你提供的chat_stream函数已将context参数传递给approach.run_stream,无需修改这部分代码,确保target_filename能被后续搜索逻辑读取即可。

步骤2:给搜索查询添加筛选条件

找到对应Approach类的搜索实现代码(通常在approaches/目录下,比如chat_read_retrieve_read.py的_search方法),添加筛选逻辑:

async def _search(self, query_text: str, context: dict) -> List[Document]:
    # 获取前端传入的目标文件名
    target_filename = context.get("overrides", {}).get("target_filename")
    
    # 构建筛选表达式:Azure Search默认用metadata_storage_name存储Blob文件名
    filter_expr = None
    if target_filename:
        # 转义文件名中的单引号,避免搜索语法错误
        escaped_filename = target_filename.replace("'", "''")
        filter_expr = f"metadata_storage_name eq '{escaped_filename}'"
    
    # 执行带筛选条件的搜索
    results = await self.search_client.search(
        query_text,
        top=self.top,
        filter=filter_expr,  # 新增筛选参数
        query_type="semantic",
        semantic_configuration_name=self.semantic_config_name,
        query_caption="extractive",
        query_answer="extractive",
    )
    # 后续结果处理代码...

关键说明

  • Azure Cognitive Search索引Blob存储时,默认会将Blob文件名存入metadata_storage_name字段,用该字段筛选最准确;若你自定义了文件名索引字段,替换为对应字段名即可。
  • 保留兼容逻辑:当未传入target_filename时,filter_expr为None,会默认搜索所有文件,不影响原有功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:05:14