![](https://img.shields.io/badge/JDK-1.8+-success.svg)
![](https://maven-badges.herokuapp.com/maven-central/com.lzhpo/chatgpt-spring-boot-starter/badge.svg?color=blueviolet)
![](https://img.shields.io/:license-Apache2-orange.svg)
[![Style check](https://github.com/lzhpo/chatgpt-spring-boot-starter/actions/workflows/style-check.yml/badge.svg)](https://github.com/lzhpo/chatgpt-spring-boot-starter/actions/workflows/style-check.yml)
## 概览
1. 支持设置多个 API Key,并且支持对其设置权重以及是否启用,支持自动禁用失效的 API Key 以及自动轮转
2. 支持设置请求代理
3. 支持自定义请求 API(如果对 OpenAi 的 API 做了中转/代理)
4. 支持 OpenAi 所有可以使用 API Key 访问的 API
5. 支持流式响应,即所谓的"打字机"模式
6. 请求参数自动校验
7. 支持 token 计算
8. 支持 function calling
## 支持的功能
✅ 模型查询(Model)<br>
✅ 流式、非流式对话聊天(Stream Chat/completion)<br>
✅ 根据提示生成文本(Edit)<br>
✅ 自然语言转换为向量表示<br>
✅ 音频、视频语音转文本(Create transcription)<br>
✅ 文本翻译(Create translation)<br>
✅ 文件的查询、上传、删除(File - List/Upload/Delete/Retrieve)<br>
✅ 预训练模型的微调、查询、放弃、过程(事件)(Fine-tunes - Create/List/Retrieve/Cancel/Events)<br>
✅ 内容审核(Moderation)<br>
✅ 用户余额、使用量查询(Billing/Usage)<br>
✅ 用户信息查询(User)<br>
✅ 根据提示创建、编辑图像、根据图像生成多版本图像(Image - Create/Create edit/Create variation)
## 项目地址
- Github: https://github.com/lzhpo/chatgpt-spring-boot-starter
- Gitee: https://gitee.com/lzhpo/chatgpt-spring-boot-starter
## 导入依赖
```xml
<dependency>
<groupId>com.lzhpo</groupId>
<artifactId>chatgpt-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency>
```
## 配置示例
### 1. 支持配置多个 API Key(权重、是否启用)
> 可以对当前 api key 设置权重,以及是否需要启用此 api key,提供了两种方式配置。
#### 1.1 方式1-常规yaml配置方式
```yaml
openai:
keys:
- key: "sk-xxx1"
weight: 1.0
enabled: true
- key: "sk-xxx2"
weight: 2.0
enabled: false
- key: "sk-xxx3"
weight: 3.0
enabled: false
```
_支持自动禁用失效的 API Key 以及自动轮转,参考:`InvalidedKeyEvent`、`NoAvailableKeyEvent`、`OpenAiEventListener`_
#### 1.2 方式2-自定义获取 API Key 逻辑
如果你的 API Key 是存在数据库或者其它地方的,那么可以选择使用这种方式配置。
实现`OpenAiKeyProvider`接口即可,例如:
```java
@Component
public class XxxOpenAiKeyProvider implements OpenAiKeyProvider {
@Override
public List<OpenAiKey> get() {
List<OpenAiKey> openAiKeys = new ArrayList<>();
openAiKeys.add(OpenAiKey.builder().key("sk-xxx1").weight(1.0).enabled(true).build());
openAiKeys.add(OpenAiKey.builder().key("sk-xxx2").weight(2.0).enabled(false).build());
openAiKeys.add(OpenAiKey.builder().key("sk-xxx2").weight(3.0).enabled(true).build());
return openAiKeys;
}
}
```
**注意:每次请求都会调用此方法,有需要的话可以在此加一个缓存。**
### 2. 支持配置代理
```yaml
openai:
proxy:
host: "127.0.0.1"
port: 7890
type: http
header-name: "Proxy-Authorization"
username: admin
password: 123456
```
### 3. 支持配置超时时间
```yaml
openai:
connect-timeout: 1m
read-timeout: 1m
write-timeout: 1m
```
### 4. 支持自定义请求API
> 如果没有配置代理,也没有定制完整请求地址的需求,那么无需配置`openai.domain`以及`openai.urls`,会自动使用默认的。
#### 4.1 方式1 - 只配置了代理
如果只是配置了国内中转代理,那么只需要配置`openai.domain`为代理地址即可,默认值为https://api.openai.com
```yaml
openai:
domain: "https://api.openai.com"
```
#### 4.2 方式2 - 定制完整的请求地址
如果有定制完整请求地址的需求,可以按照如下配置,优先级比`openai.domain`更高,但需要的是**完整的请求地址**。
```yaml
openai:
urls:
moderations: "https://api.openai.com/v1/moderations"
completions: "https://api.openai.com/v1/completions"
edits: "https://api.openai.com/v1/edits"
chat-completions: "https://api.openai.com/v1/chat/completions"
list-models: "https://api.openai.com/v1/models"
retrieve-model: "https://api.openai.com/v1/models/{model}"
embeddings: "https://api.openai.com/v1/embeddings"
list-files: "https://api.openai.com/v1/files"
upload-file: "https://api.openai.com/v1/files"
delete-file: "https://api.openai.com/v1/files/{file_id}"
retrieve-file: "https://api.openai.com/v1/files/{file_id}"
retrieve-file-content: "https://api.openai.com/v1/files/{file_id}/content"
create_fine_tune: "https://api.openai.com/v1/fine-tunes"
list_fine_tune: "https://api.openai.com/v1/fine-tunes"
retrieve_fine_tune: "https://api.openai.com/v1/fine-tunes/{fine_tune_id}"
cancel_fine_tune: "https://api.openai.com/v1/fine-tunes/{fine_tune_id}/cancel"
list_fine_tune_events: "https://api.openai.com/v1/fine-tunes/{fine_tune_id}/events"
delete_fine_tune_events: "https://api.openai.com/v1/models/{model}"
create-transcription: "https://api.openai.com/v1/audio/transcriptions"
create-translation: "https://api.openai.com/v1/audio/translations"
create_image: "https://api.openai.com/v1/images/generations"
create_image_edit: "https://api.openai.com/v1/images/edits"
create_image_variation: "https://api.openai.com/v1/images/variations"
billing-credit-grants: "https://api.openai.com/dashboard/billing/credit_grants"
users: "https://api.openai.com/v1/organizations/{organizationId}/users"
billing-subscription: "https://api.openai.com/v1/dashboard/billing/subscription"
billing-usage: "https://api.openai.com/v1/dashboard/billing/usage?start_date={start_date}&end_date={end_date}"
```
### 5. 支持token计算
示例1:
```java
Long tokens = TokenUtils.tokens(model, content);
```
示例2:`CompletionRequest`
```java
CompletionRequest request = new CompletionRequest();
// request.setXXX 略...
Long tokens = TokenUtils.tokens(request.getModel(), request.getPrompt());
```
示例3:`ChatCompletionRequest`
```java
ChatCompletionRequest request = new ChatCompletionRequest();
// request.setXXX 略...
Long tokens = TokenUtils.tokens(request.getModel(), request.getMessages());
```
OpenAi返回的token计算结果可在response返回体中获取:
- `prompt_tokens`:OpenAi计算的输入消耗的token
- `completion_tokens`:OpenAi计算的输出消耗的token
- `total_tokens`:`prompt_tokens` + `completion_tokens`
具体可参考测试用例`OpenAiCountTokensTest`以及`TokenUtils`
### 6. 支持 function calling
关于 function calling 的介绍:https://platform.openai.com/docs/guides/gpt/function-calling
参考示例见测试目录:`com.lzhpo.chatgpt.OpenAiClientTest#functions`
### 7. 关于异常处理
1. 常规、SSE以及WebSocket请求失败均会抛出`OpenAiException`异常,可自定义全局异常,取出OpenAi的响应结果转换为`OpenAiError`(如果转换结果`OpenAiError`不为空),继而自行处理。
2. 自定义流式处理的`EventSourceListener`,推荐继承`AbstractEventSourceListener`,如果没有特殊需求,直接重写`onEvent`方法即可,如果重写了`onFailure`方法,抛出何种异常取决于重写的`onFailure`方法。
3. 提供了失效的Api-Key事件、当前无可用的Api-Key事件,可自行监听处理,例如:
```java
@Slf4j
@Component
public class OpenAiEventListener {
@EventListener
public void processInvalidedKey(InvalidedKeyEvent event) {
String invalid
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
openai 基本原理是,通过深度学习算法,将大量的文本内容输入模型中进行训练,模型会自动学习语言的结构规律,从而可以生成高质量的文本。 产品定位 在 GPT 出现之前,NLP 模型主要是基于针对特定任务的大量标注数据进行训练。但会存在一些限制:大规模高质量的标注数据不易获得;模型仅限于所接受的训练,泛化能力不足;无法执行开箱即用的任务,限制了模型的落地应用。为了克服这些问题,OpenAI 走上了预训练大模型的道路。从 GPT-1 到 ChatGPT,就是一个预训练模型越来越大、效果越来越强的过程, 不断迭代。 在OpenAI的官网上,ChatGPT被描述为优化对话的语言模型,是GPT-3.5架构的主力模型。GPT- 3.5架构基于OpenAI于2020年推出的GPT-3架构,即生成式语言模型的第3代。早在2020年6月,在训练约2000亿个单词、烧掉几千万美元后,史上最强大AI模型GPT-3一炮而红。 产品功能 作为聊天机器人,ChatGPT具有同类产品具备的一些特性,例如对话能力,能够在同一个会话期间内回答上下文相关的后续问题。
资源推荐
资源详情
资源评论
收起资源包目录
支持OpenAi所有可用的接口,包括但不限于流式输出和Token计算等.zip (132个子文件)
maven.config 39B
jvm.config 0B
layui.css 78KB
layer.css 14KB
laydate.css 7KB
code.css 1KB
style.css 383B
iconfont.eot 46KB
spring.factories 108B
loading-0.gif 6KB
loading-2.gif 2KB
loading-1.gif 701B
.gitignore 125B
sse-stream-chat.html 5KB
websocket-stream-chat.html 4KB
chat.html 4KB
org.springframework.boot.autoconfigure.AutoConfiguration.imports 41B
OpenAiClientTest.java 19KB
DefaultOpenAiClient.java 15KB
OpenAiClient.java 9KB
CreateFineTuneRequest.java 7KB
CompletionRequest.java 7KB
TokenUtils.java 6KB
ChatCompletionRequest.java 6KB
OpenAiCountTokensTest.java 4KB
JsonUtils.java 4KB
OpenAiAutoConfiguration.java 4KB
OpenAiUrl.java 4KB
OpenAiErrorInterceptor.java 3KB
OpenAiKeyWrapper.java 3KB
AbstractEventSourceListener.java 3KB
OpenAiTestController.java 2KB
CreateAudioRequest.java 2KB
OpenAiKeyProviderTest.java 2KB
EmbeddingRequest.java 2KB
InnerOpenAiKeyProvider.java 2KB
SubscriptionResponse.java 2KB
OpenAiWebSocketTest.java 2KB
CommonConfig.java 2KB
ChatCompletionMessage.java 2KB
ChatCompletionFunction.java 2KB
CreateImageVariationRequest.java 2KB
OpenAiProperties.java 2KB
CountDownLatchEventSourceListener.java 2KB
ModerationRequest.java 2KB
EditRequest.java 2KB
OpenAiEventListener.java 1KB
CreateFineTuneResponse.java 1KB
CancelFineTuneResponse.java 1KB
RetrieveFineTuneResponse.java 1KB
ListFineTuneData.java 1KB
SseEventSourceListener.java 1KB
OpenAiErrorCode.java 1KB
OpenAiConstant.java 1KB
WebSocketEventSourceListener.java 1KB
ModelPermission.java 1KB
ChatCompletionFunctionCall.java 1KB
CommonUsage.java 1KB
ChatCompletionParameter.java 1KB
CreateImageRequest.java 1KB
OpenAiTestApplication.java 1KB
ModerationCategoryScore.java 1KB
OpenAiProxy.java 1KB
CreditGrantsData.java 1KB
ModerationCategory.java 1KB
Hyperparams.java 1KB
InvalidedKeyEvent.java 1KB
OpenAiKey.java 1KB
CreditGrantsResponse.java 1KB
FineTuneFiles.java 1KB
NoAvailableKeyEvent.java 1019B
UsageResponse.java 999B
CreateImageResponseFormat.java 995B
SubscriptionAddress.java 977B
RetrieveFileResponse.java 972B
ChatCompletionResponse.java 972B
CompletionResponse.java 971B
UploadFileResponse.java 970B
ListFileData.java 964B
OpenAiException.java 962B
RetrieveModelResponse.java 957B
CreateImageSize.java 956B
ModerationResult.java 941B
UsageDailyCosts.java 936B
OpenAiKeyProvider.java 933B
CompletionChoice.java 928B
ListFineTuneEventData.java 925B
CreateFineTuneEvents.java 924B
UserResponse.java 923B
FineTuneEvent.java 917B
EmbeddingResponse.java 914B
ChatCompletionChoice.java 912B
OpenAiError.java 909B
EditResponse.java 903B
EmbeddingData.java 863B
OpenAiErrorDetail.java 860B
ModerationResponse.java 842B
UserInfo.java 839B
ListFineTuneEventResponse.java 827B
ListFineTuneResponse.java 817B
共 132 条
- 1
- 2
资源评论
野生的狒狒
- 粉丝: 3101
- 资源: 2312
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功