Azure OpenAI 对接

        Azure OpenAI 是微软提供的一项托管服务,允许开发人员从 Azure 资源进行 OpenAI 模型的部署、优化和应用。开发人员可以通过 SDK 方式,请求 Azure OpenAI 服务,得到和 LangChain 大语言模型相似的结果,满足用户在文案编辑、话术生成、文档仿写等方面的需求。Azure OpenAI 的语言模型对内容情感、语言色彩以及话术的正向负向方面的表现还是可以的,完全可以满足法律法规的要求。不过 Azure OpenAI 服务是按量计费的,需要事先在微软官网开立账户并预存一部分资金,对接完成后即可使用服务实现自己的业务了,这种方式比较适合传统行业的小微企业,也算是入门级的 AI 技术解决方案,起码它不用 FQ 。

pom 依赖

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-ai-openai</artifactId>
    <version>1.0.0-beta.3</version>
</dependency>

client 构造

public class AzureClient {
    public final static String AZURE_MODEL_NAME = "gpt35turbo16k";
    public final static String AZURE_OPENAI_KEY = "a1b2c3d4e5f6g7h8i9j8k7l6m5n4o3p2";
    public final static String AZURE_ENDPOINT = "https://riverintelli-test01.openai.azure.com/";

    // 同步客户端
    public static OpenAIClient openAIClient;
    // 异步客户端
    public static OpenAIAsyncClient openAIAsyncClient;

    static {
        openAIClient = new OpenAIClientBuilder()
                .endpoint(AZURE_ENDPOINT)
                .credential(new AzureKeyCredential(AZURE_OPENAI_KEY))
                .buildClient();
        openAIAsyncClient = new OpenAIClientBuilder()
                .endpoint(AZURE_ENDPOINT)
                .credential(new AzureKeyCredential(AZURE_OPENAI_KEY))
                .buildAsyncClient();
    }
}

AZURE_MODEL_NAME:模型名称

AZURE_OPENAI_KEY:用户的私钥

/**
 * 实时对话交互
 * @param prompt 提示消息
 * @param query 请求消息
 */
public String chat(String prompt, String query) {
    String content = prompt != null ? String.format(prompt, query) : query;
    ChatCompletionsOptions chatCompletionsOptions = new ChatCompletionsOptions(
            new ArrayList<>(){{
               add(new ChatMessage(ChatRole.SYSTEM, content));
            }}
    ).setStream(true);
    Stream<String> chatCompletions = AzureClient.openAIClient.getChatCompletionsStream(AzureClient.AZURE_MODEL_NAME, chatCompletionsOptions)
           .stream().skip(1).flatMap(
                   event -> event.getChoices().stream()
                           .filter(choice -> choice != null && choice.getDelta() != null)
                           .map(choice -> choice.getDelta().getContent() != null ? choice.getDelta().getContent() : "")
            );

    return chatCompletions.collect(Collectors.joining()).replaceAll("\"", "");
}

        需要补充说明的一点是,大语言模型生成结果的效果和 prompt 定义的好坏是有密切关系的,想得到优质的内容需要对 prompt 有个调优的过程,这个心里预期是必不可少的。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厉力文武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值