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

This commit is contained in:
YunaiV 2024-06-27 08:41:45 +08:00
commit 660a29d4e3
5 changed files with 56 additions and 119 deletions

View File

@ -3,9 +3,9 @@ package cn.iocoder.yudao.module.ai.enums.model;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
// TODO done @fansili1类注释要加下2author time javadoc@author @since3@AllArgsConstructor 使用这个注解去掉构造方法4value 改成 model 字段然后注释都写下哈5message 改成 name然后注释都写下哈
// TODO @fan: AiModelEnum 是不是可以缩写成这个哈所有的模型都写在这里枚举
/** /**
* ai 模型
*
* @author: fansili * @author: fansili
* @time: 2024/3/4 12:36 * @time: 2024/3/4 12:36
*/ */

View File

@ -119,8 +119,8 @@ public class YiYanChatClient implements ChatClient, StreamingChatClient {
// 复制 YiYanOptions 属性 request 这里 options 属性和 request 基本保持一致 // 复制 YiYanOptions 属性 request 这里 options 属性和 request 基本保持一致
YiYanChatOptions useOptions = getYiYanOptions(prompt); YiYanChatOptions useOptions = getYiYanOptions(prompt);
BeanUtil.copyProperties(useOptions, request); BeanUtil.copyProperties(useOptions, request);
request.setTop_p(useOptions.getTopP()) request.setTopP(useOptions.getTopP())
.setMax_output_tokens(useOptions.getMaxOutputTokens()) .setMaxOutputTokens(useOptions.getMaxOutputTokens())
.setTemperature(useOptions.getTemperature()) .setTemperature(useOptions.getTemperature())
.setSystem(systemPrompt) .setSystem(systemPrompt)
.setStream(stream); .setStream(stream);

View File

@ -6,9 +6,6 @@ import org.springframework.ai.chat.prompt.ChatOptions;
import java.util.List; import java.util.List;
// TODO @fan增加一个 model
// TODO @fan字段命名penalty_score 类似的建议改成驼峰原则
// TODO @fan字段的注释可以都删除掉让用户 https://cloud.baidu.com/doc/WENXINWORKSHOP/s/clntwmv7t 即可
/** /**
* 文心一言的 {@link ChatOptions} 实现类 * 文心一言的 {@link ChatOptions} 实现类
* *
@ -20,91 +17,58 @@ import java.util.List;
public class YiYanChatOptions implements ChatOptions { public class YiYanChatOptions implements ChatOptions {
/** /**
* 一个可触发函数的描述列表说明 * functions 函数
* 1支持的function数量无限制
* 2长度限制最后一个message的content长度即此轮对话的问题functions和system字段总内容不能超过20480 个字符且不能超过5120 tokens
* 必填
*/ */
private List<YiYanChatCompletionRequest.Function> functions; private List<YiYanChatCompletionRequest.Function> functions;
/** /**
* 说明 * temperature
* 1较高的数值会使输出更加随机而较低的数值会使其更加集中和确定
* 2默认0.8范围 (0, 1.0]不能为0
* 必填
*/ */
private Float temperature; private Float temperature;
/** /**
* 说明 * topP
* 1影响输出文本的多样性取值越大生成文本的多样性越强
* 2默认0.8取值范围 [0, 1.0]
* 必填
*/ */
private Float topP; private Float topP;
/** /**
* 通过对已生成的token增加惩罚减少重复生成的现象说明 * 通过对已生成的token增加惩罚减少重复生成的现象
* 1值越大表示惩罚越大
* 2默认1.0取值范围[1.0, 2.0]
*
* 必填
*/ */
private Float penalty_score; private Float penaltyScore;
/** /**
* 是否以流式接口的形式返回数据默认false * stream 模式请求
* 必填
*/ */
private Boolean stream; private Boolean stream;
/** /**
* 模型人设主要用于人设设定例如你是xxx公司制作的AI助手说明 * system 提示
* 1长度限制最后一个message的content长度即此轮对话的问题functions和system字段总内容不能超过20480 个字符且不能超过5120 tokens
* 2如果同时使用system和functions可能暂无法保证使用效果持续进行优化
* 必填
*/ */
private String system; private String system;
/** /**
* 生成停止标识当模型生成结果以stop中某个元素结尾时停止文本生成说明 * 生成停止标识当模型生成结果以stop中某个元素结尾时停止文本生成
* 1每个元素长度不超过20字符
* 2最多4个元素
* 必填
*/ */
private List<String> stop; private List<String> stop;
/** /**
* 是否强制关闭实时搜索功能默认false表示不关闭 * 是否强制关闭实时搜索功能
* 必填
*/ */
private Boolean disable_search; private Boolean disableSearch;
/** /**
* 是否开启上角标返回说明 * 是否开启上角标返回
* 1开启后有概率触发搜索溯源信息search_infosearch_info内容见响应参数介绍
* 2默认false不开启
* 必填
*/ */
private Boolean enable_citation; private Boolean enableCitation;
/** /**
* 指定模型最大输出token数范围[2, 2048] * 输出最大 token
* 必填
*/ */
private Integer maxOutputTokens; private Integer maxOutputTokens;
/** /**
* 指定响应内容的格式说明 * 响应格式 textjson_object
* 1可选值
* · json_object以json格式返回可能出现不满足效果情况
* · text以文本格式返回
* 2如果不填写参数response_format值默认为text
* 必填
*/ */
private String response_format; private String responseFormat;
/** /**
* 表示最终用户的唯一标识符 * 用户id
* 必填
*/ */
private String user_id; private String userId;
/** /**
* 在函数调用场景下提示大模型选择指定的函数非强制说明指定的函数名必须在functions中存在 * 在函数调用场景下提示大模型选择指定的函数非强制说明指定的函数名必须在functions中存在
* 必填 * tip: ERNIE-4.0-8K 模型没有这个字段
*
* ERNIE-4.0-8K 模型没有这个字段
*/ */
private String tool_choice; private String toolChoice;
@Override @Override
public Float getTemperature() { public Float getTemperature() {
@ -118,8 +82,6 @@ public class YiYanChatOptions implements ChatOptions {
/** /**
* 百度么有 topK * 百度么有 topK
*
* @return null
*/ */
@Override @Override
public Integer getTopK() { public Integer getTopK() {

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.framework.ai.core.model.yiyan.api; 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.ai.core.model.yiyan.exception.YiYanApiException;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import org.springframework.http.HttpStatusCode; import org.springframework.http.HttpStatusCode;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
@ -85,7 +86,7 @@ public class YiYanApi {
-> uriBuilder.path(useChatModel.getUri()) -> uriBuilder.path(useChatModel.getUri())
.queryParam("access_token", token) .queryParam("access_token", token)
.build()) .build())
.body(Mono.just(request), YiYanChatCompletionRequest.class) .body(Mono.just(JsonUtils.toJsonString(request)), String.class)
.retrieve() .retrieve()
.toEntity(YiYanChatCompletionResponse.class) .toEntity(YiYanChatCompletionResponse.class)
.block(); .block();

View File

@ -1,10 +1,10 @@
package cn.iocoder.yudao.framework.ai.core.model.yiyan.api; package cn.iocoder.yudao.framework.ai.core.model.yiyan.api;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
// TODO @fan字段驼峰字段注释都可以删除贴个链接就好
/** /**
* 文心一言 Completion Request * 文心一言 Completion Request
* *
@ -20,96 +20,70 @@ public class YiYanChatCompletionRequest {
} }
/** /**
* 聊天上下文信息 * 聊天上下文信息
* 必填
*/ */
private List<Message> messages; private List<Message> messages;
/** /**
* 一个可触发函数的描述列表说明 * functions 函数
* 1支持的function数量无限制
* 2长度限制最后一个message的content长度即此轮对话的问题functions和system字段总内容不能超过20480 个字符且不能超过5120 tokens
* 必填
*/ */
private List<Function> functions; private List<Function> functions;
/** /**
* 说明 * temperature
* 1较高的数值会使输出更加随机而较低的数值会使其更加集中和确定
* 2默认0.8范围 (0, 1.0]不能为0
* 必填
*/ */
private Float temperature; private Float temperature;
/** /**
* 说明 * topP
* 1影响输出文本的多样性取值越大生成文本的多样性越强
* 2默认0.8取值范围 [0, 1.0]
* 必填
*/ */
private Float top_p; @JsonProperty("top_p")
private Float topP;
/** /**
* 通过对已生成的token增加惩罚减少重复生成的现象说明 * 通过对已生成的token增加惩罚减少重复生成的现象
* 1值越大表示惩罚越大
* 2默认1.0取值范围[1.0, 2.0]
*
* 必填
*/ */
private Float penalty_score; @JsonProperty("penalty_score")
private Float penaltyScore;
/** /**
* 是否以流式接口的形式返回数据默认false * stream 模式
* 必填
*/ */
private Boolean stream; private Boolean stream;
/** /**
* 模型人设主要用于人设设定例如你是xxx公司制作的AI助手说明 * system 预设角色
* 1长度限制最后一个message的content长度即此轮对话的问题functions和system字段总内容不能超过20480 个字符且不能超过5120 tokens
* 2如果同时使用system和functions可能暂无法保证使用效果持续进行优化
* 必填
*/ */
private String system; private String system;
/** /**
* 生成停止标识当模型生成结果以stop中某个元素结尾时停止文本生成说明 * 生成停止标识当模型生成结果以stop中某个元素结尾时停止文本生成
* 1每个元素长度不超过20字符
* 2最多4个元素
* 必填
*/ */
private List<String> stop; private List<String> stop;
/** /**
* 是否强制关闭实时搜索功能默认false表示不关闭 * 是否强制关闭实时搜索功能
* 必填
*/ */
private Boolean disable_search; @JsonProperty("disable_search")
private Boolean disableSearch;
/** /**
* 是否开启上角标返回说明 * 是否开启上角标返回
* 1开启后有概率触发搜索溯源信息search_infosearch_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;
/** /**
* 指定响应内容的格式说明 * 返回格式 textjson_object
* 1可选值
* · json_object以json格式返回可能出现不满足效果情况
* · text以文本格式返回
* 2如果不填写参数response_format值默认为text
* 必填
*/ */
private String response_format; @JsonProperty("response_format")
private String responseFormat;
/** /**
* 表示最终用户的唯一标识符 * 用户 id
* 必填
*/ */
private String user_id; @JsonProperty("user_id")
private String userId;
/** /**
* 在函数调用场景下提示大模型选择指定的函数非强制说明指定的函数名必须在functions中存在 * 在函数调用场景下提示大模型选择指定的函数非强制说明指定的函数名必须在functions中存在
* 必填 * tip: ERNIE-4.0-8K 模型没有这个字段
*
* ERNIE-4.0-8K 模型没有这个字段
*/ */
private String tool_choice; @JsonProperty("tool_choice")
private String toolChoice;
@Data @Data