在ChatGPT和各类生成式AI大热的今天,运用AI赋能产品开发和内容创作的价值显而易见,在工作和生活中充分运用ChatGPT能够大幅提高功率。但是,因为在我国的拜访限制,直接运用OpenAI的ChatGPT,对于期望运用这项技能的开发者和企业来说是一个巨大的挑战。本文将共享,如安在JavaPython环境下,怎么别离经过Azure OpenAI运用GPT大模型,期望帮助大家推动项目创新和提效。

本文源代码:

AzureOpenAIServiceClient.java

注册Azure服务和订阅

首先你需求有一个微软账户,能够到任意微软服务网站上注册,比方:Microsoft Azure。注册的时分区域挑选美国的话能够为后面运用必应Chat供给方便。

然后,拜访Azure控制台注册Azure服务,并创建订阅,第一次注册的话会有必定的免费试用额度。接着拜访Azure OpenAI Service了解微软供给的OpenAI模型的服务,并在你的Azure控制台上注册Azure OpenAI服务。能够阅读这篇文章Introducing GPT-4 in Azure OpenAI Service获取恳求链接,填写表单 “Request Access to Azure OpenAI Service”进行对所需求的模型进行恳求。

注册完结之后,你的Azure里就会多一个这样的图标了:

国内利用Azure OpenAI在Java中使用ChatGPT模型

随后,咱们就能够在Azure AI studio中创建和管理模型Deployments:

国内利用Azure OpenAI在Java中使用ChatGPT模型

挑选你的模型:

国内利用Azure OpenAI在Java中使用ChatGPT模型

创建成功后,咱们就能够运用示例代码,在Java中经过Azure OpenAI的API恳求完结运用Chat功用了。Azure AI Studio上还有很多好玩的功用,如果你恳求了OpenAI的图片生成模型DALLE的拜访权限,那么这儿还能够试用“DALLE playground”来根据你的描绘生成图片:

国内利用Azure OpenAI在Java中使用ChatGPT模型

除此之外,也能够在这儿运用谈天功用和文本完结功用:

国内利用Azure OpenAI在Java中使用ChatGPT模型

经过代码调用服务

经过示例代码AzureOpenAIServiceClient.java咱们能够了解到,实际上与Azure OpenAI服务进行通讯的主要是经过向咱们在Azure中注册服务中的endpoint发送HTTP恳求,来完结的。在这段代码中,首先导入了必要的HTTP恳求依靠库。然后界说了一个名为AzureOpenAIServiceClient的类,它维护了与Azure OpenAI服务通讯所需的一些配置参数,包括:

  • API密钥(apiKey):能够在你的Azure控制台相应的OpenAI service页面找到。见下图。
  • 服务入口地址URL(endpoint):一般形如https://{你的AzureOpenAI服务姓名}.openai.azure.com。能够在你的Overview页面看到。
  • 模型部署名(deployment):你之前起的模型姓名。
  • API版本(apiVersion):现在的常用版本是2023-03-15-preview

国内利用Azure OpenAI在Java中使用ChatGPT模型

现在的中心功用,chatCompletion办法,接受一个ChatRequest目标和operation(这儿其实便是chat/completions)作为参数,并调用callAzureAPI办法,将恳求目标转换为JSON字符串,并发送到OpenAI RESTful API服务完结恳求:

    private String callAzureAPI(String operation, String requestBodyString) {
        MediaType mediaType = MediaType.parse("application/json");
        String url = String.format("%s/openai/deployments/%s/%s?api-version=%s", endpoint, deployment, operation, apiVersion);
        logger.info("Request body: {}", requestBodyString);
        RequestBody body = RequestBody.create(requestBodyString, mediaType);
        Request httpRequest = new Request.Builder().url(url).post(body)
                .addHeader("api-key", apiKey).build();
        try (Response response = client.newCall(httpRequest).execute()) {
            if (!response.isSuccessful()) {
                throw new RuntimeException("Unexpected response code: " + response);
            }
            return Objects.requireNonNull(response.body()).string();
        } catch (Exception e) {
            throw new RuntimeException("Error occurred while invoking Azure OpenAI API: " + e.getMessage(), e);
        }
    }

其间,ChatRequest目标中的几个参数的含义解释如下:

Azure OpenAI HTTP恳求中的几个参数的含义如下:

  • max_tokens: 生成文本的最大长度。
  • temperature: 生成文本的随机性,取值从0到1,较高的“温度”值意味着模型将冒更多的危险。0表明随机性最低,创造性最差。
  • frequency_penalty: 运用词频赏罚。较高的频率赏罚将阻止模型重复。
  • presence_penalty: 运用存在赏罚。较高的存在赏罚将鼓舞模型专注于输入提示自身。
  • top_p: 从模型猜测中挑选概率最高的符号,直到达到指定的总概率。默认为1。也便是说,一旦该散布超越top_p值,就会中止生成文本。例如,top_p为0.3表明仅考虑组成前30%概率质量的符号。
  • stop: 中止生成文本,当模型生成某些指定字符时,就中止不在生成。默认为空。

代码运用示例

接下来,咱们就能够写一个简单的用例,来试用该功用了,先让它讲个笑话。

    AzureOpenAIServiceClient azureOpenAIServiceClient =
            new AzureOpenAIServiceClient(apiKey, deployment, endpoint, apiVersion);
    ChatRequest request = new ChatRequest();
    request.setTemperature(0.9);
    request.setMessages(Arrays.asList(
            new ChatMessage(ChatMessage.Role.SYSTEM, "You are an AI assistant that helps people find fun and jokes, to make people laugh a lot."),
            new ChatMessage(ChatMessage.Role.USER, "tell me 3 jokes")
    ));
    logger.info(azureOpenAIServiceClient.chatCompletion(request));

完结一次尬聊,得到很难get到笑点的三则笑话:

{
    "id": "***",
    "object": "chat.completion",
    "created": 1680000000,
    "model": "gpt-35-turbo",
    "choices": [
        {
            "index": 0,
            "finish_reason": "stop",
            "message": {
                "role": "assistant",
                "content": "Sure, here are three jokes for you:\n\n1. Why don't scientists trust atoms? Because they make up everything!\n\n2. Why did the tomato turn red? Because it saw the salad dressing!\n\n3. Why did the bicycle fall over? Because it was two-tired!"
            }
        }
    ],
    "usage": {
        "completion_tokens": 14,
        "prompt_tokens": 37,
        "total_tokens": 51
    }
}

试用一下就能够发现,全程运用国内网络也能够正常调用,没有任何问题。

后续

一旦将完结在Java一端的接入,咱们就能够将其集成到各项和谈天、文档生成、数据推理剖析等等相关的应用功用傍边。如果你感兴趣,能够继续关注 微软HydraLab 项目,咱们将在其间继续探究大语言模型赋能智能化测验的如下方向:

  • 智能日志和成果剖析解读。
  • 智能探究型测验。
  • 测验用例生成和优化
  • 根据测验成果的确诊主张。

并在代码库中逐渐共享一些相关场景prompt、向量模型和可复用代码。如果恳求Azure OpenAI Service遇到问题,能够私信我联系。