影刀RPA店群自动化Agentic AI应用实战:从规则引擎到自主决策智能体的工程进化

这个系列写了二十三篇文章。

从架构设计写到稳定性工程,从分布式集群写到编排引擎,从策略中台写到安全体系,从商品生命周期写到营销体系,从风控适配写到内容素材工程,从组织博弈写到新手指南。

picture.image

几乎所有技术维度都覆盖了。

但有一个方向,我在之前的文章里提过好几次,却从来没有系统性地展开。

picture.image

AI Agent。

不是“大模型API调用”,不是“AI生成标题”,不是“智能定价”——这些只是AI能力在特定场景的应用。

picture.image AI Agent是不同的。

它是一个自主决策的智能体——能够理解目标、拆解任务、调用工具、执行操作、反思结果、迭代优化。

传统RPA是“执行者”——你告诉它每一步怎么做,它照做。

picture.image

AI Agent是“决策者”——你告诉它“我要什么结果”,它自己决定“怎么达成”。

这个区别,是质变。

picture.image 今天这篇文章,我们聊聊店群自动化系统中的AI Agent工程实践

不是“趋势展望”,不是“概念介绍”。

已经跑在生产环境里的真实方案

picture.image


一、先说说“规则引擎的天花板”在哪

picture.image 在聊AI Agent之前,先搞清楚:现有的规则引擎为什么不够?

前面文章里写的策略中台、决策引擎、定价规则——本质上都是“if-else”的集合。

运营配置规则:“如果库存低于10件,就涨价5%。”

picture.image

系统执行规则:“库存低于10件 → 涨价5%。”

这套逻辑在确定性场景里很好用。

但店群运营的很多场景,恰恰是不确定的

竞品突然降价了——你只知道“降价了”,但不知道“为什么降价”、“会降多久”、“该不该跟”。

平台突然出了新活动——你只知道“有活动”,但不知道“报不报”、“报什么价”、“报多少库存”。

买家突然大量退货——你只知道“退货多了”,但不知道“是质量问题还是恶意退款”、“该怎么做才能止损”。

规则引擎能处理“已知的已知”——你提前想好了所有可能的情况,写好了对应的规则。

但真实世界充满了“未知的未知”——你根本想不到的情况,规则引擎处理不了。

AI Agent填补的,正是这个空白。


二、从“规则引擎”到“AI Agent”的架构演进

传统自动化系统的架构是:

用户输入 → 规则引擎(if-else) → 执行引擎(RPA) → 输出结果。

AI Agent架构是:

picture.image

用户输入(自然语言目标) → Agent(理解+规划+决策) → 工具调用(API/RPA/数据库) → 结果评估 → Agent(反思+优化) → 输出结果。

多了三个关键环节:理解、规划、反思。

理解层:把用户的自然语言目标翻译成机器可执行的任务。

“帮我优化一下店铺A的转化率” → “分析店铺A的流量数据、商品数据、竞品数据 → 找出转化率低的原因 → 生成优化方案 → 执行优化操作 → 评估效果。”

规划层:把大任务拆解成子任务,确定执行顺序和依赖关系。

“分析店铺A的流量数据” → 调取GA数据 → 分析流量来源 → 识别异常流量 → 生成分析报告。

反思层:执行完成后,评估结果是否达到预期,如果没有,调整策略再试。

这三个环节,传统RPA完全没有。

只有大模型能胜任。

这就是为什么说“AI Agent重构了自动化的决策层”——它让系统从“执行指令”变成了“理解目标”。


三、AI Agent在店群自动化中的三个落地场景

说了这么多概念,说点实际的。

我们在店群自动化系统里已经跑通了三个AI Agent场景。

场景一:商品标题与描述的智能生成与优化Agent。

picture.image

这是最早跑通的场景。

传统做法:运营写标题,或者用模板生成。

AI Agent做法:输入商品基本信息(品类、规格、卖点),Agent自动分析该品类的搜索关键词趋势、竞品标题特征、平台SEO规则,然后生成10个标题候选,按预估点击率排序,供运营选择。

更进一步:标题上线后,Agent持续监控该商品的搜索曝光和点击数据,自动检测哪些关键词表现好、哪些表现差,然后迭代生成新的标题版本。

这不是“一次生成”,而是“持续优化”。

场景二:竞品分析与定价策略Agent。

传统做法:系统定时采集竞品价格,规则引擎判断是否调价。

