Commit 660a29d4e3a1b5429a95fd9c493fdf15f422b1e3
Merge remote-tracking branch 'origin/master-jdk21-ai' into master-jdk21-ai
Showing
5 changed files
with
56 additions
and
119 deletions
yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/model/AiModelEnum.java
| @@ -3,9 +3,9 @@ package cn.iocoder.yudao.module.ai.enums.model; | @@ -3,9 +3,9 @@ package cn.iocoder.yudao.module.ai.enums.model; | ||
| 3 | import lombok.AllArgsConstructor; | 3 | import lombok.AllArgsConstructor; |
| 4 | import lombok.Getter; | 4 | import lombok.Getter; |
| 5 | 5 | ||
| 6 | -// TODO done @fansili:1)类注释要加下;2)author 和 time 用 javadoc,@author 和 @since;3)@AllArgsConstructor 使用这个注解,去掉构造方法;4)value 改成 model 字段,然后注释都写下哈;5)message 改成 name,然后注释都写下哈 | ||
| 7 | -// TODO @fan: AiModelEnum 是不是可以缩写成这个哈;所有的模型,都写在这里枚举; | ||
| 8 | /** | 6 | /** |
| 7 | + * ai 模型 | ||
| 8 | + * | ||
| 9 | * @author: fansili | 9 | * @author: fansili |
| 10 | * @time: 2024/3/4 12:36 | 10 | * @time: 2024/3/4 12:36 |
| 11 | */ | 11 | */ |
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/YiYanChatClient.java
| @@ -119,8 +119,8 @@ public class YiYanChatClient implements ChatClient, StreamingChatClient { | @@ -119,8 +119,8 @@ public class YiYanChatClient implements ChatClient, StreamingChatClient { | ||
| 119 | // 复制 YiYanOptions 属性,到 request 中(这里 options 属性和 request 基本保持一致) | 119 | // 复制 YiYanOptions 属性,到 request 中(这里 options 属性和 request 基本保持一致) |
| 120 | YiYanChatOptions useOptions = getYiYanOptions(prompt); | 120 | YiYanChatOptions useOptions = getYiYanOptions(prompt); |
| 121 | BeanUtil.copyProperties(useOptions, request); | 121 | BeanUtil.copyProperties(useOptions, request); |
| 122 | - request.setTop_p(useOptions.getTopP()) | ||
| 123 | - .setMax_output_tokens(useOptions.getMaxOutputTokens()) | 122 | + request.setTopP(useOptions.getTopP()) |
| 123 | + .setMaxOutputTokens(useOptions.getMaxOutputTokens()) | ||
| 124 | .setTemperature(useOptions.getTemperature()) | 124 | .setTemperature(useOptions.getTemperature()) |
| 125 | .setSystem(systemPrompt) | 125 | .setSystem(systemPrompt) |
| 126 | .setStream(stream); | 126 | .setStream(stream); |
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/YiYanChatOptions.java
| @@ -6,9 +6,6 @@ import org.springframework.ai.chat.prompt.ChatOptions; | @@ -6,9 +6,6 @@ import org.springframework.ai.chat.prompt.ChatOptions; | ||
| 6 | 6 | ||
| 7 | import java.util.List; | 7 | import java.util.List; |
| 8 | 8 | ||
| 9 | -// TODO @fan:增加一个 model | ||
| 10 | -// TODO @fan:字段命名,penalty_score 类似的,建议改成驼峰原则 | ||
| 11 | -// TODO @fan:字段的注释,可以都删除掉,让用户 https://cloud.baidu.com/doc/WENXINWORKSHOP/s/clntwmv7t 即可 | ||
| 12 | /** | 9 | /** |
| 13 | * 文心一言的 {@link ChatOptions} 实现类 | 10 | * 文心一言的 {@link ChatOptions} 实现类 |
| 14 | * | 11 | * |
| @@ -20,91 +17,58 @@ import java.util.List; | @@ -20,91 +17,58 @@ import java.util.List; | ||
| 20 | public class YiYanChatOptions implements ChatOptions { | 17 | public class YiYanChatOptions implements ChatOptions { |
| 21 | 18 | ||
| 22 | /** | 19 | /** |
| 23 | - * 一个可触发函数的描述列表,说明: | ||
| 24 | - * (1)支持的function数量无限制 | ||
| 25 | - * (2)长度限制,最后一个message的content长度(即此轮对话的问题)、functions和system字段总内容不能超过20480 个字符,且不能超过5120 tokens | ||
| 26 | - * 必填:否 | 20 | + * functions 函数 |
| 27 | */ | 21 | */ |
| 28 | private List<YiYanChatCompletionRequest.Function> functions; | 22 | private List<YiYanChatCompletionRequest.Function> functions; |
| 29 | /** | 23 | /** |
| 30 | - * 说明: | ||
| 31 | - * (1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 | ||
| 32 | - * (2)默认0.8,范围 (0, 1.0],不能为0 | ||
| 33 | - * 必填:否 | 24 | + * temperature |
| 34 | */ | 25 | */ |
| 35 | private Float temperature; | 26 | private Float temperature; |
| 36 | /** | 27 | /** |
| 37 | - * 说明: | ||
| 38 | - * (1)影响输出文本的多样性,取值越大,生成文本的多样性越强 | ||
| 39 | - * (2)默认0.8,取值范围 [0, 1.0] | ||
| 40 | - * 必填:否 | 28 | + * topP |
| 41 | */ | 29 | */ |
| 42 | private Float topP; | 30 | private Float topP; |
| 43 | /** | 31 | /** |
| 44 | - * 通过对已生成的token增加惩罚,减少重复生成的现象。说明: | ||
| 45 | - * (1)值越大表示惩罚越大 | ||
| 46 | - * (2)默认1.0,取值范围:[1.0, 2.0] | ||
| 47 | - * | ||
| 48 | - * 必填:否 | 32 | + * 通过对已生成的token增加惩罚,减少重复生成的现象 |
| 49 | */ | 33 | */ |
| 50 | - private Float penalty_score; | 34 | + private Float penaltyScore; |
| 51 | /** | 35 | /** |
| 52 | - * 是否以流式接口的形式返回数据,默认false | ||
| 53 | - * 必填:否 | 36 | + * stream 模式请求 |
| 54 | */ | 37 | */ |
| 55 | private Boolean stream; | 38 | private Boolean stream; |
| 56 | /** | 39 | /** |
| 57 | - * 模型人设,主要用于人设设定,例如,你是xxx公司制作的AI助手,说明: | ||
| 58 | - * (1)长度限制,最后一个message的content长度(即此轮对话的问题)、functions和system字段总内容不能超过20480 个字符,且不能超过5120 tokens | ||
| 59 | - * (2)如果同时使用system和functions,可能暂无法保证使用效果,持续进行优化 | ||
| 60 | - * 必填:否 | 40 | + * system 提示 |
| 61 | */ | 41 | */ |
| 62 | private String system; | 42 | private String system; |
| 63 | /** | 43 | /** |
| 64 | - * 生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成。说明: | ||
| 65 | - * (1)每个元素长度不超过20字符 | ||
| 66 | - * (2)最多4个元素 | ||
| 67 | - * 必填:否 | 44 | + * 生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成 |
| 68 | */ | 45 | */ |
| 69 | private List<String> stop; | 46 | private List<String> stop; |
| 70 | /** | 47 | /** |
| 71 | - * 是否强制关闭实时搜索功能,默认false,表示不关闭 | ||
| 72 | - * 必填:否 | 48 | + * 是否强制关闭实时搜索功能 |
| 73 | */ | 49 | */ |
| 74 | - private Boolean disable_search; | 50 | + private Boolean disableSearch; |
| 75 | /** | 51 | /** |
| 76 | - * 是否开启上角标返回,说明: | ||
| 77 | - * (1)开启后,有概率触发搜索溯源信息search_info,search_info内容见响应参数介绍 | ||
| 78 | - * (2)默认false,不开启 | ||
| 79 | - * 必填:否 | 52 | + * 是否开启上角标返回 |
| 80 | */ | 53 | */ |
| 81 | - private Boolean enable_citation; | 54 | + private Boolean enableCitation; |
| 82 | /** | 55 | /** |
| 83 | - * 指定模型最大输出token数,范围[2, 2048] | ||
| 84 | - * 必填:否 | 56 | + * 输出最大 token |
| 85 | */ | 57 | */ |
| 86 | private Integer maxOutputTokens; | 58 | private Integer maxOutputTokens; |
| 87 | /** | 59 | /** |
| 88 | - * 指定响应内容的格式,说明: | ||
| 89 | - * (1)可选值: | ||
| 90 | - * · json_object:以json格式返回,可能出现不满足效果情况 | ||
| 91 | - * · text:以文本格式返回 | ||
| 92 | - * (2)如果不填写参数response_format值,默认为text | ||
| 93 | - * 必填:否 | 60 | + * 响应格式 text、json_object |
| 94 | */ | 61 | */ |
| 95 | - private String response_format; | 62 | + private String responseFormat; |
| 96 | /** | 63 | /** |
| 97 | - * 表示最终用户的唯一标识符 | ||
| 98 | - * 必填:否 | 64 | + * 用户id |
| 99 | */ | 65 | */ |
| 100 | - private String user_id; | 66 | + private String userId; |
| 101 | /** | 67 | /** |
| 102 | * 在函数调用场景下,提示大模型选择指定的函数(非强制),说明:指定的函数名必须在functions中存在 | 68 | * 在函数调用场景下,提示大模型选择指定的函数(非强制),说明:指定的函数名必须在functions中存在 |
| 103 | - * 必填:否 | ||
| 104 | - * | ||
| 105 | - * ERNIE-4.0-8K 模型没有这个字段 | 69 | + * tip: ERNIE-4.0-8K 模型没有这个字段 |
| 106 | */ | 70 | */ |
| 107 | - private String tool_choice; | 71 | + private String toolChoice; |
| 108 | 72 | ||
| 109 | @Override | 73 | @Override |
| 110 | public Float getTemperature() { | 74 | public Float getTemperature() { |
| @@ -118,8 +82,6 @@ public class YiYanChatOptions implements ChatOptions { | @@ -118,8 +82,6 @@ public class YiYanChatOptions implements ChatOptions { | ||
| 118 | 82 | ||
| 119 | /** | 83 | /** |
| 120 | * 百度么有 topK | 84 | * 百度么有 topK |
| 121 | - * | ||
| 122 | - * @return null | ||
| 123 | */ | 85 | */ |
| 124 | @Override | 86 | @Override |
| 125 | public Integer getTopK() { | 87 | public Integer getTopK() { |
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/api/YiYanApi.java
| 1 | package cn.iocoder.yudao.framework.ai.core.model.yiyan.api; | 1 | package cn.iocoder.yudao.framework.ai.core.model.yiyan.api; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.ai.core.model.yiyan.exception.YiYanApiException; | 3 | import cn.iocoder.yudao.framework.ai.core.model.yiyan.exception.YiYanApiException; |
| 4 | +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | ||
| 4 | import org.springframework.http.HttpStatusCode; | 5 | import org.springframework.http.HttpStatusCode; |
| 5 | import org.springframework.http.ResponseEntity; | 6 | import org.springframework.http.ResponseEntity; |
| 6 | import org.springframework.web.reactive.function.client.WebClient; | 7 | import org.springframework.web.reactive.function.client.WebClient; |
| @@ -85,7 +86,7 @@ public class YiYanApi { | @@ -85,7 +86,7 @@ public class YiYanApi { | ||
| 85 | -> uriBuilder.path(useChatModel.getUri()) | 86 | -> uriBuilder.path(useChatModel.getUri()) |
| 86 | .queryParam("access_token", token) | 87 | .queryParam("access_token", token) |
| 87 | .build()) | 88 | .build()) |
| 88 | - .body(Mono.just(request), YiYanChatCompletionRequest.class) | 89 | + .body(Mono.just(JsonUtils.toJsonString(request)), String.class) |
| 89 | .retrieve() | 90 | .retrieve() |
| 90 | .toEntity(YiYanChatCompletionResponse.class) | 91 | .toEntity(YiYanChatCompletionResponse.class) |
| 91 | .block(); | 92 | .block(); |
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/api/YiYanChatCompletionRequest.java
| 1 | package cn.iocoder.yudao.framework.ai.core.model.yiyan.api; | 1 | package cn.iocoder.yudao.framework.ai.core.model.yiyan.api; |
| 2 | 2 | ||
| 3 | +import com.fasterxml.jackson.annotation.JsonProperty; | ||
| 3 | import lombok.Data; | 4 | import lombok.Data; |
| 4 | 5 | ||
| 5 | import java.util.List; | 6 | import java.util.List; |
| 6 | 7 | ||
| 7 | -// TODO @fan:字段驼峰;字段注释都可以删除,贴个链接就好; | ||
| 8 | /** | 8 | /** |
| 9 | * 文心一言 Completion Request | 9 | * 文心一言 Completion Request |
| 10 | * | 10 | * |
| @@ -20,96 +20,70 @@ public class YiYanChatCompletionRequest { | @@ -20,96 +20,70 @@ public class YiYanChatCompletionRequest { | ||
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | /** | 22 | /** |
| 23 | - * 聊天上下文信息。 | ||
| 24 | - * 必填:是 | 23 | + * 聊天上下文信息 |
| 25 | */ | 24 | */ |
| 26 | private List<Message> messages; | 25 | private List<Message> messages; |
| 27 | /** | 26 | /** |
| 28 | - * 一个可触发函数的描述列表,说明: | ||
| 29 | - * (1)支持的function数量无限制 | ||
| 30 | - * (2)长度限制,最后一个message的content长度(即此轮对话的问题)、functions和system字段总内容不能超过20480 个字符,且不能超过5120 tokens | ||
| 31 | - * 必填:否 | 27 | + * functions 函数 |
| 32 | */ | 28 | */ |
| 33 | private List<Function> functions; | 29 | private List<Function> functions; |
| 34 | /** | 30 | /** |
| 35 | - * 说明: | ||
| 36 | - * (1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 | ||
| 37 | - * (2)默认0.8,范围 (0, 1.0],不能为0 | ||
| 38 | - * 必填:否 | 31 | + * temperature |
| 39 | */ | 32 | */ |
| 40 | private Float temperature; | 33 | private Float temperature; |
| 41 | /** | 34 | /** |
| 42 | - * 说明: | ||
| 43 | - * (1)影响输出文本的多样性,取值越大,生成文本的多样性越强 | ||
| 44 | - * (2)默认0.8,取值范围 [0, 1.0] | ||
| 45 | - * 必填:否 | 35 | + * topP |
| 46 | */ | 36 | */ |
| 47 | - private Float top_p; | 37 | + @JsonProperty("top_p") |
| 38 | + private Float topP; | ||
| 48 | /** | 39 | /** |
| 49 | - * 通过对已生成的token增加惩罚,减少重复生成的现象。说明: | ||
| 50 | - * (1)值越大表示惩罚越大 | ||
| 51 | - * (2)默认1.0,取值范围:[1.0, 2.0] | ||
| 52 | - * | ||
| 53 | - * 必填:否 | 40 | + * 通过对已生成的token增加惩罚,减少重复生成的现象 |
| 54 | */ | 41 | */ |
| 55 | - private Float penalty_score; | 42 | + @JsonProperty("penalty_score") |
| 43 | + private Float penaltyScore; | ||
| 56 | /** | 44 | /** |
| 57 | - * 是否以流式接口的形式返回数据,默认false | ||
| 58 | - * 必填:否 | 45 | + * stream 模式 |
| 59 | */ | 46 | */ |
| 60 | private Boolean stream; | 47 | private Boolean stream; |
| 61 | /** | 48 | /** |
| 62 | - * 模型人设,主要用于人设设定,例如,你是xxx公司制作的AI助手,说明: | ||
| 63 | - * (1)长度限制,最后一个message的content长度(即此轮对话的问题)、functions和system字段总内容不能超过20480 个字符,且不能超过5120 tokens | ||
| 64 | - * (2)如果同时使用system和functions,可能暂无法保证使用效果,持续进行优化 | ||
| 65 | - * 必填:否 | 49 | + * system 预设角色 |
| 66 | */ | 50 | */ |
| 67 | private String system; | 51 | private String system; |
| 68 | /** | 52 | /** |
| 69 | - * 生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成。说明: | ||
| 70 | - * (1)每个元素长度不超过20字符 | ||
| 71 | - * (2)最多4个元素 | ||
| 72 | - * 必填:否 | 53 | + * 生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成 |
| 73 | */ | 54 | */ |
| 74 | private List<String> stop; | 55 | private List<String> stop; |
| 75 | /** | 56 | /** |
| 76 | - * 是否强制关闭实时搜索功能,默认false,表示不关闭 | ||
| 77 | - * 必填:否 | 57 | + * 是否强制关闭实时搜索功能 |
| 78 | */ | 58 | */ |
| 79 | - private Boolean disable_search; | 59 | + @JsonProperty("disable_search") |
| 60 | + private Boolean disableSearch; | ||
| 80 | /** | 61 | /** |
| 81 | - * 是否开启上角标返回,说明: | ||
| 82 | - * (1)开启后,有概率触发搜索溯源信息search_info,search_info内容见响应参数介绍 | ||
| 83 | - * (2)默认false,不开启 | ||
| 84 | - * 必填:否 | 62 | + * 是否开启上角标返回 |
| 85 | */ | 63 | */ |
| 86 | - private Boolean enable_citation; | 64 | + @JsonProperty("enable_citation") |
| 65 | + private Boolean enableCitation; | ||
| 87 | /** | 66 | /** |
| 88 | - * 指定模型最大输出token数,范围[2, 2048] | ||
| 89 | - * 必填:否 | 67 | + * 最大输出 token 数 |
| 90 | */ | 68 | */ |
| 91 | - private Integer max_output_tokens; | 69 | + @JsonProperty("max_output_tokens") |
| 70 | + private Integer maxOutputTokens; | ||
| 92 | /** | 71 | /** |
| 93 | - * 指定响应内容的格式,说明: | ||
| 94 | - * (1)可选值: | ||
| 95 | - * · json_object:以json格式返回,可能出现不满足效果情况 | ||
| 96 | - * · text:以文本格式返回 | ||
| 97 | - * (2)如果不填写参数response_format值,默认为text | ||
| 98 | - * 必填:否 | 72 | + * 返回格式 text、json_object |
| 99 | */ | 73 | */ |
| 100 | - private String response_format; | 74 | + @JsonProperty("response_format") |
| 75 | + private String responseFormat; | ||
| 101 | /** | 76 | /** |
| 102 | - * 表示最终用户的唯一标识符 | ||
| 103 | - * 必填:否 | 77 | + * 用户 id |
| 104 | */ | 78 | */ |
| 105 | - private String user_id; | 79 | + @JsonProperty("user_id") |
| 80 | + private String userId; | ||
| 106 | /** | 81 | /** |
| 107 | * 在函数调用场景下,提示大模型选择指定的函数(非强制),说明:指定的函数名必须在functions中存在 | 82 | * 在函数调用场景下,提示大模型选择指定的函数(非强制),说明:指定的函数名必须在functions中存在 |
| 108 | - * 必填:否 | ||
| 109 | - * | ||
| 110 | - * ERNIE-4.0-8K 模型没有这个字段 | 83 | + * tip: ERNIE-4.0-8K 模型没有这个字段 |
| 111 | */ | 84 | */ |
| 112 | - private String tool_choice; | 85 | + @JsonProperty("tool_choice") |
| 86 | + private String toolChoice; | ||
| 113 | 87 | ||
| 114 | 88 | ||
| 115 | @Data | 89 | @Data |