当前位置:首页|资讯|OpenAI|ChatGPT

大模型前沿丨用语义内核和向量数据库构建 Azure OpenAI 智能应用强大效果

作者:微软中国MSDN发布时间:2023-05-17

原标题:大模型前沿丨用语义内核和向量数据库构建 Azure OpenAI 智能应用强大效果

关注我们

(本文阅读时间:10分钟)

ChatGPT 的爆红,唤醒了业内对于自然语言处理(NLP)应用的进一步开发需求,包括聊天检索、排名与推荐引擎、异常侦测以及语义检索等。也就是要进一步挖掘机器学习大语言模型(LLM)的性能。这需要利用大量的非结构化数据进行检索。

恰逢其会,向量数据库(Vector Database)本就是为了又快、又好地搜索、索引以及存储这些嵌入形式的非结构化数据,也正与 AI 领域的发展需求不谋而合。

向量数据库(Vector Database)、云端和语义内核(Semantic Kernel)这样的框架结合在一起,可以在构建 Azure OpenAI 智能应用时发挥强大的组合效果。

本文将带领各位开发者一起探索如何在微软智能云 Azure 中使用语义搜索和向量数据库 Qdrant,并集成语义内核,打造Azure OpenAI 智能应用解决方案。

#1

准备工作

查看以下清单,确保已满足所有要求:

#2

克隆 GitHub repo

导航到 GitHub repo,然后使用您最熟悉的方法克隆该 repo。笔者习惯使用命令行,所以将在 bash shell 中执行以下命令来进行克隆:

% git clone https://github.com/Azure-Samples/qdrant-azure.git

克隆好 repo,就可以创建一个 Azure 资源组整理将要创建的资源,然后在 Azure 云端运行 Qdrant。笔者选择使用 Azure CLI 在 bash 中执行以下命令:

% az group create --name az-qdrant-sk-rg --location eastus

成功后,它将返还一个 JSON 片段:

{

"id": "/subions/...

...

"type": ...

}

#3

创建 Azure 资源组

与 Azure SSH 密钥

在 Azure 门户中即可轻松创建 Azure 资源组。

执行以下命令,再在先前创建的资源组中创建一个 Azure SSH 密钥,稍后在部署时会用到:

% az sshkey create –name “qdrantSSHKey” –resource-group “<INSERT YOUR ResourceGroup>”

通过命令行或Azure Cloud Shell执行。同样,将返还一个JSON片段,格式如下:

{

“id”: “/subions/…

“type”: null

}

恭喜!你已在 Azure 资源组中成功创建了一个 SSH 密钥。

#4

部署 Qdrant

下一站,回到在浏览器中打开的 Azure GitHub repo 中的 Qdrant 页面。在 repo 的 README 文件中,有一个 ARM (Azure资源管理器)按钮。

点击 ARM 按钮,选择“在Azure中部署”,从而在 Azure 中创建一个 Kubernetes 集群来运行 Qdrant。 (注意:如果您已经设置了一个 AKS 集群或已有在本地运行的 K8s 集群,您可以跳过这一步。)

Azure 门户将打开一个自定义部署屏幕。使用资源组的下拉菜单选择之前创建的 Azure 资源组。为 DNS 前缀添加一个值/名称 (value/name),最后在SSH公钥源 (SSH public key source)选项下选择“使用存储在Azure中的现有密钥” ( Use an existing key stored in Azure)选项。最后在存储的密钥下拉菜单中选择创建好的 Azure SSH 密钥。

选择 "Review + Create"按钮,以验证您的部署,接下来只需选择"Create"按钮来部署用于 Qdrant 的 AKS 集群。

#5

将 Qdrant 部署到 AKS 集群

转到克隆 repo 的位置。从仓库的根目录,进入 Azure-Kubernetes-Svc目录。运行命令以获取本地存储的 AKS 凭据,并执行 Helm chart。如果对这些词汇感到陌生,不用担心,有一些脚本会为您完成所有繁重的工作。

