diff --git a/metagpt/actions/action_node.py b/metagpt/actions/action_node.py index 7109f287e2..9a3c5af649 100644 --- a/metagpt/actions/action_node.py +++ b/metagpt/actions/action_node.py @@ -1,3 +1,4 @@ +import ast #!/usr/bin/env python # -*- coding: utf-8 -*- """ @@ -578,14 +579,14 @@ async def xml_fill(self, context: str, images: Optional[Union[str, list[str]]] = extracted_data[field_name] = raw_value.lower() in ("true", "yes", "1", "on", "True") elif field_type == list: try: - extracted_data[field_name] = eval(raw_value) + extracted_data[field_name] = ast.literal_eval(raw_value) if not isinstance(extracted_data[field_name], list): raise ValueError except: extracted_data[field_name] = [] # 默认空列表 elif field_type == dict: try: - extracted_data[field_name] = eval(raw_value) + extracted_data[field_name] = ast.literal_eval(raw_value) if not isinstance(extracted_data[field_name], dict): raise ValueError except: diff --git a/metagpt/strategy/tot.py b/metagpt/strategy/tot.py index 17ce632118..19d2e3d59c 100644 --- a/metagpt/strategy/tot.py +++ b/metagpt/strategy/tot.py @@ -1,3 +1,4 @@ +import ast # -*- coding: utf-8 -*- # @Date : 12/23/2023 4:51 PM # @Author : stellahong (stellahong@fuzhi.ai) @@ -63,7 +64,7 @@ async def generate_thoughts(self, current_state="", current_node=None) -> List[T ) rsp = await self.llm.aask(msg=state_prompt + "\n" + OUTPUT_FORMAT) thoughts = CodeParser.parse_code(text=rsp) - thoughts = eval(thoughts) + thoughts = ast.literal_eval(thoughts) # fixme 避免不跟随,生成过多nodes # valid_thoughts = [_node for idx, _node in enumerate(thoughts) if idx < self.n_generate_sample] return self.thought_tree.update_node(thoughts, current_node=current_node) diff --git a/metagpt/utils/serialize.py b/metagpt/utils/serialize.py index c6bd8ad75f..e0064631d7 100644 --- a/metagpt/utils/serialize.py +++ b/metagpt/utils/serialize.py @@ -1,3 +1,4 @@ +import ast #!/usr/bin/env python # -*- coding: utf-8 -*- # @Desc : the implement of serialization and deserialization @@ -53,7 +54,7 @@ def actionoutput_str_to_mapping(mapping: dict) -> dict: if value == "(, Ellipsis)": new_mapping[key] = (str, ...) else: - new_mapping[key] = eval(value) # `"'(list[str], Ellipsis)"` to `(list[str], ...)` + new_mapping[key] = ast.literal_eval(value) # `"'(list[str], Ellipsis)"` to `(list[str], ...)` return new_mapping