azure-search-openai-demo
微软官方 RAG 标杆示例:让企业文档开口说话的完整解决方案
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
微软官方 RAG 标杆示例:让企业文档开口说话的完整解决方案
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有遇到过这种情况——翻遍公司内部文档、Wiki、技术报告,找一个答案要花半小时?或者面对客户堆积如山的产品手册,根本不知道从哪里下手?对于企业来说,私域知识是一座金矿,但长期以来,如何让 AI "懂得" 这些内容并精准回答问题,一直是件门槛极高的事情。
azure-search-openai-demo 正是来解决这个问题的。这是一个由微软 Azure 官方维护的标杆级示例项目,展示了如何用 RAG(检索增强生成)架构,让 AI 能够像专家一样,基于你上传的私有文档进行智能问答。它不是玩具 demo,而是一个可以从零部署到 Azure 云环境、真正能跑在生产环境的完整解决方案。
图1:RAG 架构全览——从文档上传到智能问答的完整数据流
2023 年 ChatGPT 爆火后,所有人都意识到大语言模型的强大,但紧接着就遇到了一个灵魂拷问:怎么让它回答我公司的私有问题? 通用模型的训练数据有截止日期,有知识盲区,更不可能知道你公司内部的技术文档、产品手册或业务流程。
RAG(Retrieval-Augmented Generation,检索增强生成)应运而生。它的思路非常聪明:不做微调,而是在回答问题时,让 AI 先去检索相关的文档片段,再基于这些片段生成答案。相当于给 AI 装了一个实时搜索引擎,让它"现查资料"再"答题"。
这个项目正是 RAG 的最佳实践范本,由微软 Azure 官方团队维护,背后整合了 Azure AI Search(企业级搜索引擎)和 Azure OpenAI Service(GPT 系列大模型),是微软力推的 AI 原生应用标杆。
这个项目提供的是一套端到端的解决方案,涵盖了 RAG 流程的每一个环节:
文档处理与索引。用户上传文档(支持 PDF、Word、PPT、Markdown、TXT 等多种格式)后,系统通过 prepdocs.py 脚本对文档进行切分、向量化,并上传到 Azure AI Search 建立索引。这个过程全自动,文档越大、越多,检索效果越好。
多策略检索与问答。项目实现了多种检索策略,包括最基础的向量检索、关键词检索,以及更高级的 ChatReadRetrieveRead(RRR)链式思考方法——让 AI 先规划"需要查什么",再执行检索,最后综合答案。代码中甚至内置了 Reasoning(推理)模式的切换,允许用户选择低/中/高三档推理深度,平衡速度与质量。
多模态理解。项目支持 GPT-4V 多模态能力,可以理解文档中的图片和图表内容,并针对视觉元素提问。数据管道支持 Azure AI Content Understanding 高级特性,能对媒体内容进行深层理解。
访问控制(ACL)。企业场景下,不同人能看到不同范围的文档至关重要。项目支持基于 Azure AI Search ACL(访问控制列表)的细粒度权限控制,确保敏感文档只对授权人员可见。
对话历史。通过 Azure Cosmos DB 持久化聊天记录,支持多轮对话中的上下文理解,让 AI 记得之前的问答历史。
整体架构分为前后端两大块,每一块都体现了工程上的严谨考虑。
后端使用 Quart 框架(异步 Flask 替代品),运行在 Python 3.13 之上。Quart 支持 ASGI,能够处理高并发请求。项目使用 Gunicorn + Uvicorn Worker 做生产部署,并通过 custom_uvicorn_worker.py 做了性能优化。关键的依赖包括:azure-search-documents(搜索)、azure-openai(大模型)、opentelemetry(可观测性链路追踪)、quart-cors(跨域处理)。
前端采用 React 19 + TypeScript,UI 组件库使用了微软自家的 Fluent UI React,风格与企业级应用高度契合。构建工具是 Vite 6,开发体验流畅。国际化方面集成了 i18next,支持多语言切换。前端还使用了 react-markdown + remark-gfm 来渲染格式化的答案内容,包括代码高亮。
部署层面,项目通过 Azure Developer CLI (azd) 工具链实现基础设施即代码(IaC),底层使用 Bicep 模板在 Azure 上自动化创建所有云资源。项目支持两种部署路径:Azure Container Apps(默认推荐,自 2024 年 10 月起)和 Azure App Service(传统方案)。
对于开发者来说,最关心的还是"我能不能快速跑起来"。项目对开发体验做了精心设计。
本地开发依赖 azd up 命令——这是 Azure 官方推荐的"一键部署"方式。执行后,azd 会依次完成:创建 Azure 资源、构建搜索索引、部署前后端代码,最终打印出访问地址。README 中明确提示可能需要 5-10 分钟才能完全就绪。
如果只想本地调试,需要先在 Azure 上完成资源部署,然后用 azd env get-values 导出环境变量,再启动本地服务。开发服务器用 Vite 的热更新,前端修改即时生效。
本地容器化开发则借助 .devcontainer,在 VS Code Remote Containers 或 GitHub Codespace 中一键启动预配置的开发环境,Python 依赖、Node 版本等全部自动搞定。
尽管项目质量很高,也需要诚实地说说它的局限。
强依赖 Azure 云生态。整个方案的部署和运行都离不开 Azure 服务——没有 Azure 订阅,这个项目就跑不起来。对于不想上云或有多云需求的团队,这是根本性障碍。
成本不可忽视。Azure AI Search(尤其是启用语义搜索)和 Azure OpenAI 的 token 消耗,是持续性成本来源。README 专门有一篇文档讲"低成本部署",说明团队自己也意识到这个问题。项目没有提供纯本地运行(不依赖 Azure)的替代方案。
配置复杂度高。虽然 azd 把大部分复杂度封装了,但当需要自定义检索策略、调整模型参数或接入现有数据源时,涉及的环境变量和配置文件相当多,学习曲线不低。
文档质量问题。Demo 使用的 PDF 文档内容本身是 AI 生成的,这意味着用它测试出来的"效果很好",可能在真实企业场景(充满不规范格式、乱码、扫描件 PDF)中大打折扣。
这个项目最值得关注的,不只是代码本身,而是背后体现的微软 AI 应用方法论。
Azure 团队将 Agentic RAG、多策略检索、ACL 权限控制、对话历史、推理深度选择、多模态理解等企业级 AI 功能,封装成一套可复制的模板。本质上,这是一个"一键克隆"的企业 AI 解决方案——企业要上 AI 知识库,直接 fork 这个项目,改改配置,就能得到一个生产级别的系统。
从 Stars 增长曲线看,这个项目自 2023 年中 ChatGPT 发布后持续快速增长,至今已超过 7,600+ stars,是同类 Azure AI 示例中 star 最多的项目之一,代表了企业 RAG 应用的主流技术选型方向。
图2:最终用户看到的 Chat 界面,支持多轮对话和引用来源跳转
图3:文档处理与索引管道,支持多格式文档的自动化解析与向量化
如果你正在为企业构建 AI 知识库,或希望深入理解 RAG 在生产环境中的工程实现,这个项目是必读范本。它的代码质量高、文档详尽、架构清晰,是 Azure AI 生态中最值得学习的开源示例之一。