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 有个调优的过程,这个心里预期是必不可少的。