必须在后端服务接口入口校验参数,而非aionclaw端;校验需覆盖非空、类型、长度/范围、枚举值四类,且须在反序列化后、业务逻辑前执行。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

给AionClaw调用的后端接口增加参数校验,是为了防止非法、空值、越界或类型错误的数据穿透到业务逻辑层,避免数据库异常、状态错乱甚至资损。你不能依赖前端传参的“看起来正常”,必须在接口入口强制拦截。
确认校验位置与责任边界
先明确:AionClaw本身不提供后端接口,它只作为客户端发起HTTP请求。因此参数校验必须落在你自己的后端服务中——不是在AionClaw里配,而是在你部署的API服务代码里加。跳过这步,AionClaw发来的任何自然语言生成的请求(比如“创建订单,金额填abc”)都会直通数据库。
如果你用的是Spring Boot,校验应写在Controller层入参上;如果是Node.js(Express),需在路由处理前插入中间件;Go Gin则用binding tag或自定义validator。【校验必须发生在反序列化之后、业务逻辑执行之前,否则无效】
基础参数校验四要素
按风险等级和发生频率,优先覆盖以下四类:
① 非空校验:对必填字段(如user_id、order_no、email)加@NotBlank(Java)或required: true(Zod/Express-Validator),空字符串、null、undefined一律拒绝。AionClaw生成的JSON可能带空字段,不拦住会直接导致SQL NULL约束失败。
② 类型校验:age字段声明为int但收到"25a",status传入"pending_"而非枚举值"pending"——这类错误前端难发现,后端必须用强类型解析+异常捕获兜底。Spring可用@Pattern配合正则,Go可用strconv.Atoi并检查err != nil。
③ 长度与范围:用户名超30字符、手机号不是11位、金额小于0或大于9999999.99,必须在入参层就截断并返回400 Bad Request。不要等入库时被MySQL报Data too long才响应,那已算失败。
④ 枚举值锁定:status只能是["draft","paid","shipped","cancelled"]之一,model_id仅允许["qwen2.5-72b","deepseek-v3"]等白名单。用@Enumerated或switch-case比if-else更安全,【漏掉一个合法值会导致AionClaw调用时被静默转成默认值,引发状态机跳变】
对接AionClaw技能调用的特殊处理
方法一:使用HTTP请求技能时动态校验
在AionClaw中配置「HTTP请求」技能指向你的接口,此时你无法控制请求体结构——AI可能生成任意字段组合。因此后端必须启用宽松模式接收Map
方法二:开发Python自定义技能时前置过滤
在Python技能脚本中,调用requests前先做一次本地校验:if not isinstance(params.get('amount'), (int, float)) or params['amount'] 。这能提前拦截90%的AI胡编乱造,减少无效网络请求。
注意:不要在Python技能里做业务级校验(如“库存是否充足”),那属于后端职责。技能层只做格式守门员。
上线前必做的三步验证
第一步:用curl模拟AionClaw最可能出错的五种请求
包括:空body、全字段null、金额字段填字符串、status填错别字、超长字符串。每种都必须返回400且带清晰错误字段名,不能返回500或空响应。
第二步:打开AionClaw → 新建自动化流程 → 添加HTTP请求节点 → 故意输错一个参数 → 观察日志是否打印出校验失败详情,而不是卡死或静默失败。
第三步:检查config.toml中base_url末尾是否有斜杠——【有斜杠会导致所有请求404,校验根本不会触发】。这是AionClaw配置中最常被忽略的硬性规则。








