Code Monkey home page Code Monkey logo

ai-search-demo-guide's Introduction

AI Search和GPT Demo部署指南

这个demo是基于AI Search和GPT的实现的RAG问答系统,可以根据用户的输入,返回相应的答案。
https://github.com/Azure-Samples/azure-search-openai-demo/
如果代码更新太多,也可以参考这个fork: https://github.com/radezheng/azure-search-openai-demo

appcomponents

如果想了解实现原理,使用SDK体验Azure AI Search的不同搜索模式,可以参考这个demo notebook: https://github.com/radezheng/ai-search-rag-demo


这个demo会部署如下资源:
  • 一个AI Search实例 (可以提前建好)
  • 一个GPT实例 (可以提前建好),需要部署gpt-4(0613)和embedding模型
  • 一个Web App实例
  • Log Analytics工作区
  • Application Insights实例

环境准备

安装如下工具:

  • Azure Developer CLI
  • Python 3.9, 3.10, or 3.11
    • Important: Python and the pip package manager must be in the path in Windows for the setup scripts to work.
    • Important: 确认python版本 python --version
  • Node.js 14+
  • Git
  • Powershell 7+ (pwsh) - For Windows users only.
    • Important: 可认可以运行命令 pwsh.exe from a PowerShell terminal. If this fails, you likely need to upgrade PowerShell.

部署步骤

  1. 下载代码
git clone https://github.com/Azure-Samples/azure-search-openai-demo/
cd azure-search-openai-demo
#先清空data目录, 这里是样例的pdf文件。部署完Azure资源后,可以把自己的pdf文件放到这个目录下

mv data data.bak
mkdir data
  1. 配置参数
# 配置开发环境名称
azd env list

azd auth login
azd env new
#输入环境名称

#如果换了环境
azd env refresh -e <env-name>

环境信息会保存在项目的.azure/<env-name>/.env中
如果需要修改环境信息,可以直接修改.env文件,也可以使用azd env set命令

设置搜索对中文支持建议如下配置

azd env set AZURE_SEARCH_QUERY_LANGUAGE zh-CN
azd env set AZURE_SEARCH_QUERY_SPELLER none
azd env set AZURE_SEARCH_ANALYZER_NAME zh-Hans.lucene
#如果是开发/Demo环境,可以设置为Basic SKU
azd env set AZURE_SEARCH_SERVICE_SKU basic

需要设置为GPT-4模型。否则用默认用3.5的话,会出现请求错误。修改.env文件:

AZURE_OPENAI_CHATGPT_MODEL="gpt-4"

将gpt-4放到bicep的参数文件里。修改./infra/main.parameters.bicep, 在最后加上如下两个参数.
需要注意的是,这里的gpt-4是在0613版本的模型,需要指定支持的区域,参考: 模型可用区域
同时需要保证所在区域的gpt-4(0613)所剩的tpm大于30. 如果不是,可以在Azure Portal上手动修改已有部署。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    ...
    ,
    "openAiResourceGroupLocation": {
      "value": "${AZURE_OPENAI_RESOURCE_GROUP_LOCATION=swedencentral}"
    },
    "chatGptModelName": {
      "value": "${AZURE_OPENAI_CHATGPT_MODEL_NAME=gpt-4}"
    }
  }
}

如果是全部资源重新创建,就可以开始部署,要注意openai所在区域可用的tpm要大于30. 如果想用现有的资源,如以设置完后面的参数再部署
部署,按提示选择订阅和区域。如果出错,可以重复部署,会自动跳过已经部署的资源.

azd up

选择资源所在的区域,需要是支持Azure AI Search的区域。可以就近选Japan East. azd-up

选择openai所在的区域,需要是支持GPT-4的区域。可以就近Sweden Central. azd-up

部署过程 可以按提示打开URL,查看部署进度 azd-up

部署完成之后,会将web app的URL打印出来,可以直接点击打开. 刚开始的时候,可能会出现502错误,需要等待几分钟后再刷新。显示正常之后就可以增加文件索引。

增加文件索引

  1. 把pdf文件放到data目录下
  2. 运行prepdocs.ps1 (Windows) 脚本,生成索引文件。大概过程如下:
    • 读取.env文件,获取环境信息
    • 列出data目录下的pdf文件
    • 循环读取pdf文件,使用Document Intelligence服务识别出内容。默认是prebuild-layout模型
    • 读取完的pdf文档会在目录下生成md5文件,下次运行时会跳过。
    • 将识别的内容分段(secionts), 做embedding.
    • 将分好段的内容添加到AI Search的索引文件(如果不存在,会自动创建索引文件)
    • 将pdf文件上传到Azure Blob Storage, 用于后续引用(citation)
#Windows
cd <workspace_dir>/azure-search-openai-demo
./scripts/prepdocs.ps1

基于现有的资源部署(供参考)

  • 如果是现有的资源组
#Existing resource group
azd env set AZURE_RESOURCE_GROUP rg-aidemo
azd env set AZURE_LOCATION japaneast
  • 如果是现有的Azure AI Search资源
#Existing Azure AI Search resource

azd env set AZURE_SEARCH_SERVICE azsearch-jpe
azd env set AZURE_SEARCH_SERVICE_RESOURCE_GROUP cogsvc
azd env set AZURE_SEARCH_SERVICE_LOCATION japaneast
###如果是现有的Azure AI Search资源为basic,需要设置SKU为Basic. 默认是standard
azd env set AZURE_SEARCH_SERVICE_SKU basic
  • [不建议] 如果是现有的OpenAI资源。(这里比较容易出错,建设预留好gpt3.5和embedding的tpm, 重新创建完再改配置。否则需要改./infra/main.bicep里的参数与现有资源对应)
#Existing OpenAI resource
#Azure OpenAI:
azd env set AZURE_OPENAI_SERVICE aoaixxx-swc
azd env set AZURE_OPENAI_RESOURCE_GROUP cogsvc
azd env set AZURE_OPENAI_CHATGPT_DEPLOYMENT gpt-3.5-0613
azd env set AZURE_OPENAI_EMB_DEPLOYMENT emb002

ai-search-demo-guide's People

Contributors

radezheng avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.