@@ -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