@@ -57,13 +57,20 @@ def write_context(node_variable: Dict, workflow_variable: Dict, node: INode, wor
5757 _write_context (node_variable , workflow_variable , node , workflow , answer )
5858
5959
60+ def file_id_to_base64 (file_id : str ):
61+ file = QuerySet (File ).filter (id = file_id ).first ()
62+ base64_image = base64 .b64encode (file .get_byte ()).decode ("utf-8" )
63+ return base64_image
64+
65+
6066class BaseImageUnderstandNode (IImageUnderstandNode ):
6167 def save_context (self , details , workflow_manage ):
6268 self .context ['answer' ] = details .get ('answer' )
6369 self .context ['question' ] = details .get ('question' )
6470 self .answer_text = details .get ('answer' )
6571
66- def execute (self , model_id , system , prompt , dialogue_number , dialogue_type , history_chat_record , stream , chat_id , chat_record_id ,
72+ def execute (self , model_id , system , prompt , dialogue_number , dialogue_type , history_chat_record , stream , chat_id ,
73+ chat_record_id ,
6774 image ,
6875 ** kwargs ) -> NodeResult :
6976 # 处理不正确的参数
@@ -72,12 +79,13 @@ def execute(self, model_id, system, prompt, dialogue_number, dialogue_type, hist
7279
7380 image_model = get_model_instance_by_model_user_id (model_id , self .flow_params_serializer .data .get ('user_id' ))
7481 # 执行详情中的历史消息不需要图片内容
75- history_message = self .get_history_message_for_details (history_chat_record , dialogue_number )
82+ history_message = self .get_history_message_for_details (history_chat_record , dialogue_number )
7683 self .context ['history_message' ] = history_message
7784 question = self .generate_prompt_question (prompt )
7885 self .context ['question' ] = question .content
7986 # 生成消息列表, 真实的history_message
80- message_list = self .generate_message_list (image_model , system , prompt , self .get_history_message (history_chat_record , dialogue_number ), image )
87+ message_list = self .generate_message_list (image_model , system , prompt ,
88+ self .get_history_message (history_chat_record , dialogue_number ), image )
8189 self .context ['message_list' ] = message_list
8290 self .context ['image_list' ] = image
8391 self .context ['dialogue_type' ] = dialogue_type
@@ -92,11 +100,11 @@ def execute(self, model_id, system, prompt, dialogue_number, dialogue_type, hist
92100 'history_message' : history_message , 'question' : question .content }, {},
93101 _write_context = write_context )
94102
95-
96103 def get_history_message_for_details (self , history_chat_record , dialogue_number ):
97104 start_index = len (history_chat_record ) - dialogue_number
98105 history_message = reduce (lambda x , y : [* x , * y ], [
99- [self .generate_history_human_message_for_details (history_chat_record [index ]), self .generate_history_ai_message (history_chat_record [index ])]
106+ [self .generate_history_human_message_for_details (history_chat_record [index ]),
107+ self .generate_history_ai_message (history_chat_record [index ])]
100108 for index in
101109 range (start_index if start_index > 0 else 0 , len (history_chat_record ))], [])
102110 return history_message
@@ -115,17 +123,19 @@ def generate_history_human_message_for_details(self, chat_record):
115123 image_list = data ['image_list' ]
116124 if len (image_list ) == 0 or data ['dialogue_type' ] == 'WORKFLOW' :
117125 return HumanMessage (content = chat_record .problem_text )
118- file_id = image_list [ 0 ][ 'file_id' ]
126+ file_id_list = [ image . get ( 'file_id' ) for image in image_list ]
119127 return HumanMessage (content = [
120- {'type' : 'text' , 'text' : data ['question' ]},
121- {'type' : 'image_url' , 'image_url' : {'url' : f'/api/file/{ file_id } ' }},
122- ])
128+ {'type' : 'text' , 'text' : data ['question' ]},
129+ * [{'type' : 'image_url' , 'image_url' : {'url' : f'/api/file/{ file_id } ' }} for file_id in file_id_list ]
130+
131+ ])
123132 return HumanMessage (content = chat_record .problem_text )
124133
125134 def get_history_message (self , history_chat_record , dialogue_number ):
126135 start_index = len (history_chat_record ) - dialogue_number
127136 history_message = reduce (lambda x , y : [* x , * y ], [
128- [self .generate_history_human_message (history_chat_record [index ]), self .generate_history_ai_message (history_chat_record [index ])]
137+ [self .generate_history_human_message (history_chat_record [index ]),
138+ self .generate_history_ai_message (history_chat_record [index ])]
129139 for index in
130140 range (start_index if start_index > 0 else 0 , len (history_chat_record ))], [])
131141 return history_message
@@ -137,13 +147,12 @@ def generate_history_human_message(self, chat_record):
137147 image_list = data ['image_list' ]
138148 if len (image_list ) == 0 or data ['dialogue_type' ] == 'WORKFLOW' :
139149 return HumanMessage (content = chat_record .problem_text )
140- file_id = image_list [0 ]['file_id' ]
141- file = QuerySet (File ).filter (id = file_id ).first ()
142- base64_image = base64 .b64encode (file .get_byte ()).decode ("utf-8" )
150+ image_base64_list = [file_id_to_base64 (image .get ('file_id' )) for image in image_list ]
143151 return HumanMessage (
144152 content = [
145153 {'type' : 'text' , 'text' : data ['question' ]},
146- {'type' : 'image_url' , 'image_url' : {'url' : f'data:image/jpeg;base64,{ base64_image } ' }},
154+ * [{'type' : 'image_url' , 'image_url' : {'url' : f'data:image/jpeg;base64,{ base64_image } ' }} for
155+ base64_image in image_base64_list ]
147156 ])
148157 return HumanMessage (content = chat_record .problem_text )
149158
0 commit comments