Skip to content

Commit 1773bba

Browse files
authored
fix:modify AI function (#162)
* fix:fix AppV1ServiceImplTest and blockMapper * fix:modify AI function
1 parent cca5e8b commit 1773bba

3 files changed

Lines changed: 68 additions & 46 deletions

File tree

app/src/main/resources/sql/mysql/create_all_tables_ddl_v1.mysql.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ create table `t_page`
343343
`last_updated_by` varchar(60) not null comment '最后修改人',
344344
`last_updated_time` timestamp not null default current_timestamp comment '更新时间',
345345
primary key (`id`) using btree,
346-
unique index `u_idx_page` (`app_id`, `name`) using btree
346+
unique index `u_idx_page` (`app_id`,`parent_id`,`route`,`is_page`,`tenant_id`, `name`) using btree
347347
) engine = innodb comment = '页面表';
348348

349349
drop table if exists `t_page_history`;

base/src/main/java/com/tinyengine/it/common/enums/Enums.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -788,7 +788,7 @@ public enum FoundationModel {
788788
* Ernie bot turbo e foundation model.
789789
*/
790790
// 文心一言
791-
ERNIBOT_TURBO("ERNIE-Bot-turbo");
791+
ERNIBOT_TURBO("ERNIE-4.0-8K");
792792
private final String value;
793793

794794
FoundationModel(String value) {

base/src/main/java/com/tinyengine/it/service/app/impl/AiChatServiceImpl.java

Lines changed: 66 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,52 @@ public Result<Map<String, Object>> getAnswerFromAi(AiParam aiParam) {
8989
}
9090
List<Map<String, Object>> choices = (List<Map<String, Object>>) data.get("choices");
9191
Map<String, String> message = (Map<String, String>) choices.get(0).get("message");
92-
String answerContent = message.get("content");
92+
boolean isFinish = false;
93+
String answerContent = "";
94+
isFinish = choices.get(0).get("finish_reason") != null || isFinish;
95+
if (!"length".equals(isFinish)) {
96+
answerContent = message.get("content");
97+
}
98+
99+
// 若内容被截断,继续请求AI
100+
while (isFinish) {
101+
String prefix = message.get("content");
102+
answerContent = answerContent + prefix;
103+
104+
// 将此部分内容加入消息列表
105+
Map<String, Object> partialMessage = new HashMap<>();
106+
AiMessages aiMessages = new AiMessages();
107+
List<AiMessages> messagesList = aiParam.getMessages();
108+
aiMessages.setRole("assistant");
109+
aiMessages.setName("AI");
110+
aiMessages.setContent(prefix);
111+
messagesList.add(aiMessages);
112+
aiParam.setMessages(messagesList);
113+
114+
// 再次请求AI
115+
try {
116+
data = requestAnswerFromAi(aiParam.getMessages(), model).getData();
117+
} catch (Exception e) {
118+
e.printStackTrace();
119+
}
120+
choices = (List<Map<String, Object>>) data.get("choices");
121+
message = (Map<String, String>) choices.get(0).get("message");
122+
answerContent += message.get("content");
123+
isFinish = (boolean) choices.get(0).get("finish_reason");
124+
}
125+
126+
93127
String replyWithoutCode = removeCode(answerContent);
94128
// 通过二方包将页面转成schema
95129
String codes = extractCode(answerContent);
96130

97131
Map<String, Object> schema = new HashMap<>();
98132
Map<String, Object> result = new HashMap<>();
99-
result.put("originalResponse", data);
133+
AiMessages aiMessagesresult = new AiMessages();
134+
aiMessagesresult.setContent(answerContent);
135+
aiMessagesresult.setRole(message.get("role"));
136+
aiMessagesresult.setName(message.get("name"));
137+
result.put("originalResponse", aiMessagesresult);
100138
result.put("replyWithoutCode", replyWithoutCode);
101139
result.put("schema", schema);
102140

@@ -132,41 +170,25 @@ private Result<Map<String, Object>> requestAnswerFromAi(List<AiMessages> message
132170
* @return result 返回结果
133171
*/
134172
private Result<Map<String, Object>> modelResultConvet(Map<String, Object> response) {
135-
// 进行转换
136-
Object data = response.get("data");
137-
if (data instanceof Map) { // 确保数据是 Map 类型
138-
Map<String, Object> responseData = (Map<String, Object>) data;
139-
140-
Map<String, Object> openAiResponse = new HashMap<>();
141-
openAiResponse.put("id", responseData.get("id"));
142-
openAiResponse.put("object", "text_completion");
143-
openAiResponse.put("created", System.currentTimeMillis() / 1000); // 设置创建时间戳
144-
openAiResponse.put("model", responseData.get("model"));
145-
146-
List<Map<String, Object>> chatgptChoices = new ArrayList<>();
147-
Object choices = responseData.get("choices");
148-
if (choices instanceof List) { // 确保 choices 是 List 类型
149-
List<Map<String, Object>> originalChoices = (List<Map<String, Object>>) choices;
150-
if (!originalChoices.isEmpty()) {
151-
Map<String, Object> originalChoice = originalChoices.get(0);
152-
Map<String, Object> chatgptChoice = new HashMap<>();
153-
chatgptChoice.put("text", originalChoice.get("text"));
154-
chatgptChoice.put("index", originalChoice.get("index"));
155-
chatgptChoice.put("message", originalChoice.get("message"));
156-
chatgptChoices.add(chatgptChoice);
157-
}
158-
}
159-
openAiResponse.put("choices", chatgptChoices);
160-
161-
Map<String, Object> chatgptUsage = new HashMap<>();
162-
chatgptUsage.put("prompt_tokens", responseData.get("input_tokens"));
163-
chatgptUsage.put("completion_tokens", responseData.get("output_tokens"));
164-
chatgptUsage.put("total_tokens", responseData.get("total_tokens"));
165-
openAiResponse.put("usage", chatgptUsage);
166-
return Result.success(openAiResponse);
167-
} else {
168-
return Result.failed("Invalid response format: 'data' is not a Map.");
169-
}
173+
174+
// 构建返回的 Map 结构
175+
Map<String, Object> resData = new HashMap<>(response); // Copy original data
176+
177+
// 构建 choices 数组
178+
List<Map<String, Object>> choices = new ArrayList<>();
179+
Map<String, Object> choice = new HashMap<>();
180+
Map<String, String> message = new HashMap<>();
181+
message.put("role", "assistant");
182+
message.put("content", (String) response.get("result"));
183+
message.put("name", "AI");
184+
choice.put("message", message);
185+
choices.add(choice);
186+
187+
// 将 choices 添加到响应中
188+
resData.put("choices", choices);
189+
190+
return Result.success(resData);
191+
170192
}
171193

172194
/**
@@ -219,20 +241,20 @@ private List<AiMessages> formatMessage(List<AiMessages> messages) {
219241
+ "5. 不要加任何注释\n"
220242
+ "6. el-table标签内不得出现el-table-column\n"
221243
+ "###");
222-
244+
defaultWords.setName(messages.get(0).getName());
223245
String role = messages.get(0).getRole();
224246
String content = messages.get(0).getContent();
225247

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

228-
if (!"user".equals(role)) {
229-
aiMessages.add(0, defaultWords);
230-
}
231250
if (!PATTERN_MESSAGE.matcher(content).matches()) {
232-
AiMessages aiMessagesResult = new AiMessages();
251+
AiMessages aiMessagesResult = messages.get(0);
233252
aiMessagesResult.setContent(defaultWords.getContent() + "\n" + content);
234-
aiMessages.add(aiMessagesResult);
235253
}
236-
return aiMessages;
254+
if (!"user".equals(role)) {
255+
aiMessages.add(0, defaultWords);
256+
}
257+
258+
return messages;
237259
}
238260
}

0 commit comments

Comments
 (0)