在传统连锁零售 SaaS(如智能 POS、连锁 ERP、WMS 体系)的演进过程中,产品经理和架构师往往会陷入一个两难的“SaaS 悖论”:

  • 标准化 vs. 极度碎片化的长尾需求:SaaS 的商业模式依赖于“一套代码服务上万商家”的低边际成本。然而,零售商家的长尾需求几乎是无限的。生鲜店关注保质期周转,零食店关注起订量(MOQ)整箱凑整;更致命的是各种随机例外——“明天台风要来,冷冻品类临时少进 30%”、“周末大促,爆款饮料周转天数临时从 7 天改成 15 天”。

  • 传统的死穴:如果全靠硬编码 if-else,系统很快就会面临规则代码爆炸与运维噩梦;如果拒绝客户,客户就会流失;如果开启定制开发,SaaS 公司就会退化为低毛利的外包公司。

AI Agent 的出现,本质上不是为了取代传统 SaaS,而是作为 SaaS 的“长尾需求消化引擎”。

参考 Anthropic 提出的极简 Agent 架构思想(Code as Action / Dynamic SOP),我们探索出一套 “标准 SaaS 主干 + 动态 SOP 编排 + 隔离算子沙箱” 的长尾需求解法。

一、 解题思路:80% 刚性主干 + 20% 动态 SOP 柔性编排

我们不再试图去穷举客户的所有业务规则,而是将系统解耦为两个层级:

二、 核心机制一:基于上下文的动态 SOP 编排(Dynamic SOP)

Anthropic 在 Building Effective Agents 中强调:“最好的 Agent 架构应该保持简单,优先使用确定性的工作流,只在分支决策处赋予 Agent 动态编排的自由度。”

在日终结账与补货场景中,Agent 并不去重新发明“如何连数据库”,而是根据客户今天的临时口述,动态生成 SOP 执行计划:

Python

# 动态 SOP 状态节点声明 (LangGraph / State Machine)
class SOPPlan(BaseModel):
    sop_name: str = Field(description="生成的临时 SOP 名称")
    steps: List[str] = Field(description="动态编排的步骤列表")
    context_overrides: Dict[str, Any] = Field(description="注入到沙箱的临时覆盖参数")

# 客户输入:"今晚结账,冷冻品类进货量临时减少 30%,饮料周转按 15 天算"
# Agent 动态生成的 SOP 计划:
{
  "sop_name": "台风天气与大促临时补货 SOP",
  "steps": [
    "FETCH_WMS_STOCK",       # 步骤 1: 提取库存
    "FETCH_FORECAST_SALES",  # 步骤 2: 提取预测销量
    "RUN_SANDBOX_CALC",      # 步骤 3: 注入例外参数跑沙箱计算
    "GENERATE_DRAFT_PO"      # 步骤 4: 生成草稿单并发起审批
  ],
  "context_overrides": {
    "category_overrides": {
      "冷冻": {"discount_ratio": 0.7},
      "饮料": {"target_days": 15}
    }
  }
}

动态 SOP 的核心底线:编排靠 AI,执行靠审查

允许 Agent 动态编排 SOP,绝不等于给大模型发放“无限授权”。借鉴 Anthropic 的 Agent 架构设计哲学:“大模型只拥有 SOP 的建议权(Propose),确定性的代码引擎才拥有执行权(Execute)。”

大模型生成的动态 SOP 必须无条件穿过两道确定性的规则审查网关(SOP Guardrails):

  1. 原子动作白名单与 RBAC 拦截:编排出的每一个 Step 必须存在于预设的 API 白名单中,且严格校验操作人的角色权限(如普通员工编排的 SOP 无法包含直接写库节点)。

  2. 参数边界硬截断:SOP 上下文中带入的覆盖变量(如周转天数、扣减比例),在送入沙箱前必须由代码硬校验截断在安全区间(如 1 <= target_days <= 60),物理级阻断参数幻觉。

三、 核心机制二:代码即工具与隔离沙箱(Code as Action & Sandbox)

为了防止长尾需求导致 API 爆炸,我们借鉴了 Anthropic 通过代码/沙箱执行复杂逻辑的思想:大模型不直接做四则运算,也不直接修改生产数据库;大模型只负责提取参数或生成纯逻辑表达式,真正的计算交给隔离沙箱。

Python

import math
from typing import Dict, Any

class SafeReplenishmentEngine:
    """运行在隔离沙箱内部的只读资产计算引擎"""

    def calculate(self, item: dict, overrides: dict) -> dict:
        category = item.get("category")
        cat_overrides = overrides.get("category_overrides", {}).get(category, {})

        # 1. 动态读取上下文中的覆盖变量 (如没有则使用默认 SaaS 参数)
        target_days = cat_overrides.get("target_days", item.get("default_days", 7))
        discount_ratio = cat_overrides.get("discount_ratio", 1.0)

        # 2. 物理防线截断 (Guardrails): 限制最大周转天数不超 60 天,防止大模型参数幻觉
        target_days = max(1, min(target_days, 60))
        discount_ratio = max(0.0, min(discount_ratio, 2.0))

        # 3. 确定性四则运算 (绝对无大模型算术错误)
        raw_demand = (item["forecast_sales"] * discount_ratio * target_days) - item["available_stock"]
        
        # 4. 箱规 MOQ 向上取整
        box_size = item.get("box_size", 1)
        cases = math.ceil(max(0, raw_demand) / box_size)
        
        return {
            "sku_id": item["sku_id"],
            "final_qty": cases * box_size,
            "cases": cases
        }

四、 核心机制三:人在回路(HITL)与高便利性防抵赖审计

长尾需求往往伴随着极高的随意性,因此在最后一步“写入核心 SaaS 系统(如下达 ERP 采购单)”时,必须严格执行 Draft-Approve-Execute Protocol:

  1. 生成草稿:Agent 与沙箱计算完毕后,仅生成《采购草稿单 (Draft PO)》,主流程挂起(Interrupt)。

  2. 透明指纹采集:用户在手机企微/钉钉聊天框中点击“同意”或回复“同意”,前端静默采集 Client IP + Canvas 设备指纹 + Draft PO Hash 组合。

  3. 数字签名落盘:后端利用 OAuth 密钥加密签名,生成不可篡改的审计日志(Audit Trail)。既提供了“像聊天一样简单”的极简体验,又在法律与财务层面锁死了抗抵赖性。

五、 总结:Agent 时代的 SaaS 架构进化

AI Agent 给 SaaS 带来的真正变革,不是把原有的界面全部变成 Chatbot,而是改变了 SaaS 交付个性化长尾需求的方式:

  • 过去的 SaaS:试图用一套固化的 UI 和几百个配置开关满足所有人,结果软件越来越笨重,客户依然不满意。

  • Agent 时代的新 SaaS:标准 API 守护底线,Agent 负责理解口语意图,动态 SOP 负责流程编排,隔离沙箱负责安全计算。

这种架构让 SaaS 企业第一次能够在保持极高毛利和标准化代码库的同时,轻松消化上万商家的长尾个性化需求。

Logo

更多推荐