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 */ 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/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() { 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