如果你不会写代码,不想用开发框架能不能实现私有数据问答功能呢?
微软在 6月20日给出了答案,推出了基于私有数据的Azure OpenAI 功能。
我们现在可以直接在 Azure OpenAI Studio 中,通过 UI 界面连接你的数据源。
之后你再通过 API 访问 Azure OpenAI 的模型,即可实现私有数据问答。
让我们来一起看看,基于 Azure OpenAI Service 实现私有数据 GPT 是多么简单。
配置私有数据
首先进入到你的 Azure OpenAI Studio 中,在你已经部署了一个 GPT 聊天模型的情况下,你可以在操场中看到聊天选项,点击后,在助理设置中,你会发现一个新的配置【Add your data】
在该配置中,你可以点击【Add a data source】来添加自己的数据源。
你可以直接选择来自 Azure 认知搜索中的内容,已经存放在 Azure Blob 中的内容,或者手动上传文件,文件类型支持 .txt, .md, .html, Word, PowerPoint 和 PDF 文件。
(但这三个选项都会依赖于你的 Azure 认知搜索和 Azure Blob 资源,因为私有数据 GPT 的能力是依托于这两个服务的。)
比如我这里已经有了一个现成的 Blob,其中存储了一些规章制度的 word 文件。
那我在配置 Azure OpenAI 私有数据的时候 data source 就可以选择 【Azure Blob Storage】,之后会让我选择对应的存储账户,以及对应的容器。
但这时候你会发现,Azure OpenAI 还会让我选择一个 Azure 认知搜索资源。
这是因为微软在 Azure OpenAI 上实现的私有数据方案,是利用 Azure 认知搜索来把用户的问题和相似的文档匹配上的,这样才可以把对应相关的文档一起当作上下文给到LLM 。
那我们就去创建一个 Azure 认知搜索(记得不要选择免费层,免费层不支持该功能,别问我怎么知道的……)
创建成功后,导入数据。
为数据源起个名字,然后再连接字符串中选择现有连接,找到刚刚的 gptfolder blob 以及对应的容器。
不用添加认知技能,直接跳转到自定义目标索引的部分。
最后创建索引器成功后, Azure 认知搜索部分就配置完了。
之后回到 Azure OpenAI Studio ,刷新页面,就能看到你刚刚新建的 Azure 认知搜索了,选择该搜索,然后输入你新建的索引名称。
点击下一步,保存并关闭。
这时候你再去提问,Azure OpenAI 就会基于你存储在 Azure Blob 中的文档进行回答,并给出你当前问题的参考资料。
发布成 Web 应用
Azure OpenAI 还提供了另外一项服务:如果你觉得现在的模型比较OK ,你想让其他用户使用你的模型。
那你可以直接点击右上角的 Deploy to web ,将其发布为一个网页应用。
部署成功后,访问网页。
系统会要求你使用 Azure AD 登录账户。
登录成功后,你就可以对其进行提问,并将其分享给你的同事,让其快速体验 Azure OpenAI 和私有数据的魅力。
如果你觉得微软这个网页做的不错,那你可以看看 github。
这个网页应用的源码微软已经将其开源。
https://github.com/microsoft/sample-app-aoai-chatGPT/tree/main
你可以下载以后自己更改里面的代码进行部署。
同时你也可以看到他是如何调用 Azure OpenAI 让其能基于私有数据进行问答的。
通过 API 调用私有数据模型
这个 web 应用可以调用 API 实现私有数据问答,那么你自己的应用自然也可以。
比如我下图就是通过 Postman 直接用 API 的方式调用了 Azure OpenAI 模型,这时候模型返回给我的内容就是基于我私有数据进行的回答。
截至到2023年6月底,API 还不是很完善,后面微软会推出对应的 pyton sdk 来方便调用。
如果你现在想要调用,有几点需要注意。
API 请求地址
在请求地址中,需要替换你自己的Azure OpenAI 服务名字,你的 GPT 模型名字。另外需要注意在模型名字后面加上 /extensions/ 。以及最后的 api version 要是 2023-06-01-preview 版本
Header 参数
Header 中需要设置 api-key 和chatgpt_key , 这两个使用的都是你的 AzureOpenAI 密钥。
另外还需要有个 chatgpt_url,这里你可以看我的截图,然后把其中的 AzureOpenAI 服务名字,以及模型名字替换成自己的,其他的不用改。
Body 参数
在 Body 参数中,与以往 Azure OpenAI 的调用不同,针对私有数据,你需要额外配置 dataSources ,在 DataSources 中按下图进行配置你的认知搜索相关字段。
需要注意的是,这里的 key 是认知搜索的管理密钥,并不是查询密钥。
这样你就可以完全在 Azure 上通过 UI 界面来进行私有数据的配置,另外如果你希望让 API 可以跟 ChatGPT 一样,一个字一个字蹦出来,那么只需要在配置时加上 stream = true
总结
微软实现该功能的原理,和我上期提到的解决思路基本一致。只不过他是用 Azure 认知搜索来代替了 Embedding 向量搜索。两种方式各有利弊,大家可以根据实际需求和情况试验一下哪种方法更适合你的场景。
另外如果你想提高 Azure OpenAI 私有数据回答的准确性,可以考虑使用 Azure 认知搜索中的语义搜索,这样准确度会提高。