AI Agent做法:Agent不仅要“看到”竞品降价了,还要“理解”为什么降价——是清库存、是冲销量、还是应对平台活动?

然后基于理解做出决策:如果竞品是清库存(库存低于阈值且降价幅度大),Agent判断这是短期行为,不建议跟价。如果竞品是冲销量(销量上升且降价幅度适中),Agent判断这是长期策略,建议调整定价。

更进一步:Agent会分析历史数据,学习“什么样的定价策略在什么样的市场环境下最有效”,然后自动优化定价规则。

这不是“规则执行”,而是“策略学习”。

场景三:异常诊断与自愈Agent。

传统做法:系统检测到异常(如任务失败率突然上升),触发告警,人工介入排查。

AI Agent做法:Agent检测到异常后,自动开始诊断——采集异常任务的日志、截图、系统状态 → 分析可能的根因(平台改版?网络波动?资源耗尽?) → 生成修复方案 → 尝试自动修复 → 验证修复效果。

如果修复成功,Agent记录这次异常和处理方式,作为“案例”存入知识库。下次遇到类似异常,Agent可以直接调用历史方案。

如果修复失败,Agent生成详细的诊断报告,推送给技术人员,大大缩短了人工排查的时间。

这不是“告警后等人修”,而是“系统自己尝试修”。


四、工程实现:一个轻量级AI Agent框架

下面是我们生产环境中使用的AI Agent核心框架。

# agent_core.py - AI Agent核心框架
from typing import Dict, Any, List, Optional, Callable
from dataclasses import dataclass, field
from enum import Enum
import json
import time
import uuid
from datetime import datetime

class AgentRole(Enum):
    """Agent角色"""
    PLANNER = "planner"          # 规划者 - 拆解任务
    EXECUTOR = "executor"        # 执行者 - 调用工具
    REFLECTOR = "reflector"      # 反思者 - 评估结果
    ORCHESTRATOR = "orchestrator" # 编排者 - 协调多个Agent

@dataclass
class AgentContext:
    """Agent上下文 - 贯穿整个执行过程"""
    session_id: str
    user_goal: str               # 用户原始目标
    current_task: str            # 当前正在执行的任务
    completed_tasks: List[str] = field(default_factory=list)
    failed_tasks: List[str] = field(default_factory=list)
    tool_results: Dict[str, Any] = field(default_factory=dict)
    reflections: List[str] = field(default_factory=list)
    iteration: int = 0
    max_iterations: int = 10

@dataclass
class Tool:
    """Agent可调用的工具"""
    name: str
    description: str
    parameters: Dict[str, Any]   # JSON Schema
    handler: Callable

