From f84d20645730d33bbe0846a507847351ee4355b1 Mon Sep 17 00:00:00 2001 From: vic <1320732470@qq.com> Date: Thu, 11 Jun 2026 13:27:02 +0800 Subject: [PATCH] 1 --- my_agent/src/simple_agent/tools/math_tools.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 my_agent/src/simple_agent/tools/math_tools.py diff --git a/my_agent/src/simple_agent/tools/math_tools.py b/my_agent/src/simple_agent/tools/math_tools.py new file mode 100644 index 0000000..1787daf --- /dev/null +++ b/my_agent/src/simple_agent/tools/math_tools.py @@ -0,0 +1,21 @@ +import ast +from typing import Any +from langchain_core.tools import tool +@tool +def calculator(expression: str) -> str: + """安全地计算数学表达式。支持 +, -, *, /, %, ** 和括号。""" + try: + parsed = ast.parse(expression, mode="eval") + allowed_nodes = ( + ast.Expression, ast.BinOp, ast.UnaryOp, ast.Constant, + ast.Add, ast.Sub, ast.Mult, ast.Div, ast.Mod, ast.Pow, + ast.USub, ast.UAdd, ast.Load, + ) + for node in ast.walk(parsed): + if not isinstance(node, allowed_nodes): + return f"错误:表达式 '{expression}' 包含不支持的运算或符号,请只用加减乘除、括号和幂运算。" + result = eval(compile(parsed, "", "eval"), {"__builtins__": {}}, {}) + return str(result) + except Exception as e: + return f"计算出错: {str(e)}" +