2727import ai .chat2db .server .web .api .controller .ai .claude .model .ClaudeChatMessage ;
2828import ai .chat2db .server .web .api .controller .ai .config .LocalCache ;
2929import ai .chat2db .server .web .api .controller .ai .converter .ChatConverter ;
30- import ai .chat2db .server .web .api .controller .ai .dify .client .DifyChatAIClient ;
31- import ai .chat2db .server .web .api .controller .ai .dify .listener .DifyChatAIEventSourceListener ;
32- import ai .chat2db .server .web .api .controller .ai .dify .model .DifyChatConstant ;
3330import ai .chat2db .server .web .api .controller .ai .enums .PromptType ;
3431import ai .chat2db .server .web .api .controller .ai .fastchat .client .FastChatAIClient ;
3532import ai .chat2db .server .web .api .controller .ai .fastchat .embeddings .FastChatEmbeddingResponse ;
@@ -135,7 +132,7 @@ public class ChatController {
135132 /**
136133 * 自定义模型流式输出接口DEMO
137134 * <p>
138- * Note:使用自己本地的流式输出的自定义AI,接口输入和输出需与该样例保持一致
135+ * Note:使用自己本地的流式输出的自定义AI,接口输入和输出需与该样例保持一致
139136 * </p>
140137 *
141138 * @param queryRequest
@@ -174,7 +171,7 @@ public SseEmitter customChat(@RequestBody ChatRequest queryRequest) throws IOExc
174171 /**
175172 * 自定义模型非流式输出接口DEMO
176173 * <p>
177- * Note:使用自己本地的飞流式输出自定义AI,接口输入和输出需与该样例保持一致
174+ * Note:使用自己本地的飞流式输出自定义AI,接口输入和输出需与该样例保持一致
178175 * </p>
179176 *
180177 * @param queryRequest
@@ -199,7 +196,7 @@ public String customNonStreamChat(@RequestBody ChatRequest queryRequest) throws
199196 @ GetMapping ("/chat" )
200197 @ CrossOrigin
201198 public SseEmitter completions (ChatQueryRequest queryRequest , @ RequestHeader Map <String , String > headers )
202- throws IOException {
199+ throws IOException {
203200 //默认30秒超时,设置为0L则永不超时
204201 SseEmitter sseEmitter = new SseEmitter (CHAT_TIMEOUT );
205202 String uid = headers .get ("uid" );
@@ -233,14 +230,14 @@ public SseEmitter distributeAISql(ChatQueryRequest queryRequest, SseEmitter sseE
233230 }
234231 uid = aiSqlSourceEnum .getCode () + uid ;
235232 switch (Objects .requireNonNull (aiSqlSourceEnum )) {
236- case OPENAI :
233+ case OPENAI :
237234 return chatWithOpenAi (queryRequest , sseEmitter , uid );
238235 case CHAT2DBAI :
239236 return chatWithChat2dbAi (queryRequest , sseEmitter , uid );
240- case RESTAI :
237+ case RESTAI :
241238 case FASTCHATAI :
242239 return chatWithFastChatAi (queryRequest , sseEmitter , uid );
243- case AZUREAI :
240+ case AZUREAI :
244241 return chatWithAzureAi (queryRequest , sseEmitter , uid );
245242 case CLAUDEAI :
246243 return chatWithClaudeAi (queryRequest , sseEmitter , uid );
@@ -252,35 +249,10 @@ public SseEmitter distributeAISql(ChatQueryRequest queryRequest, SseEmitter sseE
252249 return chatWithTongyiChatAi (queryRequest , sseEmitter , uid );
253250 case ZHIPUAI :
254251 return chatWithZhipuChatAi (queryRequest , sseEmitter , uid );
255- case DIFYCHAT :
256- return chatWithDifyChatAi (queryRequest , sseEmitter , uid );
257252 }
258253 return chatWithOpenAi (queryRequest , sseEmitter , uid );
259254 }
260255
261- private SseEmitter chatWithDifyChatAi (ChatQueryRequest queryRequest , SseEmitter sseEmitter , String uid ) throws IOException {
262- String prompt = buildPrompt (queryRequest );
263- if (prompt .length () / TOKEN_CONVERT_CHAR_LENGTH > MAX_PROMPT_LENGTH ) {
264- log .error ("exceed max token length:{},input length:{}" , MAX_PROMPT_LENGTH ,
265- prompt .length () / TOKEN_CONVERT_CHAR_LENGTH );
266- throw new ParamBusinessException ();
267- }
268-
269- prompt = prompt .replaceAll ("#" , "" );
270- log .info (prompt );
271-
272- Message currentMessage = Message .builder ().content (prompt ).role (Message .Role .USER ).build ();
273- List <Message > messages = new ArrayList <>();
274- messages .add (currentMessage );
275- buildSseEmitter (sseEmitter , uid );
276-
277- DifyChatAIEventSourceListener eventSourceListener = new DifyChatAIEventSourceListener (sseEmitter , uid );
278- String conversationId = (String ) LocalCache .CACHE .get (DifyChatConstant .CONVERSATION_CACHE_PREFIX + uid );
279- DifyChatAIClient .getInstance ().streamCompletions (messages , eventSourceListener , uid , conversationId );
280- LocalCache .CACHE .put (uid , JSONUtil .toJsonStr (messages ), LocalCache .TIMEOUT );
281- return sseEmitter ;
282- }
283-
284256 /**
285257 * 使用自定义AI接口进行聊天
286258 *
@@ -304,11 +276,11 @@ private SseEmitter chatWithRestAi(ChatQueryRequest prompt, SseEmitter sseEmitter
304276 * @throws IOException
305277 */
306278 private SseEmitter chatWithOpenAi (ChatQueryRequest queryRequest , SseEmitter sseEmitter , String uid )
307- throws IOException {
279+ throws IOException {
308280 String prompt = buildPrompt (queryRequest );
309281 if (prompt .length () / TOKEN_CONVERT_CHAR_LENGTH > MAX_PROMPT_LENGTH ) {
310282 log .error ("提示语超出最大长度:{},输入长度:{}, 请重新输入" , MAX_PROMPT_LENGTH ,
311- prompt .length () / TOKEN_CONVERT_CHAR_LENGTH );
283+ prompt .length () / TOKEN_CONVERT_CHAR_LENGTH );
312284 throw new ParamBusinessException ();
313285 }
314286
@@ -335,11 +307,11 @@ private SseEmitter chatWithOpenAi(ChatQueryRequest queryRequest, SseEmitter sseE
335307 * @throws IOException
336308 */
337309 private SseEmitter chatWithChat2dbAi (ChatQueryRequest queryRequest , SseEmitter sseEmitter , String uid )
338- throws IOException {
310+ throws IOException {
339311 String prompt = buildPrompt (queryRequest );
340312 if (prompt .length () / TOKEN_CONVERT_CHAR_LENGTH > MAX_PROMPT_LENGTH ) {
341313 log .error ("exceed max token length:{},input length:{}" , MAX_PROMPT_LENGTH ,
342- prompt .length () / TOKEN_CONVERT_CHAR_LENGTH );
314+ prompt .length () / TOKEN_CONVERT_CHAR_LENGTH );
343315 throw new ParamBusinessException ();
344316 }
345317
@@ -372,7 +344,7 @@ private SseEmitter chatWithAzureAi(ChatQueryRequest queryRequest, SseEmitter sse
372344 prompt .length () / TOKEN_CONVERT_CHAR_LENGTH );
373345 throw new ParamBusinessException ();
374346 }
375- List <AzureChatMessage > messages = (List <AzureChatMessage >) LocalCache .CACHE .get (uid );
347+ List <AzureChatMessage > messages = (List <AzureChatMessage >)LocalCache .CACHE .get (uid );
376348 if (CollectionUtils .isNotEmpty (messages )) {
377349 if (messages .size () >= contextLength ) {
378350 messages = messages .subList (1 , contextLength );
@@ -391,7 +363,6 @@ private SseEmitter chatWithAzureAi(ChatQueryRequest queryRequest, SseEmitter sse
391363 return sseEmitter ;
392364 }
393365
394-
395366 /**
396367 * chat with fast chat openai
397368 *
@@ -484,7 +455,7 @@ private SseEmitter chatWithBaichuanAi(ChatQueryRequest queryRequest, SseEmitter
484455 * @return
485456 */
486457 private List <FastChatMessage > getFastChatMessage (String uid , String prompt ) {
487- List <FastChatMessage > messages = (List <FastChatMessage >) LocalCache .CACHE .get (uid );
458+ List <FastChatMessage > messages = (List <FastChatMessage >)LocalCache .CACHE .get (uid );
488459 if (CollectionUtils .isNotEmpty (messages )) {
489460 if (messages .size () >= contextLength ) {
490461 messages = messages .subList (1 , contextLength );
@@ -560,17 +531,17 @@ private SseEmitter buildSseEmitter(SseEmitter sseEmitter, String uid) throws IOE
560531 log .info (LocalDateTime .now () + ", uid#" + uid + ", on completion" );
561532 });
562533 sseEmitter .onTimeout (
563- () -> log .info (LocalDateTime .now () + ", uid#" + uid + ", on timeout#" + sseEmitter .getTimeout ()));
534+ () -> log .info (LocalDateTime .now () + ", uid#" + uid + ", on timeout#" + sseEmitter .getTimeout ()));
564535 sseEmitter .onError (
565- throwable -> {
566- try {
567- log .info (LocalDateTime .now () + ", uid#" + "765431" + ", on error#" + throwable .toString ());
568- sseEmitter .send (SseEmitter .event ().id ("765431" ).name ("发生异常!" ).data (throwable .getMessage ())
569- .reconnectTime (3000 ));
570- } catch (IOException e ) {
571- e .printStackTrace ();
572- }
536+ throwable -> {
537+ try {
538+ log .info (LocalDateTime .now () + ", uid#" + "765431" + ", on error#" + throwable .toString ());
539+ sseEmitter .send (SseEmitter .event ().id ("765431" ).name ("发生异常!" ).data (throwable .getMessage ())
540+ .reconnectTime (3000 ));
541+ } catch (IOException e ) {
542+ e .printStackTrace ();
573543 }
544+ }
574545 );
575546 return sseEmitter ;
576547 }
@@ -583,13 +554,13 @@ private SseEmitter buildSseEmitter(SseEmitter sseEmitter, String uid) throws IOE
583554 * @return
584555 */
585556 private String buildTableColumn (TableQueryParam tableQueryParam ,
586- List <String > tableNames ) {
557+ List <String > tableNames ) {
587558 if (CollectionUtils .isEmpty (tableNames )) {
588559 return "" ;
589560 }
590561 List <String > schemaContent = Lists .newArrayList ();
591562 try {
592- schemaContent = tableNames .stream ().map (tableName -> {
563+ schemaContent = tableNames .stream ().map (tableName -> {
593564 tableQueryParam .setTableName (tableName );
594565 return queryTableDdl (tableName , tableQueryParam );
595566 }).collect (Collectors .toList ());
@@ -639,19 +610,19 @@ private String buildPrompt(ChatQueryRequest queryRequest) {
639610 }
640611 String prompt = queryRequest .getMessage ();
641612 String promptType = StringUtils .isBlank (queryRequest .getPromptType ()) ? PromptType .NL_2_SQL .getCode ()
642- : queryRequest .getPromptType ();
613+ : queryRequest .getPromptType ();
643614 PromptType pType = EasyEnumUtils .getEnum (PromptType .class , promptType );
644615 String ext = StringUtils .isNotBlank (queryRequest .getExt ()) ? queryRequest .getExt () : "" ;
645616 String schemaProperty = StringUtils .isNotEmpty (properties ) ? String .format (
646- "### 请根据以下table properties和SQL input%s. %s\n #\n ### %s SQL tables, with their properties:\n #\n # "
647- + "%s\n #\n #\n ### SQL input: %s" , pType .getDescription (), ext , dataSourceType ,
648- properties , prompt ) : String .format ("### 请根据以下SQL input%s. %s\n #\n ### SQL input: %s" ,
649- pType .getDescription (), ext , prompt );
617+ "### 请根据以下table properties和SQL input%s. %s\n #\n ### %s SQL tables, with their properties:\n #\n # "
618+ + "%s\n #\n #\n ### SQL input: %s" , pType .getDescription (), ext , dataSourceType ,
619+ properties , prompt ) : String .format ("### 请根据以下SQL input%s. %s\n #\n ### SQL input: %s" ,
620+ pType .getDescription (), ext , prompt );
650621 switch (pType ) {
651622 case SQL_2_SQL :
652623 schemaProperty = StringUtils .isNotBlank (queryRequest .getDestSqlType ()) ? String .format (
653- "%s\n #\n ### 目标SQL类型: %s" , schemaProperty , queryRequest .getDestSqlType ()) : String .format (
654- "%s\n #\n ### 目标SQL类型: %s" , schemaProperty , dataSourceType );
624+ "%s\n #\n ### 目标SQL类型: %s" , schemaProperty , queryRequest .getDestSqlType ()) : String .format (
625+ "%s\n #\n ### 目标SQL类型: %s" , schemaProperty , dataSourceType );
655626 default :
656627 break ;
657628 }
@@ -740,7 +711,7 @@ public String queryDatabaseSchema(ChatQueryRequest queryRequest) {
740711 DataResult <TableSchemaResponse > result = gatewayClientService .schemaVectorSearch (tableSchemaRequest );
741712 List <String > schemas = Lists .newArrayList ();
742713 if (Objects .nonNull (result .getData ()) && CollectionUtils .isNotEmpty (result .getData ().getTableSchemas ())) {
743- for (TableSchema data : result .getData ().getTableSchemas ()) {
714+ for (TableSchema data : result .getData ().getTableSchemas ()){
744715 schemas .add (data .getTableSchema ());
745716 }
746717 }
@@ -780,7 +751,7 @@ public String querySchemaByEs(ChatQueryRequest queryRequest) {
780751 DataResult <EsTableSchemaResponse > result = gatewayClientService .schemaEsSearch (tableSchemaRequest );
781752 List <String > schemas = Lists .newArrayList ();
782753 if (Objects .nonNull (result .getData ()) && CollectionUtils .isNotEmpty (result .getData ().getTableSchemas ())) {
783- for (EsTableSchema data : result .getData ().getTableSchemas ()) {
754+ for (EsTableSchema data : result .getData ().getTableSchemas ()){
784755 schemas .add (data .getTableSchemaContent ());
785756 }
786757 }
0 commit comments