class AgentOrchestrator:
    """
    AI Agent编排器
    核心工作流:理解 → 规划 → 执行 → 反思 → 迭代
    """
    
    def __init__(self, llm_client, tool_registry):
        self.llm = llm_client
        self.tools = tool_registry
        self._max_iterations = 10
    
    def run(self, user_goal: str, context: Optional[Dict] = None) -> Dict[str, Any]:
        """
        执行Agent工作流
        输入:用户目标(自然语言)
        输出:执行结果
        """
        # 1. 初始化上下文
        ctx = AgentContext(
            session_id=f"agent_{uuid.uuid4().hex[:8]}",
            user_goal=user_goal
        )
        
        # 2. 主循环 - 计划-执行-反思
        while ctx.iteration < ctx.max_iterations:
            ctx.iteration += 1
            
            # 2.1 规划阶段 - 生成执行计划
            plan = self._plan(ctx)
            if not plan:
                break
            
            # 2.2 执行阶段 - 调用工具
            for step in plan:
                result = self._execute_step(ctx, step)
                if not result.get("success", False):
                    ctx.failed_tasks.append(step.get("task", "unknown"))
                else:
                    ctx.completed_tasks.append(step.get("task", "unknown"))
                    ctx.tool_results[step.get("task")] = result.get("data")
            
            # 2.3 反思阶段 - 评估是否达到目标
            if self._should_continue(ctx):
                continue
            else:
                break
        
        # 3. 返回最终结果
        return {
            "session_id": ctx.session_id,
            "iterations": ctx.iteration,
            "completed_tasks": ctx.completed_tasks,
            "failed_tasks": ctx.failed_tasks,
            "results": ctx.tool_results,
            "reflections": ctx.reflections
        }
    
    def _plan(self, ctx: AgentContext) -> List[Dict]:
        """
        规划阶段 - 调用LLM生成执行计划
        输入:用户目标、当前上下文、可用工具列表
        输出:有序的任务步骤列表
        """
        prompt = self._build_planning_prompt(ctx)
        response = self.llm.chat(prompt)
        plan = self._parse_plan(response)
        return plan
    
    def _execute_step(self, ctx: AgentContext, step: Dict) -> Dict:
        """
        执行阶段 - 调用工具执行单个任务
        输入:任务描述 + 参数
        输出:执行结果
        """
        tool_name = step.get("tool")
        params = step.get("params", {})
        
        tool = self.tools.get(tool_name)
        if not tool:
            return {"success": False, "error": f"工具不存在: {tool_name}"}
        
        try:
            result = tool.handler(**params)
            return {"success": True, "data": result}
        except Exception as e:
            return {"success": False, "error": str(e)}
    
    def _should_continue(self, ctx: AgentContext) -> bool:
        """反思阶段 - 判断是否需要继续迭代"""
        # 调用LLM评估是否达到目标
        prompt = self._build_reflection_prompt(ctx)
        response = self.llm.chat(prompt)
        decision = self._parse_reflection(response)
        
        ctx.reflections.append(decision.get("reflection", ""))
        return decision.get("continue", False)
    
    def _build_planning_prompt(self, ctx: AgentContext) -> str:
        """构建规划阶段的Prompt"""
        tools_desc = "\n".join([
            f"- {name}: {tool.description}"
            for name, tool in self.tools.items()
        ])
        
        return f"""
        你是一个店群运营自动化Agent。用户的目标是:{ctx.user_goal}
        
        当前已完成的任务:{ctx.completed_tasks}
        当前失败的任务:{ctx.failed_tasks}
        
        你可以使用以下工具:
        {tools_desc}
        
        请生成一个执行计划,以JSON格式输出,包含一个任务步骤列表。
        每个步骤包含:task(任务描述)、tool(使用的工具)、params(参数)。
        
        计划格式:
        {{
            "plan": [
                {{"task": "分析竞品价格", "tool": "get_competitor_prices", "params": {{"product_id": "123"}}}},
                {{"task": "计算建议价格", "tool": "calculate_price", "params": {{"strategy": "competitive"}}}}
            ]
        }}
        """
    
    def _build_reflection_prompt(self, ctx: AgentContext) -> str:
        """构建反思阶段的Prompt"""
        return f"""
        你是一个店群运营自动化Agent。用户的目标是:{ctx.user_goal}
        
        已完成的任务:{ctx.completed_tasks}
        失败的任务:{ctx.failed_tasks}
        工具执行结果:{json.dumps(ctx.tool_results, ensure_ascii=False)[:500]}
        
        请评估是否已经达到用户的目标。
        如果已达到,输出 {{"continue": false, "reflection": "已达成目标"}}
        如果未达到,输出 {{"continue": true, "reflection": "还需要继续...", "next_steps": "..."}}
        """

五、Agent与RPA的集成:让Agent拥有“手脚”

上面说的Agent框架,核心能力是“思考”和“决策”。

但思考完了,谁来执行?

答案是:影刀RPA

在我们的架构中,Agent通过两个方式调用RPA:

方式一:API调用。

影刀RPA支持HTTP API触发。Agent生成执行计划后,通过API调用对应的RPA流程。

比如Agent决定“上架商品A”,它会调用/api/run_flow,传入flow_name=upload_productparams={product_id: "123"}

影刀RPA收到请求后执行对应的流程,执行完成后回调Agent汇报结果。

方式二:流程触发。

对于一些需要实时交互的复杂流程,Agent会生成“流程触发指令”,写入消息队列。

影刀RPA监听队列,收到指令后执行对应的流程。

这个模式和之前的调度系统类似,但触发逻辑从“定时调度”变成了“Agent决策驱动”。

举个例子:

运营说:“帮我处理一下今天所有的异常订单。”

Agent理解目标 → 调用get_abnormal_orders工具获取异常订单列表 → 分析每个订单的异常类型 → 对于“物流异常”的订单,调用sync_logistics RPA流程 → 对于“支付异常”的订单,调用check_payment RPA流程 → 对于无法自动处理的异常,生成报告推送给运营。

整个链路,从理解到执行到反馈,全部自动化。


六、工具注册表:Agent能调用的一切

为了让Agent能够调用系统能力,我们维护了一个“工具注册表”。

