From e300a5a6bef85c937f1a9b6742d5c29d06152e6e Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 19 Mar 2026 18:18:33 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dask=5Fuser=5Fquestion?= =?UTF-8?q?=E6=8E=A5=E5=8F=97json=E6=A0=BC=E5=BC=8F=E7=9A=84=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 支持questions参数接受JSON字符串并自动解析 - 支持options参数接受JSON字符串并自动解析 - 增加解析失败的错误处理和日志记录 --- src/agents/common/toolkits/buildin/tools.py | 24 +++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/agents/common/toolkits/buildin/tools.py b/src/agents/common/toolkits/buildin/tools.py index 5487007d7..133b905ed 100644 --- a/src/agents/common/toolkits/buildin/tools.py +++ b/src/agents/common/toolkits/buildin/tools.py @@ -105,15 +105,35 @@ def calculator(a: float, b: float, operation: str) -> float: ) def ask_user_question( questions: Annotated[ - list[dict] | None, + list[dict] | str | None, "问题列表,每项格式 {question, options, multi_select, allow_other, question_id(optional)}", ] = None, question: Annotated[str, "兼容字段:单个问题文本(建议优先使用 questions)"] = "", - options: Annotated[list[dict] | None, "兼容字段:单个问题候选项(建议优先使用 questions)"] = None, + options: Annotated[list[dict] | str | None, "兼容字段:单个问题候选项(建议优先使用 questions)"] = None, multi_select: Annotated[bool, "兼容字段:单个问题是否允许多选"] = False, allow_other: Annotated[bool, "兼容字段:单个问题是否允许 Other 自定义答案"] = True, ) -> dict: """向用户发起问题并等待回答。""" + # 解析 options 参数:如果是字符串,尝试解析为 JSON + if isinstance(options, str): + try: + import json + options = json.loads(options) + logger.debug(f"Parsed string options to list: {options}") + except Exception as e: + logger.error(f"Failed to parse options string: {e}, using empty list") + options = [] + + # 解析 questions 参数:如果是字符串,尝试解析为 JSON + if isinstance(questions, str): + try: + import json + questions = json.loads(questions) + logger.debug(f"Parsed string questions to list: {questions}") + except Exception as e: + logger.error(f"Failed to parse questions string: {e}, using None") + questions = None + input_questions = questions if not input_questions: legacy_question = str(question or "").strip()