当前位置: 首页 > article >正文

企业开通部署 Azure OpenAI 流程:如何创建一个AI聊天机器人

由于众所周知的原因,国内没法直接调用 OpenAI 接口。

下面我将演示企业如何开通 Azure OpenAI 服务,以及如何使用 C# 调用 Azure OpenAI 接口创建一个 Console 应用程序并实现聊天机器人功能。

1开通 Azure OpenAI 服务

要开通 Azure OpenAI 服务,前提是你得有一个国际信用卡(比如 Visa 或 MasterCard),然后在 Azure 国际版(azure.com)注册一个账号。如果你不是微软 MVP,最好用公司邮箱注册,否则无法申请开通 OpenAI 服务。

个人注册通道目前已经关闭,要注意。

如何解决?

GPT-4o / o1 企业免费测试入口:

Azure OpenAI 试用申请

完成账号注册和绑卡后,在“创建资源”里找到 OpenAI 服务,根据提示点击下面这个链接填写申请表单:

图片

或者直接访问这个链接:

https://aka.ms/oai/access

表单说明了 Azure OpenAI 服务目前只对企业或 MVP 开放,所以如果你不是 MVP 需要用公司的邮箱申请,个人 Gmail 或 Outlook 等邮箱都会被直接拒绝。

图片

表单中涉及到公司信息部分,最好如实填写,不然也很可能被拒。填写完提交后,一般两个工作日内就会收到邮件通知。

2创建 Azure OpenAI 服务

当你的申请通过后,就可以到 Azure 上创建 OpenAI 服务了。点击“创建资源”,搜索找到“OpenAI”:

图片

点击进入,填写这一页的信息:

图片

然后一直下一步就可以完成创建了。

服务创建好以后,还要部署一个 ChatGPT 模型。在你创建好的 OpenAI 服务中,依次点击“模型部署”-“创建”,在弹出的对话框中填写模型名称,选择 gpt-35-turbo 模型:

图片

再到“密钥和终点”复制保存 API 要用的密钥和终结点:

图片

3创建 Console 聊天应用程序

使用 .NET 的 CLI 命令行工具或通过 IDE 创建一个 Console 应用程序:

dotnet new console -o ChatConsole
cd ChatConsole

安装两个需要用到的 Nuget 包:

dotnet add package Microsoft.Extensions.Configuration.UserSecrets
dotnet add package Azure.AI.OpenAI --prerelease

第一个包是用来管理本地密钥的,请不要直接在代码中填写密码。第二个包是 Azure 官方的 OpenAI API 库,目前只有预览版。

安装好后,通过 user-secrets 添加好下面三个配置,分别是上面创建好的终结点、密钥和模型名称:

dotnet user-secrets init
dotnet user-secrets set Azure:OpenAI:Endpoint [YOUR_AZURE_OPENAI_ENDPOINT]
dotnet user-secrets set Azure:OpenAI:ApiKey [YOUR_AZURE_OPENAI_APIKEY]
dotnet user-secrets set Azure:OpenAI:ModelName [YOUR_MODEL_DEPLOYMENT]

实现聊天功能有两种方式。一种是非流式响应,即一次性返回所有文字;另一种是流式响应,即一个字或几个字地返回,是最常用的方式。流式响应的好处是第一时间响应用户请求,在用户阅读的同时逐渐响应后面的内容,体验更佳。这两种方式的实现,请参考 Azure OpenAI API 文档:

https://learn.microsoft.com/en-us/azure/cognitive-services/openai/chatgpt-quickstart

下面以流式响应为例,实现一个 Console 版本的聊天机器人。编辑 Program.cs 文件,完整参考代码如下:

using Azure;
using Azure.AI.OpenAI;
using Microsoft.Extensions.Configuration;
using System.Text;

Console.OutputEncoding = Encoding.UTF8;

var configuration = new ConfigurationBuilder()
    .AddUserSecrets<Program>()
    .Build();

var apiKey = configuration["Azure:OpenAI:ApiKey"];
var endpoint = configuration["Azure:OpenAI:Endpoint"];
var modelName = configuration["Azure:OpenAI:ModelName"];

var client = new OpenAIClient(new Uri(endpoint), new AzureKeyCredential(apiKey));

var completionsOptions = new ChatCompletionsOptions
{
    Messages =
    {
        new ChatMessage(ChatRole.System, "你是一个温柔的女生,擅长用理性的语言鼓励和引导人,对情绪低落的人进行劝慰。温柔一点,口语化一些。"),
        new ChatMessage(ChatRole.User, "你好"),
    }
};

while (true)
{
    Console.WriteLine();
    Console.Write("她: ");

    var completionsResponse = await client.GetChatCompletionsStreamingAsync(
        modelName,
        completionsOptions
    );

    var resonseText = new StringBuilder();
    await foreach (var choice in completionsResponse.Value.GetChoicesStreaming())
    {
        await foreach (var message in choice.GetMessageStreaming())
        {
            resonseText.Append(message.Content);
            Console.Write(message.Content);
            await Task.Delay(TimeSpan.FromMilliseconds(100));
        }
    }
    completionsOptions.Messages.Add(new ChatMessage(ChatRole.Assistant, resonseText.ToString()));

    Console.WriteLine();
    Console.WriteLine();

    Console.Write("我: ");
    var userMessage = Console.ReadLine();
    completionsOptions.Messages.Add(new ChatMessage(ChatRole.User, userMessage));
}

由于 Azure OpenAI 的响应速度非常快,为了模拟打字效果特意加了一点延迟。


http://www.kler.cn/a/472664.html

相关文章:

  • Ubuntu上安装Apache Spark
  • 【博主推荐】 Microi吾码开源低代码平台,快速建站,提高开发效率
  • go语言学习 笔记 1(变量,语法,数据类型)
  • el-table 多级表头
  • 06-RabbitMQ基础
  • 数据库回滚:大祸临头时
  • 【深度学习基础】线性神经网络 | 线性回归的简洁实现
  • 单片机死机问题处理
  • (2023|NIPS,LLaVA-Med,生物医学 VLM,GPT-4 生成自指导指令跟随数据集,数据对齐,指令调优)
  • 简易CPU设计入门:算术逻辑单元(一)
  • 技术选型深度解析:Qt、PyQt与Vue在界面开发中的权衡与抉择
  • Linux 文件的特殊权限—ACL项目练习
  • 协方差矩阵
  • 网络设备安全
  • allure报告修改默认语言为中文
  • 爬虫学习记录
  • STM32-笔记38-I2C-oled实验
  • Improving Language Understanding by Generative Pre-Training GPT-1详细讲解
  • 10. C语言 函数详解
  • WPS-JS宏快速上手
  • Docker 容器自动化管理之脚本(Script for Docker Container Automation Management)
  • 【linux系统之redis6】redis的安装与初始化
  • 如何隐藏 Nginx 版本号 并自定义服务器信息,提升安全性
  • 联邦学习LoRA:推理合并权重公式:以及变体
  • 如何让用户在网页中填写PDF表格?
  • 【HTML+CSS+JS+VUE】web前端教程-1-VScode开发者工具快捷键