所有Agent可调用的能力——API、RPA流程、数据库查询、外部服务——都注册在工具表中。

# tool_registry.py - Agent工具注册表
from typing import Dict, Any, Callable
from dataclasses import dataclass

@dataclass
class ToolDefinition:
    """工具定义"""
    name: str
    description: str
    parameters: Dict[str, Any]  # JSON Schema
    handler: Callable
    timeout: int = 60
    retry: int = 3

class ToolRegistry:
    """工具注册表 - Agent可调用的所有能力"""
    
    def __init__(self):
        self._tools: Dict[str, ToolDefinition] = {}
    
    def register(self, name: str, description: str, 
                 parameters: Dict[str, Any], handler: Callable):
        """注册工具"""
        self._tools[name] = ToolDefinition(
            name=name,
            description=description,
            parameters=parameters,
            handler=handler
        )
    
    def get(self, name: str) -> Optional[ToolDefinition]:
        """获取工具"""
        return self._tools.get(name)
    
    def list_all(self) -> List[Dict]:
        """列出所有工具(供LLM理解)"""
        return [
            {
                "name": t.name,
                "description": t.description,
                "parameters": t.parameters
            }
            for t in self._tools.values()
        ]
    
    def invoke(self, name: str, params: Dict) -> Dict:
        """调用工具"""
        tool = self._tools.get(name)
        if not tool:
            return {"success": False, "error": f"工具不存在: {name}"}
        
        try:
            result = tool.handler(**params)
            return {"success": True, "data": result}
        except Exception as e:
            return {"success": False, "error": str(e)}

# 初始化工具注册表
registry = ToolRegistry()

# 注册系统工具
registry.register(
    name="get_competitor_prices",
    description="获取竞品价格数据,输入商品ID,返回竞品价格列表",
    parameters={"product_id": {"type": "string"}},
    handler=lambda product_id: {"price": 99.0, "competitors": [{"name": "竞品A", "price": 89.0}]}
)

registry.register(
    name="calculate_price",
    description="根据策略计算建议价格,输入商品信息和策略类型,返回建议价格",
    parameters={
        "product_id": {"type": "string"},
        "strategy": {"type": "string", "enum": ["competitive", "premium", "discount"]}
    },
    handler=lambda product_id, strategy: {"suggested_price": 95.0}
)

registry.register(
    name="update_price",
    description="更新商品价格,输入商品ID和目标价格,返回执行结果",
    parameters={
        "product_id": {"type": "string"},
        "target_price": {"type": "number"}
    },
    handler=lambda product_id, target_price: {"success": True}
)

有了这个工具注册表,Agent的“知识”就不仅是语言模型中的通用知识,还包括了系统特有的业务能力。


七、持续学习:让Agent越用越聪明

传统的LLM应用有一个问题:每次调用都是“从头开始”。

它不记得上次的决策、不学习历史的成功经验、不积累业务知识。

我们给Agent加了一层“记忆系统”:

短期记忆: 当前会话的上下文,包括之前的决策、执行结果、反思记录。存储在Redis中,会话结束后清理。

长期记忆: 跨会话积累的经验——哪些策略有效、哪些工具好用、哪些模式值得复用。存储在向量数据库中,Agent在规划时会检索相关经验。

举个例子:

第一次遇到“竞品降价”场景,Agent需要从头开始分析。

第十次遇到“竞品降价”场景,Agent会从长期记忆中检索到“上一次成功的处理策略是:先判断降价原因,再决定是否跟价”,然后直接应用这个策略。

Agent在持续“学习”。

这就是“经验驱动”和“规则驱动”的根本区别。

规则是死的,经验是活的。


八、写在最后

AI Agent不是“RPA的替代品”,也不是“大模型的简单包装”。

它是一个新的架构范式。

在传统RPA架构中,人是“决策者”,机器是“执行者”。

在AI Agent架构中,机器也开始参与“决策”——理解目标、生成计划、调用工具、反思结果。

人从“决策者”变成了“监督者”——审核Agent的计划、修正Agent的偏差、确认Agent的结果。

这不是“机器替代人”。

这是“人机协同”的新形态。

这个方向的工程化落地,还有很多挑战需要解决——Agent的稳定性、可解释性、成本控制、异常处理。

但方向已经很明确了。

希望这篇文章能给你一些启发。

哪怕只是让你意识到“原来还可以这样做”,这篇文章的价值就达到了。


作者:林焱

0
0
0
0
评论
未登录
暂无评论