要获取所需的工具 Kubectl Helm,以正确运行 Qdrant,请按照 repo 中提供的说明进行操作。

准备好工具就可以开始部署 Qdrant 到 AKS 集群了。使用 Azure CLI 在命令行中执行以下命令:

% az aks get-credentials --resource-group--name azqdrantcluster

(如果您使用了模板,azqdrantcluster将是您的AKS集群的名称)

然后,在命令行中执行以下 Kubectl 命令:

% kubectl get nodes

这将验证您是否可以访问您的集群,以及它是否正在成功运行。

最后,在您的集群上部署 Qdrant。导航到 qdrant-on-azure 文件夹,并运行以下命令。

% helm install azqdrant-sk ../qdrant-on-azure/ --create-namespace

或者,如果要使用自定义命名空间,可以运行以下命令:

% helm install azqdrant-sk ../qdrant-on-azure --namespace test-namespace --create-namespace

完成后,即可在 Azure 上成功运行 Qdrant。

通过运行 kubectl get services 命令,获取用于 Qdrant API 调用的 IP 地址。确保复制 azure-qdrant-loadbalancer 的 External-IP,因为这会在使用 Qdrant 与语义内核的最后一步中用到。请参考下面的截图示例。

默认命名空间

使用自定义命名空间

#6

测验 Qdrant 运行状况

笔者一直被教导:无论是在工作还是生活中,宁愿保险一些也不要冒险。因此,创建一个测试集合来验证 Qdrant 实例是否正在按预期运行,并保证其各项功能正常。

为了测试 Qdrant 是否成功运行,请在命令行中运行以下命令:

% curl -X PUT 'http:// <yourQDRANT-LOADBALANCER-EXTERNALIP-ADDRESS>:6333/collections/test_collection' \ -H 'Content-Type: application/json' \ --data-raw '{ "vectors": { "size": 4, "distance": "Dot" } }'

如果执行正确,您应该会看到一个显示类似于以下内容的 JSON 有效载荷:

请参考下面的截图示例,显示成功创建测试 Qdrant 集合的情况。

测试创建Qdrant集合

#7

在语义内核中运行 Qdrant

终于到了最后一步,手握 Qdrant IP 地址来到了语义内核的所在地。前往语义内核的 GitHub repo。

使用您选择的Git方法克隆该repo。按照自述文件中的步骤设置语义内核。

完成所有设置后即可运行使用语义内核和 Qdrant 内存的示例了。通过导航到 克隆语义内核 repo 的位置/目录下的 semantic-kernel/samples/dotnet/kernel-syntax-examples/文件夹,进入名为kernel-syntax-examples的文件夹。在该文件夹下,可以看到一个C#项目文件和一个带有标题Examples的代码文件列表。

在类似于Visual Studio Code的IDE中打开 KernelSyntaxExamples.csproj 项目,并找到 Example19_Qdrant.cs。这是将与创建的 Qdrant 实例一起运行的示例。

% dotnet user-secrets set "OPENAI_API_KEY" "<插入您的OpenAI API密钥>”

% dotnet user-secrets set "QDRANT_ENDPOINT" "http://<插入您的Qdrant External-IP地址>"

% dotnet user-secrets set "QDRANT_PORT" "6333"

在打开的项目中,转到Program.cs文件的Program类,您将看到可用的示例列表。批注排除(或删除)除了Example19_Qdrant.cs示例的命令之外的所有示例,该示例的代码行为await Example19_Qdrant.RunAsync;。

请参考下面的截图,以了解在Visual Studio Code中的外观。

编译代码并运行示例。您现在已成功地将Qdrant与语义内核实现了集成。

Tara E. Walker

微软首席软件工程师

Tara是微软首席软件工程师,就职于首席技术官办公室(OCTO),使用最新的人工智能/机器学习工作负载和尖端技术,用大模型开发、训练各类解决方案,包括云计算/云原生和机器人技术。


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1