Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ create table `t_page`
`last_updated_by` varchar(60) not null comment '最后修改人',
`last_updated_time` timestamp not null default current_timestamp comment '更新时间',
primary key (`id`) using btree,
unique index `u_idx_page` (`app_id`, `name`) using btree
unique index `u_idx_page` (`app_id`,`parent_id`,`route`,`is_page`,`tenant_id`, `name`) using btree
) engine = innodb comment = '页面表';

drop table if exists `t_page_history`;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -788,7 +788,7 @@ public enum FoundationModel {
* Ernie bot turbo e foundation model.
*/
// 文心一言
ERNIBOT_TURBO("ERNIE-Bot-turbo");
ERNIBOT_TURBO("ERNIE-4.0-8K");
private final String value;

FoundationModel(String value) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,14 +89,52 @@ public Result<Map<String, Object>> getAnswerFromAi(AiParam aiParam) {
}
List<Map<String, Object>> choices = (List<Map<String, Object>>) data.get("choices");
Map<String, String> message = (Map<String, String>) choices.get(0).get("message");
String answerContent = message.get("content");
boolean isFinish = false;
String answerContent = "";
isFinish = choices.get(0).get("finish_reason") != null || isFinish;
if (!"length".equals(isFinish)) {
answerContent = message.get("content");
}

// 若内容被截断,继续请求AI
while (isFinish) {
String prefix = message.get("content");
answerContent = answerContent + prefix;

// 将此部分内容加入消息列表
Map<String, Object> partialMessage = new HashMap<>();
AiMessages aiMessages = new AiMessages();
List<AiMessages> messagesList = aiParam.getMessages();
aiMessages.setRole("assistant");
aiMessages.setName("AI");
aiMessages.setContent(prefix);
messagesList.add(aiMessages);
aiParam.setMessages(messagesList);

// 再次请求AI
try {
data = requestAnswerFromAi(aiParam.getMessages(), model).getData();
} catch (Exception e) {
e.printStackTrace();
}
choices = (List<Map<String, Object>>) data.get("choices");
message = (Map<String, String>) choices.get(0).get("message");
answerContent += message.get("content");
isFinish = (boolean) choices.get(0).get("finish_reason");
}


String replyWithoutCode = removeCode(answerContent);
// 通过二方包将页面转成schema
String codes = extractCode(answerContent);

Map<String, Object> schema = new HashMap<>();
Map<String, Object> result = new HashMap<>();
result.put("originalResponse", data);
AiMessages aiMessagesresult = new AiMessages();
aiMessagesresult.setContent(answerContent);
aiMessagesresult.setRole(message.get("role"));
aiMessagesresult.setName(message.get("name"));
result.put("originalResponse", aiMessagesresult);
result.put("replyWithoutCode", replyWithoutCode);
result.put("schema", schema);

Expand Down Expand Up @@ -132,41 +170,25 @@ private Result<Map<String, Object>> requestAnswerFromAi(List<AiMessages> message
* @return result 返回结果
*/
private Result<Map<String, Object>> modelResultConvet(Map<String, Object> response) {
// 进行转换
Object data = response.get("data");
if (data instanceof Map) { // 确保数据是 Map 类型
Map<String, Object> responseData = (Map<String, Object>) data;

Map<String, Object> openAiResponse = new HashMap<>();
openAiResponse.put("id", responseData.get("id"));
openAiResponse.put("object", "text_completion");
openAiResponse.put("created", System.currentTimeMillis() / 1000); // 设置创建时间戳
openAiResponse.put("model", responseData.get("model"));

List<Map<String, Object>> chatgptChoices = new ArrayList<>();
Object choices = responseData.get("choices");
if (choices instanceof List) { // 确保 choices 是 List 类型
List<Map<String, Object>> originalChoices = (List<Map<String, Object>>) choices;
if (!originalChoices.isEmpty()) {
Map<String, Object> originalChoice = originalChoices.get(0);
Map<String, Object> chatgptChoice = new HashMap<>();
chatgptChoice.put("text", originalChoice.get("text"));
chatgptChoice.put("index", originalChoice.get("index"));
chatgptChoice.put("message", originalChoice.get("message"));
chatgptChoices.add(chatgptChoice);
}
}
openAiResponse.put("choices", chatgptChoices);

Map<String, Object> chatgptUsage = new HashMap<>();
chatgptUsage.put("prompt_tokens", responseData.get("input_tokens"));
chatgptUsage.put("completion_tokens", responseData.get("output_tokens"));
chatgptUsage.put("total_tokens", responseData.get("total_tokens"));
openAiResponse.put("usage", chatgptUsage);
return Result.success(openAiResponse);
} else {
return Result.failed("Invalid response format: 'data' is not a Map.");
}

// 构建返回的 Map 结构
Map<String, Object> resData = new HashMap<>(response); // Copy original data

// 构建 choices 数组
List<Map<String, Object>> choices = new ArrayList<>();
Map<String, Object> choice = new HashMap<>();
Map<String, String> message = new HashMap<>();
message.put("role", "assistant");
message.put("content", (String) response.get("result"));
message.put("name", "AI");
choice.put("message", message);
choices.add(choice);

// 将 choices 添加到响应中
resData.put("choices", choices);

return Result.success(resData);

}

/**
Expand Down Expand Up @@ -219,20 +241,20 @@ private List<AiMessages> formatMessage(List<AiMessages> messages) {
+ "5. 不要加任何注释\n"
+ "6. el-table标签内不得出现el-table-column\n"
+ "###");

defaultWords.setName(messages.get(0).getName());
String role = messages.get(0).getRole();
String content = messages.get(0).getContent();

List<AiMessages> aiMessages = new ArrayList<>();

if (!"user".equals(role)) {
aiMessages.add(0, defaultWords);
}
if (!PATTERN_MESSAGE.matcher(content).matches()) {
AiMessages aiMessagesResult = new AiMessages();
AiMessages aiMessagesResult = messages.get(0);
aiMessagesResult.setContent(defaultWords.getContent() + "\n" + content);
aiMessages.add(aiMessagesResult);
}
return aiMessages;
if (!"user".equals(role)) {
aiMessages.add(0, defaultWords);
}

return messages;
}
}