From b3a038310105147a7a0fd910c0439e73fa8b3471 Mon Sep 17 00:00:00 2001 From: cherishsince Date: Wed, 26 Jun 2024 15:48:05 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E3=80=90=E5=88=A0=E9=99=A4=E3=80=91progres?= =?UTF-8?q?s=20=E8=BF=9B=E5=BA=A6=EF=BC=8Cyunai=20=E6=8A=8A=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E5=88=A0=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/ai/controller/admin/image/vo/AiImageRespVO.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImageRespVO.java b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImageRespVO.java index 9d761a891..a46daf430 100644 --- a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImageRespVO.java +++ b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/controller/admin/image/vo/AiImageRespVO.java @@ -47,10 +47,6 @@ public class AiImageRespVO { @Schema(description = "绘制参数") private Map options; - // TODO @fan:进度是百分比,还是一个数字哈?感觉这个可以统一成通用字段; - @Schema(description = "mj 进度") - private String progress; - @Schema(description = "mj buttons 按钮") private List buttons; From 9fef49d8b34b825ea54a8b9331e8fb70d32d0b80 Mon Sep 17 00:00:00 2001 From: cherishsince Date: Wed, 26 Jun 2024 15:49:30 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E3=80=90=E8=A7=A3=E5=86=B3todo=E3=80=91AiM?= =?UTF-8?q?odelEnum=20=E5=B7=B2=E8=A7=A3=E5=86=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/iocoder/yudao/module/ai/enums/model/AiModelEnum.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/model/AiModelEnum.java b/yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/model/AiModelEnum.java index 9dfe6c411..a546051ab 100644 --- a/yudao-module-ai/yudao-module-ai-api/src/main/java/cn/iocoder/yudao/module/ai/enums/model/AiModelEnum.java +++ b/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; import lombok.AllArgsConstructor; import lombok.Getter; -// TODO done @fansili:1)类注释要加下;2)author 和 time 用 javadoc,@author 和 @since;3)@AllArgsConstructor 使用这个注解,去掉构造方法;4)value 改成 model 字段,然后注释都写下哈;5)message 改成 name,然后注释都写下哈 -// TODO @fan: AiModelEnum 是不是可以缩写成这个哈;所有的模型,都写在这里枚举; /** + * ai 模型 + * * @author: fansili * @time: 2024/3/4 12:36 */ From 0535c294f982982d9a7b3a743d9996e5c9969552 Mon Sep 17 00:00:00 2001 From: cherishsince Date: Wed, 26 Jun 2024 15:56:44 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E3=80=90=E8=A7=A3=E5=86=B3todo=E3=80=91?= =?UTF-8?q?=E9=A9=BC=E5=B3=B0=E5=91=BD=E5=90=8D=E3=80=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=B3=A8=E9=87=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/core/model/yiyan/YiYanChatOptions.java | 76 +++++-------------- 1 file changed, 19 insertions(+), 57 deletions(-) diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/YiYanChatOptions.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/YiYanChatOptions.java index a84b0ec98..817063c8f 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/YiYanChatOptions.java +++ b/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; import java.util.List; -// TODO @fan:增加一个 model -// TODO @fan:字段命名,penalty_score 类似的,建议改成驼峰原则 -// TODO @fan:字段的注释,可以都删除掉,让用户 https://cloud.baidu.com/doc/WENXINWORKSHOP/s/clntwmv7t 即可 /** * 文心一言的 {@link ChatOptions} 实现类 * @@ -20,91 +17,58 @@ import java.util.List; public class YiYanChatOptions implements ChatOptions { /** - * 一个可触发函数的描述列表,说明: - * (1)支持的function数量无限制 - * (2)长度限制,最后一个message的content长度(即此轮对话的问题)、functions和system字段总内容不能超过20480 个字符,且不能超过5120 tokens - * 必填:否 + * functions 函数 */ private List functions; /** - * 说明: - * (1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 - * (2)默认0.8,范围 (0, 1.0],不能为0 - * 必填:否 + * temperature */ private Float temperature; /** - * 说明: - * (1)影响输出文本的多样性,取值越大,生成文本的多样性越强 - * (2)默认0.8,取值范围 [0, 1.0] - * 必填:否 + * topP */ private Float topP; /** - * 通过对已生成的token增加惩罚,减少重复生成的现象。说明: - * (1)值越大表示惩罚越大 - * (2)默认1.0,取值范围:[1.0, 2.0] - * - * 必填:否 + * 通过对已生成的token增加惩罚,减少重复生成的现象 */ - private Float penalty_score; + private Float penaltyScore; /** - * 是否以流式接口的形式返回数据,默认false - * 必填:否 + * stream 模式请求 */ private Boolean stream; /** - * 模型人设,主要用于人设设定,例如,你是xxx公司制作的AI助手,说明: - * (1)长度限制,最后一个message的content长度(即此轮对话的问题)、functions和system字段总内容不能超过20480 个字符,且不能超过5120 tokens - * (2)如果同时使用system和functions,可能暂无法保证使用效果,持续进行优化 - * 必填:否 + * system 提示 */ private String system; /** - * 生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成。说明: - * (1)每个元素长度不超过20字符 - * (2)最多4个元素 - * 必填:否 + * 生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成 */ private List stop; /** - * 是否强制关闭实时搜索功能,默认false,表示不关闭 - * 必填:否 + * 是否强制关闭实时搜索功能 */ - private Boolean disable_search; + private Boolean disableSearch; /** - * 是否开启上角标返回,说明: - * (1)开启后,有概率触发搜索溯源信息search_info,search_info内容见响应参数介绍 - * (2)默认false,不开启 - * 必填:否 + * 是否开启上角标返回 */ - private Boolean enable_citation; + private Boolean enableCitation; /** - * 指定模型最大输出token数,范围[2, 2048] - * 必填:否 + * 输出最大 token */ private Integer maxOutputTokens; /** - * 指定响应内容的格式,说明: - * (1)可选值: - * · json_object:以json格式返回,可能出现不满足效果情况 - * · text:以文本格式返回 - * (2)如果不填写参数response_format值,默认为text - * 必填:否 + * 响应格式 text、json_object */ - private String response_format; + private String responseFormat; /** - * 表示最终用户的唯一标识符 - * 必填:否 + * 用户id */ - private String user_id; + private String userId; /** * 在函数调用场景下,提示大模型选择指定的函数(非强制),说明:指定的函数名必须在functions中存在 - * 必填:否 - * - * ERNIE-4.0-8K 模型没有这个字段 + * tip: ERNIE-4.0-8K 模型没有这个字段 */ - private String tool_choice; + private String toolChoice; @Override public Float getTemperature() { @@ -118,8 +82,6 @@ public class YiYanChatOptions implements ChatOptions { /** * 百度么有 topK - * - * @return null */ @Override public Integer getTopK() { From 89db7883e337c975b53356a6475553a912012683 Mon Sep 17 00:00:00 2001 From: cherishsince Date: Wed, 26 Jun 2024 16:25:10 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E3=80=90=E8=A7=A3=E5=86=B3todo=E3=80=91?= =?UTF-8?q?=E9=A9=BC=E5=B3=B0=E5=91=BD=E5=90=8D=E3=80=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/core/model/yiyan/YiYanChatClient.java | 4 +- .../ai/core/model/yiyan/api/YiYanApi.java | 3 +- .../yiyan/api/YiYanChatCompletionRequest.java | 88 +++++++------------ 3 files changed, 35 insertions(+), 60 deletions(-) diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/YiYanChatClient.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/YiYanChatClient.java index c7b0bf372..4a2fa7b3a 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/YiYanChatClient.java +++ b/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 { // 复制 YiYanOptions 属性,到 request 中(这里 options 属性和 request 基本保持一致) YiYanChatOptions useOptions = getYiYanOptions(prompt); BeanUtil.copyProperties(useOptions, request); - request.setTop_p(useOptions.getTopP()) - .setMax_output_tokens(useOptions.getMaxOutputTokens()) + request.setTopP(useOptions.getTopP()) + .setMaxOutputTokens(useOptions.getMaxOutputTokens()) .setTemperature(useOptions.getTemperature()) .setSystem(systemPrompt) .setStream(stream); diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/api/YiYanApi.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/api/YiYanApi.java index 93cd13fe1..1de119bf7 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/api/YiYanApi.java +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/api/YiYanApi.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.framework.ai.core.model.yiyan.api; import cn.iocoder.yudao.framework.ai.core.model.yiyan.exception.YiYanApiException; +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; import org.springframework.web.reactive.function.client.WebClient; @@ -85,7 +86,7 @@ public class YiYanApi { -> uriBuilder.path(useChatModel.getUri()) .queryParam("access_token", token) .build()) - .body(Mono.just(request), YiYanChatCompletionRequest.class) + .body(Mono.just(JsonUtils.toJsonString(request)), String.class) .retrieve() .toEntity(YiYanChatCompletionResponse.class) .block(); diff --git a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/api/YiYanChatCompletionRequest.java b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/api/YiYanChatCompletionRequest.java index 250131854..d496beae2 100644 --- a/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/api/YiYanChatCompletionRequest.java +++ b/yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/yiyan/api/YiYanChatCompletionRequest.java @@ -1,10 +1,10 @@ package cn.iocoder.yudao.framework.ai.core.model.yiyan.api; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.util.List; -// TODO @fan:字段驼峰;字段注释都可以删除,贴个链接就好; /** * 文心一言 Completion Request * @@ -20,96 +20,70 @@ public class YiYanChatCompletionRequest { } /** - * 聊天上下文信息。 - * 必填:是 + * 聊天上下文信息 */ private List messages; /** - * 一个可触发函数的描述列表,说明: - * (1)支持的function数量无限制 - * (2)长度限制,最后一个message的content长度(即此轮对话的问题)、functions和system字段总内容不能超过20480 个字符,且不能超过5120 tokens - * 必填:否 + * functions 函数 */ private List functions; /** - * 说明: - * (1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 - * (2)默认0.8,范围 (0, 1.0],不能为0 - * 必填:否 + * temperature */ private Float temperature; /** - * 说明: - * (1)影响输出文本的多样性,取值越大,生成文本的多样性越强 - * (2)默认0.8,取值范围 [0, 1.0] - * 必填:否 + * topP */ - private Float top_p; + @JsonProperty("top_p") + private Float topP; /** - * 通过对已生成的token增加惩罚,减少重复生成的现象。说明: - * (1)值越大表示惩罚越大 - * (2)默认1.0,取值范围:[1.0, 2.0] - * - * 必填:否 + * 通过对已生成的token增加惩罚,减少重复生成的现象 */ - private Float penalty_score; + @JsonProperty("penalty_score") + private Float penaltyScore; /** - * 是否以流式接口的形式返回数据,默认false - * 必填:否 + * stream 模式 */ private Boolean stream; /** - * 模型人设,主要用于人设设定,例如,你是xxx公司制作的AI助手,说明: - * (1)长度限制,最后一个message的content长度(即此轮对话的问题)、functions和system字段总内容不能超过20480 个字符,且不能超过5120 tokens - * (2)如果同时使用system和functions,可能暂无法保证使用效果,持续进行优化 - * 必填:否 + * system 预设角色 */ private String system; /** - * 生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成。说明: - * (1)每个元素长度不超过20字符 - * (2)最多4个元素 - * 必填:否 + * 生成停止标识,当模型生成结果以stop中某个元素结尾时,停止文本生成 */ private List stop; /** - * 是否强制关闭实时搜索功能,默认false,表示不关闭 - * 必填:否 + * 是否强制关闭实时搜索功能 */ - private Boolean disable_search; + @JsonProperty("disable_search") + private Boolean disableSearch; /** - * 是否开启上角标返回,说明: - * (1)开启后,有概率触发搜索溯源信息search_info,search_info内容见响应参数介绍 - * (2)默认false,不开启 - * 必填:否 + * 是否开启上角标返回 */ - private Boolean enable_citation; + @JsonProperty("enable_citation") + private Boolean enableCitation; /** - * 指定模型最大输出token数,范围[2, 2048] - * 必填:否 + * 最大输出 token 数 */ - private Integer max_output_tokens; + @JsonProperty("max_output_tokens") + private Integer maxOutputTokens; /** - * 指定响应内容的格式,说明: - * (1)可选值: - * · json_object:以json格式返回,可能出现不满足效果情况 - * · text:以文本格式返回 - * (2)如果不填写参数response_format值,默认为text - * 必填:否 + * 返回格式 text、json_object */ - private String response_format; + @JsonProperty("response_format") + private String responseFormat; /** - * 表示最终用户的唯一标识符 - * 必填:否 + * 用户 id */ - private String user_id; + @JsonProperty("user_id") + private String userId; /** * 在函数调用场景下,提示大模型选择指定的函数(非强制),说明:指定的函数名必须在functions中存在 - * 必填:否 - * - * ERNIE-4.0-8K 模型没有这个字段 + * tip: ERNIE-4.0-8K 模型没有这个字段 */ - private String tool_choice; + @JsonProperty("tool_choice") + private String toolChoice; @Data