Commit 660a29d4e3a1b5429a95fd9c493fdf15f422b1e3

Authored by YunaiV
2 parents b8bae970 89db7883

Merge remote-tracking branch 'origin/master-jdk21-ai' into master-jdk21-ai

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