@@ -276,6 +276,8 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr
276276 chart_alias_log = aliased (ChatLog )
277277 analysis_alias_log = aliased (ChatLog )
278278 predict_alias_log = aliased (ChatLog )
279+ intent_alias_log = aliased (ChatLog )
280+ clarify_alias_log = aliased (ChatLog )
279281
280282 stmt = (select (ChatRecord .id , ChatRecord .chat_id , ChatRecord .create_time , ChatRecord .finish_time ,
281283 ChatRecord .question , ChatRecord .sql_answer , ChatRecord .sql ,
@@ -287,7 +289,9 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr
287289 sql_alias_log .reasoning_content .label ('sql_reasoning_content' ),
288290 chart_alias_log .reasoning_content .label ('chart_reasoning_content' ),
289291 analysis_alias_log .reasoning_content .label ('analysis_reasoning_content' ),
290- predict_alias_log .reasoning_content .label ('predict_reasoning_content' )
292+ predict_alias_log .reasoning_content .label ('predict_reasoning_content' ),
293+ intent_alias_log .reasoning_content .label ('intent_reasoning_content' ),
294+ clarify_alias_log .reasoning_content .label ('clarify_reasoning_content' )
291295 )
292296 .outerjoin (sql_alias_log , and_ (sql_alias_log .pid == ChatRecord .id ,
293297 sql_alias_log .type == TypeEnum .CHAT ,
@@ -301,18 +305,50 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr
301305 .outerjoin (predict_alias_log , and_ (predict_alias_log .pid == ChatRecord .id ,
302306 predict_alias_log .type == TypeEnum .CHAT ,
303307 predict_alias_log .operate == OperationEnum .PREDICT_DATA ))
308+ .outerjoin (intent_alias_log , and_ (intent_alias_log .pid == ChatRecord .id ,
309+ intent_alias_log .type == TypeEnum .CHAT ,
310+ intent_alias_log .operate == OperationEnum .RECOGNIZE_INTENT ))
311+ .outerjoin (clarify_alias_log , and_ (clarify_alias_log .pid == ChatRecord .id ,
312+ clarify_alias_log .type == TypeEnum .CHAT ,
313+ clarify_alias_log .operate == OperationEnum .GENERATE_CLARIFICATION ))
304314 .where (and_ (ChatRecord .create_by == current_user .id , ChatRecord .chat_id == chart_id )).order_by (
305315 ChatRecord .create_time ))
306316 if with_data :
307- stmt = select (ChatRecord .id , ChatRecord .chat_id , ChatRecord .create_time , ChatRecord .finish_time ,
317+ stmt = ( select (ChatRecord .id , ChatRecord .chat_id , ChatRecord .create_time , ChatRecord .finish_time ,
308318 ChatRecord .question , ChatRecord .sql_answer , ChatRecord .sql ,
309319 ChatRecord .chart_answer , ChatRecord .chart , ChatRecord .analysis , ChatRecord .predict ,
310320 ChatRecord .datasource_select_answer , ChatRecord .analysis_record_id , ChatRecord .predict_record_id ,
311321 ChatRecord .regenerate_record_id ,
312322 ChatRecord .recommended_question , ChatRecord .first_chat ,
313- ChatRecord .finish , ChatRecord .error , ChatRecord .intent_answer , ChatRecord .data , ChatRecord .predict_data ).where (
314- and_ (ChatRecord .create_by == current_user .id , ChatRecord .chat_id == chart_id )).order_by (
315- ChatRecord .create_time )
323+ ChatRecord .finish , ChatRecord .error , ChatRecord .intent_answer ,
324+ ChatRecord .data , ChatRecord .predict_data ,
325+ sql_alias_log .reasoning_content .label ('sql_reasoning_content' ),
326+ chart_alias_log .reasoning_content .label ('chart_reasoning_content' ),
327+ analysis_alias_log .reasoning_content .label ('analysis_reasoning_content' ),
328+ predict_alias_log .reasoning_content .label ('predict_reasoning_content' ),
329+ intent_alias_log .reasoning_content .label ('intent_reasoning_content' ),
330+ clarify_alias_log .reasoning_content .label ('clarify_reasoning_content' )
331+ )
332+ .outerjoin (sql_alias_log , and_ (sql_alias_log .pid == ChatRecord .id ,
333+ sql_alias_log .type == TypeEnum .CHAT ,
334+ sql_alias_log .operate == OperationEnum .GENERATE_SQL ))
335+ .outerjoin (chart_alias_log , and_ (chart_alias_log .pid == ChatRecord .id ,
336+ chart_alias_log .type == TypeEnum .CHAT ,
337+ chart_alias_log .operate == OperationEnum .GENERATE_CHART ))
338+ .outerjoin (analysis_alias_log , and_ (analysis_alias_log .pid == ChatRecord .id ,
339+ analysis_alias_log .type == TypeEnum .CHAT ,
340+ analysis_alias_log .operate == OperationEnum .ANALYSIS ))
341+ .outerjoin (predict_alias_log , and_ (predict_alias_log .pid == ChatRecord .id ,
342+ predict_alias_log .type == TypeEnum .CHAT ,
343+ predict_alias_log .operate == OperationEnum .PREDICT_DATA ))
344+ .outerjoin (intent_alias_log , and_ (intent_alias_log .pid == ChatRecord .id ,
345+ intent_alias_log .type == TypeEnum .CHAT ,
346+ intent_alias_log .operate == OperationEnum .RECOGNIZE_INTENT ))
347+ .outerjoin (clarify_alias_log , and_ (clarify_alias_log .pid == ChatRecord .id ,
348+ clarify_alias_log .type == TypeEnum .CHAT ,
349+ clarify_alias_log .operate == OperationEnum .GENERATE_CLARIFICATION ))
350+ .where (and_ (ChatRecord .create_by == current_user .id , ChatRecord .chat_id == chart_id )).order_by (
351+ ChatRecord .create_time ))
316352
317353 result = session .execute (stmt ).all ()
318354 record_list : list [ChatRecordResult ] = []
@@ -333,6 +369,8 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr
333369 chart_reasoning_content = row .chart_reasoning_content ,
334370 analysis_reasoning_content = row .analysis_reasoning_content ,
335371 predict_reasoning_content = row .predict_reasoning_content ,
372+ intent_reasoning_content = row .intent_reasoning_content ,
373+ clarify_reasoning_content = row .clarify_reasoning_content ,
336374 intent_answer = row .intent_answer ,
337375 ))
338376 else :
@@ -347,6 +385,12 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr
347385 regenerate_record_id = row .regenerate_record_id ,
348386 recommended_question = row .recommended_question , first_chat = row .first_chat ,
349387 finish = row .finish , error = row .error , data = row .data , predict_data = row .predict_data ,
388+ sql_reasoning_content = row .sql_reasoning_content ,
389+ chart_reasoning_content = row .chart_reasoning_content ,
390+ analysis_reasoning_content = row .analysis_reasoning_content ,
391+ predict_reasoning_content = row .predict_reasoning_content ,
392+ intent_reasoning_content = row .intent_reasoning_content ,
393+ clarify_reasoning_content = row .clarify_reasoning_content ,
350394 intent_answer = row .intent_answer ,
351395 ))
352396
@@ -368,12 +412,32 @@ def get_chat_with_records(session: SessionDep, chart_id: int, current_user: Curr
368412def format_record (record : ChatRecordResult ):
369413 _dict = record .model_dump ()
370414
415+ # 处理 sql_answer(SQL 生成思考内容)
416+ sql_thinking = ''
371417 if record .sql_answer and record .sql_answer .strip () != '' and record .sql_answer .strip ()[0 ] == '{' and \
372418 record .sql_answer .strip ()[- 1 ] == '}' :
373419 _obj = orjson .loads (record .sql_answer )
374- _dict [ 'sql_answer' ] = _obj .get ('reasoning_content' )
420+ sql_thinking = _obj .get ('reasoning_content' ) or ''
375421 if record .sql_reasoning_content and record .sql_reasoning_content .strip () != '' :
376- _dict ['sql_answer' ] = record .sql_reasoning_content
422+ sql_thinking = record .sql_reasoning_content
423+
424+ # 处理 intent_answer(意图识别 + 澄清器思考内容)
425+ intent_thinking = ''
426+ # 先获取意图识别的思考内容
427+ if record .intent_reasoning_content and record .intent_reasoning_content .strip () != '' :
428+ intent_thinking = record .intent_reasoning_content
429+ # 追加澄清器的思考内容
430+ if record .clarify_reasoning_content and record .clarify_reasoning_content .strip () != '' :
431+ if intent_thinking :
432+ intent_thinking += '\n \n ---\n \n ' # 分隔符
433+ intent_thinking += record .clarify_reasoning_content
434+
435+ # 独立展示(不再合并)
436+ if sql_thinking :
437+ _dict ['sql_answer' ] = sql_thinking
438+ if intent_thinking :
439+ _dict ['intent_answer' ] = intent_thinking
440+
377441 if record .chart_answer and record .chart_answer .strip () != '' and record .chart_answer .strip ()[0 ] == '{' and \
378442 record .chart_answer .strip ()[- 1 ] == '}' :
379443 _obj = orjson .loads (record .chart_answer )
0 commit comments