基于本项目的大模型框架正在火速研发当中,项目地址:AI-SmartFuse-Framework
随着人工智能技术的飞速发展,自然语言处理在各个领域都具有广泛的应用前景。聊天机器人作为其中一种受欢迎且实用的解决方案,能够与用户进行自然对话,并提供有价值的信息和服务。
为了更好更快更方便的开发大模型应用,我们启动了一个名为AI-java的项目,专门针对Java编程语言。该SDK旨在简化与各大模型API的交互,使Java开发者可以轻松地集成大模型的功能到他们的应用程序中。
该项目的主要目标如下:
- **提供简单易用的接口:**我们致力于开发一个用户友好的SDK,提供简洁的方法和函数,使Java开发者能够轻松地与大模型进行通信。本SDK提供发送用户请求并接收生成的回复的便捷方法。
- **支持流式应答:**实时生成响应,不需要等待整个对话结束。能够快速获得反馈,更加流畅地进行对话。流式应答能够为用户提供更接近真实人类对话的体验。用户可以即时提出问题、进行追问或做出反应,而模型能够相应地作出回应和调整。
- **上下文管理:**大模型是基于上下文的,因此我们希望SDK能够支持上下文的管理,允许用户在对话过程中保持和更新上下文信息。
- **异常处理和错误处理:**我们将注重SDK的稳定性和可靠性,确保它能够有效地处理各种可能出现的错误和异常情况,并提供相应的异常处理机制。
- **示例和文档:**为了方便Java开发者快速上手使用SDK,我们将提供详细的示例代码和清晰的文档,以解释如何正确集成和使用本项目。
- **多厂商模型接入:**本项目旨在提供多个不同厂商的模型接入,大模型功能不应该局限于某一单一的模型。应当集各家之长。
- **高拓展性:**本项目所有模型功能都提供对应接口,默认实现一套接口方法,同时也可让用户根据接口实现自己的API调用方式。
下载项目到本地,将项目 install 到本地 maven 仓库。
注意,由于本项目是多模块编写,想要使用哪一个厂商的模型API,请引入对应的依赖。
如果使用openai相关模型功能,install 之后,在pom文件中可引入如下依赖。
<dependency>
<groupId>com.ai</groupId>
<artifactId>ai-openai</artifactId>
<version>1.0</version>
</dependency>
如果使用讯飞相关模型功能,install之后,在pom文件中引入如下依赖。
<dependency>
<groupId>com.ai</groupId>
<artifactId>ai-spark</artifactId>
<version>1.0</version>
</dependency>
本项目目前实现了chatGPT官方文档下 endpoints 各个板块全部的接口。正在完成讯飞星火模型相关API的编写。
项目结构如下
├─ai-common
├─ai-openai openai相关API功能
├─ai-spark 星火模型相关API功能
└─doc 测试相关的文件
不管是使用哪一个厂商的模型API,在我们的SDK当中,使用方式都是一致的。使用方式如下:(下面是openai相关功能的使用方式)
具体的使用方式请参考测试类当中的测试方法。
// 工厂创建聚合的session
AggregationSession aggregationSession=factory.openAggregationSession();
// 通过聚合的session获取不同场景的会话,处理不同场景,进行解耦。
// 获取聊天会话窗口
aggregationSession.getChatSession();
// 获取文件会话窗口
aggregationSession.getFilesSession();
// 获取微调会话窗口
aggregationSession.getFineTuningSession();
// 获取图片会话窗口
aggregationSession.getImageSession();
// 获取模型会话窗口
aggregationSession.getModelSession();
// 获取音频会话窗口
aggregationSession.getAudioSession();
// 获取审核会话窗口
aggregationSession.getModerationSession();
// 获取嵌入会话窗口
aggregationSession.getEmbeddingSession();
示例相关的测试图片和语言文件在 doc/test 目录下。
openai相关功能测试如下所示,更多功能测试请参考测试类
示例一:多轮对话
public void test_chat_completions() {
// 创建参数,上下文对话。
// 第一次的问题
DefaultChatCompletionRequest defaultChatCompletionRequest = DefaultChatCompletionRequest.BuildDefaultChatCompletionRequest("1+1=");
// 第一次的回复
defaultChatCompletionRequest.addMessage(Constants.Role.ASSISTANT.getRoleName(), "2");
// 第二次的问题
defaultChatCompletionRequest.addMessage(Constants.Role.USER.getRoleName(), "2+2=");
// 询问第二次的问题的结果
ChatCompletionResponse chatCompletionResponse = aggregationSession.getChatSession().chatCompletions(NULL, NULL, NULL, defaultChatCompletionRequest);
// 解析结果
chatCompletionResponse.getChoices().forEach(e -> {
log.info("测试结果:{}", e.getMessage());
});
}
示例二:图片创作
public void test_create_image() {
CreateImageRequest createImageRequest = CreateImageRequest.BuildBaseCreateImageRequest("森林里有一只小熊,小熊在吃蜂蜜。");
List<ImageObject> imageObjectList = aggregationSession.getImageSession().createImageCompletions(NULL, NULL, NULL, createImageRequest);
log.info("测试结果:{}", imageObjectList);
}
示例三:文本转语音(主要是通过回调函数获取回传的音频数据)
public void test_tts() throws InterruptedException {
// 定义请求参数
TtsCompletionRequest ttsCompletionRequest = TtsCompletionRequest.builder()
.model(TtsCompletionRequest.Model.tts_1.getModuleName())// 设置使用的模型
.input("你好,我是chatGPT")
.voice(TtsCompletionRequest.Voice.alloy.getVoiceName())// 设置声音的样式
.build();
// 回传文件存放的路径
File file = new File("doc/test/test_tts.mp3");
// 添加回调函数,发送请求
aggregationSession.getAudioSession().ttsCompletions(NULL, NULL, NULL, ttsCompletionRequest, new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try (InputStream inputStream = response.body().byteStream();
OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) {
// 创建文件
if (!file.exists()) {
if (!file.getParentFile().exists()) file.getParentFile().mkdir();
file.createNewFile();
}
byte data[] = new byte[10240];
int len;
while ((len = inputStream.read(data, 0, 8192)) != -1) {
os.write(data, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
t.printStackTrace();
}
}
);
// 阻塞等待
new CountDownLatch(1).await();
}
2024-01-24:完成星火模型对话、文档对话、图片生成、图片理解接口的实现。
2024-01-10:开始讯飞星火模型相关API的编写工作
2023-12-28:预启动其他模型的API编写工作
2023-12-14:修复BUG
2023-12-8:支持图片对话和函数对话
2023-12-7:优化测试用例,增加代码注释,丰富文档内容
2023-12-4:第一版SDK问世,支持官方 endpoints 下所有接口
项目长期维护,欢迎向本项目提需求,欢迎star~~~