1010from bisheng .chat .utils import judge_source , process_graph , process_source_document
1111from bisheng .database .base import session_getter
1212from bisheng .database .models .report import Report
13+ from bisheng .database .models .message import ChatMessage as ChatMessageDB , ChatMessageDao
1314from bisheng .interface .importing .utils import import_by_type
1415from bisheng .interface .initialize .loading import instantiate_llm
1516from bisheng .settings import settings
@@ -67,6 +68,38 @@ async def process_stop(self, session: ChatManager, client_id: str, chat_id: str,
6768 else :
6869 logger .error (f'act=auto_gen act={ action } ' )
6970 else :
71+ # 将流式输出的内容写到数据库内
72+ answer = ''
73+ reasoning_answer = ''
74+ while not self .stream_queue .empty ():
75+ msg = self .stream_queue .get ()
76+ if msg .get ('type' ) == 'answer' :
77+ answer += msg .get ('content' , '' )
78+ elif msg .get ('type' ) == 'reasoning' :
79+ reasoning_answer += msg .get ('content' , '' )
80+ if reasoning_answer .strip ():
81+ chat_message = ChatMessageDB (flow_id = client_id , chat_id = chat_id ,
82+ message = reasoning_answer ,
83+ category = 'answer' ,
84+ type = 'end' ,
85+ user_id = user_id ,
86+ remark = 'break_answer' ,
87+ is_bot = True )
88+ if chat_id :
89+ db_message = ChatMessageDao .insert_one (chat_message )
90+ await session .send_json (client_id , chat_id , ChatMessage (** db_message .model_dump (), message_id = db_message .id ), add = False )
91+
92+ if answer .strip ():
93+ chat_message = ChatMessageDB (flow_id = client_id , chat_id = chat_id ,
94+ message = answer ,
95+ category = 'answer' ,
96+ type = 'end' ,
97+ user_id = user_id ,
98+ remark = 'break_answer' ,
99+ is_bot = True )
100+ if chat_id :
101+ db_message = ChatMessageDao .insert_one (chat_message )
102+ await session .send_json (client_id , chat_id , ChatMessage (** db_message .model_dump (), message_id = db_message .id ), add = False )
70103 # 普通技能的stop
71104 res = thread_pool .cancel_task ([key ]) # 将进行中的任务进行cancel
72105 if res [0 ]:
@@ -75,18 +108,7 @@ async def process_stop(self, session: ChatManager, client_id: str, chat_id: str,
75108 close = ChatResponse (type = 'close' )
76109 await session .send_json (client_id , chat_id , res , add = False )
77110 await session .send_json (client_id , chat_id , close , add = False )
78- answer = ''
79- # 记录中止后产生的流式输出内容
80- while not self .stream_queue .empty ():
81- answer += self .stream_queue .get ()
82- if answer .strip ():
83- chat_message = ChatMessage (message = answer ,
84- category = 'answer' ,
85- type = 'end' ,
86- user_id = user_id ,
87- remark = 'break_answer' ,
88- is_bot = True )
89- session .chat_history .add_message (client_id , chat_id , chat_message )
111+
90112 logger .info ('process_stop done' )
91113
92114 async def process_report (self ,
0 commit comments